自然語言處理背後的資料科學

大資料文摘發表於2019-04-29


自然語言處理背後的資料科學

大資料文摘出品

來源:medium

編譯:陸震、夏雅薇

自然語言處理(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:filte
red_sentence.append(w)print(filtered_sentence)
OUTPUT:
['red''fox''animal''able''jump''moon''.']


詞幹提取

詞幹化是減少單詞噪聲的過程,也被稱為詞典歸一化。它減少了單詞的變化。例如,單詞“fishing”的詞幹為“fish”。

詞幹化用於將單詞簡化到其基本含義。另一個很好的例子是“喜歡”這個詞,它是許多單詞的詞幹,如:“likes”,“liked”和“likely”。

搜尋引擎也是使用詞幹的。在許多情況下,用這種方法來搜尋其中一個單詞以返回包含該集合中另一個單詞的文件可能是非常有用的。

需要使用Python和NLTK庫實現詞幹化:

from nltk.stem import PorterStemmerFrom 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

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31562039/viewspace-2642886/,如需轉載,請註明出處,否則將追究法律責任。

相關文章