赵走x博客
网站访问量:151900
首页
书籍
软件
工具
古诗词
搜索
登录
16、算法部分源码解析
15、系统总体流程与词典结构
14、中文分词
13、词汇与分词技术
12、三个平面中的语义研究
11、汉语的发展
10、字形的流变
9、六书及其他
8、文字符号的起源
7、整合语义角色标注模块
6、整合句法解析模块
5、整合命名实体识别模块
4、整合词性标注模块
3、整合中文分词模块
2、现代自然语言系统简介
1、中文语言的机器处理:历史回顾
2、现代自然语言系统简介
资源编号:75988
NLP汉语自然语言处理原理与实践
自然语言处理
热度:85
多年来,人们通过对大脑的研究发现,人类大脑控制语言的功能区有两个:一个是位于前脑的布罗卡区,另一个是位于后脑的威尔尼克区。布罗卡区主管语言的处理、话语的生成;威尔尼克区的主要功能是分辨语音、形成语义,它与语言的解析有密切的关系。而有关信息的搜索、推理和决策则由大脑的前额叶完成。
多年来,人们通过对大脑的研究发现,人类大脑控制语言的功能区有两个:一个是位于前脑的布罗卡区,另一个是位于后脑的威尔尼克区。布罗卡区主管语言的处理、话语的生成;威尔尼克区的主要功能是分辨语音、形成语义,它与语言的解析有密切的关系。而有关信息的搜索、推理和决策则由大脑的前额叶完成。直观上,一个自然语言处理系统也应包含最少三个模块:语言的解析、语义的理解及语言的生成,如图1.1所示。  图1.1 自然语言系统的整体逻辑 # 1、NLP流程与开源框架 近些年来,随着互联网的发展,计算机处理自然语言的需求变得愈来愈迫切,除比较悠久的机器翻译之外,自然语言处理在信息检索、信息抽取、数据挖掘、舆情分析、文本摘要、自动问答系统等方面都获得了很广泛的应用。自然语言系统在实际研究中,涉及的领域要广泛得多,系统结构也变得越来越复杂,但其根本都是围绕着这三个方面而展开的。 总体来讲,现代自然语言处理的主要任务已经跨越对词的研究,发展到了对句子研究,即句法、句义及句子生成的研究,已经能够比较好地解决句子层面的问题,但还未达到完全解决篇章层面的问题。目前,计算机处理自然语言系统尚不足以达到较为自由地进行人机交互的程度。 因此,有关自然语言,特别是语义方面的诸多问题仍未解决。在过去几十年的研究中,已经产生了许多专业技术,每一项都作用于语言理解的不同层面和不同任务。例如,这些技术包括完全句法分析、浅层句法分析、信息抽取、词义消歧、潜在语义分析、文本蕴含和指代消解。这些技术都不能完美或完全地译解出语言的本义。与程序语言不同,人类语言不具备严整的逻辑结构。由于语言的高度语境化和隐喻化的性质,人类自身对于特定语言表达的本义往往也会有不同的理解。 人们对于文本的理解,很大程度上受到主题、作者及时间等相关背景知识的影响——篇章的范畴。想一想这句话:“咬死了猎人的狗。”这是NLP中一个经典的歧义范例。究竟是“[[咬死了猎人]的狗]”还是“[咬死了][猎人的狗]”呢?如果不依赖于足够的语境知识,人们将很难给出结论。 再如,“人生的旅程”、“生命的终点”、“花一般的姑娘”、“花钱如流水”等都使用了隐喻手法,它们的共性是,句子的意义是不能从字面的意义直接得到的。 在语法解析层面,大规模高精度的中文分词、词性标注系统已经基本达到商用要求,但在句法解析方面还存在精度问题。 在语义解析层面,命名实体识别、语义块都已经获得了较高的精度。人工智能对知识库的研究历史悠久,已经形成一整套的知识库的架构和推理体系。实现句子到知识库的主要方法是语义角色标注系统,但在整句的理解层面,语义角色标注系统的精度严重依赖于句法解析系统,这使该系统离商用还有一段距离。 由于前两个层面的问题,语言生成的发展相对滞后,应用也不广泛,虽有商业化的应用,但是范围都非常狭窄,基本都集中在机器翻译领域。即使近些年,也未出现较有影响力的汉语语言生成的商业系统。因此,关于语言生成不作为本书主要讨论的内容。 然而,自然语言处理发展的短短几十年来,仍旧取得了很大的发展,一些系统成功地用于搜索引擎、文本挖掘(文本分类、文本聚类等)、舆情分析、推荐系统等领域。本节主要针对这些较为成熟的自然语言模块和系统提出了一个粗略的系统架构,并给出一些优秀的开源系统供大家研究学习。 图1.2所示为自然语言处理的一般架构。该图中,左侧是语法层面的模块,包括中文分词、词性标注及句法解析。大家对这部分应该比较熟悉。  图1.2 自然语言处理的一般架构 右侧则偏重于语义层面,命名实体识别主要用来识别语料中专有名词和未登录词的成词情况,如人名、地名、组织机构名称等,也包括一些特别的专名。该图中来自左侧的箭头表示命名实体识别受到中文分词和词性标注的影响。换句话说,准确的命名实体识别是以准确的分词和词性标注为前提的。 语义组块用来确定一个以上的词汇构成的短语结构,即短语级别的标注,主要识别名词性短语、动词性短语、介词短语等,以及其他类型的短语结构。本书的范畴也涉及小句结构。语义组块的自动识别来源于中文分词、词性标注和命名实体识别的共同信息,也就是说,语义组块的识别特征必须包含中文分词(命名实体识别)和词性标注两部分。 语义角色标注是以句子中的谓语动词为中心预测出句子中各个语法成分的语义特征,是句子解析的最后一个环节,也是句子级别语义研究的重要里程碑。语义组块、语义角色标注等分析结果,可以通过机器学习方法转换为知识库中的RDF形式,并直接用于自动问答系统。上述框架中,语义角色标注直接受到句法解析和语义组块的影响。从中文分词阶段到语义角色标注阶段大约经历了4~5个依次串连的模块。这导致语义角色标注的精度显著降低。基于上述架构的语义角色标注系统尚达不到商业应用的范畴。 为了使读者有一个直观的认识,在详细讲解NLP的各模块之前,首先简要介绍比较流行的几个开源的中文NLP系统。近些年,发布出来的NLP开源系统很多,其中,NLP全系列处理框架如表1.1所示。 表1.1 NLP全系列处理框架 | 名称 | 包含模块和下载地址 |开发语言 | | :------------: | :------------: | :------------: | | 哈工大的Ltp3.X | 中文分词、词性标注、未登录词识别、句法分析、语义角色标注 网址:https://github.com/HIT-SCIR/ltp/releases | C++ | |Stanford NLP | 中文分词、词性标注、未登录词识别、句法分析等 网址:http://nlp.stanford.edu/software/index.shtml | Java | | FudanNLP | 中文分词、句法分析等; 网址:https://code.google.com/p/fudannlp/ | Java | | HanLP | 中文分词、句法分析等各类算法; 网址:https://github.com/hankcs/HanLP | Java | | ... | ... | ...| 优秀的中文分词框架,如NLP分词框架,如表1.2所示。 表1.2 NLP分词框架 | 名称 | 包含模块和下载地址 | 开发语言 | | :------------: | :------------: | :------------: | | ICTCLAS分词系统 | 具有里程碑意义的中文分词系统; 网址:http://www.threedweb.cn/forum-2-1.html | C++ | | Ansj中文分词系统 | 中等规模的中文分词系统; 网址:https://github.com/NLPchina/ansj_seg | Java | | 结巴分词 | 小规模中文分词 网址:https://github.com/fxsjy/jieba | Python | | …… | …… | …… | 上述系统除提供源码之外,很多都提供网络的访问接口,有的是API;有的是Web页面;有的两者兼而有之。这里介绍两大著名的NLP系统的网络平台。 # 2、哈工大NLP平台及其演示环境 哈工大语言技术平台(Language Technology Platform, LTP)是哈工大社会计算与信息检索研究中心开发的一整套中文语言处理系统。语言技术平台提供包括中文分词、词性标注、命名实体识别、依存句法分析、语义角色标注等丰富、高效、精准的自然语言处理技术。经过哈工大社会计算与信息检索研究中心11年的持续研发和推广,LTP已经成为国内外最具影响力的中文处理基础平台,曾获CoNLL 2009七国语言句法语义分析评测总成绩第一名,中文信息学会钱伟长一等奖等重要成绩和荣誉。目前,LTP已经被500多家国内外研究机构和企业使用,多家大企业和科研机构付费使用。 2011年6月1日,为了与业界同行共同研究和开发中文信息处理核心技术,该中心正式将LTP开源。 哈工大语言云演示平台(见图1.3):http://ltp.ai/demo.html ,又称为哈工大“语言云”,是以哈工大社会计算与信息检索研究中心研发的“语言技术平台(LTP)”为基础,为用户提供高效、精准的中文自然语言处理云服务。使用“语言云”非常简单,只需根据API参数构造HTTP请求即可在线获得分析结果,而无须下载SDK、无须购买高性能的机器,同时支持跨平台、跨语言编程等。2014年11月,哈工大联合科大讯飞公司共同推出“哈工大—讯飞语言云”,为广大用户提供电信级稳定性和支持全国范围网络接入的语言云服务,有效支持包括中小企业在内的开发者的商业应用需要。 ``` 罗马尼亚的首都是布加勒斯特 ```  图1.3 哈工大语言云演示平台 该语言平台不仅能够提供基于中文分词、词性标注、命名实体识别、句法分析、语义角色标注的全套自然语言处理框架,而且可以通过可视化的图形输出,使用户一目了然。 # 3、Stanford NLP团队及其演示环境 斯坦福(Stanford)自然语言处理团队(网址:http://nlp.stanford.edu/ )是一个由斯坦福大学的教师、科研人员、博士后、程序员组成的团队。该团队致力于研究计算机理解人类语言的工作。从计算语言学的基础研究到人类语言的关键技术都是其工作范围,涵盖诸如句子的理解、机器翻译、概率解析和标注、生物医学信息抽取、语法归纳、词义消歧、自动问答及文本区域到3D场景的生成等。 斯坦福大学的NLP团队包括语言学系和计算机科学系,以及人工智能实验室的成员。斯坦福自然语言处理团队的一个显著特点,是能够有效地处理复杂而深刻的语言模型和数据分析,创造性地将NLP与概率和机器学习算法进行组合。其研究成果主要集中于多语种、跨语言的广泛而稳定的技术。这些技术包括指代消解系统、词性标注系统、高性能的概率句法解析器、生物命名实体识别系统和关于阿拉伯文、中文、德文的文本算法。 该团队提供的软件分发包均用Java编写而成。2014年10月至今的版本需要运行在Java8+上(2013年3月至2014年9月的版本需要Java1.6+;2005年至2013年2月的版本需要Java1.5+)。分发程序包包括一个命令行调用(.bat和.sh)、jar文件、Java API文档及源代码。任何用户都可从http://nlp.stanford.edu/software/index.shtml 处下载相关代码。一些相关团队,如NLTK扩展了Stanford NLP团队的工作,将其与Python进行绑定。 Stanford NLP开源项目涉及广泛的NLP应用,并在某些中文NLP应用中具有卓越的性能,一些主要的中文NLP应用如下。 * 1)斯坦福句法解析器 概率自然语言句法解析器包括PCFG(与概率的上下文无关的短语)和依存句法解析器,一个词汇的PCFG解析器,以及一个超快速的神经网络的依存句法解析器和深度学习重排序器。斯坦福还提供了一个在线句法分析器演示:http://nlp.stanford.edu:8080/parser/ ,以及神经网络的依存解析器文档和常见问题解答。 * 2)斯坦福命名实体识别器 该识别器基于条件随机场序列模型,用于英文、中文、德文、西班牙文的连同命名实体识别,以及一个在线NER演示。 * 3)斯坦福词性标注器 基于最大熵(CMM)算法,词性标注(POS)系统包括英语、阿拉伯语、汉语、法语、德语和西班牙语。 * 4)斯坦福分词器 斯坦福分词器是一个基于CRF算法的分词器,支持阿拉伯语和汉语。 除此之外,斯坦福还提供包括机器翻译、分类器和GUI等其他的一些应用。前文已经介绍过一些同样优秀的分词系统,从本节开始,简要介绍一下斯坦福的其他语言处理模块,以及与Python NLTK平台的整合。 同样,著名的斯坦福NLP团队也提供了一个全系列语言平台,网址为http://corenlp.run/ 。目前该平台仅支持英文。我们找到另一个支持中文的句法解析平台,Stanford NLP Parser演示平台:http://nlp.stanford.edu:8080/parser/index.jsp ,执行结果如图1.4所示。  图1.4 Stanford句法解析演示平台 该平台提供包括中文分词、词性标注、多种句法解析结果的综合语言处理平台。 # 4、NLTK开发环境 除这些比较好的开源应用系统之外,还需要建立一个统一的NLP的开发平台。作为一个整合平台,我们希望该平台具有如下特征。 ❑ 能够跨不同操作系统,即平台可至少运行于Windows和Linux发行版的操作系统中。对这两个主流的操作系统完全兼容。如果不加说明,本书中的代码均可运行于这两个操作系统中。 ❑ 可屏蔽各种计算机语言的差异性,即可以自由地整合基于Java、C++、Python语言等的大多数NLP系统,而无须将开源系统重构为某种单一的计算机语言。 ❑ 该平台需要预先包含绝大多数的NLP常用功能,即各类基于规则的或基于统计的词法、句法、语义等分析模块,有助于我们方便地调试各类语言系统,并得出相应的结果,以减少代码量。 ❑ 由于语言模型资源会占用较大内存,该平台应具备较小的系统内存开销。 这类开源平台有几家,考虑到资源占用的经济性,比较突出的是NLTK系统。NLTK是使用Python程序构建的自然语言数据工作的主要平台。它提供了易于使用的界面,以超过50种语料库和词汇资源,如Penn TreeBank(宾夕法尼亚大学树库—部分)、Penn PropBank(宾夕法尼亚大学谓词论元库—部分)、WordNet等,还有一套分类、分词、词干、标注、分析和语义推理的基本程序框架,并包装为工业强度的NLP库文本处理库,以及一个活跃的论坛。NLTK全面涉及计算语言学的各类技术,适合语言专家、工程师、学生、教育工作者、研究人员和行业用户使用,并受到一致好评。NLTK可用于Windows、Mac OS X和Linux。最重要的是,NLTK是一个免费、开源的社区驱动的项目。读者除了下载无须支付其他任何费用。 为全面讲解平台的使用,NLTK组织出版了有关语言库使用的书籍《Python自然语言处理》。该书的中文版已经发行,在各大书籍网站均有销售。受篇幅限制,本书较少提及语言处理的入门知识,有关入门知识可参考此书。 下面简要讲解如何安装NLTK系统。 1)操作系统 本教程使用的操作系统是Windows 10 64位(如果你使用的是32位操作系统,则应升级为64位的操作系统;如果你安装的是Windows 7或XP,则无须升级到Windows 10操作系统)或Linux CentOS 64位。 2)安装Python开发环境 3)安装常用的Python应用程序 Python开发环境建立完成之后,一般可在命令行下直接使用pip install ×××package语句下载常用的安装程序。这里向读者推荐一个python常用包下载网址,从这里读者可以找到一些常用的,但pip库中没有的python包,读者可以从http://www.lfd.uci.edu/~gohlke/pythonlibs/ 网址上下载对应的编译好的安装包。 (1)安装数学运算包。 ① python环境。 ``` pip install numpy ``` ② anaconda环境。 ``` conda install scipy ``` 这条指令会安装全部的mkl、numpy、scipy、scikit-learn等高性能数学计算软件包。 (2)安装MySQL数据库工具包(http://www.lfd.uci.edu/~gohlke/pythonlibs/ ):下载后使用pip +包路径安装。  (3)安装Tornado网络包。 ``` pip install Tornado ``` 除上述必要的安装包之外,读者也可根据自身的要求选择其他常用的软件包下载安装。 4)安装NLTK开发环境 (1)NLTK安装语言开发系统的基本安装指令。 ``` pip install nltk ``` (2)下载常用的一些语料库:NLTK安装之后,执行如下代码可下载相关的语料。 ``` import nltk nltk.download() ``` 系统会出现如图1.5和图1.6所示的界面:这个平台默认使用的都是英文语料库。  图1.5 NLTK Download语料库1  图1.6 NLTK Download语料库2 读者可根据出现的界面选择指定的语料或语料库,全部语料库下载解压后大小共2GB多。因此,就中文自然语言处理环境而言,没有必要安装所有的语料库,需要什么就安装什么。可根据研究方向的不同安装不同的资源。