自然语言处理相关工具调研
自然语言处理基础工具调研
一 词典
-
- HowNet
HowNet(知网情感词典)是董振东先生、董强先生父子毕三十年之功标注的大型语言知识库,主要面向中文(也包括英文)的词汇与概念。
该词典主要分为中文和英文两部分,共包含如下数据:
语言 |
中文 |
英文 |
正面评价词语 |
3730个 |
3594个 |
负面评价词语 |
3116个 |
3563个 |
正面情感词语 |
836个 |
769个 |
负面情感词语 |
1254个 |
1011个 |
程度级别词语 |
219个 |
170个 |
主张词语 |
38个 |
35个 |
合计 |
9193个个 |
9142个 |
-
- TSING
TSING(中文褒贬义词典)清华大学李军基于其他学者工作的基础上所整理。该词典共包含两个文件,一个为褒义一个为贬义。其中共包含褒义词5568个和贬义词4470个。
-
- NTUSD
NTUSD是台湾大学所整理的简体中文情感词典(NTUSD)。中文情感极性词典数据是基于文本情感二元划分方法的一个中文词语数据库。该词典共包含两个文件。它将11086个词语分为2810个积极属性词语和8276个消极属性词语。
1.4中文情感词汇本体库
中文情感词汇本体库是大连理工大学信息检索研究室在林鸿飞教授的指导下经过全体教研室成员的努力整理和标注的一个中文本体资源。该资源从不同角度描述一个中文词汇或者短语,包括词语词性种类、情感类别、情感强度及极性等信息。其情感分类体系是在国外比较有影响的Ekman的6大类情感分类体系的基础上构建的。在Ekman的基础上,词汇本体加入情感类别“好”对褒义情感进行了更细致的划分。最终词汇本体中的情感共分为7大类21小类。情感强度分为1,3,5,7,9五档。情感词汇本体中的词性种类一共分为7类,分别是名词(noun),动词(verb),形容词(adj),副词(adv),网络词语(nw),成语(idiom),介词短语(prep)。
构造该资源的宗旨是在情感计算领域,为中文文本情感分析和倾向性分析提供一个便捷可靠的辅助手段。中文情感词汇本体可以用于解决多类别情感分类的问题,同时也可以用于解决一般的倾向性分析的问题。
1.4.1 本体格式介绍
情感词汇本体中,一般的格式为。
表1 情感词汇本体格式举例
词语 |
词性种类 |
词义数 |
词义序号 |
情感分类 |
强度 |
极性 |
辅助情感分类 |
强度 |
极性 |
无所畏惧 |
idiom |
1 |
1 |
PH |
7 |
1 |
|
||
手头紧 |
idiom |
1 |
1 |
NE |
7 |
0 |
|
||
周到 |
adj |
1 |
1 |
PH |
5 |
1 |
|
||
言过其实 |
idiom |
1 |
1 |
NN |
5 |
2 |
|
|
|
其中,一个情感词可能对应多个情感,情感分类用于刻画情感词的主要情感分类,辅助情感为该情感词在具有主要情感分类的同时含有的其他情感分类。
1.4.2 情感分类及情感强度
情感分类按照论文《情感词汇本体的构造》所述,情感分为7大类21小类。
情感强度分为1,3,5,7,9五档,9表示强度最大,1为强度最小。
情感分类如表2所示:
表2 情感分类
编号 |
情感大类 |
情感类 |
例词 |
1 |
乐 |
快乐(PA) |
喜悦、欢喜、笑眯眯、欢天喜地 |
2 |
|
安心(PE) |
踏实、宽心、定心丸、问心无愧 |
3 |
好 |
尊敬(PD) |
恭敬、敬爱、毕恭毕敬、肃然起敬 |
4 |
|
赞扬(PH) |
英俊、优秀、通情达理、实事求是 |
5 |
|
相信(PG) |
信任、信赖、可靠、毋庸置疑 |
6 |
|
喜爱(PB) |
倾慕、宝贝、一见钟情、爱不释手
|
7 |
|
祝愿(PK) |
渴望、保佑、福寿绵长、万寿无疆 |
8 |
怒 |
愤怒(NA) |
气愤、恼火、大发雷霆、七窍生烟 |
9 |
哀 |
悲伤(NB) |
忧伤、悲苦、心如刀割、悲痛欲绝 |
10 |
|
失望(NJ) |
憾事、绝望、灰心丧气、心灰意冷 |
11 |
|
疚(NH) |
内疚、忏悔、过意不去、问心有愧 |
12 |
|
思(PF) |
思念、相思、牵肠挂肚、朝思暮想 |
13 |
惧 |
慌(NI) |
慌张、心慌、不知所措、手忙脚乱 |
14 |
|
恐惧(NC) |
胆怯、害怕、担惊受怕、胆颤心惊 |
15 |
|
羞(NG) |
害羞、害臊、面红耳赤、无地自容 |
16 |
恶 |
烦闷(NE) |
憋闷、烦躁、心烦意乱、自寻烦恼 |
17 |
|
憎恶(ND) |
反感、可耻、恨之入骨、深恶痛绝 |
18 |
|
贬责(NN) |
呆板、虚荣、杂乱无章、心狠手辣 |
19 |
|
妒忌(NK) |
眼红、吃醋、醋坛子、嫉贤妒能 |
20 |
|
怀疑(NL) |
多心、生疑、将信将疑、疑神疑鬼 |
21 |
惊 |
惊奇(PC) |
奇怪、奇迹、大吃一惊、瞠目结舌
|
1.4.3 词性种类
情感词汇本体中的词性种类一共分为7类,分别是名词(noun),动词(verb),形容词(adj),副词(adv),网络词语(nw),成语(idiom),介词短语(prep)。
1.4.4 极性标注
每个词在每一类情感下都对应了一个极性。其中,0代表中性,1代表褒义,2代表贬义,3代表兼有褒贬两性。
注:褒贬标注时,通过词本身和情感共同确定,所以有些情感在一些词中可能极性1,而其他的词中有可能极性为0。
1.4.5 存储格式及规模
中文情感本体以excel的格式进行存储,共含有情感词共计27466个,文件大小为1.22M。
1.5 Wordnet
WordNet是由Princeton 大学的心理学家,语言学家和计算机工程师联合设计的一种基于认知语言学的英语词典。它不是光把单词以字母顺序排列,而且按照单词的意义组成一个“单词的网络”。
它是一个覆盖范围宽广的英语词汇语义网。名词,动词,形容词和副词各自被组织成一个同义词的网络,每个同义词集合都代表一个基本的语义概念,并且这些集合之间也由各种关系连接。
WordNet包含描述概念含义,一义多词,一词多义,类别归属,近义,反义等问题。Wordnet目前主要针对英文处理,想要使用它处理中文就需要构建中文的wordnet,把现有的知识加入该结构,其实也不需要从零做起,比如 类别归属,同义,反义,通用的有“同义词词林”字典可供使用,在很多的专业领域,也有概念的类别及关系定义(如各种医学词典),只是格式有所不同。另外, 还可以通过翻译,使用英文的WordNet的一部分数据,翻译过程中的问题主要是词汇的多义性,不过有些专有名词,歧义不大。
1.5.1安装
NLTK是python的一个自然语言处理工具,其中提供了访问wordnet各种功能的函数。
Python3.x版本:wordnet是nltk(natural language toolkit)的一个组件,因此需要先下载nltk,先输入命令行指令“pip install nltk”,再启动python命令行窗口,输入指令“import nltk nltk.download('wordnet')”(分两行输入),即下载wordnet组件相关数据。
Pycharm:只需要加载“nltk”包即可使用。(在 pyCharm 中安装:打开 settings,搜索 Project Interpreter,在右边的窗口选择 + 号,点击后在搜索框搜索 nltk,点击安装即可。)
举例:获得“paper”的所有sense(语义),包括词语的各种变形的sense
代码:from nltk.corpus import wordnet as wn
syn=wn.synsets('paper')
print(syn)
结果:
[Synset('paper.n.01'), Synset('composition.n.08'), Synset('newspaper.n.01'), Synset('paper.n.04'), Synset('paper.n.05'), Synset('newspaper.n.02'), Synset('newspaper.n.03'), Synset('paper.v.01'), Synset('wallpaper.v.01')]
1.6同义词词林
《同义词词林》是梅家驹等人于1983年编纂而成,且之后没有更新,所以原书中的某些词语成为生僻词,而很多新词又没有加入。有鉴于此,哈尔滨工业大学信息检索实验室利用众多词语相关资源,并投入大量的人力和物力,完成了一部具有汉语大词表的《哈工大信息检索研究室同义词词林扩展版》。扩展版剔除了原版中的14,706个罕用词和非常用词,最终的词表包含77,343条词语。这本词典中不仅包括了一个词语的同义词,也包含了一定数量的同类词,即广义的相关词,可以参考表6.1中的词条示例。该版收录词语近7万条,全部按意义进行编排,是一部同义类词典。表6.2列出了扩展前后的《同义词词林》的主要特征。扩展后的《同义词词林》,含有比较丰富的语义信息。但是目前由于种种原因,《同义词词林》完整版并没有共享,而只是共享了其中的词典文件。期待着哈工大信息检索实验室能够在不久的将来能够将完整版进行共享,以满足研究和实际应用的需要。同时,《同义词词林》与WordNet的格式有若干相似之处,即都是用一个同义词集合来表示一个意思,所以可以引入WordNet中的各种语义度量方法。
表6.1 词典结构示例
Ae07 农民 牧民 渔民 |
农民 农夫 农人 农 庄稼人 庄稼汉 田父 泥腿子 农家 耕夫 老乡 小农 个体农民 佃农 佃户 上中农 富裕中农 菜农 棉农 茶农 烟农 蔗农 花农 药农 林农 雇农 贫农 下中农 中农 上中农 富农 自耕农 半自耕农 集体农民 人民公社社员 |
表6.2 《同义词词林》扩展前后比较
词典特征 |
扩展前 |
扩展后 |
词条总数 |
53895个 |
77343个 |
大类数 |
12个 |
12个 |
中类数 |
94个 |
97个 |
小类数 |
1428个 |
1400个 |
层次数 |
3层 |
5层 |
编码长度 |
4 |
8 |
1.6.1 词典中的编码
同义词词林按照树状的层次结构把所有收录的词条组织到一起,把词汇分成大、中、小三类,大类有12个,中类有97个,小类有1400个。每个小类里都有很多的词,这些词又根据词义的远近和相关性分成了若干个词群(段落)。每个段落中的词语又进一步分成了若干个行,同一行的词语要么词义相同,要么词义有很强的相关性。
《同义词词林》提供了5层编码,第1级用大写英文字母表示;第2级用小写英文字母表示;第3级用二位十进制整数表示;第4级用大写英文字母表示;第5级用二位十进制整数表示。例如:
Cb30A01= 这里 这边 此地 此间 此处
具体的标记参见表6.4
表6.4 哈工大扩展版编码规则表
编码位 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
符号举例 |
D |
a |
1 |
5 |
B |
0 |
2 |
= / # /@ |
符号性质 |
大类 |
中类 |
小类
|
词群 |
原子词群 |
|
||
级别 |
第一级 |
第二级 |
第三级 |
第四级 |
第五级 |
|
表中的编码位是按照从左到右的顺序排列。第八位的标记有3 种,分别是“=”、“#”、“@”, “=”代表“相等”、“同义”。末尾的“#”代表“不等”、“同类”,属于相关词语。末尾的“@”代表“自我封闭”、“独立”,它在词典中既没有同义词,也没有相关词。
二、分词工具
2.1 中文近义词工具包 Synonyms
作者是Hai Liang Wang 和胡小夕,近日在 GitHub 开放使用。它可用于如文本对齐、推荐算法、相似度计算、语义偏移、关键字提取、概念提取、自动摘要、搜索引擎等很多 NLP 任务。该工具包目前能搜索近义词和比较语句相似度等任务,且词汇量达到了 125,792。该中文近义词工具包采用的基本技术是 Word2vec
2.1.2安装
可以直接使用命令 pip install -U synonyms 完成。该工具包兼容 Python 2 和 Python 3,且目前的稳定版为 v2.0
Pycharm:只需要加载“synonyms”包即可使用。
2.1.3举例
求一个词语的近义词及其相似度
代码:import synonyms
sy=synonyms.display("天下") #近义词
print(sy)
结果:'天下'近义词:
1. 天下:1.0
2. 天子:0.7084106
3. 四海:0.6798824
4. 海内:0.6466051
5. 君子:0.6297351
6. 自是:0.62108904
7. 人人:0.6149366
8. 无不:0.6134539
9. 无以:0.61005515
10. 自为:0.60824853
3.1 NLPIR
NLPIR汉语分词系统 中科院张华平博士所打造。
主要功能包括中文分词;英文分词;词性标注;命名实体识别;新词识别;关键词提取;支持用户专业词典与微博分析。NLPIR系统支持多种编码、多种操作系统、多种开发语言与平台。
中英文混合分词功能:
自动对中文英文信息进行分词与词性标注功能,涵盖了中文分词、英文分词、词性标注、未登录词识别与用户词典等功能。
关键词提取功能:
采用交叉信息熵的算法自动计算关键词,包括新词与已知词。
新词识别与自适应分词功能:
从较长的文本内容中,基于信息交叉熵自动发现新特征语言,并自适应测试语料的语言概率分布模型,实现自适应分词。
用户专业词典功能:
可以单条导入用户词典,也可以批量导入用户词典。如可以定“举报信 敏感点”,其中举报信是用户词,敏感点是用户自定义的词性标记。
3.1.2 安装及问题
正常情况下Pycharm只需要加载“pynlpir”包就可使用。不过第一次运行相关程序时,多数情况下会遇到图3.1所示“许可证过期”错误。解决方法是在Terminal(终端)图3.2输入“pynlpir update”,再重新运行程序就不会报错了。如果还未成功,关闭电脑重启后,再重新建一个工程后重复上述操作。
图3.1
图3.2
3.1.3举例
测试一句话的中英文混合分词和关键词提取
代码如图3.3
图3.3
4.1 Jieba
jieba 是目前最好的 Python 中文分词组件,它主要有以下 3 种特性:
1)支持 3 种分词模式:精确模式、全模式、搜索引擎模式
2)支持繁体分词
3)支持自定义词典
精确模式:试图将语句最精确的切分,不存在冗余数据,适合做文本分析
全模式:将语句中所有可能是词的词语都切分出来,速度很快,但是存在冗余数据
搜索引擎模式:在精确模式的基础上,对长词再次进行切分.
4.1.2 安装
在 pyCharm 中安装:打开 settings,搜索 Project Interpreter,在右边的窗口选择 + 号,点击后在搜索框搜索 jieba,点击安装即可。
4.1.3 举例
使用 jieba 分词对一个文本进行分词,统计次数出现最多的词语,这里以笑傲江湖为例。
代码如下图4.1所示
图4.1
5.1 Hanlp
Hanlp是由一系列模型与算法组成的工具包,目标是普及自然语言处理在生产环境中的应用。HanLP具备功能完善、性能高效、架构清晰、语料时新、可自定义的特点;提供词法分析(中文分词、词性标注、命名实体识别)、句法分析、文本分类和情感分析等功能。现在已经被广泛用于Lucene、Solr、ElasticSearch、Hadoop、Android、Resin等平台,有大量开源作者开发各种插件与拓展,并且被包装或移植到Python、C#、R、JavaScript等语言上去。
对于中文自然语言处理来说,HanLP功能强大,可以完成很多复杂的任务,因此HanLP也是一个非常重要自然语言处理工具包。
5.1.2 安装
在 pyCharm 中安装:打开 settings,搜索 Project Interpreter,在右边的窗口选择 + 号,点击后在搜索框搜索 pyhanlp,因为hanlp是java开发的虽然有python的API但是还是需要java环境,所以需要安装JDK。这个分词工具我安装失败了,可能是Java环境没有配好。
5.1.3 举例
6.1 LTP(语言云)
哈工大的语言技术平台 (LTP)提供了中文分词、词性标注、命名实体识别、依存句法分析、语义角色标注等丰富、 高效、精准的自然语言处理技术
6.1.2 安装
直接在dos窗口下执行“pip install pyltp”,一般会失败,这里使用另一种方法,下载whl文件,我的python版本是3.6_64位,所以对应下载“pyltp-0.2.1-cp36-cp36m-win_amd64.whl”,下载好文件后,放入D盘,这时候,打开dos窗口,输入“D:”进入D盘,然后输入“pip install pyltp-0.2.1-cp36-cp36m-win_amd64.whl”,成功安装,如图6.1所示。然后再下载模型文件,pyltp-0.2.1对应ltp模型版本是3.4,模型文件存放地址:
(1)新建一个项目文件夹,比如:D:\MyLTP;
(2)将模型文件解压,将带版本号的模型文件改名字为ltp_data。文件夹放入项目文件夹;这将是我们以后加载模型的路径。 D:\MyLTP\ltp_data.下面说明模型文件所包含的内容:
1. 官方的下载模型文件,ltp_data并解压到任意位置(注意点:模型的路径最好不要有中文,不然模型加载不出),
2. 解压后得到一个大于1G的文件夹,确保此文件夹名称为ltp_data,位置任意,但在Python程序中一定要指明这个路径。
3. LTP提供的模型包括:(在ltp_data文件夹里面)
cws.model 分句模型,单文件
pos.model 词性标注模型,单文件
ner.model 命名实体识别模型,单文件
parser.model 依存句法分析模型,单文件
图6.1
6.1.3 举例
测试分词模型
三、词向量模型
word2vec是Google公司于2013年发布的一个开源词向量工具包。该项目的算法参考了Bengio在2003年设计的神经网络语言模型。由于此神经网络模型使用了两次非线性变换,网络参数很多,训练速度慢,因此不适合大语料。Mikolov团队对其做了简化,实现了word2vec词向量模型。它简单、高效,特别适合从大规模、超大规模的语料中获取高精度的词向量表示。因此,项目一经发布就引起了业界的广泛重视,并在多种NLP任务中获得了良好的效果,成为NLP在语义相似度计算中的重大突破。
word2vec就是将词表征为实数值向量的一种高效的算法模型,其利用深度学习的思想,可以通过训练,把对文本内容的处理简化为 K 维向量空间中的向量运算,而向量空间上的相似度可以用来表示文本语义上的相似。Word2vec输出的词向量可以被用来做很多 NLP 相关的工作,比如聚类、找同义词、词性分析等等。如果换个思路, 把词当做特征,那么Word2vec就可以把特征映射到 K 维向量空间,可以为文本数据寻求更加深层次的特征表示 。
目前常用的word2vec实现共有三个版本,最著名的是Google发布的用C语言编写的word2vec,第二个是基于python的Gensim框架。该框架不仅将word3vec与python做了整合,这使得word2vec的应用扩展到了Windows平台,而且Gensim还提供了基于LSA、LDA、HDP的主体框架。该框架希望涵盖词向量表达的所有算法系统。第三个版本是基于java的word2vec实现。该框架提供有助于读者学习的word2vec的源码。常用于小型语料的测试。
安装:
在 pyCharm 中安装:打开 settings,搜索 Project Interpreter,在右边的窗口选择 + 号,点击后在搜索框搜索 gensim,点击安装即可。
举例:
文本相似度分析
四、主题模型
LDA(Latent Dirichlet Allocation)是一种文档主题生成模型,也称为一个三层贝叶斯概率模型,包含词、主题和文档三层结构。所谓生成模型,就是说,我们认为一篇文章的每个词都是通过“以一定概率选择了某个主题,并从这个主题中以一定概率选择某个词语”这样一个过程得到。LDA是一种非监督机器学习技术,可以用来识别大规模文档集(document collection)或语料库(corpus)中潜藏的主题信息。它采用了词袋(bag of words)的方法,这种方法将每一篇文档视为一个词频向量,从而将文本信息转化为了易于建模的数字信息。但是词袋方法没有考虑词与词之间的顺序,这简化了问题的复杂性,同时也为模型的改进提供了契机。每一篇文档代表了一些主题所构成的一个概率分布,而每一个主题又代表了很多单词所构成的一个概率分布。
对于某一篇文章的生产过程是这样的:
1.确定主题和词汇的分布
2.确定文章和主题的分布
3.随机确定该文章的词汇个数NN
4.如果当前生成的词汇个数小于NN执行第5步,否则执行第6步
5.由文档和主题分布随机生成一个主题,通过该主题由主题和词汇分布随机生成一个词,继续执行第4步
6.文章生成结束
只要确定好两个分布(主题与词汇分布,文章与主题分布),然后随机生成文章各个主题比例,再根据各个主题随机生成词,词与词之间的顺序关系被彻底忽略了,这就是LDA文章的生成过程!主题其实就是一种词汇分布,这里并不涉及到词与词的顺序关系,所以LDA这种BOW(bag of words)的模型也是有它的简便和实用之处的。
安装:
在 pyCharm 中安装:打开 settings,搜索 Project Interpreter,在右边的窗口选择 + 号,点击后在搜索框搜索 lda,点击安装。另外与其他分词工具包如“jieba”,“numpy”结合起来使用。
举例:
分析一篇朱自清的散文《荷塘月色》的主题
主题词
五、关键词提取
TextRank 算法是一种用于文本的基于图的排序算法。其基本思想来源于谷歌的 PageRank算法, 通过把文本分割成若干组成单元(单词、句子)并建立图模型, 利用投票机制对文本中的重要成分进行排序, 仅利用单篇文档本身的信息即可实现关键词提取、文摘。和 LDA、HMM 等模型不同, TextRank不需要事先对多篇文档进行学习训练, 因其简洁有效而得到广泛应用。
安装:
因为textrank4zh模块是针对中文文本的TextRank算法的python算法实现,故在 python 中安装:“pip install textrank4zh,”与工具包如“jieba”,“numpy”结合起来使用。
举例:
对一则新闻进行关键词提取、关键短语提取和生成摘要