NLP学习笔记31-信息抽取

一 序

   本文属于贪心NLP训练营学习笔记系列。整体来看,第1模块:语言模型,第二模块:机器学习。第三模块:信息抽取

二信息抽取概要

  概要介绍

  Unstructured Text包括:
图片、文本、VIDEO、音频
这些需要提取特征的处理后才能用模型进行计算。

Information Extraction(IE)

抽取实体(entities):实体是现实生活中存在的事物。

·医疗领域:蛋白质,疾病,药物.…

抽取关系(relations)

位于((locatedin),工作在(work at),部分(is part of)

例子:

This hotel is my favorite Hinton Property in NYC! It is located right on 42nd street near Times Square in New York, it is close to all subways, Broadways shows, and next to great restaurants like Junior’s Cheesecake, Virgil’s BBQ and many others.
抽取实体NER,标注每个实体的类型,关系抽取后:

注意:It is located right on 42nd street near Times Square in New York.中的it是指什么?This hotel 用分类的方法找到这个it的对应对象就是指代消解。

实体消歧(apple是苹果还是苹果公司)和实体统一算法(NYC和New York是一样的),后面会展开讲。

老师引出一个问题:搜索引擎与问答系统

搜索引擎:给出所有相关文档,用户自己筛选。

问答系统:系统给出了答案,不用用户选择。level不同:从最开始的返回文档,到返回句子到keyword 或者答案。后面需要依赖知识图谱的支撑。

命名实体识别介绍(NER)

是指识别文本中具有特定意义的实体,主要包括人名、地名、机构名、专有名词等。

Case: chat bot

根据提问进行意图识别,然后是分类,看意图是什么,问地点,时间?还是什么东西,然后是基于规则进行回答,规则做不了的才会用到其他解决方案。

业内:还是优先采用规则,(意图识别可以看做是个分类问题,尝试下智能音箱的对话)

Case: Extract from News

通用性工具:HanNLP

开源工具的缺点是无法进行特定领域的实体识别,例如:医疗、金融等。只能做通用的:人物、时间、事件等。

搭建命名实体识别分类器

  • 1定义实体类别:业务上定义类别
  • 2准备训练数据
  • 3 训练NER

准备训练数据
下面是一个训练数据的实例,第一列是句子及编号,第二列是词,第三列是词的词性标注,第四列是标注是否我们需要关注的词,不关注标记为O,否则标记为《B-类型》的标签例如:B-geo代表地点,B-per代表人。如果有多个词组合成一个实体:B-org,后面的I-org是表示跟前面的组成一个词。

头一次看这个,感觉怪怪的。中文训练数据也是这样的吗?

NER方法概述

利用规则(比如正则)
投票模型(Majority Voting):经常用做baseline
利用分类模型
·非时序模型:逻辑回归,SVM…
·时序模型:HMM,CRF(前两个需要),LSTM-CRF(不需要特征的提取)

基于规则的方法

利用已有词库,直接匹配。(靠人工)

投票模型(Majority Voting)

统计每个单词的实体类型,记录针对于每个单词,概率最大的实体类型。

不需要去学习,只需要统计。

有监督学习-特征提取

例子:The professor Colin proposed a model for NER in 1999.

英语的 特征提取比中文的多。

  • 1 bag-of -word ,包括:bigram,trigram
  • 2.词性
  • 3.前缀和后缀(中文没有)
  • 4 当前词的特性

特征抽取的方法还是需要去试验,中文的拼音也算。

特征编码feature encoding

常见的特征种类有:
连续(continuous)特征;(这里直接用有两种方式,一种是归一化后用,一种是转成高斯分布,除了直接用还可以离散化处理)
无序类别(categorical)特征;(可以使用One-hot的方法把每个无序特征转化为一个数值向量。)
有序类别(ordinal)特征。(有序类别的特征不能计算每个间隔之间的区别,例如成绩为ABCD优先级,不知道每个对应的具体分数段是多少,没法量化)

Ontological Relation

Ontological 翻译是本体,比较抽象难懂。通常包含两种元素:实体及实体的关系。

老师画图表示这样的系统,也是一种信息结构的描述。比如医疗领域的例子:药物-作用于->病原体。

其中的IS-A(Hypernym Relation):代表的是从属关系.很常见的一种关系。

基于规则的方法以提取IS-A为例

先人工定义规则,然后从语料库去匹配,把满足规则的保存到数据库。假如我们要筛选水果:

我们定义的规则集越丰富,那么从文章中抽取到的信息也就越丰富,但是可能存在噪音(异常值),上面截图的car。

们在定义规则集的时候可以加上一些限制,可以提升准确率,只返回想要的结果。

整个基于规则的方法优点:
1、比较准确
2、无需训练
随着数据量的增大,我们可以把基于规则的方法替换为基于模型的方法。
缺点:
1、low recall rate
2、人力成本高
3、规则比较难设计

基于监督学习方法

大概步骤:
1、定义关系类型,例如:疾病与症状的关系。
2、定义实体类型,例如:疾病、症状、药品
3、训练数据准备
3.1标记好实体及类型;
3.2标记好实体之间的关系。

和之前的NER有些类似,抽取关系可以转换为多分类的问题,分类目标是将两个实体之间关系归类为某种类型。

抽取关系的特征工程通常有如下方法:

  • 1、bag of word:bigram
  • 2. 词性的特征:名词、动词
  • 3 实体类型:ORG、PER
  • 位置特征:出现在哪里,标题,句首等
  • 句法分析特征(语法依存特征是单词之间依赖关系,语法树是需要大量语言学知识的,不是一回事)
  •  

特征提取完了,接下来是分类的算法:有种办法无分类进行过滤(二分类问题),然后再进行分类。分类的算法可以有SVM,NN,GBDT等,自己根据情况试验

Bootstrap方法

这个算法与机器学习关系不大,比较经典所以老师做个讲解。由于上面两种方法(基于规则和基于监督)在手工设置规则、标记实体上很麻烦。

Bootstrap是一种抽样方法,样本之于样本,可以类比样本之于总体。

例子:假设要找作者和书的关系,开始有3条已知的记录(seed/seeds tuple)。

第一步:生成规则

(找规则是先匹配文本里面有没有出现实体,如果有把实体之间文字提前出当做规则)

最后形成一个规则库

第二步:规则库生成tuple
用上面的规则库去扫描文本,得到了三个新的tuple,然后把新的tuple加入到之前的seed tuple中,再不断重复这个过程

Bootstrap优缺点

优点:自动的方法,不需要太多的人工介入。
缺点:提取的规则可能准确率比较低(error accumulation,迭代式的算法都有)

Snowball

这个算法是在Bootstrap上的改进,防止错误的累加。

在bootsrap上,加上过滤的步骤,另外在规则匹配上从= 变为计算近似程度。

Snowball具体算法实现

和bootstrap一样,先有seed tuple,然后扫描文本。然后提取规则,这里用的是五元组的方式(为了计算相似度)。

注意5元组的构成,left,实体1,middle,实体2,right。其中left\middle\right转换为向量(用类似TFIDF之类的方法),这样每个规则之间就可以用向量来进行计算。

相似度公式:

\large sim(P,S)=\mu _1L_1\cdot L_2+\mu _2M_1\cdot M_2 +\mu _3R_1\cdot R_2 \\st. \mu _1+\mu _2+ \mu _3=1

μ是相似度计算的权重,直接用内积表示相似度, 不需要除以模长, 因为L,M,R做了normalization => ||L||=1

1生成模板

上面的截图,左侧是计算向量,其中1个词是1,2个词每个是0.75,三个词每个词是0.57因为他们的平方加起来要等于1.

右侧是规则(模板的pattern)的合并,就是把相似度大的合并起来,使用的就是聚类cluster的方法。

老师讲的例子采用的是逐个比较相似度,如果相似就合并到一起的思路,然后(2)把多个规则在一组的进行平均操作(centroid),变成一个规则。

2生成tuple

有了规则库,就可以生成tuple了.

先扫描文本,用NER找到实体类型要和模板中的一样的,也用规则的方式表达为五元组,进行相似度计算,如果大于0.7,那么说明我们扫描到了正确的tuple,加入到下面的表中。

3模板评估

然后是对模板进行评估,把之前迭代生成的seed tuple作为对的(groud truth)。然后把某条规则(模板)应用到文本上,然后检测出一系列的tuples结果,与对的数据做对比。计算confidence score。判断模板\large P_i 是否要丢弃(比如<0.5)。
 

4记录评估(tuple evaluation)与过滤

单个规则生成的,规则分数越高的可信度高,多个规则命中的,规则越多,可信度越高。

confidence score置信度公式:

\large confidence(t_i)=1-\sum_{i=1}^{k}confidence(p_i)

我们也可以设置tuple的confidence score的阈值为0.7来进行过滤

snowball总结

snowball 老师给与了高度评价,虽然不是AI算法。但是它解决了bootstrap问题,很多思路可以借鉴。

信息抽取,神经网络应用不多,基于规则的提取还是占主流。

实体消歧 (Entity Disambiguiation)

实体消岐的本质在于一个词很可能有多个意思, 也就是在不同的上下文中所表达的含义不太一样.比如:苹果、小米、还有同名的人。

在给定一个实体库情况下,如何高效的判断问题中的实体具体是哪个。

实际上是计算问题中的实体与实体库中的每个对象的相似度的:

先要把词转换为向量(TFIDF等),取’苹果’两边的字符串。然后再和实体库里面的对象做相似度计算。还可以其他高大上的技术实现。

实体统一 (Entity Resolution)

多个实体的描述可能描述的是同一个实体 。(二分类问题)

举例:给定两个实体:字符串,str1,str2,判断是否两个字符串是否同一个实体。

算法1:两个词的相似度可以用编辑距离来表示(edit distance)

算法2:基于规则。

算法3:有监督的学习方法

先用tfidf等方法分别转化为两个向量(特征提取),接下来可以有两种方法:

1.先拼接再丢到模型进行二分类

2.先计算余弦相似度,然后经过逻辑回归模型,得到分类结果

算法4. 基于图的实体统一, 关系图:

还是要计算相似度。通过个体特征,关系相关特征等, 进行相似度的运算

指代消解 (Co-reference Resolution)

算法:

1  指向最近的实体 (不准确)

    2 有监督学习方法:

     2.1收集数据,并标记出对象,例如哪个是人名,哪个是指代的代词

     2.2标记数据:类似上面的句子,标注出每个代词属于哪个对象,形成样本

      2.3在词的周围提取关键词, 构造向量,放入模型.

从算法上没有太多创新,但是准确率不高,属于未解决的问题之一。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值