回顾我们建立知识图谱的初衷,是为了将现实世界中的事物,以丰富语义、特定逻辑含义和规则存储起来。从而在解析自然语言时,摆脱单纯统计学上对字、词的表示。而丰富语义的关键就在于我们围绕实体,为其添加更多的信息,包括属性、同义词、上下级、其他实体的三元组关系等。过往我们已经在图谱构建等文章中讨论过这些抽取方法,这些信息都是以“侧面”的方式来表示一个实体,而对于实体语义保留最丰富的,可能是 实体定义。比如:
长文本可以最直接地表示一个实体的本身,也正是因为文本过长,导致维护起来也不容易。多数情况下,都是以人工整理为主。再之,这类定义文本保留了多个句子,前后存在逻辑关系,除了知识卡片这类产品,我们很少能找到适合直接展示的场景。同时,在实体数量大规模扩充时,这些定义文本的填充也非常麻烦。是否有其他方法来表述实体呢?如果长文本太复杂,或许我们可以退而求其次,只保留最中心语义的一个句子,“一句话概括一个事情”,举个例子:
我们在magi可以看到最直观的例子,实体词”JAVA”是“重要的网络编程语言”、是“跨平台语言”。这类短语简单、直白地描述了实体本身,在搜索、可解释推荐等工作上都可以发挥各种想象力。本文的主题即是如何抽取这类实体描述短语。
什么是实体描述
实体的描述解释了实体是什么,有什么样的特性。然而对于同一个实体,由于文本的侧重点不同,所产生的描述也是不一样的,举例来说,“痤疮”这个实体,对应的描述可以是”毛囊皮脂腺单位的一种慢性炎症性皮肤病”, 也可以是”全球最常见的十大皮肤病之一”, “皮肤上毛囊皮脂腺单位的病变”等等。所以实体描述的语义是丰富的,形式也是多种多样的。所以如何定义描述抽取这个问题,直接关系到了最后的结果的好坏。目前学术界并没有太多针对性的研究,在读到文献中比较相关的可以参考《Automatic detection of descriptive phrases for Question Answering System : A simple pattern matching approach》(欢迎小伙伴告知其他相关论文)。在实际操作中,大致的思路还是会类似名词短语抽取或者IS-A关系抽取的方式。
开始实践
这类抽取工作中,基本上是没有大量的标注数据,按照一般的无监督的信息抽取流程,此次任务分为三个流程:
生成候选集扩大候选集候选集筛选及排序。候选集的生成及扩充
生成候选集最简单有效的方法就是利用模版匹配生成候选的描述性短语。通过观察描述性语句的特点,我们归纳了一些经常在描述性句子中出现的trigger, 如“是”,“称为”,“作为”,“…之称”,”俗称”等。人工指定的模版虽然抽取的准确率较高,但是随之而来的问题就是召回率比较低。所以我们需要通过其他的方法来扩大候选集的数量,具体采取的方法有Bootstrap,NER。
候选集筛选及排序
候选集生成之后,如何对其质量进行评估呢?本文探索了一些去除模版带来噪音的方法。首先,对于包含“怎么”,“怎样”的这些描述性短语,可以通过建立停用词表的方式将其去除,对于其余的候选集,我们融合了多种方法对其进行评估,主要有左右熵,TF-IDF,聚类,TruePIE。
1. 左右熵
这个概念和新词发现中的左右熵的想法是一致的,也就是说一个描述左右搭配的实体越多,越自由,它就更大概率上来说不是一个特定性的描述,更有可能是噪音。这个和新词发现需要的自由度高正好是相反的。通过这种思想,我们可以筛除掉一批不相关的噪音。下图是针对实体感冒的例子,我们可以看到 “无效的”,“件小事”,“不治之症”都被筛除了。
2. TF-IDF
TF-IDF是一种简单有效的权重计算方法,我们可以根据TF-IDF值对描述短语进行排序以达到筛选候选集的目的。本文介绍两种TF-IDF相关的计算方法。第一种,即一般意义上的TF-IDF,但需要注意的是,在计算TF,IDF时需要将包含实体的所有句子作为一篇文档(下文称为相关句子集合),不包含实体的句子作为其余文档,然后进行TF-IDF的计算。第二种计算方法是只计算IDF。首先计算这个描述短语在整个语料中的IDF(1),再计算其在相关句子集合中的IDF(2),最后的计算公式为:IDF(1)-IDF(2)。这个公式旨在描述term在整个语料中和在相关句子集合中的差异性,换句话来说,一个描述性词汇在整个文档中出现的频次不是很频繁但是在相关句子集合中很频繁,那这个描述性短语就很有意义。但是这基于的假设是:这些描述性的词汇都是针对实体具有特定性的。如果语料中出现的描述性词汇不那么具有特定性,这个的效果也不是很好。对比发现两种计算方法,在项目中的结果差异不大,为了效率考虑,选择了第一种的计算方法。排序之后,我们得到了如下的一些结果,从结果中我们可以看到精神分裂症经常被提及的多为“慢性疾病”,“存在几十年的慢性疾病”,“长期进展性疾病”, 既然这些描述经常被提及,说明这种描述的置信度也高,所以我们可以通过合并类似的描述,来增加这种描述的排名。
3. 聚类
对此我们采用了聚类的方法。但是在很多任务场景下,我们都无法预知数据的类目数,而一些常见的聚类方法都需要指定类目数,如K-Means,层次聚类,且这些方法对异常值较为敏感。而基于密度聚类的DBSCAN虽然对于异常值不敏感,但是要求数据是稠密的,各个簇的密度要相似,Eps,MinPts对最后的结果影响很大。在这里我们选择了Infomap作为聚类方法,此方法几乎没有超参数,且运行速度快,效果较好。infomap是一种基于信息熵的社区发现算法,作者巧妙的将社区发现的目标任务转化为了寻找最优编码。具体如何转化的呢?作者认为图的结构能够反映信息在图中的流通。那么通过刻画信息在图中流通的过程,我们也就能侧面的学习到图的结构了。那所谓的信息流通又怎么表示呢?作者用随机游走作为了信息流通的proxy。所以最后优化目标就转化为了如何有效的编码随机游走的路径。通过多次采样随机游走的路径,以平均每步编码长度最短为优化目标,不断优化群组划分,直至收敛。这就是这个算法的核心。每步的编码长度如何计算,原始的做法是每个节点分配等长编码,更有效率的做法是哈夫曼树的编码(如下图B)。作者提出了一个效率更高的编码方式–层级编码(如图C),假设一个图被分为4个类别(如图D),对于其中的
每个节点(图C),采用两级编码的方式。第一个编码是其所在的类别的编码,第二个是其在类别内的编码。这样一来,类别内部的编码就可以重复使用了,好比全国很多地方都有鼓楼一样,当然内部继续采用哈夫曼编码,这样编码的效率就大大提高了。为了区分随机游走从一个类跳到另一个类别,作者还给了每个类别一个跳出编码。图C就是划分过后的编码形式,比如红色表示一类,其类别编码为111,跳出编码为0001。最后给出目标函数如下所示
其中 L(M) 表示平均每步的编码长度, q_↷ 表示所有类别名字的编码的占比, H(Q) 表示编码类别名字需要的字节长度, p_↻^i 表示类别i内所有节点编码的占比,H(P^i) 表示类别i内所有节点的编码平均长度,看起来其实就是类别编码和节点编码的一个加权平均。具体的细节和算法的实现可以详细阅读论文《Maps of random walks on complex networks reveal community structure》Infomap的聚类效果相对而言还是比较好的,其中还有一个关键的影响因素就是向量表征。由于描述短语都偏长,所以本文采用的是的无监督的句向量表征,核心思想是通过SVD分解和QR分解词向量的方法来获得每个词或字在句子中的权重,从而获得句向量。这不是本文的重点,具体内容可见《Parameter-free Sentence Embedding via Orthogonal Basis》聚类的结果如下:
这样表述越多的,越相近的就会有更高的置信度和评分。
4. TruePIE
TruePIE是一种无监督的联合判别模版质量和所抽三元组质量的一种方法。其新颖之处在于能够自动构建训练集,对模版及三元组的可靠性进行判别。这个方法的主要假设就是对于一个给定的目标属性,一个实体的属性值的数量是有限的,反之亦然,一个属性值对应的正确的实体的数量也可能是有限的。举例来说,对于元组,这个value值也就四五十个。作者对这个现象用二分图(bipartite graph)进行建模,entity, value是两种互不相交的nodes,图的边由三元组的可靠性来确定,可靠性公式如下:
其中 tau_t 表示边 t 的权重值,rho_p 表示模版p可靠性,n_t^p 表示模版p抽取出来的这个entity-value的次数,b 是一个小的正参数,减少抽取的随机性。模版可靠性的公式如下:
N+表示模版p抽取出的Entiy,vlaue都在二分图中数量,N-表示模版p抽取出entity,value都不在二分图中的数量,N_u表示剩下的情况,其实就是一个precision的公式。首先我们选择一批质量较好的模版和其三元组构造初始的二分图,设置每个实体对给定实体能够关联的属性值的数量和属性值能够对应的实体的数量,将其作为阈值,这个阈值可以预先指定,也可以通过统计高质量实体,属性值的中位数,分位数等统计量进行确定。根据这个阈值对二分图进行扩充。对于待判别的模版,根据上述的模版可靠度的公式,判别模版的质量。对于大于特定阈值的模版,我们把它归类成了好模版,小于特定阈值的模版,我们把它归类成了差模版,阈值在中间的模版应该怎么筛选?用分类去解决,而且正样本和负样本都有了。那特征是什么呢?作者又提出了一个假设:对于给定的某个属性类别的抽取,可信赖的抽取模版应该都表达着相似的语义信息。举个例子,不管说姚明的妻子是叶莉,还是说叶莉,姚明的妻子,还是说叶莉作为姚明的配偶;姚明和叶莉是夫妻,姚明和叶莉之间的语义关系都是夫妻。所以可以抽取出这些信息的模版都要表达出entity和value之间的语义关系,所以作者提出了pattern embedding的概念,将其作为特征输入进分类器,进行学习。具体算法详见论文《TruePIE: Discovering Reliable Patterns in Pattern-Based Information Extraction》。
总结
在实践的过程中,我们发现TruePIE对于这个任务的效果不够明显,究其原因这个方法的假设是一个实体的给定属性值的数量是一定的,有穷尽的,但是对于描述这个属性来说,这个假设显然不大适宜。也是因为这个原因,在进行序列标注,发现新的描述短语的时候,经常会出现边界错误的情况。除了上述的无监督的方法外,我们尝试了一些监督学习的方法,例如通过关系抽取的思路抽取相应的描述,因为描述其实也是实体的一个属性,符合三元组的形式,我们要做的就是抽取描述对应的属性值。当然,基于阅读理解抽取描述性短语也不失为一种思路,毕竟描述短语都很长,表述都很灵活。
参考文献
[1] Applying data mining techniques for descriptive phrase extractionin digital document collectionsAutomatic detection of descriptive phrases for Question Answering System : A simple pattern matching approach
[2] Maps of random walks on complex networks reveal community structure
[3] The map equation:mapequation.org/
[4] Parameter-free Sentence Embedding via Orthogonal Basis
[5] TruePIE: Discovering Reliable Patterns in Pattern-Based Information Extraction
[6]
招聘信息
丁香园大数据NLP团队招聘各类算法人才,Base杭州。NLP团队的使命是利用NLP(自然语言处理)、Knowledge Graph(知识图谱)、Deep Learning(深度学习)等技术,处理丁香园海量医学文本数据,打通电商、在线问诊、健康知识、社区讨论等各个场景数据,构建医学知识图谱,搭建通用NLP服务。团队关注NLP前沿技术,也注重落地实现,包括但不仅限于知识图谱、短文本理解、语义搜索、可解释推荐、智能问答等。加入我们,让健康更多,让生活更好!
欢迎各位朋友推荐或自荐至 yangbt@dxy.cn