关系抽取详解

1.前言

这篇博客内容是接着这篇的信息抽取简介

2. 关系抽取方法

  • 基于规则的方法
  • 基于监督的方法
  • 基于半监督的方法(最著名的两个算法是(booststrap(原始)和 booststrap(snowball)
  • 基于无监督的方法

前两个方法在命名实体识别中说过,这节主要说基于半监督的方法

3. booststrap(原始)

首先:我们有 seed tuple (元组库),如 我们的元组库里面有作者和书的对应关系

关系抽取详解_第1张图片
通过booststrap 算法,我们如何挖掘更多的 作者 - 书 的 元组对 呢?

1. 对于给定的文档,根据 seed tuple 生成规则,例如
关系抽取详解_第2张图片
2. 重新扫描整个文档,根据生成的规则 寻找 作者- 书 的元组对
关系抽取详解_第3张图片
3. 把新seed tuple 加入到原来的 seed tuple, 然后循序
生成规则 – 寻找新 seed tuple — 添加到之前的 seed tuple

缺点

什么样的缺点会让这个算法被 snowball 取代呢?

  1. 容易生成准确率非常低的规则
    比如:李航在做机器学习的研究
    很显然提取的规则: x 在做 y 的 研究, 这与 作者-书 毫无关系
  2. 这是一个串行的算法,即一步一步的循环,这样会导致 误差累积
    关系抽取详解_第4张图片

对比booststrap 和 snowball

关系抽取详解_第5张图片

4.snowball 算法

这个算法在关系抽取中是非常经典且重要的算法
首先:我们有一个 seed tuple,里面存放的是 公司-地点 的对应关系
关系抽取详解_第6张图片
step1: 对于给定文档,根据seed tuple 生成规则
关系抽取详解_第7张图片
关系抽取详解_第8张图片

计算规则的相似度

关系抽取详解_第9张图片
生成规则
现在我们可以计算规则之间的两两相似度,那么我们可以对规则聚类
假如聚成了K个簇,则将该簇中的规则做平均形成新的规则,最后得到 K 个规则
常用聚类方法:

  • Kmeans
  • 谱聚类
  • 层次聚类

论文中的聚类方法:如 p1,p2,p3,p4,p100表示100个规则,现将它们聚类

  • [p1]
  • [p1, p2] 假设similarity(p1,p2) 大于一个阈值如 0.75,则把p2加到 p1 中去
  • [p1,p2],[p3] 假设 similarity(p1,p3) < 0.75, similarity (p2, p3) < 0.75, 则为 p3 单独开辟一个空间
  • [p1,p2],[p3,p4] 假设similarity(p1,p4)<0.75, similarity(p2,p4)<0.75, similarity(p3,p4) > 0.75, 所以将p4 加到 p3 中去
  • 依次类推
    做完聚类之后在平均

step2生成tuple(本质是计算相似度)
假设我们有了规则库,以及一篇文档,我们要根据规则来匹配tuple,如果规则的实体类别与文档中tuple的实体类别相同,那么我们就计算 similarity(规则,tuple),若值 >0.75,就把tuple加入到原来 seed tuple库中。这里计算 similarity 的前提 是要把 匹配的tuple 也表示成 5元组向量的形式。如图
关系抽取详解_第10张图片
step3 评估+ 过滤 规则
给定一个规则,我们如何去评估这个规则的好坏呢??
我们只要拿这个规则去文档里面匹配 tuple,则我们可以得到只由这个规则生成的 seed tuple 库;注意我们原来的 seed tuple 库是由许多条规则生成的。
我们只需数出新生成的tuple中有多少条在原来tuple库中,就可以计算出正确率,如图
关系抽取详解_第11张图片
关系抽取详解_第12张图片
step4:评估+过滤 tuple
我们现在有了每条规则和规则对应的正确率
我们也有tuple 库,需要注意这里的每条tuple可能是由多个规则生成的,如图
关系抽取详解_第13张图片
如何评估各个tuple的正确率??
关系抽取详解_第14张图片

5.snowball总结

  • 信息抽取领域重要的算法
  • 细节巧妙(如规则的5元组表示,相似度计算,聚类,正确率等等)

你可能感兴趣的:(NLP自学笔记,自然语言处理,机器学习)