自然语言处理(NLP)是计算机科学和人工智能范畴内的一门学科。
NLP是人与机器之间的沟通,使得机器既可以解释我们的语言,也可以就此作出有效回答。自20世纪50年代以来,这个领域一直存在,你可能听说过Alan Turing开创的“图灵测试”。图灵测试测量计算机对人类所提出问题做出反应的好坏程度。
如果第三方的人不能分辨出人和该计算机之间的区别,那么该计算系统就是智能的。20世纪50年代以来,人类为此努力了很多年,如今终于在数据科学和语言学领域取得了许多进展。
本文将详细介绍自然语言处理领域的一些算法的基本功能,包含一些Python代码示例。
标记化
开始自然语言处理之前,我们看几个非常简单的文本解析。标记化是将文本流(如一句话)分解为构成它的最基本的单词的过程。例如,下面一句话:“红狐狸跳过月球。”这句话有7个单词。
使用python标记句子:
myText ='The red fox jumps over the moon.'
myLowerText = myText.lower()
myTextList = myLowerText.split()
print(myTextList)
OUTPUT:
['the','red','fox','jumps','over','the','moon']
词性归类
词性用于确定句法功能。英语中的主要词性有:形容词,代词,名词,动词,副词,介词,连词和感叹词。这用于根据其用法推断单词的含义。例如,permit可以是名词和动词。作动词:“I permit you to go to the dance.”作名词:“Did you get the permit from the country.”
使用Python判断词性:(使用NLTK库)
你必须安装NLTK,这是一个用于自然语言处理的Python库。
关于NLTK的说明:
https://www-geeksforgeeks-org.cdn.ampproject.org/c/s/www.geeksforgeeks.org/part-speech-tagging-stop-words-using-nltk-python/amp/
import nltkmyText = nltk.word_tokenize('the red fox jumps over the moon.')print('Parts of Speech:',nltk.pos_tag(myText))OUTPUT:Parts of Speech:[('the','DT' ),('red','JJ'),('fox','NN'),('jumps','NNS'),('over','IN'),('the','DT' ),('moon','NN'),('.','.')]
你能看出NLTK是如何将句子分解为单个单词并说明其词性,如('fox','NN'):
NN noun, sigular 'fox'
停用词删除
许多句子和段落都包含一些几乎无实际意义的单词,包括“a”,“and”,“an”和“the”。停用词过滤是指从句子或单词流中删除这些单词。
使用Python和NLTK实现停用词过滤:
from nltk.corpus import stopwords
from nltk.tokenize import word_tokenize
example_sent =“a red fox is an animal that is able to jump over the moon.”
stop_words = set(stopwords.words('english'))
word_tokens = word_tokenize(example_sent)
filtered_sentence = [w for w in word_tokens if not w in stop_words]
filtered_sentence = [] for w in word_tokens: if w not in stop_words:filtered_sentence.append(w)print(filtered_sentence)
OUTPUT:
['red','fox','animal','able','jump','moon','.']
词干提取
词干化是减少单词噪声的过程,也被称为词典归一化。它减少了单词的变化。例如,单词“fishing”的词干为“fish”。
词干化用于将单词简化到其基本含义。另一个很好的例子是“喜欢”这个词,它是许多单词的词干,如:“likes”,“liked”和“likely”。
搜索引擎也是使用词干的。在许多情况下,用这种方法来搜索其中一个单词以返回包含该集合中另一个单词的文档可能是非常有用的。
需要使用Python和NLTK库实现词干化:
from nltk.stem import PorterStemmer
From nltk.tokenize import word_tokenize
ps = PorterStemmer()
words = [“likes”,“possible”,“likes”,“liking”]
for w in words:
print(w,“:”,ps.stem(w))
OUTPUT:
('likes', ':', u'like')
('likely', ':', u'like')
('likes', ':', u'like')
('liking', ':', u'like')
词形还原
词干化和词形归并非常相似,它们都使你能够找到根词。这被称为单词字归一化,两者可以生成相同的输出。但是,它们的工作原理非常不同。词干试图切分单词,而词形归并让你能够看清单词是名词,动词还是其他词性。
例如单词'saw',词干化返回'saw',词形归并返回'see'和'saw'。词形归并通常会返回一个可读的单词,而词干化可能不会。可以看下面的一个示例以了解差异。
from nltk.stem import PorterStemmer
From nltk.stem import 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'))
OUTPUT:
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
结论
语言学是对语言,形态,句法,语音和语义的研究。包括数据科学和计算在内的这三个领域在过去60年中已经兴起爆发。我们刚刚只是探索了在NLP中一些非常简单的文本分析。Google,Bing和其他搜索引擎利用此技术帮助你在世界范围网络中查找信息。
想想让Alexa播放你最喜欢的歌曲是多么容易,或者Siri如何帮助你确定方向。这完全是因为NLP。计算系统中的自然语言不是噱头或玩具,而是我们生活中无缝对接计算系统的未来。
Arcadia Data刚刚发布了5.0版,其中包括我们称之为Search Based BI的自然语言查询功能。它使用了上面描述的一些数据科学和文本分析功能。
用我们的Search Based BI工具查看此视频:
http://watch.arcadiadata.com/watch/NSf1mMENjYfTY2cjpuGWPS?
相关报道:
https://medium.com/dataseries/the-data-science-behind-natural-language-processing-69d6df06a1ff