目录结构简介
C_OPRE
中文开放域关系抽取。
相关论文:《Chinese Open Relation Extraction and Knowledge Base Establishment》
亮点:根据依存句法分析定义了中文的依赖语义范式。DSNF(DEPENDENCY SEMANTIC NORMAL FORMS)
这个方案可以在开放的网络上的巨量语料中快速抽取出部分三元组关系,在这基础上,可以为下面的一些其他任务服务。
memn2n
端到端记忆网络:《End to End Memory Network》
论文中使用了bAbi数据集(fastbook开源问答项目)
通过这个地址http://www.thespermwhale.com/jaseweston/babi/tasks_1-20_v1-2.tar.gz下载数据。数据集包括20种类型的问答任务。
single.py 是对单个任务实践。通过参数task_id选择任务。
join.py 是把所有任务拼接在一起训练(操作上就是把20个任务数据拼接在一起)。
论文的具体解析可以参考这边bloghttps://blog.csdn.net/Irving_zhang/article/details/79111102.
有几个细节点需要注意的:
1.位置编码。(和词向量做elmentwise相乘)
2.时序编码(time1…)加在句子向量的最后,在梯度更新时不做处理。形成一个很强的特征。query检索memery时这个特征应该起很大作用。
3.mi存放的是一个句子的向量。query和每个mi相乘求得权重看那个句子最为重要。这里可以理解为input记忆mi专为匹配句子重要的服务,而output记忆专为匹配输出答案服务,这里有点类似lstm的输入输出门。
4.多跳之间的参数共享方案看代码。(代码用比较低级的api来实现的,值得学习)
总结
通过这篇论文可以了解到记忆网络和RNN的区别,记忆更像一种外部内存一样,把输入编码记忆起来,存到记忆slot里面。而RNN的记忆则是rnnCelll实现,跟随序列一直在变,直觉上体量较小。
还有一篇《Mem2Seq:Effectively Incorporating Knowledge Bases into End-to-End Task-Oriented Dialog Systems》
参考bloghttps://blog.csdn.net/weixin_34369928/article/details/81209309
PCNN-MIL-ATT
- MIL - Zeng (2015). Distant Supervision for Relation Extraction via Piecewise Convolutional Neural Networks. EMNLP
- ATT - Lin (2016). Neural Relation Extraction with Selective Attention over Instances.ACL
基本思路是先识别句子中的实体对,再进行关系预测,基本上跟分类问题一样。要有标识的训练数据,这些数据从开源的语料结合知识库得来,如NYT+Freebase。
里面使用了远程监督学习(Distant Supervised Learning),可以自动标注训练样本,原理很简单。利用知识图谱中的两个entity以及对应的某个relation,在corpus中进行回标,如果某个句子中同时包含了两个entity,那么就假定这个句子包含了上述的relation. 这样就可以获得大量的标注数据。当然缺陷就是假设太强,会引入了很多噪音数据, 因为包含两个entity的句子不一定可以刻画对应的relation,如下, 对于NYT 语料中的第一个句子的确描述了 Founder的关系(Freebase),但是第二句就不是这个关系,因此属于噪音。在2011年提出了Multi Instance Learning的方法来改进原始的Distance supervision的方法,有一个At-Least-One 的前提: 包含两个entity的所有句子中,至少有一个句子可以体现relation,即至少有一个标注正确的句子。通过结合FreeBase 对NYT语料做Entity Linking,Relation Aligning等操作进行标注, 最终得到一个被广泛使用的关系抽取数据集, 在开始已经描述过详情。正如前面声明,这里面会有噪音数据。 因此在这一系列的文章中,都会针对该噪音问题做一些工作,其中大部分基于Multi Instance来做。简单引用介绍Multi Instance Learning:
多示例学习可以被描述为:假设训练数据集中的每个数据是一个包(Bag),每个包都是一个示例(instance)的集合,每个包都有一个训练标记,而包中的示例是没有标记的;如果包中至少存在一个正标记的示例,则包被赋予正标记;而对于一个有负标记的包,其中所有的示例均为负标记。(这里说包中的示例没有标记,而后面又说包中至少存在一个正标记的示例时包为正标记包,是相对训练而言的,也就是说训练的时候是没有给示例标记的,只是给了包的标记,但是示例的标记是确实存在的,存在正负示例来判断正负类别)。通过定义可以看出,与监督学习相比,多示例学习数据集中的样本示例的标记是未知的,而监督学习的训练样本集中,每个示例都有一个一已知的标记;与非监督学习相比,多示例学习仅仅只有包的标记是已知的,而非监督学习样本所有示例均没有标记。但是多示例学习有个特点就是它广泛存在真实的世界中,潜在的应用前景非常大。 from http://blog.csdn.net/tkingreturn/article/details/39959931
MIL就是应用了多示例学习,先通过数据预处理把数据分成一个一个包,然后把包输入网络,找出每个包里面得分最高的代表这个包的实例,去更新参数,然后重复迭代,有点类似EM的思想。
在Zeng 2015中的MIL部分,每一个bag仅仅取了置信度最高的instance,这样会丢失很多的信息,因此一个bag内可能有很多个positive instance。应用Attention机制可以减弱噪音,加强正样本,因此可以更充分的利用信息。这是ATT的思想。
PCNN指的是Piecewise Max Pooling Layer,具体实现是在Maxpooling的基础上改成分块Maxpooling。
这是深度学习应用在关系抽取的一些研究性工作上,工业界估计没普及。
RE-CNN-pytorch
通过多尺寸卷积核卷积神经网络的深度学习方法进行关系抽取/分类的PyTorch实现。跟上一基本属于类似的。而且还是更基础的。这里就不细节讲述了。
Data: SemEval-2010 Task #8(这个是实体关系抽取任务里,比较多论文引用的一个数据集)
CCM《Commonsense Knowledge Aware Conversation Generation with Graph Attention》
- 神经模型连接并充分利用大规模的常识知识库
该项目是首次在对话生成神经系统中,尝试使用大规模常识知识。有了这些知识的支撑,我们的模型能够更好地理解对话,从而给出更合适、信息量更大的回复。
代替过去将知识三元组分开使用的方法,我们设计了静态和动态图注意力机制,把知识三元组看作一个图,基于与其相邻实体和它们之间的关系,我们可以更好地解读所研究实体的语义。
使用语义网络 (ConceptNet) 作为常识知识库
来自 reddit 上一问一答形式的对话数据
模型主体是基于GRU的encoder - decoder结构;
基本思路是,知识解析器 (Knowledge Interpreter)旨在优化问题理解这一环节。它通过引入每个单词对应的图向量,来增强单词的语义。操作是,通过实体链接,把句子中的中实体和知识库的链接起来,找出实体在知识库中的子图。知识解析器作用就是通过注意力(这里称为静态注意力机制)的权重估量了“实体间关系”和“头实体”6以及“尾实体”之间的关联度。然后把结果和wordembeding一起输入GRU。
知识感知生成器 (Knowledge Aware Generator) 旨在通过充分利用检索到的图,来生成相应的回复。操作上,把解码器的状态St 和刚才知识解析器的结果(子图的三元组的注意力处理后的)做注意力处理,然后进一步对子图里面的三元组做注意力处理,把各种结果和解码器的结果拼接起来做sofemax得到一个生成词的概率。同时这里还会计算一个从知识库直接复制词的概率,最终结果由两种概率结合所得(权衡哪个高)。
参考bloghttps://blog.csdn.net/tMb8Z9Vdm66wH68VX1/article/details/81518247