论文分享 - 记忆网络之Hierarchical Memory Networks(架构分层)

HMN(Hierarchical Memory Networks)是一种新型记忆网络模型,通过在句子级别和单词级别上进行分层构建,以提高对未知词汇的回答准确性。该模型利用k-max pooling筛选关键句子,并采用双向GRU和注意力机制来捕捉单词级信息。

记忆网络之Hierarchical Memory Networks(架构分层)

这是中科院去年发表的一篇论文“Hierarchical Memory Networks for Answer Selection on Unknown Words”。其仿真代码作者已经开源,是用Lasagne实现的。虽然和上一篇一样都叫做“Hierarchical Memory Networks”,但是却千差万别。上一篇主要是将memory以分层结构进行存储和搜索,以实现大规模记忆时可以加快计算速度。而本篇则是从模型结构上面进行分层构建,从sentence-level和word-level两个层面进行训练以达到准确度的提升和对unknown words的识别。

作者认为End-to-End MemNN仅从句子层面对输入进行编码会丢失一些细节信息,尤其是当答案是稀有词或者从未出现过的词时(答案肯定会在输入文本中,只不过作者说大部分工作中会把稀有词直接当做unknown对待。可是那是因为别人的答案并不是稀有词的前提下啊。而且究其根源最终的目标不过是从一段材料中找到一个答案而已。反正感觉有些牵强吧==)。所以作者提出HMN模型来解决这种问题,该模型首先使用sentence-level的memory作为推理模块找到输入memory中与问题的相关程度,然后使用k-max pooling选择出最相关的k个句子。接下来对所有句子中每个单词使用Bi-GRU进行word-level的建模,得到word-level的memory,然后对k个句子中的每个单词按照句子层面的输出进行Attention操作,得到最终单词层面的输出。最后将句子和单词的输出相加并进行联合训练即可。模型的架构图如下所示,接下来我们来看一下模型的细节部分:

首先句子层面的memory部分,与End-to-End MemNN完全相同,这里就不再赘述。

k-max pooling:将sentence-level memory最后一层计算出来的权重向量alpha作为句子重要性判断依据,使用k-max pooling操作取出最大的k个句子认为是与问题最相关的句子,然后对相应的单词进行Attention操作。

word-level Memory:首先对所有的输入使用Bi-GRU进行编码,得到每个单词对应的memory信息;接下来对k-max pooling选择出的k个句子所包含单词的记忆进行Attention操作,公式如下所示:

由于这里得到的结果是k个句子中所包含的单词对应的,所以需要进行一次转换,将其变成长度是V的向量,使用的方法就是补零。

最后将word-level和sentence-level的输出相加用于生成最终的答案。整个模型就是这样,之所以可以回答低频次的问题,我感觉主要是因为作者在选择出关键句子之后再次从单词层面上进行一次检索,而且返回结果中其他单词都直接补零,这样可能有助于选择正确答案的样子吧。

至于论文时用的数据集是作者新创建的,关于机票预订、酒店预订的数据集,包含中英文,而且句子都很短(就像bAbI一样),最终的实验结果就使用MemNN在该数据集上跑了一遍,效果自然不如HMN,对比如下所示:

最后作者又结合一个实际的例子进行了介绍,倒没有什么新鲜的,就是从直观的角度来介绍模型每一层的Attention都可以选择出正确的句子和单词。如下图所示:

转载:https://blog.youkuaiyun.com/liuchonge/article/details/78277063

使用分层图神经网络在部落风格图上进行公司风险评估是一个具有创新性的研究方向。 在这种方法中,部落风格图为公司风险评估提供了一种独特的建模方式。它可能将公司及其相关实体(如合作伙伴、供应商、客户等)以类似部落的结构进行组织,这种结构能够更好地反映公司在商业生态系统中的复杂关系。 分层图神经网络则能够处理这种复杂的图结构。它可以通过不同层次的网络结构,逐步提取图中不同尺度和层次的信息。例如,在较低层次,可能关注公司内部的部门关系、业务流程等微观信息;在较高层次,可能考虑公司与外部合作伙伴之间的宏观关系。 通过这种结合,分层图神经网络可以更全面、准确地评估公司的风险。它可以分析公司在部落风格图中的位置、与其他节点的连接强度等因素,从而预测公司可能面临的财务风险、市场风险等。 ```python # 以下是一个简单的图神经网络示例代码框架(仅为示意,非完整实现) import torch import torch.nn as nn import torch.nn.functional as F from torch_geometric.nn import GCNConv class HierarchicalGNN(nn.Module): def __init__(self, in_channels, hidden_channels, out_channels): super(HierarchicalGNN, self).__init__() self.conv1 = GCNConv(in_channels, hidden_channels) self.conv2 = GCNConv(hidden_channels, out_channels) def forward(self, x, edge_index): x = self.conv1(x, edge_index) x = F.relu(x) x = self.conv2(x, edge_index) return x # 这里需要根据实际的部落风格图数据进行初始化 # in_channels 表示输入特征的维度 # hidden_channels 表示隐藏层的维度 # out_channels 表示输出特征的维度 model = HierarchicalGNN(in_channels=10, hidden_channels=20, out_channels=1) ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值