您的位置:首页 > 其它

斯坦福和NLTK英语短语词组抽取工具原理及源码理解

2016-06-12 12:07 417 查看
一、斯坦福短语抽取工具实现了四个方法来进行短语搭配抽取

(1)基于统计频率数的方法

该方法用于查找长度为2或者3并且连续的短语搭配。因此只处理bigrams和trigrams语料库。对于候选短语集,首先使用预定义的词性序列做一个初步的过滤,将不符合该词性序列的短语组合过滤掉。预定义的词性组合为:

NN_NN

JJ_NN

VB_NN

NN_NN_NN

JJ_NN_NN

NN_JJ_NN

JJ_JJ_NN

NN_IN_NN

然后统计每组短语搭配在语料库中出现的频率和在语料库中具体的位置,最后按照出现的频率排序,取TopN。

如:

Length 2 (<WORD>, <count>):

UNITED STATES, 47

SMALL BUSINESS, 37

Length 3 (<WORD>, <count>):

SMALL BUSINESS CONCERN, 13

SMALL BUSINESS ADMINISTRATION, 9

(2)基于均值和方差的方法

该方法主要用于查找长度为2的非连续的短语词组。对于同一个句子,控制窗口大小为9,然后对于每个词剩余的8个词即为可能与这个词组成词组的词。对于每一个词组,基于语料库,统计第二个词出现时,距离第一个词的距离长度满足一定距离时的次数,然后建立相应的直方图。

使用“flat peak”条件对得到的词组过滤,然后计算符合条件的词组的均值和方差,按方差增加的顺序排列,对于方差相同的词组按频率减少的顺序排列。取top1000用于相似性测试。

如:

Length 2 (<WORD>, <mean>, <variance>, <count>):

UNITED STATES, UNITED, STATES, 1.0, 0.0, 47

OLD MAN, OLD, MAN, 1.0, 0.0, 21

RADIO EMISSION, RADIO, EMISSION, 1.0, 0.0, 16

(3)基于显著性水平t值的方法

该方法用于查找长度为2或者3的连续短语词组,在第一种方法计算出的结果的基础上,计算每个词组的t值,然后按照t值减少的顺序排列。

T的计算公式:



S2表示方差,N表示大小,u表示分配数。

如:

Length 3 (<WORD>, <t_value>, <count>):

SMALL BUSINESS CONCERN, 3.6056123197382504, 13

SMALL BUSINESS ADMINISTRATION, 2.9998899172660995, 9

Length 2 (<WORD>, <t_value>, <count>):

UNITED STATES, 6.8303675830354, 47

SMALL BUSINESS, 5.987962457983314, 37

(4)基于卡方检验(Chi-square)的方法

该方法用于查找长度为2的连续短语词组。在第一种和第三种方法计算出结果的基础上,计算词组的卡方值,然后按照结果的递减顺序排列。



观察次数减去理论次数的平方除以理论次数。

fi代表观察次数,npi代表理论次数。

如:

Length 2 (<WORD>, <chi-square_value>, <count>):

UNITED STATES, 6823.207158142358, 47

POST-ATTACK RECONNAISSANCE, 5789.036633730465, 4

SURFACE-ACTIVE AGENT, 5206.106140377071, 6

CollocationFinder.java位于edu.stanford.nlp.trees目录下。

CollocationFinder.java:

功能:基于WordNet和词性以及各层次句法之间的关系进行短语搭配提取。

算法主要思想:对每句话的句法分析树的所有子树,进行短语搭配,然后将搭配的短语词组跟wordnet中的语料比较,若该词组在语料中则为提取出的词组。

调用的外部类有:Generics类、WordTag类等

主要方法:getCollocationsList(Tree t):遍历斯坦福句法分析得到的句法分析树,提取的结果保存在:collocationCollector中,格式是word1_word2_word3(index1,index2)

实现过程:

1.使用getChildrenAsList()函数获取句法树的所有子树。

2.对每一个子树,根据词性以及获取词的形态判断哪些词是形近词,形近词判断函数:Morphology.stemStatic()。把形近词存到同一个List中。剩下的非形近词存到一个List中。在treeAsStemmedCollocation函数中把提取出的形近词转化为word1_word2_word3格式。

3.在wordNet中查找是否存在该短语词组。

部分方法:

treeAsStemmedCollocation(Tree t):返回每个子树对应的短语词组。

getStemmedWordTagsFromTree(Tree t):返回词和词的POS标记。

二、NLTK工具实现的短语词组提取源码理解

Collocations.py:基于语料库,首先计算词语频率和该词语跟其他词语的上下文关系。并对句子内容做过滤操作,只留下有用的内容。建立N-gram Model,然后对每个词的N元模型根据相关规则进行打分,根据打分的结果确定这些相近的词组成词组的可能性。测量方法使用Church
and Hanks的测量方法。

class AbstractCollocationFinder:基于N-gram Model识别搭配,主要用于计算n个词搭配得分。收集候选搭配在ngram语料库中的频率、对一些不符合条件的词过滤以及对模型搭配结果排名。

通过nltk.probability.FreqDist对象或相同功能的接口获得每个单词在语料库中的频率和元组的联合频率。其中的ngram_fd返回n个词搭配后的得分。

class BigramCollocationFinder:基于Bigram(二元模型)词语搭配查找和排序。对non-contiguous bigrams(非连续bigram做了处理)。窗口大小为2。其中的bigram_fd返回两个词搭配后的得分。分别计算一个词的频率和两个词组合一起出现的频率。

class TrigramCollocationFinder:基于Trigram(三元模型)词语搭配查找和评分结果排序。对两个词中间出现的词是否与这两个词构成搭配做了处理。窗口大小为3。分别计算了一个词,任意两个词,三个词出现的频率。

class QuadgramCollocationFinder:基于Quadgram(四元模型)词语搭配查找和排序。对四个任意搭配的词语做了处理。窗口大小为4。分别计算了一个词,任意两个词,任意三个词和四个词出现的频率。

其中三元模型和四元模型会涉及到非连续的情况。

总体来说,斯坦福短语抽取工具基于句法分析的结果生成预选搭配集合,NLTK基于窗口长度生成预选搭配集合。然后将获得的预选短语与语料库进行比较,得出这些短语搭配在语料库中出现的频率值,进一步对频率做处理。根据计算结果返回短语词组。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息