自然语言处理(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”工具的视频介绍。
原标题:《自然语言处理背后的数据科学》;作者:约翰·图玛