通俗讲:自然语言处理(NLP)入门之信息抽取(Information Extraction)

时间:2024-03-25 15:20:24

1.什么是信息抽取(IE)

信息抽取的英文就是Information Extraction,是把文本信息转换成结构化信息。整体步骤有三步:

  1. 从文本中了解到特定的信息;
  2. 然后从特定信息中获取到特定类别的对象;
  3. 然后获取对象之间的关系。
    比方说,找到了一个人名A,找到了一个公司B,知道了A是B的员工。

2.信息抽取的方法

2.1 正则表达式(RE)

正则表达式就是regular expression,简写有RE,也有regex。这个是用来检索、替换符合某个规则的文本的。

有限状态细胞机 (FSA)

FSA是Finite State Automaton的缩写,这里要说的是Deterministic Finite State Automaton,缩写是(DFA),翻译成确定有限状态细胞机。多了一个确定deterministic。

这个有限状态细胞机就是一个能实现状态转移的自动机。一个简单的例子就是:假设a这个数是奇数是合法的,偶数不合法。一开始a=1,那么a+=1的时候,a=2,转移到不合法的状态,然后再加1,a=3又变成合法的状态。这个就是一个非常简单的FSA。

这个FSA是干什么的呢?其实就是起到和RE一样的功能。依然是使用“I love deep learning and machine learning”作为例子。想到从语料中抽取“什么learning”这样的词组,就可以使用FSA,输入第一个词时候处于非法状态,然后假如第二个词是learning,就是转移到合法状态,反之就依然是非法状态。不是啥很难的东西,就只是起到一个信息抽取的作用。

下面说一下在NLP中使用FSA进行信息抽取IE的步骤,这里也可以叫做关系抽取系统Relational Extraction System:

  1. Tokenization(令牌化):这一步其实就是把我们的语料库,分割成单词、数字、标点符号。这些分割之后的就叫做token!这个是重点,在NLP新手中,token的概念虽然非常简单但是却容易迷惑。
  2. Complex-word handling:复杂单词处理。识别一些专有名词,使用FSA的规则,比方说找公司的名字,英文中公司都是:XXX+Co\Ltd\Inc。所以这里可以使用FSA来匹配到公司名字。
  3. Basic-group handling:基本组处理。这个就是词性标注了。英文中名词组用NG(norm group),动词组用VG(Verb Group),介词用PR(Proposition),连接词用CJ(Conjunction)。
  4. Complex-phrase handling:复杂短语处理。就是定义一些描述复杂的关系。
  5. Structure merging:就是寻找相邻的引用,然后融合他们。
    整个过程,用到了不止一个的FSA,每一个步骤不止一个,然后后面步骤又基于前面步骤的结果。所以这个就是级联FSA(级联的英文cascaded)。

举个例子:
Monsters Inc said Friday it has set up a joint venture on the Isle of Man with a local business and a Scottish trading house to produce wigs to be shipped to Inverness. The joint venture will commence in June.
第一步:tokenization。这一步不用做了,因为咱们人脑看一眼就知道怎么分割了。
第二步:我们知道了Monsters Inc是一个公司的名字;
第三步:知道Monsters Inc是一个NG名词,然后said属于VG动词,然后Friday是N,on是PR,跟学英语有点像;
第四步:我们定义了一个规则就是:Company+set up joint venture+(with company )。
这样的话就可以匹配到Monsters Inc + set up joint venture + with a local business.就知道这个Monsters Inc和local business创办了一个合资企业的关系;
第五步:两句话中都提到了joint venture。把这两个引用合并,知道他们表示的是同一个对象。
总结一下FSA
整个过程给人一种什么感觉?死板!所有都是基于规则的,是就是,差一点都不行。这种就是确定性的模型deterministic model。这种实用于那种语料格式比较固定的那种任务中。像是购物网页的信息提取,这种网页的标签化语言就非常的标准格式。

隐式马尔科夫模型(HMM)

之前提到了deterministic这个单词,与这个单词相反的是什么?是随机、概率,是Probabilistic。而Hidden Markov Model(HMM)就是这个概率模型的之一。Hidden Markov Model中包含两种数据,一个是可观测数据O(observe),一个是隐含数据H(Hidden)。可观测数据自然就是我们能看到的,我们已知的,比如说就是一封邮件的内容,然后隐含数据可能就是这个邮件是否是垃圾邮件。HMM中有两个概率,一个是当前可观测数据到下一个可观测数据的概率P(OtOt1)P(O_t|O_{t-1}),以及基于当前可观测数据预测当前隐含状态的概率,就是P(HtOt)P(H_t|O_t).如图所示:
通俗讲:自然语言处理(NLP)入门之信息抽取(Information Extraction)

这样想要求取一个任意一个隐含状态HnH_n,先要得到OnO_n,OnO_n可以从O1O_1推算过去.

需要注意的就是,这个O和H是自己设的字母,可能与其他讲解有出入。如果依然是用上面的例子,那么判断Monsters Inc是一个公司就可以用一个HMM来判断,隐含状态就是是否是公司名字,可观测数据就是Monsters Inc;判断Monsters Inc是一个名词组NG也可以用HMM,类似的。

随机条件场(CRF)

CRF是Conditional Random Field的缩写。CRF最核心的就是他的特征函数,这个特征函数其实就是从语料库中抽象出来的一个规则。这里用最简单的线性链CRF(linearchain CRF)的特征函数来做例子。F(s,i,li,li1)F(s,i,l_i,l_{i-1})这里的s就是一个语句,也可以是一个词,相当于HMM中的可观测信息,然后这个i相当于HMM中的第几个状态的可观测信息,也相当于对应于一个句子中的第几个单词(词组),然后这个lil_ili1l_{i-1}相当于第i个单词的标签和第i-1个单词的标签。在词性标注任务中,这个标签就是:名词、动词、介词等。如果这个句子s中的第i个单词(词组)是标签lil_i,那么这个特征函数F就返回1,如果不是就返回0.

I love deep learning作为例子,这个就是s,然后F("I,love,deep,learning",3,,)=1F("I,love,deep,learning",3,名词,形容词)=1这个是从0开始计算索引的哈哈

在我看来这个就是一个规则,上面的例子中,这个特征函数体现了一个这样的规则:learning很可能是名词,形容词后面的那个词很可能是名词。

但是文本中规则有很多不同的,所以CRF中其实是有很多的规则的,也就是有很多的特征函数,不同的特征函数体现不同的规则。那么现在就有F1,F2,FjF_1,F_2,…,F_j有j个特征函数,依然每个函数都是那四个输入(CRF中有很多不同种类的特征函数,这里就不细说了)。

这J个特征函数体现了多种的规则,所以在判断一个词是什么词性的时候,肯定要考虑所有的规则。所以这个词sis_i(句子s中第i个词组)的词性lil_i的得分就应该是:
score(lisi)=n=1jλnFn(s,i,li,li1) score(l_i|s_i)=\sum_{n=1}^j{\lambda_n*F_n(s,i,l_i,l_{i-1})}
没有问题吧,不过大家如果在其他地方看到这个公式,不是这样子的因为一般都会写一个整体的打分,就是一句话s,给这个s每一个词都标注词性,得到一个ll,然后算一个这个句子这样标注的总分,所以写成:
score(ls)=n=1jm=1SλnFn(s,i,lm,lm1)score(l|s)=\sum_{n=1}^j\sum_{m=1}^S{\lambda_n*F_n(s,i,l_m,l_{m-1})}这个S就是句子s的总共词的数量。把每一个词的每一个特征函数的值都加起来,就是这个句子标注的打分。可想而知,打分越高,说明特征函数中的1越多,说明词标注的词性符合越多的规则,那就是标注的好。

然后咋把这个得分转换成概率呢?这个概率表示某一种方式标注的词性是这个句子真实词性的概率。使用指数来转换成概率:probability=escore(ls)lLescore(ls)probability=\frac{e^{score(l|s)}}{\sum_{l\in L}{e^{score(l|s)}}}

这个L就是不同的标注方案。举个简单的例子,love study。可能会有【动词,动词】这个方案,但是概率肯定是小于【动词,名词】这个方案,所以最后后者的概率会大于前者。

之前没有说的是这个东西λn\lambda_n,这个脚标也是n,表示对特征函数的一个权重值。虽然有很多不同的规则,但是有的规则是更重要一些的,有的是不那么重要的,很好理解。

怎么训练呢?使用梯度下降就可以了。这个就不细说了。

CRF和HMM哪一个更好呢?

  • HMM对于词性的标注只考虑当前的一个单词,而CRF可以考虑句子中的其他词(不仅仅是前面一个单词,上面的特征函数只是一个很简单的)。
  • 总之CRF全面强于HMM

小结

  • 主要讲了三个模型FSA有限状态自动机,然后HMM隐形马尔可夫模型还有CRF条件随机场。FSA是确定性模型,处理的问题要求语料库有一定的格式;HMM和CRF是概率模型,CRF强于HMM;
  • 本章节重点讲了词性标注问题,希望可以对这个任务有一定的了解;
  • 除了上面两个概率模型,还有一个最大熵Maximum Entropy ME模型,也是概率的,不过用的不多。这里就简单提一下:用(x,y)表示对词x标注词性y,然后有一个集合Z,是所有可能的x,y的组合。比如说love可能是名词,这是一个组合;love可能是动词,这是另一个组合。然后通过计算:H(yx)=(x,y)ZP(x,y)logP(yx)H(y|x)=-\sum_{(x,y)\in Z}{P(x,y)logP(y|x)}当这个最大的时候,表示这个系统混乱越小,这时候的P(y|x)就是我们想要的,每一个x对应的不同的y根据他们的概率判断x的词性。如何计算的没有深究,知道一个宏观的理解即可。就是熵最大的情况下P(y|x)即为真实概率,然后选择此时概率最大的y就行了。