自然语言处理与计算语言学

978-7-115-54024-9
作者: 巴格夫·斯里尼瓦萨-德西坎(Bhargav Srinivasa-Desikan)
译者: 何炜
编辑: 傅道坤

图书目录:

详情

自然语言处理是一门融语言学、计算机科学、数学于一体的科学,研究人与计算机之间用自然语言进行有效通信的各种理论和方法。计算语言学是指通过建立形式化的数学模型来分析、处理自然语言,并在计算机上用程序来实现分析和处理的过程,旨在以机器来模拟人的部分或全部语言能力的目的。 《自然语言处理与计算语言学》作为一本借助于Python编程语言以及各种开源工具(如Gensim、spaCy等)来执行文本分析、自然语言处理和计算语言学算法的图书,从应用层面介绍了相关的理论知识和所涉及的技术。《自然语言处理与计算语言学》共分为15章,其内容涵盖了文本分析的定义、使用Python进行文本分析的技巧、spaCy语言模型、Gensim工具、词性标注及其应用、NER标注及其应用、依存分析、主题模型、高级主题建模、文本聚类和文本分类、查询词相似度计算和文本摘要、词嵌入、使用深度学习处理文本、使用Keras和spaCy进行深度学习、情感分析与聊天机器人的原理介绍等。 《自然语言处理与计算语言学》适合对自然语言处理的实现细节感兴趣的Python程序开发人员阅读。如果读者具备统计学的基本知识,对学习本书内容会大有裨益。

图书摘要

版权信息

书名:自然语言处理与计算语言学

ISBN:978-7-115-54024-9A20181627

本书由人民邮电出版社发行数字版。版权所有,侵权必究。

您购买的人民邮电出版社电子书仅供您个人使用,未经授权,不得以任何方式复制和传播本书内容。

我们愿意相信读者具有这样的良知和觉悟,与我们共同保护知识产权。

如果购买者有侵权行为,我们可能对该用户实施包括但不限于关闭该帐号等维权措施,并可能追究法律责任。

著    [法]巴格夫·斯里尼瓦萨-德西坎(Bhargav Srinivasa-Desikan)

译    何 炜

责任编辑 傅道坤

人民邮电出版社出版发行  北京市丰台区成寿寺路11号

邮编 100164  电子邮件 315@ptpress.com.cn

网址 http://www.ptpress.com.cn

读者服务热线:(010)81055410

反盗版热线:(010)81055315


Copyright © Packt Publishing 2018. First published in the English language under the title Natural Language Processing and Computational Linguistics.

All Rights Reserved.

本书由英国Packt Publishing公司授权人民邮电出版社出版。未经出版者书面许可,对本书的任何部分不得以任何方式或任何手段复制和传播。

版权所有,侵权必究。


自然语言处理是一门融语言学、计算机科学、数学于一体的科学,研究人与计算机之间用自然语言进行有效通信的各种理论和方法。计算语言学是指通过建立形式化的数学模型来分析、处理自然语言,并在计算机上用程序来实现分析和处理的过程,旨在以机器来模拟人的部分或全部语言能力的目的。

本书作为一本借助于Python编程语言以及各种开源工具(如Gensim、spaCy等)来执行文本分析、自然语言处理和计算语言学算法的图书,从应用层面介绍了相关的理论知识和所涉及的技术。本书共分为15章,其内容涵盖了文本分析的定义、使用Python进行文本分析的技巧、spaCy语言模型、Gensim工具、词性标注及其应用、NER标注及其应用、依存分析、主题模型、高级主题建模、文本聚类和文本分类、查询词相似度计算和文本摘要、词嵌入、使用深度学习处理文本、使用Keras和spaCy进行深度学习、情感分析与聊天机器人的原理介绍等。

本书适合对自然语言处理的实现细节感兴趣的Python程序开发人员阅读。如果读者具备统计学的基本知识,对学习本书内容会大有裨益。


Bhargav Srinivasa-Desikan 是就职于法国INRIA公司(位于里尔)的一名研究人员。作为MODAL(数据分析与机器建模)小组的一员,致力于度量学习、预测聚合和数据可视化等研究领域。同时,他也是Python开源社区的一名活跃贡献者,在2016年度Google的夏季编程赛上,他通过Gensim实现了动态主题模型。Bhargav是欧洲和亚洲PyCons和PyDatas的常客,并使用Python进行文本分析教学。他也是Python机器学习软件包pycobra的维护者,还在Machine Learning Research杂志上发表过相关文章。

“感谢来自Python社区的所有帮助,感谢他们为文本分析构建了如此令人难以置信的社区。还要感谢Lev Konstantinovskiy,是他带我进入了开源科学计算的世界。感谢Benjamin Guedj博士一直帮助我撰写技术文章和材料。感谢我的父母、兄弟和朋友在本书写作过程中给予我不断的支持。”


Brian Sacash是一名来自美国华盛顿的数据科学家兼Python开发人员,同时拥有辛辛那提大学的定量分析科学硕士学位和俄亥俄北方大学的物理学学士学位,他的研究方向是自然语言处理、机器学习、大数据和统计方法,曾帮助很多企业完成数据价值分析。

Reddy Anil Kumar是Imaginea Technologies公司的一名数据科学家,在数据科学领域有4年以上的工作经验,其中包括两年的自由职业经验。他在使用机器学习/深度学习、自然语言处理和大数据分析在各个领域实施人工智能解决方案方面经验丰富。业余时间,他喜欢参加数据科学竞赛,是一名Kaggle专家。


现在,使用Python和开源工具可以非常方便地进行文本分析,因此在这个文本大数据时代,每个开发人员都需要了解如何分析文本。

本书介绍了如何应用自然语言处理和计算语言学算法,对现有数据进行推理,并得到一些有趣的分析结果。这些算法基于目前主流的统计机器学习和人工智能技术,实现工具唾手可得,比如Python社区的Gensim和spaCy之类的工具。

本书从学习数据清洗开始,学习如何执行计算语言学算法,然后使用真实的语言和文本数据、使用Python来探索NLP和深度学习的更高级课题。我们还会学习使用开源工具来标记、解析和建模文本。读者将掌握优秀框架的实战知识,以及怎样为主题模型选择类似Gensim的工具,怎样通过Keras进行深度学习。

本书覆盖理论知识和实例,方便读者在自己遇到的场景中应用自然语言处理和计算语言学算法。我们将发现可用于执行NLP的Python工具的丰富的生态系统,带领读者进入现代文本分析的精彩世界。

希望读者对Python有一定的了解,如果没有也没关系,本书会介绍一些Python的基础知识。此外,了解基本的统计学方法也大有裨益。鉴于本书主要内容涉及自然语言处理,所以了解基本语言学的知识还是非常有帮助的。

第1章,什么是文本分析。当今技术的发展使得开发人员可以方便地从互联网获取海量的文本数据,利用强大、免费的开源工具来进行机器学习、计算语言学方面的研究。这个领域正在以前所未有的速度发展。本章将详细讨论什么是文本分析,以及学习和理解文本分析的动机。

第2章,Python文本分析技巧。第1章中提到,本书将把Python作为工具,因为它是一种易用且功能强大的编程语言。本章将介绍用于文本分析的Python基础知识。为什么Python基础知识很重要?虽然我们希望读者具备一定的Python和高中数学知识,但部分读者也许已经很久没有编写Python代码了。还有一部分Python开发人员的经验是基于Django之类的Web框架之上,这与文本分析和字符串处理所需要的技能有所不同。

第3章,spaCy语言模型。虽然第2章已经介绍了文本分析的概念,但没有具体讨论构建文本分析流程的任何技术细节。本章将介绍spaCy的语言模型。这将是文本分析的第一步,也是NLP流程中的第一个组件。此外,本章还将介绍spaCy开源库,以及如何使用spaCy来帮助开发人员完成文本分析任务,并讨论一些更强大的功能,如POS标记和NER。本章将用一个实例来说明如何使用spaCy快速有效地预处理数据。

第4章,Gensim:文本向量化、向量变换和n-grams的工具。虽然前面的章节已经带领读者处理过原始文本数据,但是任何机器学习或信息检索相关算法都不会把原始文本作为输入格式。所以本章将使用一种称为向量的数据结构来帮助算法模型理解文本,并选择Gensim和scikit-learn作为转换工具。在开始向量化文本的同时,还会引入预处理技术,比如bi-grams、tri-grams和n-grams。通过词频可以过滤掉文档中不常见的单词。

第5章,词性标注及其应用。第1章和第2章介绍了文本分析和Python,第3章和第4章帮助读者为更高级的文本分析设置代码。本章将讨论第一种高级NLP技术:词性标注(POS-tagging)。我们将研究什么是词性,如何识别单词的词性,以及怎样使用词性标签。

第6章,NER标注及其应用。上一章介绍了如何使用spaCy来完成词性标注。本章将探讨另一个有趣的用法:NER标注。本章将从语言和文本分析的角度来讨论什么是NER标注,并详细说明它的使用示例,以及如何用spaCy训练自己的NER标注。

第7章,依存分析。第5章和第6章中介绍了spaCy的NLP如何执行各种复杂的计算语言学算法,如POS标注和NER标注。不过,这并不是所有的spaCy包,本章将探讨依存分析的强大功能,以及如何在各种上下文和应用场景中使用它。在继续使用spaCY之前,我们将研究依存分析的理论基础,并训练一个依存分析模型。

第8章,主题模型。到目前为止,我们学习了一些计算语言学算法和spaCy方面的知识,并了解了如何使用这些计算语言学算法来标记数据,以及理解句子结构。虽然利用这些算法可以捕获文本的细节,但仍然缺乏对数据的全面了解。在每个语料库中,哪些词比其他词出现得更频繁?是否可以对数据进行分组或找到潜在主题?本章将尝试解答这些问题。

第9章,高级主题建模。在前一章中,我们见识了主题模型的威力,并理解和探索了数据的直观方式。本章将进一步探讨这些主题模型的实用性,以及如何创建一个更高效的主题模型,更好地封装可能出现在语料库中的主题。主题建模是理解语料库文档的一种方式,它为开发人员分析文档提供了更多的发挥空间。

第10章,文本聚类和文本分类。前一章介绍了主题模型,以及它组织和理解文档及其子结构的过程。本章将继续讨论新的文本机器学习算法,以及两个特定的任务—— 文本聚类和文本分类,探讨这两个算法的直观推理,以及如何使用流行的Python机器学习库scikit-learn来建模。

第11章,查询词相似度计算和文本摘要。一旦文本可以向量化,就可以计算文本文档之间的相似性或距离。这正是本章要介绍的内容。现在业界存在多种不同的向量表示技术,从标准的单词包表示、TF-IDF到文本文档的主题模型表示。本章还将介绍关于如何用Gensim实现文本摘要和关键词提取的知识。

第12章,Word2Vec、Doc2Vec和Gensim。前面的章节曾经多次讨论向量化这一课题——如何理解向量化,以及如何使用数学形式表示文本数据。我们所使用的所有机器学习方法的基础都依赖于这些向量表示。本章将更进一步,使用机器学习技术来生成单词的向量化表示,从而更好地封装单词的语义信息。这种技术俗称为词嵌入,Word2Vec和Doc2Vec是该技术的两种主流变体。

第13章,使用深度学习处理文本。到目前为止,我们已经探索了机器学习在各种上下文中的应用,比如主题建模、聚类、分类、文本摘要,甚至POS标注和NER标注都离不开机器学习。本章将介绍机器学习的前沿技术之一:深度学习。深度学习是机器学习的一个分支。该技术受生物结构的启发,通过神经网络来生成算法和结构。文本生成、文本分类和单词嵌入领域都是深度学习可结合的领域。本章将学习深度学习的基础知识,以及一个文本深度学习模型实现的例子。

第14章,使用Keras和spaCy进行深度学习。前一章介绍了文本的深度学习技术,并尝试使用神经网络生成文本。本章将更深入地研究文本的深度学习,特别是如何建立一个能够进行文本分类的Keras模型,以及如何将深度学习融入到spaCy的流程中。

第15章,情感分析与聊天机器人。到目前为止,我们已经掌握了开始文本分析项目所需的基本技能,可以尝试更为复杂的项目。其中,有两个文本分析场景在之前没有涉及,但其中的很多概念都很常见:情绪分析和聊天机器人。本章将作为一个导引,指导读者独立完成上述两个应用。本章不提供构建聊天机器人或情感分析的完整代码,而是把重点放在各种相关技术原理的介绍上。


本书由异步社区出品,社区(https://www.epubit.com/)为您提供相关资源和后续服务。

本书提供如下资源:

要获得以上配套资源,请在异步社区本书页面中单击,跳转到下载界面,按提示进行操作即可。注意:为保证购书读者的权益,该操作会给出相关提示,要求输入提取码进行验证。

如果您是教师,希望获得教学配套资源,请在社区本书页面中直接联系本书的责任编辑。

作者和编辑尽最大努力来确保书中内容的准确性,但难免会存在疏漏。欢迎您将发现的问题反馈给我们,帮助我们提升图书的质量。

当您发现错误时,请登录异步社区,按书名搜索,进入本书页面,单击“提交勘误”,输入勘误信息,单击“提交”按钮即可。本书的作者和编辑会对您提交的勘误进行审核,确认并接受后,您将获赠异步社区的100积分。积分可用于在异步社区兑换优惠券、样书或奖品。

我们的联系邮箱是contact@epubit.com.cn。

如果您对本书有任何疑问或建议,请您发邮件给我们,并请在邮件标题中注明本书书名,以便我们更高效地做出反馈。

如果您有兴趣出版图书、录制教学视频,或者参与图书翻译、技术审校等工作,可以发邮件给我们;有意出版图书的作者也可以到异步社区在线投稿(直接访问www.epubit.com/selfpublish/submission即可)。

如果您是学校、培训机构或企业,想批量购买本书或异步社区出版的其他图书,也可以发邮件给我们。

如果您在网上发现有针对异步社区出品图书的各种形式的盗版行为,包括对图书全部或部分内容的非授权传播,请您将怀疑有侵权行为的链接发邮件给我们。您的这一举动是对作者权益的保护,也是我们持续为您提供有价值的内容的动力之源。

“异步社区”是人民邮电出版社旗下IT专业图书社区,致力于出版精品IT技术图书和相关学习产品,为作译者提供优质出版服务。异步社区创办于2015年8月,提供大量精品IT技术图书和电子书,以及高品质技术文章和视频课程。更多详情请访问异步社区官网https://www.epubit.com。

“异步图书”是由异步社区编辑团队策划出版的精品IT专业图书的品牌,依托于人民邮电出版社近30年的计算机图书出版积累和专业编辑团队,相关图书在封面上印有异步图书的LOGO。异步图书的出版领域包括软件开发、大数据、AI、测试、前端、网络技术等。

异步社区

微信服务号


开发人员从来没有像今天这样方便地进行文本分析,可以很容易地获取数据,并使用功能强大且免费的开源工具来指导分析工作,研究机器学习算法。计算语言学和文本计算正在以前所未有的速度发展。

本章将详细讨论究竟什么是文本分析,学习和理解文本分析的动机。本章介绍的主题如下:

如果要列举出人类每天都在使用的一种媒介,那一定是文本。无论是晨报还是收到的短信,可能都是以文本的形式传递信息。

我们可以从更深远的角度去看文本分析。现今,谷歌等公司处理的文本数据量大到难以想象(谷歌每年1万多亿个查询,Twitter每天16亿个查询,WhatsApp每天30多亿条信息,如图1.1所示),文本的普遍性和纯粹性使得我们有充分的理由来认真研究一番。同时文本数据也具有巨大的商业价值,公司可以利用它来帮助分析客户和理解数据趋势。此外,它还可以用来为用户提供更个性化的体验,或者作为目标市场的信息源。例如,Facebook就重度依赖文本数据,本书将要介绍的算法之一就是由Facebook的AI研究团队开发的。

图1.1 2006-2020年数据增长率(其中2019年和2020年是预测数据)

文本分析是一种从文本中提取有用信息的技术,涉及多种技术流派,本书使用自然语言处理(NLP)、计算语言学(CL)和数值工具来实现文本信息的提取。其中,数值工具指的是机器学习算法或信息检索算法。下面将简要解释这些术语,因为这些名词将在本书中多次出现。

自然语言处理(NLP)指使用计算机处理自然语言。例如,从文本正文中删除某个出现过的单词,这是一个最简单的例子。

计算语言学(CL),顾名思义,是从计算的角度研究语言学的学科。即使用计算机和算法来执行语言学任务,例如文本的词性标注任务(如名词或动词)是通过算法,而不是人工来完成。

机器学习(ML)是一门使用统计算法来指导机器执行特定任务的学科。机器学习过程发生在数据上,常见的场景是基于先前观察到的数据来预测一个新的值。

信息检索(IR)是根据用户的查询进行查找或检索信息的工作。完成这项任务的算法被称为信息检索算法,本书将经常涉及这项技术。

文本分析本身历史悠久—— 它的第一个定义来自商业智能(BI)领域,H.P.Luhn曾于1958年10月在IBM Journal发表了一篇题为A Business Intelligence System的文章,其中描述了一个系统,它会完成以下工作:

“……利用数据处理机自动提取和自动编码文档,并为组织中的每个行动点创建兴趣画像。输入的文档和内部生成的文档都会被自动抽象,以单词为特征,并自动地发送到相应的操作点。”

讨论有关文档的话题比数字的话题更为有趣,商业智能的第一个发明创意来自文本的理解,而文档又是整个文本分析发展历程的见证。即使在商业文本分析领域之外,使用计算机来帮助理解文本和语言的设想早在人工智能思想诞生之初就出现了。1999年,John Hutchins在Retrospect and prospect in computer-based translation上发表了一篇关于文本分析的回顾文章,其中谈到美国军方早在20世纪50年代就开始进行机器翻译方面的研究,以便将俄语科学期刊翻译成英语版本。

制造智能机器的尝试也同样始自文本。1966年由Joseph Weizenbaum在麻省理工学院开发的ELIZA程序就是其中一种尝试。ELIZA程序并没有真正地理解语言,它的基本原理是通过匹配规则来尝试保持对话。这些都只是一些早期的文本分析试验,如今计算机(和人类)已经取得了长足的进步,人类已经制造出了令人难以置信的工具。

机器翻译(见图1.2)领域已经走过了漫长的发展道路,现在人们已经可以使用智能手机在不同语言之间进行高效的翻译,使用诸如谷歌提出的神经网络机器翻译等前沿技术,学术界和工业界之间的差距正在缩小,我们已经能够亲身体验自然语言处理技术的魔力。

这些进步也促进了演讲者演讲方式的进步,比如视频中的字幕。而苹果的Siri和亚马逊的Alexa等个人助理工具的成功研发也得益于这些出色的文本处理方法。会话结构的理解和信息提取是早期自然语言处理的关键问题,21世纪以来,这两方面的研究成果非常丰硕。

搜索引擎,如谷歌或必应的发展也得益于自然语言处理(NLP)和计算语言学(CL)的研究,以前所未有的方式影响着人类的生活。信息检索(IR)通过统计手段处理文本,完成分类、聚类和检索文档等工作。主题建模(见图1.3)等方法可以帮助识别大型、非结构化的文本正文中的关键主题。识别这些主题超越了搜索关键词的范畴,并帮助我们进一步理解文本的本质。如果不依靠计算机的力量,人类就无法对文本进行大规模的统计分析。我们将在本书后续内容中详细讨论主题建模。

图1.2 一个法—英神经网络机器翻译模型的例子

图1.3 主题建模等技术使用概率建模方法来从文本中识别关键主题,
本书后续内容将详细研究这一点

在体验手机上的最新计算能力之前,人类又往前迈进了一步,Python和自然语言处理的最新发展意味着我们现在可以自行开发具有复杂算法的系统了!

不仅是自然语言处理和文本分析技术本身的革新,这类技术还使得开发人员的使用成本大大降低。近几年出现的开源软件在性能上表现得丝毫不逊色于商业工具,后者的代表是微软的文本分析工具。

MATLAB则是另一个非常流行的科学计算商业工具。虽然在以前,这种商业工具比免费的开源软件更加强大,但是随着为开源库贡献代码的开发人员逐渐增多,以及来自工业界的基金对开源社区的支持,情况开始扭转。许多软件巨头已经开始将开源软件用于其内部系统开发,比如谷歌的TensorFlow和苹果的scikit-learn起初都是开源的Python机器学习库。

可以说,Python的生态系统提供的软件包数量之多,意味着它在文本分析领域领先于其他软件包,我们将集中精力进行研究。一个庞大而活跃的开源社区本身也独具魅力。

本书还将讨论现代自然语言处理和计算语言学技术,以及配套的开源工具。

技术和工具在自然语言处理和计算语言学中固然重要,但是没有数据就毫无意义。幸运的是,如果方法得当,我们就可以获得大量的数据。最简单的文本数据搜集方法是查找语料库。

标准的文本语料库往往数量庞大,且内容结构化。文本分析的第一步就是对语料库的收集。免费语料库有美国国家开放语料库和英国国家语料库。维基百科在其关于文本体的文章中列出了一个较为完整的名单,其中收录了各类文献中引用的文本语料库。这些语料库并不局限于英语语种,也包含欧洲和亚洲语系,全世界各地都在不断努力为世界上的主要语言创建语料库。各大学的研究实验室是获取语料库的另一个宝贵来源。最具代表性的英语语语料库之一布朗语料库(Brown)正是布朗大学建立的。

不同的语料库呈现的信息维度不同,这通常取决于语料库的主要目的。例如,机器翻译的语料库内容,往往是通过多语言描述语义相同的句子。还有的语料库主要用于标注(annotation)。在文本中进行标注的场景包括词性标注(Part-Of-Speech,POS)和命名实体识别(Named-Entity-Recognition,NER)。词性标注(POS)是指在句子中为每个单词打上词性标签(名词、动词、副词等),而命名实体识别(NER)的语料库包含用于识别所有实体的定义,如地点、人和时间。本书第5章和第6章会进一步介绍这两种技术。

还有基于使用目的的语料库分类,比如一些用于文本聚类(clustering)和文本分类(classification)任务的语料库。对这些语料库而言,标签(label)或类别(class)信息比标注信息更重要。它们被设计成通过提供带有人工标注的标签的文本来辅助机器学习工作,如文本聚类或文本分类。文本聚类是指将相似文本分组在一起的过程,文本分类则是判断文本属于哪个类别的过程,它们都是文本分析的重要环节。

除了直接下载数据集或从互联网上爬取数据外,还有一些其他的资源可以用来收集文本数据,比如文献本身。其中一个例子是宾夕法尼亚大学所做的研究,研究发现Alejandro Ribeiro、Santiago Segarra、Mark Eisen和Gabriel Egan可能都是莎士比亚作品的合著者。迄今为止,该问题都是文学史的一大悬疑,使许多研究者感到困惑。而通过识别写作风格可以解决这个问题。这是计算语言学中出现的一个新兴研究领域,被称为写作风格分析。

计算方法在人文学科中的大量使用,也导致了大学中“数字人文”实验室数量的增加,传统的研究方法要么用计算机科学来辅助,要么完全被其所取代,尤其是机器学习(及其延伸)和自然语言处理的介入。政治家的演讲稿,或者议会的会议纪要,是另一种常见的数据源。TheyWorkForYou是一个英国议会文档系统,它保留了议会的演讲稿,从事相关工作的研究者可以从其中下载到相关信息。

古腾堡计划(Project Gutenberg)可能是世界上最好的书籍下载资源库,它提供了超过50000本免费电子书和许多文学经典。虽然个人PDF和电子书是免费的,但是在使用之前,熟悉文本的法律许可也是很重要的。如果不备注文本的获取来源,那么从网上下载盗版的《哈利·波特》并发布基于它的文本分析结果很可能会涉及侵权。同样,分析个人短信文本不仅会惹恼相关用户,而且可能侵犯相关隐私法规。图1.4是一个文本数据集列表。

除了在互联网上直接下载结构化数据集之外,还有别的手段得到文本数据吗?当然有,还是通过互联网。互联网上存在海量的无标签文本数据,比如维基百科。维基百科上的所有内容解压缩后占用的存储空间大约为58GB(截至2018年4月)。这个量级足够我们进行充分的研究。还有一个不错的文本分析资源则是目前很流行的新闻聚合网站Reddit,它允许开发人员进行少量网页抓取操作。

使用Python语言开发网络爬虫是一个不错的选择,一些Python库(诸如BeautifulSoup、urllib和Scrapy)都是专门为爬虫开发而设计的。法律许可仍旧是不能忽视的问题,开发人员必须确保操作符合所爬取网站的条款和约束。有相当一部分网站不允许用户出于商业目的使用网站信息。

图1.4 一个文本数据集列表的例子—— 在这里可以找到对每个数据集的评价

对学术界而言,Twitter(见图1.5)正在迅速成为一个重要的语料库(“什么是Twitter,是一个社交网络还是一个新闻媒体?”的引用次数超过5000)。随着许多基于Twitter语料库所做的论文研究被发表出来,配套的下载和分析工具也涌现出来。Twitter提供了成熟的调用接口,其Python版的调用代码也非常简单,所有的一切都是为了使开发人员能够轻松上手。如今,很多国家的领导人、名人以及新闻机构都是Twitter的忠实用户,每天都有大量有趣的微博在Twitter发布。

开发人员可以从网上获取的文本还包括研究论文、医学报告、餐馆评论(说到这里,数据集立马出现在我的脑海中),以及众多社交媒体网站。这类数据集的主要使用者都是从事情感分析方面的研究者。情感分析(Sentiment Analysis)是指在文本中识别情感的任务。情感可以是最基本的分类,如积极或消极,但有时我们需要识别一些更复杂的情绪,比如分析一个句子里是否包含高兴、悲伤或愤怒的情绪。

很明显,如果我们仔细研究,很容易就能找到可以利用的数据。但是从互联网上下载的数据终究只是现实世界中的一小部分,还可以通过其他途径来获取信息吗?

我们每天发送和接收文本消息和电子邮件,也可以使用这些文本进行文本分析。绝大多数文本消息应用程序都提供了下载的接口。例如,WhatsApp会将媒体文件和文本信息都发送给用户。大多数邮件客户端都有相同的选项设置,并且这类数据的优点在于,它们具有良好的数据结构,方便用户在分析数据之前进行简单的数据清洗和预处理。

图1.5 Twitter作为语料库的一个示例,具有多个结构化的数据集。这些数据集都是从Twitter
挖掘出来的,用于不同的分析任务

在讨论数据时,开发人员经常会忽略一个问题,即文本中的噪声数据。例如,Twitter中包含许多表单和表情符号,在某些情况下,文本中掺杂的噪声数据会使一些简单的分析任务运行失败。所以,接下来本书将讨论文本分析中最重要的一个任务:预处理。

“garbage in,garbage out(GIGO)”是计算机科学界的一条格言,在机器学习领域中至关重要,尤其在处理文本数据时。“garbage in,garbage out”是指:如果数据格式(或者数据质量)不好,很可能会得不到预期的输出结果。

一般来讲,数据越多,预测效果也会越好,但在文本分析中并不总是这样,因为更多的数据可能会导致产生无意义的或者是不符合预期的结果。举一个直观的例子,在很多文章中,冠词a或者the会出现很多次,但是这类单词仅仅为语法服务,对分析文本信息而言毫无价值。

这种不能提供有用信息的词,被称为停用词,通常要求在执行文本分析之前从文本中删除。此外,删除文本正文中频率非常高的单词,以及只出现一两次的单词(这些单词很可能对文本分析也没有帮助)也是一种预处理方式。换句话说,是否保留停用词在很大程度上取决于任务性质。如果我们的任务是要复制人类的写作风格,停用词就会很重要,因为每个人在实际写作时都会大量使用停用词。文献Pastiche detection based on stopword rankings中就列举了一个在文本分析中需要保留停用词的例子。另一篇文献Exposing impersonators of a Romanian writer则是一项利用停用词频率差异来识别作者的研究报告。

我们来看另一个可能会涉及处理无用数据的案例。如果要在文本中找出最有影响力的单词或主题,而在结果中单词reading和read同时存在,那么是否需要区分这两个词?实际上把单词reading缩短为read并不会丢失任何信息。但是,在类似的情况下,将单词information和inform同时保留在文本中却是有意义的,因为在上下文中,这两个单词表示的是不同的意思。所以,需要采用合适的技术来归一化单词。词形还原(Lemmatizing)和词干提取(Stemming)是解决这一类问题的两种方法,也是自然语言处理中的两个核心概念。我们将在第3章详细探讨这两种技术。

文本在预处理过程中呈现的是一种单词集合的形式。由于机器本身并不理解单词本身或者单词之间的联结,所以可以用数字序号来代表文本中的每个单词。预处理之后的下一个重要步骤是将单词转换成数字,不管是词袋(bag-of-words,BOW)还是词频- 倒排文档频率(TF-IDF),都是计算每个文档或句子中单词数量的方法。更先进的表示单词的技术还包括Word2Vec和GloVe。

本书后续内容将更为详细地讨论预处理的细节,尤其是理解技术背后的原理。语言模型的输出质量永远与输入质量相关。

前面已经讨论了什么是文本分析,如何搜集数据,以及在进行文本分析之前要牢记的预处理法则。那么开发人员进行文本分析的原因有哪些?

首先,在这个大数据时代,我们没有理由不去深入了解各类数据的真正含义。事实上,除了大型的数据集,我们还可以从互联网上下载一些可访问的小型数据集:短信、电子邮件、诗集等。开发人员甚至可以对本书的内容做数据分析。因为文本数据便于保存,也具备可解释性和可理解性。相比枯燥、没有吸引力的数字而言,人类对文字更加青睐。

如今文本分析是一个蓬勃发展的技术领域。开发人员可以直接接触第一手用户数据:自己的聊天记录、童年时期最喜欢的书,或者是偶像的Twitter。这种个性化偏好赋予了人类巨大的分析动力,因为我们关心文本背后的含义,也希望从中得到某些有意义的分析结果。

自然语言处理技术还可以帮助大中小企业构建各种辅助工具。例如,网站上的聊天机器人变得越来越流行,不久的将来,也许每个人都可以轻松开发个性化的聊天机器人。这种进步很大程度上归因于深度学习的诞生,一种模仿人脑结构的算法。这类算法通常称为神经网络。深度学习的成果已经被推广到各类神经网络之中,如递归神经网络(Recurrent Neural Network,RNN)和卷积神经网络(Convolutional Neural Network,CNN)。虽然这类算法的数学原理较难理解,但许多高级接口的出现方便了开发人员迅速掌握这类算法。有了合适的数据集和开源软件,普通开发人员也有能力将这类算法集成到日常生活中,这项工作将不再是计算机科学研究人员或工程师的特权。

开源软件已逐渐成为业界标准,谷歌公司已经对外发布并维护TensorFlow,还有诸如scikit-learn之类的开源库也在被Apple和Spotify这样的公司使用,本书的后续内容中会重点介绍spaCy,知名的问答网站Quora就是它的用户之一。

缺少数据或工具这两个要素中的任意一个,文本分析任务都将无法完成。

本书全程使用编程语言Python进行代码示例,涉及的所有工具也都是免费的开源软件。“开放科学,开放源码”是贯穿全书的宗旨。在研究领域,开源代码意味着学术成果是可复制的,可供所有感兴趣的人使用。Python是一门学习成本低的编程语言,它是读者通往自然语言处理世界中的强大武器。

也许你会问,到底应该如何使用这些工具进行文本分析?这正是本书后面要讲的主要内容,希望读者在阅读本书后可以独立构建适合应用场景的自然语言处理模型。

本章主要介绍了文本分析的定义、应用场景,还有涉及的工具、开源库等。随着数据的搜集工作简单化和社交媒体的发展,开发人员可以持续不断地更新文本和标注数据集。

本书旨在引导读者了解如何处理个人数据,以及标准化数据集所需的工具和知识。后续章节将讨论访问和清理数据的方法,为预处理、文本组织和数据探索等任务的开展做好准备。文本分类和聚类是另外两类常见的文本处理任务,在说明如何对文本应用深度学习算法之前,本书将介绍相关知识。

下一章将介绍如何使用Python,以及为什么Python是最佳的编程语言,同时还将讨论一些Python的使用技巧来帮助我们进行文本分析。


相关图书

大语言模型:基础与前沿
大语言模型:基础与前沿
高级算法和数据结构
高级算法和数据结构
互联网大厂推荐算法实战
互联网大厂推荐算法实战
动手学自然语言处理
动手学自然语言处理
算法详解(卷4)——NP-Hard问题算法
算法详解(卷4)——NP-Hard问题算法
算法详解(卷3)——贪心算法和动态规划
算法详解(卷3)——贪心算法和动态规划

相关文章

相关课程