Gitlab centos 软件测试工程师 shell csv xaml security replace dns openssl vue基础教程 河南普通话报名 jquery each jq第一个子元素 ceb转换成pdf在线转换 pip环境变量配置 ab软启动器 pcie高速固态硬盘 jquery validate python3网络编程 python最大值 python基本语法 python链接mysql数据库 python语言编程入门 java数据 java文件重命名 java格式化字符串 java文件读写 linux远程 php入门例子 俄罗斯方块java代码 神龙kms 苹果滚动截屏 跳一跳脚本 ipad锁屏 华为线刷工具 英雄联盟体验服转换器 无法打开搜索页 网络适配器下载 怎么设置迅雷为默认下载器
当前位置: 首页 > 学习教程  > 编程学习

依存分析:基于序列标注的中文依存句法分析模型实现

2021/1/9 2:13:46 文章标签: 轴号标注规范

一、前言 1、中文依存句法分析 二、实战 1、数据源 数据采用清华大学语义依存网络语料作为训练集,同时在开发集上进行测试。 (1)语料预处理 原语料库如下: 1 坚决 坚决 a ad _ 2 方式 2 惩治 惩治 v v …

一、前言

1、中文依存句法分析

二、实战

1、数据源

数据采用清华大学语义依存网络语料作为训练集,同时在开发集上进行测试。

(1)语料预处理

原语料库如下:

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   受事  

格式说明:

1   ID  当前词在句子中的序号,1开始.
2   FORM    当前词语或标点  
3   LEMMA   当前词语(或标点)的原型或词干,在中文中,此列与FORM相同
4   CPOSTAG 当前词语的词性(粗粒度)
5   POSTAG  当前词语的词性(细粒度)
6   FEATS   句法特征,在本次评测中,此列未被使用,全部以下划线代替。
7   HEAD    当前词语的中心词
8   DEPREL  当前词语与中心词的依存关系

对于依存句法分析,本质上可以转换为分类问题,所以将依存句法作为序列标注任务进行解决也是可行的。鉴于依存关系类过多,直接作为分类标签会导致效果不理想,这里需要进行处理。
根据依存文法,决定两个词之间的依存关系主要有两个因素:方向和距离,因此可以将类别标签定义为以下形式:

[+|-]dPOS

其中,[+|-]表示中心词在句子中的相对坐标轴方向;POS代表中心词具有的词性类别;d表示距离中心词存在与中心词词性相同的词的数量,即距离。
处理后的格式如下:

坚决  a   ad  1_v
惩治  v   v   0_Root
贪污  v   v   1_v
贿赂  n   n   -1_v
等   u   udeng   -1_v
经济  n   n   1_v
犯罪  v   vn  -2_v

(2)特征选择

这里简单的进行3-gram的抽取,将词性与词语两两进行匹配:

 feature = {"w0": sentences[index][i][0],
            "p0": sentences[index][i][1],
            "w-1": sentences[index][i-1][0] if i != 0 else "BOS",
            "w+1": sentences[index][i+1][0] if i != len(sentences[index])-1 else "EOS",
            "p-1": sentences[index][i-1][1] if i != 0 else "un",
            "p+1": sentences[index][i+1][1] if i != len(sentences[index])-1 else "un"}
 feature["w-1:w0"] = feature["w-1"]+feature["w0"]
 feature["w0:w+1"] = feature["w0"]+feature["w+1"]
 feature["p-1:p0"] = feature["p-1"]+feature["p0"]
 feature["p0:p+1"] = feature["p0"]+feature["p+1"]
 feature["p-1:w0"] = feature["p-1"]+feature["w0"]
 feature["w0:p+1"] = feature["w0"]+feature["p+1"]

2、模型处理

模型方面采用条件随机场,这里不做详细说明,代码如下:

 algorithm = self.config.get('model', 'algorithm')
 c1 = float(self.config.get('model', 'c1'))
 c2 = float(self.config.get('model', 'c2'))
 max_iterations = int(self.config.get('model', 'max_iterations'))
 self.model = sklearn_crfsuite.CRF(algorithm=algorithm, c1=c1, c2=c2,
                                   max_iterations=max_iterations, all_possible_transitions=True)

模型参数如下:

[model]
algorithm = lbfgs
c1 = 0.1
c2 = 0.1
max_iterations = 100
model_path = depparser/data/{}.pkl

3、模型效果

在训练集2W条语料上训练,之后在开发集中进行测试:

avg / total      0.612     0.645     0.617      3753

从上面可以看到效果不太理想,分析大概存在以下原因:
1)3-gram的窗口太小,句法关系中的两个词如果存在窗口中,是可以被捕捉到,但是本例中取的窗口可能会遗漏很多关系
2)同样在模板特征的设计,这里除了窗口大小,还需要进行其他特征选取
3)语料库本身可能存在一定的错误
4)关于CRF中的标签合法性没有进行约束,维特比算法中模型所有存在的标签都是合法的,实际上本任务中,标签存在合法性的界定,即只能存在一个中心词以及标签的距离不能超过句子长度等等

4、参考

1、《基于序列标注的中文依存句法分析方法》 计峰 邱锡鹏

三、其他

具体源码可以在我github上找到:https://github.com/lpty/nlp_base


本文链接: http://www.dtmao.cc/news_show_1100379.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?