图谱问答-理解query

内容来自七月算法nlp课程。

图谱问题是用户输入一句话,系统返回这句话的答案。这里分多种情况。例如根据实体和关系查询尾实体,或者根据实体查询关系,甚至还会出现多跳的情况,不同的情况采用的方法略有不同。

1 根据实体和关系查询尾实体

需要两个步骤完成:第一步找到实体与关系;第二步实体链接和实体消岐。

1.1 找到实体与关系

NER的方式很多。可以采用传统机器学习的分类方法,也可以使用深度学习神经网络,一般架构为encoder+cfr层。
这里重点介绍AC自动机

1.1.1 AC自动机

1、构建前缀树

2、给前缀树加上fail指针
节点i的fail指针,如果在第一层,则指向root节点,其它情况指向其父节点的fail指针指向的节点的相同节点

1.2 实体链接

根据上一步抽取出实体和关系:例如 一句话“周董的女儿叫什么”。抽取出 周董、女儿。
图数据库中的实体可能和抽取出来的实体不一致。这个时候就需要实体链接。例如库中可能是周杰伦。这样第一步就需要找到一个候选实体集合。最好的方法是构建实体词典。用抽取出来的词在词典中查询。

例如词典中包含 周董、周杰伦、Jay都指向周杰伦这个实体。那抽取出来的“周董”也就可以连接到周杰伦这个实体了。

如果这个时候查出来的实体只有一个那实体链接就结束了。如果查出来是多个,那就需要实体消岐了。

1.3 实体消岐

实体消岐,简单的可以度最高的那个。这里度可以是这个节点的热度或者节点在图中的出度和入度之和。当然也可以选择匹配的方法。
老师讲的是候选实体与query做相似度计算,我理解的应该是候选实体与抽取出来的subject做相似度计算。

经过思考证明我的想法是错误的。例如query=“周董的女儿”。提取出subject=周董。经过实体链接之后发现库中有2个周董相关的实体。一个是歌手,一个是某公司领导。这个时候就需要实体消岐。如果拿着subject去与两个实体的相关属性计算相似度是没有意义的。只能用“周董的女儿”去计算相似度。也许其中一个实体没有女儿的关系。那就只能选择另外一个实体了。而用subject=周董去计算相似度,信息太少了。
所以用于计算文本相似度的应该是query。

1、使用孪生网络,计算相似度
例如模型m1,m2权重共享参数,query作为m1的输入,候选实体1作为m2的输入,分别得到embedding之后,两个embedding计算相似度,得到一个(0,1)范围内的值。
在这里插入图片描述

可以把m1,m2换成bert,使用bert做相似度计算。
也可以采用[CLS]query[SEP]候选实体1[SEP] 这个作为输入,输入到bert中。

用来计算相似度的模型
参考老师的博客:https://blog.csdn.net/u012526436/article/details/90179466

重点是ESIM模型。

2、对问题和候选集做embedding,计算余弦相似度
步骤如下:
a 例如选择模型x ELMo
b 将query输入到模型x,得到embedding_query
c 将候选实体1输入到模型x,得到embedding_1
d 计算embedding_query和embedding_1的余弦相似度。
e 计算多个候选实体的余弦相似度,选择最高的。

哈工大开源的多语言ELMo

https://github.com/HIT-SCIR/ELMoForManyLangs

中文版本的ELMo
https://pan.baidu.com/s/1RNKnj6hgL-2orQ7f38CauA

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值