这是一个判决式汉语句法分析器的Java实现,基于最大熵模型和最大生成树模型,实现了中文依存句法的自动分析,分析速度达到 570.7句/秒。
开源项目
本文代码已集成到HanLP中开源:http://www.hankcs.com/nlp/hanlp.html
判别式的分析方法
该方法采用条件概率模型,将所有依存关系概率的累积作为目标函数的score,取score最大的依存关系树作为输出。
参考刘群老师的讲义:
最大生成树模型
最大生成树模型(maximum spanning trees, MST) 定义整棵句法树的打分是树中各条边打分的加权和:
s 表示打分值,y 是句子x 的一棵依存树, (i, j)是y中的两个单词构成的一条边(依存关系),f是取值为 1 或 0 的高维二元特征函数向量,表示结点xi 和 xj 之间是否存在依存关系。w 是特征 f(i,j)的权值向量,w在确定了特征后由样本训练得到。
最大熵模型
最大熵模型的简介以及Java实现请参考《最大熵的Java实现》,这里将最大熵模型作为衡量一条依存关系存在的概率的工具。
训练模型
最大熵的特征选取
对训练集中的任意一个句子的单词集合(包括虚根),取出任意两个单词(i,j),将(i,j)的依存关系作为事件名(即使它们之间没有依存关系,也取“null”作为事件名),将i和j自身以及周围的环境选取为特征,如下表所示:
W表示单词本身,P表示词性,Dis表示i和j的距离,有正负之分,加号表示组合多种特征。
举个例子说明,对于熟语料:
1 坚决 坚决 a ad _ 2 方式 2 惩治 惩治 v v _ 0 核心成分 3 贪污 贪污 v v _ 7 限定 4 贿赂 贿赂 n n _ 3 连接依存 5 等 等 u udeng _ 3 连接依存 6 经济 经济 n n _ 7 限定 7 犯罪 犯罪 v vn _ 2 受事
得出下列训练文件:
##空白##i-2 nulli-2 ##空白##i-1 nulli-1 ##核心##i0 rooti0 坚决i1 adi1 惩治i2 vi2 ##空白##j-2 nullj-2 ##核心##j-1 rootj-1 坚决j0 adj0 惩治j1 vj1 贪污j2 vj2 ##核心##→坚决 root→ad ##核心##→坚决-1 root→ad-1 ##空白##@##核心##→坚决 ##核心##→##核心##@坚决 null@root→ad root→root@ad null ##空白##i-2 nulli-2 ##空白##i-1 nulli-1 ##核心##i0 rooti0 坚决i1 adi1 惩治i2 vi2 ##核心##j-2 rootj-2 坚决j-1 adj-1 惩治j0 vj0 贪污j1 vj1 贿赂j2 nj2 ##核心##→惩治 root→v ##核心##→惩治-2 root→v-2 ##空白##@##核心##→惩治 ##核心##→坚决@惩治 null@root→v root→ad@v null ##空白##i-2 nulli-2 ##空白##i-1 nulli-1 ##核心##i0 rooti0 坚决i1 adi1 惩治i2 vi2 坚决j-2 adj-2 惩治j-1 vj-1 贪污j0 vj0 贿赂j1 nj1 等j2 udengj2 ##核心##→贪污 root→v ##核心##→贪污-3 root→v-3 ##空白##@##核心##→贪污 ##核心##→惩治@贪污 null@root→v root→v@v null ##空白##i-2 nulli-2 ##空白##i-1 nulli-1 ##核心##i0 rooti0 坚决i1 adi1 惩治i2 vi2 惩治j-2 vj-2 贪污j-1 vj-1 贿赂j0 nj0 等j1 udengj1 经济j2 nj2 ##核心##→贿赂 root→n ##核心##→贿赂-4 root→n-4 ##空白##@##核心##→贿赂 ##核心##→贪污@贿赂 null@root→n root→v@n null ##空白##i-2 nulli-2 ##空白##i-1 nulli-1 ##核心##i0 rooti0 坚决i1 adi1 惩治i2 vi2 贪污j-2 vj-2 贿赂j-1 nj-1 等j0 udengj0 经济j1 nj1 犯罪j2 vnj2 ##核心##→等 root→udeng ##核心##→等-5 root→udeng-5 ##空白##@##核心##→等 ##核心##→贿赂@等 null@root→udeng root→n@udeng null ##空白##i-2 nulli-2 ##空白##i-1 nulli-1 ##核心##i0 rooti0 坚决i1 adi1 惩治i2 vi2 贿赂j-2 nj-2 等j-1 udengj-1 经济j0 nj0 犯罪j1 vnj1 ##空白##j2 nullj2 ##核心##→经济 root→n ##核心##→经济-6 root→n-6 ##空白##@##核心##→经济 ##核心##→等@经济 null@root→n root→udeng@n null ##空白##i-2 nulli-2 ##空白##i-1 nulli-1 ##核心##i0 rooti0 坚决i1 adi1 惩治i2 vi2 等j-2 udengj-2 经济j-1 nj-1 犯罪j0 vnj0 ##空白##j1 nullj1 ##空白##j2 nullj2 ##核心##→犯罪 root→vn ##核心##→犯罪-7 root→vn-7 ##空白##@##核心##→犯罪 ##核心##→经济@犯罪 null@root→vn root→n@vn null ##空白##i-2 nulli-2 ##核心##i-1 rooti-1 坚决i0 adi0 惩治i1 vi1 贪污i2 vi2 ##空白##j-2 nullj-2 ##空白##j-1 nullj-1 ##核心##j0 rootj0 坚决j1 adj1 惩治j2 vj2 坚决→##核心## ad→root 坚决→##核心##1 ad→root1 ##核心##@坚决→##核心## 坚决→##空白##@##核心## root@ad→root ad→null@root null ##空白##i-2 nulli-2 ##核心##i-1 rooti-1 坚决i0 adi0 惩治i1 vi1 贪污i2 vi2 ##核心##j-2 rootj-2 坚决j-1 adj-1 惩治j0 vj0 贪污j1 vj1 贿赂j2 nj2 坚决→惩治 ad→v 坚决→惩治-1 ad→v-1 ##核心##@坚决→惩治 坚决→坚决@惩治 root@ad→v ad→ad@v 方式 ##空白##i-2 nulli-2 ##核心##i-1 rooti-1 坚决i0 adi0 惩治i1 vi1 贪污i2 vi2 坚决j-2 adj-2 惩治j-1 vj-1 贪污j0 vj0 贿赂j1 nj1 等j2 udengj2 坚决→贪污 ad→v 坚决→贪污-2 ad→v-2 ##核心##@坚决→贪污 坚决→惩治@贪污 root@ad→v ad→v@v null ##空白##i-2 nulli-2 ##核心##i-1 rooti-1 坚决i0 adi0 惩治i1 vi1 贪污i2 vi2 惩治j-2 vj-2 贪污j-1 vj-1 贿赂j0 nj0 等j1 udengj1 经济j2 nj2 坚决→贿赂 ad→n 坚决→贿赂-3 ad→n-3 ##核心##@坚决→贿赂 坚决→贪污@贿赂 root@ad→n ad→v@n null ##空白##i-2 nulli-2 ##核心##i-1 rooti-1 坚决i0 adi0 惩治i1 vi1 贪污i2 vi2 贪污j-2 vj-2 贿赂j-1 nj-1 等j0 udengj0 经济j1 nj1 犯罪j2 vnj2 坚决→等 ad→udeng 坚决→等-4 ad→udeng-4 ##核心##@坚决→等 坚决→贿赂@等 root@ad→udeng ad→n@udeng null ##空白##i-2 nulli-2 ##核心##i-1 rooti-1 坚决i0 adi0 惩治i1 vi1 贪污i2 vi2 贿赂j-2 nj-2 等j-1 udengj-1 经济j0 nj0 犯罪j1 vnj1 ##空白##j2 nullj2 坚决→经济 ad→n 坚决→经济-5 ad→n-5 ##核心##@坚决→经济 坚决→等@经济 root@ad→n ad→udeng@n null ##空白##i-2 nulli-2 ##核心##i-1 rooti-1 坚决i0 adi0 惩治i1 vi1 贪污i2 vi2 等j-2 udengj-2 经济j-1 nj-1 犯罪j0 vnj0 ##空白##j1 nullj1 ##空白##j2 nullj2 坚决→犯罪 ad→vn 坚决→犯罪-6 ad→vn-6 ##核心##@坚决→犯罪 坚决→经济@犯罪 root@ad→vn ad→n@vn null ##核心##i-2 rooti-2 坚决i-1 adi-1 惩治i0 vi0 贪污i1 vi1 贿赂i2 ni2 ##空白##j-2 nullj-2 ##空白##j-1 nullj-1 ##核心##j0 rootj0 坚决j1 adj1 惩治j2 vj2 惩治→##核心## v→root 惩治→##核心##2 v→root2 坚决@惩治→##核心## 惩治→##空白##@##核心## ad@v→root v→null@root 核心成分 ##核心##i-2 rooti-2 坚决i-1 adi-1 惩治i0 vi0 贪污i1 vi1 贿赂i2 ni2 ##空白##j-2 nullj-2 ##核心##j-1 rootj-1 坚决j0 adj0 惩治j1 vj1 贪污j2 vj2 惩治→坚决 v→ad 惩治→坚决1 v→ad1 坚决@惩治→坚决 惩治→##核心##@坚决 ad@v→ad v→root@ad null ##核心##i-2 rooti-2 坚决i-1 adi-1 惩治i0 vi0 贪污i1 vi1 贿赂i2 ni2 坚决j-2 adj-2 惩治j-1 vj-1 贪污j0 vj0 贿赂j1 nj1 等j2 udengj2 惩治→贪污 v→v 惩治→贪污-1 v→v-1 坚决@惩治→贪污 惩治→惩治@贪污 ad@v→v v→v@v null ##核心##i-2 rooti-2 坚决i-1 adi-1 惩治i0 vi0 贪污i1 vi1 贿赂i2 ni2 惩治j-2 vj-2 贪污j-1 vj-1 贿赂j0 nj0 等j1 udengj1 经济j2 nj2 惩治→贿赂 v→n 惩治→贿赂-2 v→n-2 坚决@惩治→贿赂 惩治→贪污@贿赂 ad@v→n v→v@n null ##核心##i-2 rooti-2 坚决i-1 adi-1 惩治i0 vi0 贪污i1 vi1 贿赂i2 ni2 贪污j-2 vj-2 贿赂j-1 nj-1 等j0 udengj0 经济j1 nj1 犯罪j2 vnj2 惩治→等 v→udeng 惩治→等-3 v→udeng-3 坚决@惩治→等 惩治→贿赂@等 ad@v→udeng v→n@udeng null ##核心##i-2 rooti-2 坚决i-1 adi-1 惩治i0 vi0 贪污i1 vi1 贿赂i2 ni2 贿赂j-2 nj-2 等j-1 udengj-1 经济j0 nj0 犯罪j1 vnj1 ##空白##j2 nullj2 惩治→经济 v→n 惩治→经济-4 v→n-4 坚决@惩治→经济 惩治→等@经济 ad@v→n v→udeng@n null ##核心##i-2 rooti-2 坚决i-1 adi-1 惩治i0 vi0 贪污i1 vi1 贿赂i2 ni2 等j-2 udengj-2 经济j-1 nj-1 犯罪j0 vnj0 ##空白##j1 nullj1 ##空白##j2 nullj2 惩治→犯罪 v→vn 惩治→犯罪-5 v→vn-5 坚决@惩治→犯罪 惩治→经济@犯罪 ad@v→vn v→n@vn null 坚决i-2 adi-2 惩治i-1 vi-1 贪污i0 vi0 贿赂i1 ni1 等i2 udengi2 ##空白##j-2 nullj-2 ##空白##j-1 nullj-1 ##核心##j0 rootj0 坚决j1 adj1 惩治j2 vj2 贪污→##核心## v→root 贪污→##核心##3 v→root3 惩治@贪污→##核心## 贪污→##空白##@##核心## v@v→root v→null@root null 坚决i-2 adi-2 惩治i-1 vi-1 贪污i0 vi0 贿赂i1 ni1 等i2 udengi2 ##空白##j-2 nullj-2 ##核心##j-1 rootj-1 坚决j0 adj0 惩治j1 vj1 贪污j2 vj2 贪污→坚决 v→ad 贪污→坚决2 v→ad2 惩治@贪污→坚决 贪污→##核心##@坚决 v@v→ad v→root@ad null 坚决i-2 adi-2 惩治i-1 vi-1 贪污i0 vi0 贿赂i1 ni1 等i2 udengi2 ##核心##j-2 rootj-2 坚决j-1 adj-1 惩治j0 vj0 贪污j1 vj1 贿赂j2 nj2 贪污→惩治 v→v 贪污→惩治1 v→v1 惩治@贪污→惩治 贪污→坚决@惩治 v@v→v v→ad@v null 坚决i-2 adi-2 惩治i-1 vi-1 贪污i0 vi0 贿赂i1 ni1 等i2 udengi2 惩治j-2 vj-2 贪污j-1 vj-1 贿赂j0 nj0 等j1 udengj1 经济j2 nj2 贪污→贿赂 v→n 贪污→贿赂-1 v→n-1 惩治@贪污→贿赂 贪污→贪污@贿赂 v@v→n v→v@n null 坚决i-2 adi-2 惩治i-1 vi-1 贪污i0 vi0 贿赂i1 ni1 等i2 udengi2 贪污j-2 vj-2 贿赂j-1 nj-1 等j0 udengj0 经济j1 nj1 犯罪j2 vnj2 贪污→等 v→udeng 贪污→等-2 v→udeng-2 惩治@贪污→等 贪污→贿赂@等 v@v→udeng v→n@udeng null 坚决i-2 adi-2 惩治i-1 vi-1 贪污i0 vi0 贿赂i1 ni1 等i2 udengi2 贿赂j-2 nj-2 等j-1 udengj-1 经济j0 nj0 犯罪j1 vnj1 ##空白##j2 nullj2 贪污→经济 v→n 贪污→经济-3 v→n-3 惩治@贪污→经济 贪污→等@经济 v@v→n v→udeng@n null 坚决i-2 adi-2 惩治i-1 vi-1 贪污i0 vi0 贿赂i1 ni1 等i2 udengi2 等j-2 udengj-2 经济j-1 nj-1 犯罪j0 vnj0 ##空白##j1 nullj1 ##空白##j2 nullj2 贪污→犯罪 v→vn 贪污→犯罪-4 v→vn-4 惩治@贪污→犯罪 贪污→经济@犯罪 v@v→vn v→n@vn 限定 惩治i-2 vi-2 贪污i-1 vi-1 贿赂i0 ni0 等i1 udengi1 经济i2 ni2 ##空白##j-2 nullj-2 ##空白##j-1 nullj-1 ##核心##j0 rootj0 坚决j1 adj1 惩治j2 vj2 贿赂→##核心## n→root 贿赂→##核心##4 n→root4 贪污@贿赂→##核心## 贿赂→##空白##@##核心## v@n→root n→null@root null 惩治i-2 vi-2 贪污i-1 vi-1 贿赂i0 ni0 等i1 udengi1 经济i2 ni2 ##空白##j-2 nullj-2 ##核心##j-1 rootj-1 坚决j0 adj0 惩治j1 vj1 贪污j2 vj2 贿赂→坚决 n→ad 贿赂→坚决3 n→ad3 贪污@贿赂→坚决 贿赂→##核心##@坚决 v@n→ad n→root@ad null 惩治i-2 vi-2 贪污i-1 vi-1 贿赂i0 ni0 等i1 udengi1 经济i2 ni2 ##核心##j-2 rootj-2 坚决j-1 adj-1 惩治j0 vj0 贪污j1 vj1 贿赂j2 nj2 贿赂→惩治 n→v 贿赂→惩治2 n→v2 贪污@贿赂→惩治 贿赂→坚决@惩治 v@n→v n→ad@v null 惩治i-2 vi-2 贪污i-1 vi-1 贿赂i0 ni0 等i1 udengi1 经济i2 ni2 坚决j-2 adj-2 惩治j-1 vj-1 贪污j0 vj0 贿赂j1 nj1 等j2 udengj2 贿赂→贪污 n→v 贿赂→贪污1 n→v1 贪污@贿赂→贪污 贿赂→惩治@贪污 v@n→v n→v@v 连接依存 惩治i-2 vi-2 贪污i-1 vi-1 贿赂i0 ni0 等i1 udengi1 经济i2 ni2 贪污j-2 vj-2 贿赂j-1 nj-1 等j0 udengj0 经济j1 nj1 犯罪j2 vnj2 贿赂→等 n→udeng 贿赂→等-1 n→udeng-1 贪污@贿赂→等 贿赂→贿赂@等 v@n→udeng n→n@udeng null 惩治i-2 vi-2 贪污i-1 vi-1 贿赂i0 ni0 等i1 udengi1 经济i2 ni2 贿赂j-2 nj-2 等j-1 udengj-1 经济j0 nj0 犯罪j1 vnj1 ##空白##j2 nullj2 贿赂→经济 n→n 贿赂→经济-2 n→n-2 贪污@贿赂→经济 贿赂→等@经济 v@n→n n→udeng@n null 惩治i-2 vi-2 贪污i-1 vi-1 贿赂i0 ni0 等i1 udengi1 经济i2 ni2 等j-2 udengj-2 经济j-1 nj-1 犯罪j0 vnj0 ##空白##j1 nullj1 ##空白##j2 nullj2 贿赂→犯罪 n→vn 贿赂→犯罪-3 n→vn-3 贪污@贿赂→犯罪 贿赂→经济@犯罪 v@n→vn n→n@vn null 贪污i-2 vi-2 贿赂i-1 ni-1 等i0 udengi0 经济i1 ni1 犯罪i2 vni2 ##空白##j-2 nullj-2 ##空白##j-1 nullj-1 ##核心##j0 rootj0 坚决j1 adj1 惩治j2 vj2 等→##核心## udeng→root 等→##核心##5 udeng→root5 贿赂@等→##核心## 等→##空白##@##核心## n@udeng→root udeng→null@root null 贪污i-2 vi-2 贿赂i-1 ni-1 等i0 udengi0 经济i1 ni1 犯罪i2 vni2 ##空白##j-2 nullj-2 ##核心##j-1 rootj-1 坚决j0 adj0 惩治j1 vj1 贪污j2 vj2 等→坚决 udeng→ad 等→坚决4 udeng→ad4 贿赂@等→坚决 等→##核心##@坚决 n@udeng→ad udeng→root@ad null 贪污i-2 vi-2 贿赂i-1 ni-1 等i0 udengi0 经济i1 ni1 犯罪i2 vni2 ##核心##j-2 rootj-2 坚决j-1 adj-1 惩治j0 vj0 贪污j1 vj1 贿赂j2 nj2 等→惩治 udeng→v 等→惩治3 udeng→v3 贿赂@等→惩治 等→坚决@惩治 n@udeng→v udeng→ad@v null 贪污i-2 vi-2 贿赂i-1 ni-1 等i0 udengi0 经济i1 ni1 犯罪i2 vni2 坚决j-2 adj-2 惩治j-1 vj-1 贪污j0 vj0 贿赂j1 nj1 等j2 udengj2 等→贪污 udeng→v 等→贪污2 udeng→v2 贿赂@等→贪污 等→惩治@贪污 n@udeng→v udeng→v@v 连接依存 贪污i-2 vi-2 贿赂i-1 ni-1 等i0 udengi0 经济i1 ni1 犯罪i2 vni2 惩治j-2 vj-2 贪污j-1 vj-1 贿赂j0 nj0 等j1 udengj1 经济j2 nj2 等→贿赂 udeng→n 等→贿赂1 udeng→n1 贿赂@等→贿赂 等→贪污@贿赂 n@udeng→n udeng→v@n null 贪污i-2 vi-2 贿赂i-1 ni-1 等i0 udengi0 经济i1 ni1 犯罪i2 vni2 贿赂j-2 nj-2 等j-1 udengj-1 经济j0 nj0 犯罪j1 vnj1 ##空白##j2 nullj2 等→经济 udeng→n 等→经济-1 udeng→n-1 贿赂@等→经济 等→等@经济 n@udeng→n udeng→udeng@n null 贪污i-2 vi-2 贿赂i-1 ni-1 等i0 udengi0 经济i1 ni1 犯罪i2 vni2 等j-2 udengj-2 经济j-1 nj-1 犯罪j0 vnj0 ##空白##j1 nullj1 ##空白##j2 nullj2 等→犯罪 udeng→vn 等→犯罪-2 udeng→vn-2 贿赂@等→犯罪 等→经济@犯罪 n@udeng→vn udeng→n@vn null 贿赂i-2 ni-2 等i-1 udengi-1 经济i0 ni0 犯罪i1 vni1 ##空白##i2 nulli2 ##空白##j-2 nullj-2 ##空白##j-1 nullj-1 ##核心##j0 rootj0 坚决j1 adj1 惩治j2 vj2 经济→##核心## n→root 经济→##核心##6 n→root6 等@经济→##核心## 经济→##空白##@##核心## udeng@n→root n→null@root null 贿赂i-2 ni-2 等i-1 udengi-1 经济i0 ni0 犯罪i1 vni1 ##空白##i2 nulli2 ##空白##j-2 nullj-2 ##核心##j-1 rootj-1 坚决j0 adj0 惩治j1 vj1 贪污j2 vj2 经济→坚决 n→ad 经济→坚决5 n→ad5 等@经济→坚决 经济→##核心##@坚决 udeng@n→ad n→root@ad null 贿赂i-2 ni-2 等i-1 udengi-1 经济i0 ni0 犯罪i1 vni1 ##空白##i2 nulli2 ##核心##j-2 rootj-2 坚决j-1 adj-1 惩治j0 vj0 贪污j1 vj1 贿赂j2 nj2 经济→惩治 n→v 经济→惩治4 n→v4 等@经济→惩治 经济→坚决@惩治 udeng@n→v n→ad@v null 贿赂i-2 ni-2 等i-1 udengi-1 经济i0 ni0 犯罪i1 vni1 ##空白##i2 nulli2 坚决j-2 adj-2 惩治j-1 vj-1 贪污j0 vj0 贿赂j1 nj1 等j2 udengj2 经济→贪污 n→v 经济→贪污3 n→v3 等@经济→贪污 经济→惩治@贪污 udeng@n→v n→v@v null 贿赂i-2 ni-2 等i-1 udengi-1 经济i0 ni0 犯罪i1 vni1 ##空白##i2 nulli2 惩治j-2 vj-2 贪污j-1 vj-1 贿赂j0 nj0 等j1 udengj1 经济j2 nj2 经济→贿赂 n→n 经济→贿赂2 n→n2 等@经济→贿赂 经济→贪污@贿赂 udeng@n→n n→v@n null 贿赂i-2 ni-2 等i-1 udengi-1 经济i0 ni0 犯罪i1 vni1 ##空白##i2 nulli2 贪污j-2 vj-2 贿赂j-1 nj-1 等j0 udengj0 经济j1 nj1 犯罪j2 vnj2 经济→等 n→udeng 经济→等1 n→udeng1 等@经济→等 经济→贿赂@等 udeng@n→udeng n→n@udeng null 贿赂i-2 ni-2 等i-1 udengi-1 经济i0 ni0 犯罪i1 vni1 ##空白##i2 nulli2 等j-2 udengj-2 经济j-1 nj-1 犯罪j0 vnj0 ##空白##j1 nullj1 ##空白##j2 nullj2 经济→犯罪 n→vn 经济→犯罪-1 n→vn-1 等@经济→犯罪 经济→经济@犯罪 udeng@n→vn n→n@vn 限定
开始训练
我没有使用《最大熵的Java实现》中实现的最大熵训练工具,也没有使用被人们普遍采用的,张乐的maxent包(我认为这个包不好用),而是使用了Apache的OpenNLP:
因为训练文件非常大,一共有481MB,所以预留足够的堆内存:
-Xms7g -Xmx7g -Xmn2g
然后泡一杯咖啡,观赏CPU和内存优雅的波动。
经过100次迭代,算法终止,控制台输出:
Indexing events using cutoff of 0 Computing event counts... done. 1861112 events Indexing... done. Sorting and merging events... done. Reduced 1861112 events to 1833862. Done indexing. Incorporating indexed data for training... done. Number of Event Tokens: 1833862 Number of Outcomes: 70 Number of Predicates: 4455069 ...done. Computing model parameters ... Performing 100 iterations. 1: ... loglikelihood=-7906925.47660146 0.9110778932165287 2: ... loglikelihood=-971858.577142937 0.9110778932165287 3: ... loglikelihood=-624919.4609670108 0.9110897141064052 4: ... loglikelihood=-462310.9670608526 0.9177013527396525 5: ... loglikelihood=-369281.459860001 0.9357534635207339 6: ... loglikelihood=-310247.897402181 0.9506155459746646 7: ... loglikelihood=-269854.155585957 0.9615031228641802 8: ... loglikelihood=-240539.3087439537 0.969453208619363 9: ... loglikelihood=-218235.31440539932 0.9752846685207553 10: ... loglikelihood=-200620.52389892808 0.9798077708380796 11: ... loglikelihood=-186296.82683019168 0.9832535602371055 12: ... loglikelihood=-174376.85525761746 0.9858057978240966 13: ... loglikelihood=-164270.2129251688 0.9877755879280774 14: ... loglikelihood=-155568.08840582886 0.9893681841823598 15: ... loglikelihood=-147977.98810126958 0.990592183597763 16: ... loglikelihood=-141284.9458857342 0.9915593473149386 17: ... loglikelihood=-135327.33809159094 0.9923336156018553 18: ... loglikelihood=-129981.19423319508 0.9929767794737769 19: ... loglikelihood=-125149.7233355148 0.9934705702827127 20: ... loglikelihood=-120756.16428692684 0.993888599933803 21: ... loglikelihood=-116738.79587554693 0.9942319430534003 22: ... loglikelihood=-113047.37622205028 0.9945129578445574 23: ... loglikelihood=-109640.55218258391 0.9947536741474989 24: ... loglikelihood=-106483.94337384604 0.9949782710551541 25: ... loglikelihood=-103548.70465068106 0.9951733157381178 26: ... loglikelihood=-100810.43325297734 0.9953328977514518 27: ... loglikelihood=-98248.32771636335 0.9954854946934951 28: ... loglikelihood=-95844.53309412279 0.9956246588061332 29: ... loglikelihood=-93583.62576668245 0.9957503900893659 30: ... loglikelihood=-91452.20406168769 0.9958761213725987 31: ... loglikelihood=-89438.5599694251 0.9959835840078405 32: ... loglikelihood=-87532.41365573417 0.9960824496322629 33: ... loglikelihood=-85724.69707287937 0.9961888376411522 34: ... loglikelihood=-84007.37630195482 0.9962855540128698 35: ... loglikelihood=-82373.30470432037 0.996376359939649 36: ... loglikelihood=-80816.10077070128 0.9964585688556089 37: ... loglikelihood=-79330.04591227672 0.9965499120955644 38: ... loglikelihood=-77909.99846227578 0.9966224493743525 39: ... loglikelihood=-76551.32093717014 0.9966949866531407 40: ... loglikelihood=-75249.81820741286 0.9967487179707616 41: ... loglikelihood=-74001.68469360287 0.9968078224201445 42: ... loglikelihood=-72803.45906938458 0.9968685388090561 43: ... loglikelihood=-71651.98523946866 0.9969297925111439 44: ... loglikelihood=-70544.37858954606 0.9969840611419409 45: ... loglikelihood=-69477.9966859846 0.997035643206857 46: ... loglikelihood=-68450.41374832438 0.9970882998981254 47: ... loglikelihood=-67459.39833407002 0.9971269864468124 48: ... loglikelihood=-66502.89376934124 0.9971640610559709 49: ... loglikelihood=-65579.00093537995 0.9972102699891248 50: ... loglikelihood=-64685.96308337934 0.9972489565378118 51: ... loglikelihood=-63822.15240134625 0.9972951654709657 52: ... loglikelihood=-62986.058099291404 0.997334389332829 53: ... loglikelihood=-62176.27581399071 0.9973666281234015 54: ... loglikelihood=-61391.49816405947 0.9974004788535027 55: ... loglikelihood=-60630.50631060893 0.9974316430177227 56: ... loglikelihood=-59892.16239919156 0.9974638818082953 57: ... loglikelihood=-59175.40277629493 0.9974928967198106 58: ... loglikelihood=-58479.23188818825 0.9975202996917971 59: ... loglikelihood=-57802.71678235576 0.997550926542841 60: ... loglikelihood=-57144.98214237416 0.9975783295148277 61: ... loglikelihood=-56505.20579602903 0.9976051951736381 62: ... loglikelihood=-55882.614644262365 0.9976336727719772 63: ... loglikelihood=-55276.48096502942 0.9976610757439638 64: ... loglikelihood=-54686.119051923764 0.9976793443919549 65: ... loglikelihood=-54110.88215229098 0.9976992249794746 66: ... loglikelihood=-53550.15967375364 0.9977201801933467 67: ... loglikelihood=-53003.374631728235 0.9977411354072189 68: ... loglikelihood=-52469.98131380689 0.9977642398737959 69: ... loglikelihood=-51949.46313945433 0.9977830458349631 70: ... loglikelihood=-51441.33069604661 0.9977997025434256 71: ... loglikelihood=-50945.1199343268 0.9978115234333023 72: ... loglikelihood=-50460.39050818265 0.9978319413339982 73: ... loglikelihood=-49986.72424529987 0.9978507472951654 74: ... loglikelihood=-49523.72373666303 0.9978690159431566 75: ... loglikelihood=-49071.01103417001 0.9978883592175001 76: ... loglikelihood=-48628.22644663535 0.9979039412996101 77: ... loglikelihood=-48195.027425595385 0.997921672634425 78: ... loglikelihood=-47771.08753300227 0.9979437024746496 79: ... loglikelihood=-47356.09548390075 0.9979565979908785 80: ... loglikelihood=-46949.754257641674 0.9979748666388697 81: ... loglikelihood=-46551.78027193582 0.9979856129023938 82: ... loglikelihood=-46161.90261458571 0.9979974337922705 83: ... loglikelihood=-45779.862328164156 0.9980114039348519 84: ... loglikelihood=-45405.41174337755 0.9980253740774333 85: ... loglikelihood=-45038.313857272304 0.9980393442200147 86: ... loglikelihood=-44678.34175273963 0.9980549263021248 87: ... loglikelihood=-44325.278056099254 0.9980662098788251 88: ... loglikelihood=-43978.91442990726 0.9980796427082304 89: ... loglikelihood=-43639.0510982312 0.9980903889717545 90: ... loglikelihood=-43305.496402030054 0.9981000606089263 91: ... loglikelihood=-42978.066382363024 0.9981108068724505 92: ... loglikelihood=-42656.58438944011 0.9981215531359746 93: ... loglikelihood=-42340.88071560524 0.9981371352180847 94: ... loglikelihood=-42030.79225052235 0.9981441202893754 95: ... loglikelihood=-41726.16215706383 0.998155941179252 96: ... loglikelihood=-41426.8395663762 0.9981677620691286 97: ... loglikelihood=-41132.67929083109 0.9981768963931241 98: ... loglikelihood=-40843.54155365343 0.9981892545961769 99: ... loglikelihood=-40559.29173403668 0.9981978516069963 100: ... loglikelihood=-40279.80012676684 0.9982059113046394
依存句法分析
用最大熵模型估计任意两个单词之间最可能的依存关系以及概率,将概率的值取对数取相反数作为边的花费,接下来使用最小生成树算法计算出一颗全局最小的生成树即可。
中文句法分析实践
hankcs每天都在写程序
System.out.println(MaxEntDependencyParser.compute("hankcs每天都在写程序"));
输出:
1 hankcs hankcs nrf nrf _ 5 施事 _ _ 2 每天 每天 r r _ 5 领有者 _ _ 3 都 都 d d _ 5 程度 _ _ 4 在 在 p p _ 5 介词依存 _ _ 5 写 写 v v _ 0 核心成分 _ _ 6 程序 程序 n n _ 5 内容 _ _
可视化:
System.out.println(MaxEntDependencyParser.compute("我目前在魔都某女校学习外语"));
输出:
1 我 我 rr rr _ 7 施事 _ _ 2 目前 目前 t t _ 7 时间 _ _ 3 在 在 p p _ 4 介词依存 _ _ 4 魔都 魔都 ns ns _ 6 限定 _ _ 5 某 某 rz rz _ 6 限定 _ _ 6 女校 女校 n n _ 7 施事 _ _ 7 学习 学习 v v _ 0 核心成分 _ _ 8 外语 外语 n n _ 7 内容 _ _
可视化:
System.out.println(MaxEntDependencyParser.compute("把市场经济奉行的等价交换原则引入党的生活和国家机关政务活动中"));
输出:
1 把 把 pba pba _ 6 介词依存 _ _ 2 市场经济 市场经济 n n _ 3 施事 _ _ 3 奉行 奉行 v v _ 6 内容 _ _ 4 的 的 ude1 ude1 _ 3 “的”字依存 _ _ 5 等价交换 等价交换 vl vl _ 6 限定 _ _ 6 原则 原则 n n _ 7 受事 _ _ 7 引入 引入 v v _ 0 核心成分 _ _ 8 党 党 n n _ 10 限定 _ _ 9 的 的 ude1 ude1 _ 8 “的”字依存 _ _ 10 生活 生活 vn vn _ 7 终处所 _ _ 11 和 和 cc cc _ 10 连接依存 _ _ 12 国家机关 国家机关 n n _ 14 限定 _ _ 13 政务 政务 n n _ 14 限定 _ _ 14 活动 活动 vn vn _ 10 连接依存 _ _ 15 中 中 f f _ 10 方位词依存 _ _
可视化:
其他的例子:
评测
直接将训练集的全部作为封闭测试集(这是一种很流氓的行径),测试结果为:
UA: 99.20% | LA: 99.01% | DA: 99.04% | sentences: 20000 | speed: 518.081 sent/s |
在开发集上进行测试,效果差很多:
UA: 65.98% | LA: 56.15% | DA: 53.33% | sentences: 2000 | speed: 417.8855 sent/s |
为何效果如此不令人满意,我认为:
1、跟特征的选取有关,特征太侧重词语了,语料库根本无法覆盖所有词语的搭配情况。
2、跟语料库有关,清华的依存句法树库一共有69种依存关系,造成辨识难度过大。
3、最大熵模型不是在线学习的模型,比如说,既然认定词语A是施事者,那么句子中必然有一个受事者,这种逻辑未能在最大熵里得到体现。
接下来应该试试CRF或者SVM。
你的hanlp里面的句法依存分析,没有用到最大熵的依存句法分析,你是不是写错啦?链接:http://hanlp.linrunsoft.com/doc/_build/html/dependency_parser.html
您好!“得出下列训练文件:”,那个文件怎么得到的啊?
您好,apache opennlp训练模型具体怎么操作啊?谢谢
Hi Hancks,
Your "基于最大熵的依存句法分析.pdf" link is broker –
{"code":"NoSuchBucket","message":"The specified bucket does not exist.","requestId":"5beea217-36ba-4919-9942-23ddcde3800c"}
楼主大神是女的?
楼主你好,你这个过程中好像没用到最大生成树模型啊?