NNCRF之NNSegmentation, NNPostagging, NNNameEntity
这里主要介绍NNSegmentation
介绍:
NNSegmentation是一个基于LibN3L的利用神经网络来进行分词的工具。
他可以通过不同的模型(NN, RNN, GatedNN, LSTM and GRNN)) 以及不同的方法(Softmax, CRF Max-Margin, CRF Maximum Likelihood)组合来训练。
它还提供稀疏特征与模型相结合的能力。
SparseCRFMMLabeler仅仅考虑稀疏的特征 实现起来像CRF条件随机场模型
LSTMCRFMMLabeler 仅仅用neural embeddings作为输入并且利用CRF Maximum Likelihood来训练
SparseLSTMCRFMMLabeler支持sparse features和neural embeddings作为输入,并且利用CRF Maximum Likelihood来训练
首先去https://github.com/zhangmeishan
找到:NNSegmentation, NNPostagging, NNNameEntity下载
这里需要用到LibN3L mahadow OpenBLAS并且把它们与NNSegmentation, NNPostagging, NNNameEntity放在同一级的目录下

先阅读NNSegmention下的README.md
然后进入到example的文件夹里找到run.sh
我觉得老师在NNSegmention放的exaple特别好~
因为你只要读readme.txt和run.sh就都能懂了。而且连语料都放好了都在example下的pku目录里,言归正传
1.如何运行:
首先敲入cmake .
然后敲入make形成可执行文件(关于make与cmake的区别可以看这里:http://blog.sina.com.cn/s/blog_74a459380102uxlz.html)
然后进去到example目录下去 敲入:sh run.sh

2.查看输出结果、
这时候在pku.sample里生成我所选中的这三个文件,每一个文件记录着这三个模型分别在测试集和开发集上的表现。还有那三个文件夹,每个文件夹里会有pku.dev.featsOUTnodrop 和 pku.test.featsOUTnodrop,这里分别记录着在目前测试集和开发集最好的标记结果。


你也可以查看这里的内容。

最后可以看到类似于这样的结果:
Recall:P=43285/46549=0.92988, Accuracy:P=43285/46435=0.932163, Fmeasure:0.93102
召回率,精确率,以及F-measure也称F-score(我在zpar里提到过,大家也可以在这里看:http://baike.baidu.com/link?url=e0QzM2lTDGEXTzF3Y5KLlpo7h4U-5HLL8ukL-qPqSAiitXEyfJml_apQqSzxo6btsdIG6BZXfZuOO6b31Con_K)
3.特征模版Feature Template
举个例子:
`共同 创造 美好 的 新 世纪 —— 二○○一年 新年 贺词`, 抽取特征 "美"
`美 [T1]造美 [T2]创造美 [S]C-2=创 [S]C-1=造 [S]C0=美 [S]C1=好 [S]C2=的 [S]C-2C-1=创造 [S]C-1C0=造美 [S]C0C1=美好 [S]C1C2=好的 [S]C-1C1=造好 [S]C0C2=美的 [S]RC0C-2=0 [S]RC0C-1=0 [S]C-1C0C1=造美好 [S]TC-1=4 [S]TC-11==444 [S]TC-22==44444 b-seg`红色标记证明 :
“美“是“美“是“美好”的第一个词
- 当前特征的下标为0,前一个是-1,后一个是(+)1,(-2 ,2也是这样)
- C0代表当前的特征“美“,C1是前一个特征“造”
- Ci前面的[S]只是说明它是sparse的
- RC0C1是relationship C0 C1 相等就是1 不相等就是0 RCOC1 “美“和“造“当然不是一个特征了所以就是0
- T1代表当前特征和前一个特征连起来组成的特征
- T2代表当前特征和前两个连起来组成的特征
- [S]TC-1=4 [S]TC-11==444 [S]TC-22==44444这个又是什么意思呢?
- there are five types. 0: Punctuation, 1: Alphabet, 2:Date, 3: Number, 4: others
- 我认为是这样:
- TC-1是前一个特征的类型标记
- TC-11是前一个特征(-1),当前特征(0),后一个特征(1)的类型标记组合(所以是三个数444)
- TC-22也是这样44444 所以是5个数
- 我觉得这个例子并不是很好,因为都是others
- b-seg m-seg e-seg s-seg 分别是第一个字 中间的字 末尾的字 一个单独的字 (哈尔滨 的 天气: 哈b-seg 尔m-seg 滨e-seg 的s-seg 天b-seg 气e-seg)
可以再分析下,下面这个例子 一九九八年 新年 讲话
年 [T1]新年 [T2]年新年 [S]C-2=年 [S]C-1=新 [S]C0=年 [S]C1=讲 [S]C2=话 [S]C-2C-1=年新 [S]C-1C0=新年 [S]C0C1=年讲 [S]C1C2=讲话 [S]C-1C1=新讲 [S]C0C2=年话 [S]RC0C-2=1 [S]RC0C-1=0 [S]C-1C0C1=新年讲 [S]TC-1=4 [S]TC-11==424 [S]TC-22==24244 e-seg
红色标记证明 :年是“一九九八年”的最后一个词
以下是英文版的。。。
+ character unigram, Ci\_i ( -2=<i<=2 ).
+ character bigram, C\_{i-1}C\_i ( -2=<i<2 ), C-1C1, C0C2
+ whether two characters are equal, RC0C-2 and RC0C-1
+ character trigram, C-1C0C1
+ type(C0), there are five types. 0: Punctuation, 1: Alphabet, 2:Date, 3: Number, 4: others
+ type(C-1C0C1)
+ type(C-2C-1C0C1C2)For example, considering this sentence
`共同 创造 美好 的 新 世纪 —— 二○○一年 新年 贺词`, the extracted features for the fifth character "美" is
`美 [T1]造美 [T2]创造美 [S]C-2=创 [S]C-1=造 [S]C0=美 [S]C1=好 [S]C2=的 [S]C-2C-1=创造 [S]C-1C0=造美 [S]C0C1=美好 [S]C1C2=好的 [S]C-1C1=造好 [S]C0C2=美的 [S]RC0C-2=0 [S]RC0C-1=0 [S]C-1C0C1=造美好 [S]TC-1=4 [S]TC-11==444 [S]TC-22==44444 b-seg`
where
* 美 is the current character. You should use "-word" to specify the character unigram embeddings.
* [T1] and [T2]. Things started with "[T" are additional targets which need to be embedded. Here we use character bigram embeddings and character trigram embeddings. You should use "-tag" to specify these embeddings and use comma as a delimiter between embedding file paths.
For example, "-tag t2.vec,t3.vec".
* [S]. Things startd with [S] are sparse features.
* b-seg is the tag for current character. Tags must be augmented with '-seg' postfix to indicate this is a segmentation task but not a classification application.
后记:
感觉那些模型TNN, RNN, GatedNN, LSTM and GRNN,都也只是听说过,都不知道具体的是什么。。。。
要努力学这些基础知识啊~~~
NNCRF之NNSegmentation, NNPostagging, NNNameEntity的更多相关文章
- 我的nlp之路(1)
1/8日任务 基础篇: 如何使用远程连接从windows或者linux连到服务器进行操作(切换用户,传递文件) (严禁使用root账户) Linux基本bash命令 a) 查看文件大小, ...
- redis scan命令使用
以前的项目中有用到redis的keys命令来获取某些key,知道看了这篇文章 https://mp.weixin.qq.com/s/SGOyGGfA6GOzxwD5S91hLw.安全起见,这次打算 ...
随机推荐
- MYSQL中,CAST函数的使用规则
CAST函数语法规则是:Cast(字段名 as 转换的类型 ),其中类型可以为: CHAR[(N)] 字符型 DATE 日期型DATETIME 日期和时间型DECIMAL float型SIGNED i ...
- @JsonFormat与@DateTimeFormat注解的使用
背景:从数据库获取时间传到前端进行展示的时候,我们有时候可能无法得到一个满意的时间格式的时间日期,在数据库中显示的是正确的时间格式,获取出来却变成了很丑的时间戳,@JsonFormat注解很好的解决了 ...
- ambari关于ranger的一个大坑----端口永远是3306,需要手动修改
ambari关于ranger的一个大坑----端口永远是3306 这个坑是我在搭建ambari环境的时候发现的,我并没有找到原因,求助同事,然后一步步循着蛛丝马迹和试探,终于解决了,然而也揭露了amb ...
- 【zabbix】自定义监控项key值
说明: zabbix自带的默认模版里包括了很多监控项,有时候为了满足业务需求,需要根据自己的监控项目自定义监控项,这里介绍一种自定义监控项的方式. 1,首先编写自定义监控脚本,本文以监控httpd进程 ...
- HDU3074: Multiply game(线段树单点更新,区间查询)
题目: 传送门 题解:线段树模板题目. 对递归的题目始终理解不好,我的痛啊,在水的题目都要写很长时间. #include <iostream> #include <string.h& ...
- 细说PHP7
PHP7带来的新东西 1.类型的声明. 可以使用字符串(string), 整数 (int), 浮点数 (float), 以及布尔值 (bool),来声明函数的参数类型与函数返回值. declare(s ...
- (转)VS中的路径宏 vc++中OutDir、ProjectDir、SolutionDir各种路径说明
$(RemoteMachine) 设置为“调试”属性页上“远程计算机”属性的值.有关更多信息,请参见更改用于 C/C++ 调试配置的项目设置. $(References) 以分号分隔的引用列表被添 ...
- Check back what the kd 6 for more info
Representing a shout-to his fans in China, the What the KD 6 may be the product of NIKEiD's Player E ...
- SVN遇到的问题和解决方法(后期还会继续更新)
1,smartsvn客户端(version客户端类似),一些.a文件无法识别,也就无法提交到svn! 解决办法如下: 在smartsvn客户端下面view->Ignored Files 勾选上就 ...
- cocos2d-x 2.x.x 新建工程 android下的 org文件夹丢失
cocos2d-x 2.x.x 新建工程之后... 打开android项目..会发现src下没有org文件... 解决方法一: cocos2d-x-2.2.0\cocos2dx\platform\an ...