这里主要介绍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的更多相关文章

  1. 我的nlp之路(1)

    1/8日任务 基础篇: 如何使用远程连接从windows或者linux连到服务器进行操作(切换用户,传递文件) (严禁使用root账户) Linux基本bash命令 a)        查看文件大小, ...

  2. redis scan命令使用

      以前的项目中有用到redis的keys命令来获取某些key,知道看了这篇文章 https://mp.weixin.qq.com/s/SGOyGGfA6GOzxwD5S91hLw.安全起见,这次打算 ...

随机推荐

  1. Linux下的内核抢占

    2017-03-03 很遗憾之前在介绍进程调度的文章中,虽然涉及到了内核抢占,但是却没有对其进行深入介绍,今天就稍微总结下内核抢占. 内核抢占在一定程度上减少了对某种事件的响应延迟,这也是内核抢占被引 ...

  2. Oracle 学习笔记 12 -- 序列、索引、同义词

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/Topyuluo/article/details/24232449 数据库的对象包含:表.视图.序列. ...

  3. OCR技术浅探 : 文字定位和文本切割(2)

    文字定位 经过前面的特征提取,我们已经较好地提取了图像的文本特征,下面进行文字定位. 主要过程分两步: 1.邻近搜索,目的是圈出单行文字: 2.文本切割,目的是将单行文本切割为单字. 邻近搜索 我们可 ...

  4. DB_FILE_MULTIBLOCK_READ_COUNT对物理读和IO次数的影响

    当执行SELECT语句时,如果在内存里找不到相应的数据,就会从磁盘读取进而缓存至LRU末端(冷端),这个过程就叫物理读.当相应数据已在内存,就会逻辑读. 物理读是磁盘读,逻辑读是内存读:内存读的速度远 ...

  5. 11g ASM新特性

    Oracle 11g的ASM有两个有意思的特性,我们看看他们能带给我们什么? 1.Fast mirror resync 原来当diskgroup中的盘发生故障时,Oracle会将这个盘标记为offli ...

  6. 20165324 《Java程序设计》 第六周

    学号 2016-2017-2 <Java程序设计>第六周学习总结 教材学习内容总结 第八章 常用实用类 String类 构造String对象:常量对象:String对象:引用String常 ...

  7. linux文件修改管理

    Linux文件系统的层次结构 Linux文件系统的树状结构 目录是什么 顶层根目录的表示 文件系统中的两个特殊目录 Linux系统中的一些重要的目录 bin目录 sbin目录 家目录 dev目录 et ...

  8. JDK环境变量配置目录jre,jvm

    类路径 :CLASSPATH= .;%JAVA_HOME%/lib/dt.jar;%JAVA_HOME%/lib/tools.jar   JDK的路径:JAVA_HOME = C:/Program F ...

  9. JPush相关概念

    JPush相关概念 连接极光服务器前提 在连接极光服务器之前需要先将APP进行注册,连接Server时需要用到下发的两个字段:AppKey:应用唯一标识.Master Secret:服务器秘钥,用于服 ...

  10. 移动端web开发 尽量哪些标签 常用标签及注意事项

    H5手机移动端WEB开发资源整合 常用的标签及注意事项: https://blog.csdn.net/u012118993/article/details/56023399 移动前端不得不了解的htm ...