NLP从零开始(2)
文章目录
关系抽取
基于规则的方法
优点:比较准确,不需要 训练数据
缺点:low recall rate,人力成本需要大量设计规则,规则本身难设计
基于监督学习的方法
-
定义关系类型
-
定义实体类型
-
训练数据准备
实体标注好类型
实体之间的关系
Bootstrap算法
自动生成规则,自动生成tuple,循环
缺点:错误率叠加
SnowBall算法
- 生成规则
- 生成tuple
- 评估规则准确性+过滤
- 评估tuple准确性+过滤
- 循环1234步
生成模板
人为给定seed tuple,首先通过遍历文本来发现新规则。通过NER来发现句子中的实体并标记,然后标记实体间的关系(同bootstrap,绿色框表示实体标记,红色括号表示关系)。
不同于bootstrap,snowball算法需要通过近似算法来判断相似度,进而实现精准匹配获得更加精确的规则。通过提出 Pattern Representation,由三元组表示更新为五元组表示(left,sub,middle,sub,right),左右长度预先设定,将letf、middle、right表示的字符串通过词向量算法表示为词向量,从而计算相似度。
如何计算相似度呢?
如果两个规则对应的实体类型不同,那么相似度为0,否则,计算left、middle以及right的内积即相似度表示,然后通过加权平均实现最终的相似度计算,权重可预先预定,一般情况下middle的权重要高于左右。
流程:
将生成的pattern更新left、middle和right的向量表示,然后将个模板之间按照相似度进行聚类,论文中用到的聚类方法为:将pattern库中的子pattern进行遍历,设定归类阈值,如p1p2的相似度大于0.7即归为一类,遍历之后的组合并判断相似度,小于阈值则归为新的一类,大于则归为同类。然后对同一类pattern中的向量表示取平均,最后生成新的模板。
生成tuple
将规则库中的pattern放到文本中去遍历匹配,分别计算各个pattern与文本中的pattern之间的相似度,结合阈值判断是否生成新的tuple以及加入seed库中。
Pattern Evaluation + 过滤
将seed库中的pattern应用到文本中,对提取到的tuple与seed库进行置信度的计算,并做相应的保留与删除pattern过滤操作。
Tuple Evaluation + 过滤
将生成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课程