NLP从零开始(2)

关系抽取

基于规则的方法

优点:比较准确,不需要 训练数据

缺点:low recall rate,人力成本需要大量设计规则,规则本身难设计

基于监督学习的方法

  1. 定义关系类型

  2. 定义实体类型

  3. 训练数据准备

    ​ 实体标注好类型

    ​ 实体之间的关系

Bootstrap算法

NLP从零开始(2)

自动生成规则,自动生成tuple,循环

缺点:错误率叠加

SnowBall算法

  1. 生成规则
  2. 生成tuple
  3. 评估规则准确性+过滤
  4. 评估tuple准确性+过滤
  5. 循环1234步

NLP从零开始(2)

生成模板

人为给定seed tuple,首先通过遍历文本来发现新规则。通过NER来发现句子中的实体并标记,然后标记实体间的关系(同bootstrap,绿色框表示实体标记,红色括号表示关系)。

NLP从零开始(2)

不同于bootstrap,snowball算法需要通过近似算法来判断相似度,进而实现精准匹配获得更加精确的规则。通过提出 Pattern Representation,由三元组表示更新为五元组表示(left,sub,middle,sub,right),左右长度预先设定,将letf、middle、right表示的字符串通过词向量算法表示为词向量,从而计算相似度。

NLP从零开始(2)

如何计算相似度呢?

NLP从零开始(2)

如果两个规则对应的实体类型不同,那么相似度为0,否则,计算left、middle以及right的内积即相似度表示,然后通过加权平均实现最终的相似度计算,权重可预先预定,一般情况下middle的权重要高于左右。

流程:

NLP从零开始(2)

将生成的pattern更新left、middle和right的向量表示,然后将个模板之间按照相似度进行聚类,论文中用到的聚类方法为:将pattern库中的子pattern进行遍历,设定归类阈值,如p1p2的相似度大于0.7即归为一类,遍历之后的组合并判断相似度,小于阈值则归为新的一类,大于则归为同类。然后对同一类pattern中的向量表示取平均,最后生成新的模板。

生成tuple

NLP从零开始(2)

将规则库中的pattern放到文本中去遍历匹配,分别计算各个pattern与文本中的pattern之间的相似度,结合阈值判断是否生成新的tuple以及加入seed库中。

Pattern Evaluation + 过滤

NLP从零开始(2)

将seed库中的pattern应用到文本中,对提取到的tuple与seed库进行置信度的计算,并做相应的保留与删除pattern过滤操作。

Tuple Evaluation + 过滤

NLP从零开始(2)

将生成pattern应用到文本中提取tuple并记录到seed库中,上图seed库中的tuple为非人工制定而是生成pattern匹配到的。在考虑tuple的精确性时,一般有两种情况:一是在相同pattern数,则考虑pattern的score来判断tuple,大的则置信度大,如上图的一二tuple;第二种情况是不同pattern数,如上图所示,存在两种pattern都提取到第三种tuple,即存在tuple是由多个pattern生成,此时考虑生成此tuple中pattern数量,更多pattern能生成此tuple的话则更精确,即第三种tuple的置信度更高。同时,论文中提出相应的计算公式来判断tuple的过滤。

实体词义

实体消歧

实体消歧的本质在于一个词很有可能多个意思,也就是在不同的上下文中所表达的含义不太一样。

将上下文信息转换为向量表示进行相似度计算,可认为是个文本分类的问题。

实体统一

核心还是计算相似度,可以基于规则、基于图、基于监督(分类)等

指代消解

这方面还是个比较难得问题,本质也是个二分类的问题,实际项目需要考虑投入产出比,效果还是有待考量。

句法分析

Syntax Tree

监督(分类)等

指代消解

这方面还是个比较难得问题,本质也是个二分类的问题,实际项目需要考虑投入产出比,效果还是有待考量。

句法分析

Syntax Tree

CKY算法

学习资料参考:B站NLP课程