大家都知道TreeTagger是一个用于词性标注和词型还原的工具,它的返回结果由三部分组成:目标词汇,词性,原形。那该工具是怎样判断目标词汇的词性的呢?又是怎样得到目标词汇的原形的呢?本文就是从这两个问题入手,对TreeTagger的原理进行简单的介绍。
1. 词性的识别判断
这里词性的识别采用的决策树分类方法。如下图所示,首先将目标文本分成三元短语,然后通过判断目标词汇的前两个单词的词性来判断当前词汇的词性,具体思路下图所示:当前一个词的词性为ADJ时,判断前面倒数第二个词的词性,当词性为DET时,我们就可以得出结论:当前词汇的词性70%的可能性是NN,10%的可能性是ADJ。
那具体这棵树是如何构建的呢?
1)从当前词出发,判断其前面第一个相邻词汇的所有可能词性标记,选择特征性最明显的词性标记,将当前节点分成yes, 和no 两个子树。判断特征性明显的公式如下:
这里的C为当前节点的上下文,C+为测试q成功的情况, C-为对应的测试q失败的情况,
为测试q成功(失败)的概率;
为在测试q成功(失败)的条件下,第三个标记为t的概率。
Iq为平均信息量,我们要选择最大信息量等价于与选择最小平均信息量。
其中,各个指标的计算如下:
如果下一个测试产生的三元子集中有一个的大小低于阈值,则停止当前递归。
然后已经通过递归步骤的所有三元词组将被用于估计第三个词性标记的标记概率,并将其保存在当前节点中。
那构建好这棵树后需要进行剪枝工作,那具体是怎样实现的呢?
如果一个节点的两个子节点都是叶子节点,并且该节点上的权重信息增益低于所给的阈值,这该节点的子节点将会被移除,然后当前节点自己变成叶子节点。权重信息增益的计算公式如下:
G为权重信息增益,I0是信息总量,在测试q已知的情况下。与上面的描述不同。
2. 原形
treeTagger中的词汇原形是通过查找词典的方式获得的,该词典是从Penn Treebank 语料库中训练得到的。总共分为三部分: a fullform lexicon, a suffix lexicon and a default entry.
当从词典中查找一个单词的时候,首先从fullform lexicon中查找,如果找到了,就直接返回相应的词性标记概率向量(即作为每种词性出现的可能性),如果没有找到,则将其中的大写转换成小写,再次遍历the fullform lexicon,如果还是找不到,就到suffix lexicon中去查找。如果还是没有找到,则一个默认值将会被返回。那该词典的各个部分是怎样被构建的呢?有什么特点呢?
1)the fullform lexicon: 是从Penn Treebank Corpus的200万个词中训练得到的。在该部分中,每个词汇与其对应出现的词性组成对被计算,如果一个单词的某个词性出现的次数很少,低于1,则将会删除对应的词-词性对。因为该种情况的造成大多数是由于标注错误造成的。
2)the suffix lexicon: 被组织成一颗树,树上的每一个节点都用一个特征值进行标记。在叶子节点中,包含了词性标记概率向量。当进行查找操作时,首先从根节点进行。
讲了这麽多,可能大家都有点头昏了,举个例子吧!
假如我们想查找单词tagging 在suffix lexicon中,如下图。
我们首先会从根节点开始,然后遍历分支,到达节点g,然后往前到达节点n, 最后我们在标记为i的节点处结束搜索。这个节点就是一个叶子节点,与其对应的概率向量将会被返回。