自然语言处理(Natural Language Processing,NLP)是计算机科学、人工智能和语言学的交叉学科,其范畴广泛,比如:语音合成、分词、词法分析、问答系统、机器翻译、情感分析等等。
对于开发者而言,至少掌握了一种自然语言,也至少掌握了一种计算机编程语言。自然语言是人与人之间用于相互分享信息的语言,比如在程序中的注释,都是以自然语言的方式说明相应代码的含义,以便于其他人理解;编程语言是我们用以告诉计算机应该做什么的“命令”,一般是通过编译器或解释器转化为“机器能理解”的“机器语言”。
在人与人之间通常信息交流中,不需要将自然语言“翻译”成“机器语言”,但是,在解决某些场景的任务时,如果要将计算机作为解决问题的工具,则需要让“机器”能理解“自然语言”。
例如:在对《红楼梦》这部名著研究上(称为“红学”),对于其前八十回和后四十回是否是同一个作者,在“红学”界曾经有争论。以胡适、俞平伯、周汝南等研究者为代表的一派认为前八十回为曹雪芹创作,后四十回是高鹗续写;而鲁迅、林语堂、王国维、白先勇等研究者则认为整部书是曹雪芹一人写就。可以说,文学家是用“文学方法”对《红楼梦》进行研究,得出上述论断的。如果让工程师来研究这个命题,一种简单的方法就是对《红楼梦》文本中的关键词进行聚类,如果前八十回和四十回的关键词汇所在的类别,有比较明显区分,那么就可以判断是两个作者(代码参考:https://nbviewer.org/github/yunshuipiao/sw-kaggle/blob/master/experimental/sidamingzhu/01.ipynb),从而为“作者是谁”的纠纷提供了科学证据。类似的工作还有判断戏剧《亨利八世》的作者(参考:https://arxiv.org/pdf/1911.05652.pdf),也是用“技术”作为工具,为结论提供证据。
在上述示例中,“计算机”是人研究著作中的自然语言的工具,须让“机器”读懂自然语言,这个过程就是自然语言处理(NLP)。
以文学作品为载体的自然语言,毕竟是少量的,更大量的自然语言以网页、社交媒体、电话、邮件、广播以及各种日常交谈等媒介和方式、途径传播,据 IBM 研究,2017年的时候,每天产生 2.5 艾字节(艾字节,即:Exabyte,缩写为 EB,是信息的计量单位,
)。显然,现如今应该比这个数字还大。而这些自然语言,多数是以非结构化的文本或语音形式存在,如何理解和处理这些海量的非结构化数据,是 NLP 的核心目标之一。例如针对特定问题的基于社交媒体的舆情分析,就是要通过对社交媒体上的大量文本和音、视频中的自然语言进行分析,从而得出或者帮助相关人员得出某些结论。
有很大可能,读者已经在使用日常生活中使用到了 NLP 技术,比如用翻译软件将一段中文翻译为英文,这背后就是 NLP 技术的支撑。在这里,我们可以用一种简单的方式,初步体验 NLP 技术。
在本地计算机上安装如下两个 Python 第三方模块。
PyAudio:这是一款适用于多种操作系统的音频 I/O 库,通过它能够在 Python 程序中播放和记录音频信息。
pip install pyaudio
brew install portaudio
pip install pyaudio
portaudio19-dev
,方法如下:
sudo apt-get update -y
sudo apt-get install -y portaudio19-dev
并且已经配置了 Python 3 开发环境,而后执行如下指令安装:
pip install pyaudio
也可以用下述指令直接安装,但不保证是最新版:
sudo apt install python3-pyaudio
SpeechRecognition:这是一款实现语音识别的库,支持多种引擎,提供了在线和离线两种模式。安装方法如下:
pip install SpeechRecognition
以上模块安装完毕,创建一个 Python 程序(此处命名为 speech.py
),该程序代码如下:
#coding:utf-8
import speech_recognition as sr
r = sr.Recognizer()
with sr.Microphone() as source:
print("Talk")
audio_text = r.listen(source)
print("Time over, thanks")
try:
print(f"Text: {r.recognize_google(audio_text)}")
except:
print("Sorry, I did not get that.")
执行此程序,并在出现提示语 Talk
的时候,对着计算机的话筒说一句简短的话(仅限于说英语,这是由所用模块决定的) ,比如我在测试中说的是 What's your name
,而后程序就会把我说的这句话(语音)转化为文本,并打印出来。
code % python speech.py
Talk
Time over, thanks
Text: what's your name
通过上述示例,初步体验到了 NLP 技术,特别是使用有关库和模块,自己也能完成有关技术的开发。诚然,自然语言处理所要解决的问题还很多,下面就具体介绍。
在实际的生活、生产等领域,NLP 能够完成的或者我们希望 NLP 完成的的任务有很多种,下面列出几项:
以上几项,并非 NLP 的全部任务。一个能够协助人完成日常任务的 NLP 系统,往往是多项任务的组合。比如通过语音向电商平台的智能客服询问:请给我推荐一本不错的深度学习的书。而后智能客服也用语音回复:《飞桨:深度学习入门与实战》是读者反应很好的一本书。这个问答中至少包含了“语音和文本的相互转换”、“语义和情感分析”、“智能问答”等任务。