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