自然语言理解(Natural Language Understanding,NLU)是一种建模语言的方法,使得计算机系统能够处理语言文本,从而支持多种应用程序的开发。
本书是一本关于NLU的实用指南。阅读完本书,开发人员将学会如何将NLU技术应用于各个领域,同时管理人员也将学会如何明确NLU在解决企业实际问题时的应用范围。
本书通过基本概念和实际示例的逐步阐释,首先带你了解什么是NLU以及如何应用NLU技术。然后,本书将探讨当下流行的NLU方法,并提供应用每种方法的最佳实践,包括最新的大语言模型(Large Language Model,LLM)。在此过程中,本书还会介绍最实用的Python NLU库。通过阅读本书,你将不仅掌握NLU的基础知识,还将学会众多实际问题的解决方案,如数据收集、系统评估、系统改进,以及NLU部署与应用。其中最重要的是,本书不仅介绍一系列NLU方法,还会介绍在未来的工作中会用到的互联网上丰富的NLU资源。
对于那些对学习NLU感兴趣或对应用自然语言处理(Natural Language Processing,NLP)方法来解决实际问题感兴趣的Python开发人员(包括计算语言学家、语言学家、数据科学家、NLP开发人员、AI会话开发者以及相关领域的学生)来说,阅读本书将获益颇多。对于那些不具备技术背景的项目经理来说,本书的前几章也颇有趣味性。
为了深入地理解本书,读者需要具备一定的Python基础知识,但不需要掌握与NLU相关的专业知识。
本书共15章,将带领读者全面而深入地理解NLU,首先介绍NLU的基本概念,然后逐步讲解NLU应用领域和NLU系统开发,最后探讨如何改进已经开发的系统。
第1章将阐释NLU的基本概念,以及NLU与语音识别等相关技术之间的区别。
第2章将系统地介绍NLU的应用领域,并简述每种应用程序的具体需求。此外,还将列举一些以当前技术水平难以实现的应用案例。
第3章将概述NLU的主要方法及其优缺点,包括基于规则的方法、基于统计的方法和基于深度学习的方法。此外,本章还将讨论当今流行的预训练模型,如BERT及其衍生模型。最后,本章将讨论如何组合不同的方法形成一个解决方案。
第4章关注自然语言处理前的准备工作。本章首先讨论JupyterLab和GitHub等通用工具,以及它们的安装和使用方法。然后介绍如何安装Python和众多用于NLU领域的Python库,包括NLTK、spaCy以及TensorFlow/Keras。
第5章将介绍如何辨别和收集用于NLU的数据。本章将讨论来自数据库、网络和文档的数据,以及数据的隐私性和伦理问题,还将简要介绍绿野仙踪技术(The Wizard of Oz technique)和其他通过模拟生成数据的方法。对于那些无法获得数据,或希望将自己的结果与其他研究人员的结果进行比较的读者,本章还将讨论易获得且广泛使用的语料库。此外,本章将进一步讨论文本数据预处理的基本操作,如词干提取和词形还原。
第6章将讨论用于获取数据整体情况的数据分析方法,包括获取词频、类别频率等数据汇总统计信息。本章还将讨论matplotlib等可视化工具,以及基于可视化和统计结果做出的各种类型的决策。
第7章将讨论在选择算法时需要考虑的各种因素,包括数据规模、训练资源以及计划的应用场合。本章还将讨论使用嵌入向量来表示语言,为定量处理自然语言做好准备。本章最后将介绍如何使用pipeline方法组合多种算法。
第8章将讨论如何将基于规则的方法用于具体的应用。本章将给出正则表达式、词形还原、句法分析、语义角色分配和本体知识等例子。本章主要使用NLTK库。
第9章将讨论如何将统计机器学习方法,如朴素贝叶斯、词频逆文档频率(Term Freguency-Inverse Document Freguency,TF-IDF)、支持向量机(Support Vector Machine,SVM)和条件随机场等,应用于文本分类、意图识别和实体提取等任务。本章将重点关注较新的方法,以及这些方法相比于传统方法的性能改进。
第10章将讨论基于神经网络[全连接神经网络,循环神经网络(Recurrent Neural Networle,RNN)和卷积神经网络(Convolutional Neural Network,CNN)]的机器学习方法在文本分类、信息提取等问题上的应用。本章将对这些方法的结果与第9章的方法进行比较。本章还将讨论神经网络中的超参数、学习率,以及迭代训练等相关概念。本章使用TensorFlow/Keras库。
第11章将介绍当前自然语言处理领域表现最出色的方法,即Transformer和预训练模型。本章将深入探讨Transformer背后的原理,并提供一个使用Transformer进行文本分类的例子。本章所有代码都基于TensorFlow/Keras Python库。
第12章将讨论无监督学习方法的应用,包括主题建模等内容,强调了无监督学习在探索数据和充分利用稀缺数据方面的价值。此外,本章还将讨论部分监督学习,如弱监督学习和远程监督学习。
第13章将讨论模型评价的相关问题,包括数据切分(将数据切分为训练数据集、验证数据集和测试数据集)、交叉验证、评估指标(如精度、召回率、曲线下面积、消融实验、统计显著性检测和用户测试等)。
第14章将讨论系统维护问题。如果原始模型性能不理想,或者现实情况发生了变化,那么应该如何调整模型?本章将讨论在确保新数据不会降低现有系统的性能的前提下,如何添加新数据以及如何改变应用程序的结构。
第15章将提供本书的概述和对未来发展方向的展望。本章将讨论系统可能存在改进的地方,从而使系统训练得更快、适用于更具挑战性的应用程序。此外,本章还会介绍NLU领域的研究方向和未来技术的发展趋势。
本书提供了Jupyter Notebook格式的代码示例。要运行这些Notebook,读者需要具备一定的Python编程基础,并熟悉一些基本的Python库。此外,还需要安装必要的软件包。
安装软件包的最简单方法是使用pip工具。pip是一个优秀的Python包管理工具。如果你尚未在计算机上安装pip,那么可以按照链接https://pypi.org/project/pip/提供的安装说明进行安装。
熟练掌握Python编程语言将有助于更好地理解本书中的关键概念。本书中的示例可以在CPU上运行,不需要使用GPU,尽管一些复杂的机器学习示例在GPU上运行的速度会更快。
本书的所有代码示例均在Windows 11(64位)操作系统上通过测试,确保其可行性。本书使用的软件/硬件和操作系统要求如下表所示。
你可以从GitHub网站(https://github.com/PacktPublishing/Natural-Language-Understanding-with-Python)下载本书的示例代码文件。如果本书的代码有更新,那么GitHub库中的代码也会有相应的更新。
我们还提供了一个PDF文件,包含本书使用的屏幕截图和图表的彩色图像。你可以从以下链接下载:https://packt.link/HrkNr。
本书使用了多种文本约定,以区分不同类型的信息。
文本代码:用于表示代码示例、数据库表名、文件夹名、文件名、文件扩展名、路径名、虚拟URL、用户输入以及Twitter句柄,例如“我们将使用ENCOAdjacency-DistributionModule对象建模邻接矩阵”。
以下是一段代码示例:
命令行输入或输出的写法如下:
加粗字体: 用于表示新术语、重要词汇或屏幕上显示的词汇。例如,菜单或对话框中的词以 粗体 显示。例如,从 管理面板 中选择 系统 信息。
在我的职业生涯中,大部分时间都专注于顾问工作。作为独立顾问,我享受到的一大好处是有机会与不同机构的各路精英一同合作。这种合作使我能够接触到多种多样的技术,这是我在一家或几家公司工作时难以获得的。
在此,我由衷感谢所有与我一同工作的同事。从我学生时代起,一直到我的整个职业生涯,我都与这些同事通力合作。感谢来自伊利诺伊大学、明尼苏达大学、宾夕法尼亚大学、Unisys公司、MossRehab、心理语言技术公司、自闭症语言治疗机构、Openstream、万维网联盟、万维网基金会、应用语音输入输出协会、今日信息、新互动、大学太空研究协会、美国宇航局阿姆斯研究中心、开放语音网络的同事们,鉴于人数众多,我无法一一列举。从他们身上,我学习到了许多宝贵的经验和知识。