基于 Stanford NLP software 的中文文本预处理

16人阅读 评论(0) 收藏 举报

基于 Stanford NLP software 的中文文本预处理

https://acepor.github.io/2015/12/22/Stanford-Cn/

本文已被cos.name转载:http://cos.name/2016/01/intro-to-chinese-nlp/
作为一个处理自然语言的团队,我们在日常工作中要用到不同的工具来预处理中文文本,比如Jieba和Stanford NLP software。出于准确性和效率的考虑,我们选择了Stanford NLP software, 所以本文将介绍基于Stanford NLP software的中文文本预处理流程。

中文文本处理简要介绍

与拉丁语系的文本不同,中文并不使用空格作为词语间的分隔符。比如当我们说‘We love coding.’,这句英文使用了两个空格来分割三个英文词汇;如果用中文做同样的表述, 就是‘我们爱写代码。’,其中不包含任何空格。因而,处理中文数据时,我们需要进行分词,而这恰恰时中文自然语言处理的一大难点。

下文将介绍中文文本预处理的几个主要步骤:

中文分词

标注词性

生成词向量

生成中文依存语法树

Stanford NLP software 简要介绍
Stanford NLP software 是一个较大的工具合集:包括 Stanford POS tagger 等组件,也有一个包含所有组件的合集 Stanford CoreNLP。各个组件是由不同的开发者开发的,所以每一个工具都有自己的语法。当我们研究这些组件的文档时,遇到了不少问题。下文记录这些问题和相对应的对策,以免重蹈覆辙。

Stanford NLP 小组提供了一个简明的FAQ – Stanford Parser FAQ和一份详细的Java文档 – Stanford JavaNLP API Documentation。在这两份文档中,有几点格外重要:

尽管PSFG分词器小且快,Factored分词器更适用于中文,所以我们推荐使用后者。

中文分词器默认使用GB18030编码 (Penn Chinese Treebank的默认编码)。

使用 -encoding 选项可以指定编码,比如 UTF-8,Big-5 或者 GB18030。

中文预处理的主要步骤。

1. 中文分词

诚如上面所言,分词是中文自然语言处理的一大难题。Stanford Word Segmenter 是专门用来处理这一问题的工具。FAQ请参见Stanford Segmenter FAQ。具体用法如下:

bash -x segment.sh ctb INPUT_FILE UTF-8 0

2. 中文词性标注

词性标注是中文处理的另一大难题。我们曾经使用过Jieba来解决这个问题,但效果不尽理想。Jieba是基于词典规则来标注词性的,所以任意一个词在Jieba里有且只有一个词性。如果一个词有一个以上的词性,那么它的标签就变成了一个集合。比如‘阅读’既可以表示动词,也可以理解为名词,Jieba就会把它标注成n,而不是根据具体语境来给出合适的v或n的标签。这样一来,标注的效果就大打折扣。幸好Stanford POS Tagger提供了一个根据语境标注词性的方法。具体用法如下:

java -mx3000m -cp “./*” edu.stanford.nlp.tagger.maxent.MaxentTagger -model models/chinese-distsim.tagger -textFile INPUT_FILE

3. 生成词向量

深度学习是目前机器学习领域中最热门的一个分支。而生成一个优质的词向量是利用深度学习处理NLP问题的一个先决条件。除了Google的Word2vec, Stanford NLP小组提供了另外一个选项 – GLOVE。

使用Glove也比较简单,下载并解压之后,只要对里面的demo.sh脚本进行相应修改,然后执行这个脚本即可。

CORPUS=text8 # 设置输入文件路径
VOCAB_FILE=vocab.txt # 设置输入词汇路径
COOCCURRENCE_FILE=cooccurrence.bin
COOCCURRENCE_SHUF_FILE=cooccurrence.shuf.bin
BUILDDIR=build
SAVE_FILE=vectors # 设置输入文件路径
VERBOSE=2
MEMORY=4.0 # 设置内存大小
VOCAB_MIN_COUNT=5 # 设置词汇的最小频率
VECTOR_SIZE=50 # 设置矩阵维度
MAX_ITER=15 # 设置迭代次数
WINDOW_SIZE=15 # 设置词向量的窗口大小
BINARY=2
NUM_THREADS=8
X_MAX=10

4. 生成中文依存语法树

文本处理有时需要比词性更丰富的信息,比如句法信息,Stanford NLP小组提供了两篇论文: The Stanford Parser: A statistical parser 和 Neural Network Dependency Parser,并在这两篇论文的基础上开发了两个工具,可惜效果都不太理想。前者的处理格式是正确的中文依存语法格式,但是速度极慢(差不多一秒一句);而后者虽然处理速度较快,但生成的格式和论文Discriminative reordering with Chinese grammatical relations features – acepor中的完全不一样。我们尝试了邮件联系论文作者和工具作者,并且在Stackoverflow上提问,但这个问题似乎无解。

尽管如此,我们还是把两个方案都记录在此:

java -cp “*:.” -Xmx4g edu.stanford.nlp.pipeline.StanfordCoreNLP -file INPUT_FILE -props StanfordCoreNLP-chinese.properties -outputFormat text -parse.originalDependencies

java -cp “./*” edu.stanford.nlp.parser.nndep.DependencyParser -props nndep.props -textFile INPUT_FILE -outFile OUTPUT_FILE

结论

预处理中文文本并非易事,Stanford NLP小组对此作出了极大的贡献。我们的工作因而受益良多,所以我们非常感谢他们的努力。当然我们也期待 Stanford NLP software 能更上一层楼。

Related Posts

查看评论

使用Stanford NLP software进行中文文本预处理

中文文本预处理的几个主要步骤有: 中文分词,词性标注,生成词向量,生成中文依存语法树。 Stanford NLP software是Stanford NLP小组提供的一个NLP处理工具集合,部分工具支...
  • sunfoot001
  • sunfoot001
  • 2016-02-24 20:18:44
  • 4802

NLP简介 & 文本预处理

自然语言处理简介,以及文本预处理的文本提取、分词以及去停用词
  • lo_single
  • lo_single
  • 2017-07-24 10:09:41
  • 2489

文本挖掘预处理的流程总结

最近一段时间做了不少文本挖掘的项目和研究,正好总结一下文本挖掘预处理的流程,希望是干货。...
  • lanxu_yy
  • lanxu_yy
  • 2014-06-07 01:11:40
  • 20222

基于stanford nlp(JAVA)实现关系抽取

Obama was born in Hawaii. He is our president. Xi Jinping delivers a report to the 19th Nationa...
  • sparkexpert
  • sparkexpert
  • 2017-12-19 15:21:54
  • 825

Stanford NLP Chinese(中文)的使用

Stanford NLP tools提供了处理中文的三个工具,分别是分词、Parser;具体参考: http://nlp.stanford.edu/software/parser-faq.shtml...
  • jdbc
  • jdbc
  • 2016-01-11 00:00:03
  • 12410

基于斯坦福CoreNLP的情感分析(文本分析)

什么是斯坦福CoreNLP? 斯坦福CoreNLP是一个Java自然语言分析库,它集成了所有的自然语言处理工具,包括词性的终端(POS)标注器,命名实体识别(NER),分析器,对指代消解系统,以...
  • hao707822882
  • hao707822882
  • 2014-08-27 16:30:41
  • 2979

自然语言处理-Stanford中文实体识别

自然语言处理 关于斯坦福自然语言处理NLP工具资料收集 斯坦福分词链接: https://nlp.stanford.edu/software/segmenter.shtml Chinese i...
  • yaoyaoyao2
  • yaoyaoyao2
  • 2017-05-12 14:07:14
  • 1767

采用Stanford Parser进行中文语法解析

Stanford Parser是由StanforsNLP Group开发的基于Java的开源NLP工具,支持中文的语法分析,当前最新的版本为3.3.0,下载地址为:http://nlp.stanfor...
  • yunzhongfeiniao
  • yunzhongfeiniao
  • 2013-11-21 19:26:14
  • 20151

使用Stanford NLP工具实现中文命名实体识别

一、     系统配置 Eclipseluna、 JDK 1.8+ 二、分词介绍 使用斯坦福大学的分词器,下载地址http://nlp.stanford.edu/software/segmenter....
  • sparkexpert
  • sparkexpert
  • 2015-10-29 21:27:18
  • 15736

Stanford CoreNLP API

生成annotations ConreNLP包的核心重要由两个类组成:Annotation和annotator。Annnotations是用来保存annotators结果的一种数据结构;Annota...
  • qq_34023608
  • qq_34023608
  • 2017-08-31 19:47:27
  • 180
    个人资料
    持之以恒
    等级:
    访问量: 20万+
    积分: 3206
    排名: 1万+
    博客专栏
    最新评论