自然言语处理背后的数据迷信

图灵汇官网

自然语言处理(NLP)是计算机科学和人工智能领域的重要分支。它旨在实现人机之间的高效沟通,不仅能理解人类的意图,还能构建合适的回应。人类间的交流复杂而微妙,我们经常发送或接收错误的信息,或者信息被误解。尽管如此,我们仍然认为自己能够有效地与同事和家人交流。我们通过多种方式传递信息,比如交谈和书写。

斯坦福大学的机器学习教授克里斯·曼宁曾这样描述交流:“一个综合的、符号化的、分类的信号系统。”这意味着我们的感官,如视觉、触觉、听觉和嗅觉,使我们能够交流。那么,当我们将计算机纳入考虑时,会发生什么呢?什么是自然语言处理?它是如何工作的?

自然语言处理(NLP)是一门旨在实现人机有效沟通的学科,它不仅能够理解人类的意图,还能构建合适的回应。这一领域自20世纪50年代起便已存在,其中著名的艾伦·图灵开发的“图灵测试”便是其重要组成部分。图灵测试评估计算机对人类书面任务的反馈能力。如果一个独立的人无法区分一个人和一台机器,那么该计算机系统就被视为具有智能。自20世纪50年代以来,我们已经取得了显著的进步,数据科学和语言学等领域也取得了巨大进展。接下来的部分将详细介绍这些算法在自然语言处理中的应用,并提供一些使用Python的代码示例。

标记化

自然语言处理的起点是文本解析。标记化是指将文本流(如句子)分解成最小的单元——单词。例如,对于句子“he red fox jumps over the moon”,每个单词都是一个标记,共有七个。

使用Python进行标记化:

python myText = 'The red fox jumps over the moon.' myLowerText = myText.lower() myTextList = myLowerText.split() print(myTextList)

输出: ['the', 'red', 'fox', 'jumps', 'over', 'the', 'moon']

词性标注

词性标注用于确定语法功能。在英语中,主要的词性类别包括形容词、代词、名词、动词、副词、介词、连词和感叹词。这有助于判断单词的功能。例如,“PERMIT”既可以是名词也可以是动词。动词用法:“I permit you to go to the dance.” 名词用法:“Did you get the permit from the county?”

使用Python进行词性标注(使用NLTK库):

python import nltk myText = nltk.word_tokenize('the red fox jumps over the moon.') print('Parts of Speech:', nltk.pos_tag(myText))

输出: Parts of Speech: [('the', 'DT'), ('red', 'JJ'), ('fox', 'NN'), ('jumps', 'NNS'), ('over', 'IN'), ('the', 'DT'), ('moon', 'NN'), ('.', '.')]

停用词移除

许多句子和段落中包含一些没有实际意义或价值的词汇,如“a”、“and”、“an”和“the”。去除停用词是指从句子或文本流中删除这些词汇。

使用Python和NLTK进行停用词移除:

```python from nltk.corpus import stopwords from nltk.tokenize import word_tokenize

examplesent = "a red fox is an animal that is able to jump over the moon." stopwords = set(stopwords.words('english')) wordtokens = wordtokenize(examplesent) filteredsentence = [w for w in wordtokens if not w in stopwords] print(filtered_sentence) ```

输出: ['red', 'fox', 'animal', 'able', 'jump', 'moon', '.']

词干提取

词干提取是一种减少词汇变化的过程,也称为词典归一化。它简化了词形变化。例如,“钓鱼”的词干是“鱼”。搜索引擎使用词干提取是因为它可以帮助用户搜索相关词汇。

使用Python和NLTK进行词干提取:

```python from nltk.stem import PorterStemmer from nltk.tokenize import word_tokenize

ps = PorterStemmer() words = ["likes", "likely", "likes", "liking"] for w in words: print(w, ":", ps.stem(w)) ```

输出: likes : like likely : like likes : like liking : like

词形还原

词形还原与词干提取非常相似,但词形还原会考虑到单词的词性。例如,“saw”这个词,词干提取可能会返回“saw”,而词形还原则可能返回“see”或“saw”。词形还原通常会返回一个可读的词。

使用Python进行词形还原与词干提取的对比:

```python from nltk.stem import PorterStemmer, WordNetLemmatizer

lemmatizer = WordNetLemmatizer() ps = PorterStemmer() words = ["corpora", "constructing", "better", "done", "worst", "pony"]

for w in words: print(w, "STEMMING:", ps.stem(w), "LEMMATIZATION:", lemmatizer.lemmatize(w, pos='v')) ```

输出: corpora STEMMING: corpora LEMMATIZATION corpora constructing STEMMING: construct LEMMATIZATION constructing better STEMMING: better LEMMATIZATION good done STEMMING: done LEMMATIZATION done worst STEMMING: worst LEMMATIZATION bad pony STEMMING: poni LEMMATIZATION pony

总结

语言学研究语言的各个方面,包括形态学、句法学、音韵学和语义学。结合数据科学和计算技术,这一领域在过去六十年中取得了显著进步。我们刚刚探讨了一些自然语言处理的基本文本分析功能。谷歌、必应和其他搜索引擎利用这些技术帮助用户在互联网上查找信息。无论是Alexa播放音乐还是Siri导航,这些都是自然语言处理技术的应用实例。计算中的自然语言处理不是一种噱头或玩具,而是未来无缝计算的关键技术。

Arcadia Data最近发布了5.0版本,其中包含了一种名为“基于搜索的BI”的自然语言查询功能。这种功能融合了之前提到的数据科学和文本分析技术。更多详情,请查看关于“基于搜索的BI”工具的视频介绍。

原标题:《自然语言处理背后的数据科学》;作者:约翰·图玛

本文来源: 图灵汇 文章作者: 沈新瑜