基于CRF序列标注的中文依存句法分析器的Java实现

  • 时间:
  • 浏览:1
  • 来源:uu直播快3平台

 

有了依存的对象,还都要知道这条依存关系到底是哪种具体的名称。我从树库中统计了有1个 词的词与词性两两组合出現概率,姑且称其为2gram模型,用此模型接受依存边两端的词语,输出其最有时候的关系名称。

语料库

这是有1个 基于CRF的中文依存句法分析器,内内外部CRF模型的行态函数采用 双数组Trie树(DoubleArrayTrie)储存,解码采用特化的维特比后向算法。相较于《最大熵依存句法分析器的实现》,分析传输速率翻了一倍,达到了1262.8655 sent/s

行态模板

与《最大熵依存句法分析器的实现》相同,采用清华大学语义依存网络语料的1000句作为训练集。



其中, [ + | – ]表示方向, + 表示支配词在句中的位置出現在从属词的底下, – 表示支配词出現在从属词的前面; POS表示支配词具有的词性类别; d表示距离。

后续处里

 

解码

开源项目

 1.if (!isLegal(j, i, table)) continue;

 

标准的维特比算法假定所有标签都在 合法的,有时候在本CRF模型中,标签还受到得话的约束。比如最后有1个 词的标签不有时候是+nPos,都就是我负数,有时候任何词的[+/-]nPos都得保证底下(或前面,当符号为负的并且 )有n个词语的标签是Pos。什么都有我覆写了CRF的维特比tag算法,代码如下:

CRF简介

[ + |- ] dPOS

依存关系事实上由有1个 行态构成——起点、终点、关系名称。在本CRF模型中暂时忽略掉关系名称(在下文都要利用其它模型补全)。

转换后:

1.crf_learn -f 3 -c 4.0 -p 3 template.txt train.txt model -t

我的试验条件(机器性能)有限,每迭代一每种花5分钟,最后只有设定最大迭代次数为100。经过痛苦的迭代,得到了有1个 效果非常有限的模型,其serr高达100%,暂时只做算法测试用。

 

注意底下的

转换为CoNLL格式输出:

本文代码已集成到HanLP中开源项目中,最新hanlp1.7版本有时候发布

最终结果

CRF训练

比如原树库:

根据依存文法理论, 人们人们 都要知道决定有1个 词之间的依存关系主要有六个因素: 方向和距离。有时候人们人们 将类别标签定义为具有如下的形式:

预处里

保证了标签的合法性。

训练参数

CRF是序列标注场景中常用的模型,比HMM能利用更多的行态,比MEMM更能抵抗标记偏置的什么的问题。在生产中总爱使用的训练工具是CRF++,关于CRF++的使用以及模型格式请参阅《CRF++模型格式说明》。

 

这一 步的结果: