網(wǎng)上有很多關(guān)于違規(guī)解碼pos機(jī),理解和實(shí)現(xiàn)自然語(yǔ)言處理的終極指南的知識(shí),也有很多人為大家解答關(guān)于違規(guī)解碼pos機(jī)的問(wèn)題,今天pos機(jī)之家(m.afbey.com)為大家整理了關(guān)于這方面的知識(shí),讓我們一起來(lái)看下吧!
本文目錄一覽:
違規(guī)解碼pos機(jī)
根據(jù)行情,只有21%的數(shù)據(jù)目前是結(jié)構(gòu)化的。談話、發(fā)推文、在 WhatsApp上發(fā)信息以及其他各種各樣的活動(dòng),都在持續(xù)不斷的產(chǎn)生數(shù)據(jù)。而大多數(shù)這種數(shù)據(jù)都是以非結(jié)構(gòu)化的文本形式存在的。
最著名的例子有:社交媒體上的推文/帖子、用戶到用戶的聊天記錄、新聞、博客、文章、產(chǎn)品或服務(wù)測(cè)評(píng)和醫(yī)療行業(yè)的病人記錄。最近的例子有聊天機(jī)器人和其他聲音驅(qū)動(dòng)的機(jī)器人。
盡管我們有高維數(shù)據(jù),但目前其中的信息并不能直接獲得——除非被人工處理過(guò)或被一個(gè)自動(dòng)化系統(tǒng)分析過(guò)。
為了從文本數(shù)據(jù)中產(chǎn)生具有重要意義和可實(shí)踐的領(lǐng)悟,就需要了解自然語(yǔ)言處理的技巧和原理。
所以,如果你今年打算打造一個(gè)聊天機(jī)器人,或者你想運(yùn)用非結(jié)構(gòu)化的文本數(shù)據(jù)的力量,那么你算看對(duì)了文章,這篇指南揭示了自然語(yǔ)言處理的概念以及它的技巧和實(shí)現(xiàn)方法。文章的主要目的是教導(dǎo)自然語(yǔ)言處理的概念以及讓你了解把它運(yùn)用到實(shí)際數(shù)據(jù)集上。
目錄
1.自然語(yǔ)言處理簡(jiǎn)介
2.文本處理
移除噪聲
詞匯規(guī)范化
詞形還原
詞干提取
對(duì)象標(biāo)準(zhǔn)化
3.文本到特征(文本數(shù)據(jù)上的特征工程)
句法分析
從屬關(guān)系語(yǔ)法
詞性標(biāo)注
實(shí)體分析
短語(yǔ)檢測(cè)
命名實(shí)體分析
主題建模
N-grams
統(tǒng)計(jì)特征
TF – IDF算法
頻率/密度特征
可讀特征
詞匯嵌入
4.自然語(yǔ)言處理面臨的重要任務(wù)
文本分類(lèi)
文本匹配
萊文斯坦距離
語(yǔ)音匹配
柔性字符串匹配
指代消解
其他問(wèn)題
1.自然語(yǔ)言處理簡(jiǎn)介自然語(yǔ)言處理是數(shù)據(jù)科學(xué)中以智能高效的方式對(duì)文本進(jìn)行系統(tǒng)的分析、理解和信息提取的一個(gè)分支。通過(guò)利用自然語(yǔ)言處理及其成分,一個(gè)人能夠組織起巨大數(shù)量的文本數(shù)據(jù)來(lái)執(zhí)行許多自動(dòng)化任務(wù)和解決例如自動(dòng)摘要、機(jī)器翻譯、命名實(shí)體識(shí)別、關(guān)系提取、情感分析、語(yǔ)音識(shí)別和主題分割等等非常廣泛的問(wèn)題。
開(kāi)始之前,先解釋一下這篇文章中用到的術(shù)語(yǔ):
標(biāo)記化(tokenization):文本轉(zhuǎn)換為標(biāo)記的過(guò)程
標(biāo)記(token):文本中出現(xiàn)的詞匯或?qū)嶓w
文本對(duì)象(text object):句子/短語(yǔ)/詞匯/文章
安裝NTLK及其數(shù)據(jù)的步驟:
安裝Pip:在終端運(yùn)行:
sudo easy_install pip
安裝NTLK:在終端運(yùn)行
sudo pip install -U nltk
下載NTLK數(shù)據(jù):終端Python shell下輸入如下代碼:
``` import nltk nltk.download()```
遵循屏幕上的指令下載所需包或集。其他庫(kù)可直接使用pip安裝。
2.文本處理現(xiàn)有數(shù)據(jù)中,文本是最非結(jié)構(gòu)化的形式,里面有各種各樣的噪聲;如果沒(méi)有預(yù)處理,文本數(shù)據(jù)都不能分析。清理和標(biāo)準(zhǔn)化文本的整個(gè)過(guò)程叫做文本預(yù)處理(text preprocessing),其作用是使文本數(shù)據(jù)沒(méi)有噪聲并且可以分析。
主要包括三個(gè)步驟:
移除噪聲
詞匯規(guī)范化
對(duì)象標(biāo)準(zhǔn)化
下圖展示了文本預(yù)處理流程的結(jié)構(gòu)。
2.1移除噪聲
任何與數(shù)據(jù)上下文和最終輸出無(wú)關(guān)的文本都可被判作噪聲。
例如,語(yǔ)言停止詞(stopword,語(yǔ)言中常用的詞匯:系動(dòng)詞is,am,定冠詞the,介詞of,in)、URL 或鏈接、社交媒體實(shí)體(提及、標(biāo)簽)、標(biāo)點(diǎn)符號(hào)和特定行業(yè)詞匯。這一步移除了文本中所有類(lèi)型的噪聲。
移除噪聲通用的做法是準(zhǔn)備一個(gè)噪聲實(shí)體的詞典,在文本對(duì)象上逐個(gè) token(或逐詞)迭代,消除在噪聲詞典中出現(xiàn)的標(biāo)簽。
以下是實(shí)現(xiàn)這一步的 Python 代碼:
```
# Sample code to remove noisy words from a text
noise_list = ["is", "a", "this", "..."]
def _remove_noise(input_text):
words = input_text.split()
noise_free_words = [word for word in words if word not in noise_list]
noise_free_text = " ".join(noise_free_words)
return noise_free_text
_remove_noise("this is a sample text")
>>> "sample text"
```
另外一種方法是使用正則表達(dá)式,盡管其只能解決特定模式的噪聲。我們?cè)谥暗奈恼轮性敿?xì)介紹了正則表達(dá)式:https://www.analyticsvidhya.com/blog/2015/06/regular-expression-python/
以下是從輸入文本中移除正則表達(dá)式的 Python 代碼:
```
# Sample code to remove a regex pattern
import re
def _remove_regex(input_text, regex_pattern):
urls = re.finditer(regex_pattern, input_text)
for i in urls:
input_text = re.sub(i.group().strip(), \'\', input_text)
return input_text
regex_pattern = "#[A-Za-z0-9\\w]*"
_remove_regex("remove this #hashtag from analytics vidhya", regex_pattern)
>>> "remove this from analytics vidhya"
```
2.2詞匯規(guī)范化
另外一種文本形式的噪聲是由一個(gè)詞匯所產(chǎn)生的多種表示形式。
例如,“play”,“player”,“played”,“plays”和“playing”,這些詞匯都是由“play”變化而來(lái)的。雖然它們意義不一,但根據(jù)上下文都是相似的。詞匯規(guī)范化這一步把一個(gè)詞的不同展現(xiàn)形式轉(zhuǎn)化為了他們規(guī)范化的形式(也叫做引理(lemma))。規(guī)范化是文本上的特征工程起中樞作用的一步,因?yàn)樗迅呔S特征(N個(gè)不同的特征)轉(zhuǎn)化為了對(duì)任何機(jī)器學(xué)習(xí)模型都很理想的低維空間(1個(gè)特征)。
最常見(jiàn)的詞匯規(guī)范化是:
詞干提取:詞干提取是詞匯后綴(“ing”,“l(fā)y”,“es”,“s”等)去除過(guò)程的一個(gè)基本規(guī)則。
詞形還原:詞形還原與詞干提取相反,是有組織地逐步獲取詞匯根形式的步驟,它使用到了詞匯(詞匯字典序)和形態(tài)分析(詞的結(jié)構(gòu)和語(yǔ)法關(guān)系)。
下面是實(shí)現(xiàn)詞形還原和詞干提取的代碼,使用了一個(gè)流行的 Python 庫(kù) NLTK:
```
from nltk.stem.wordnet import WordNetLemmatizer
lem = WordNetLemmatizer()
from nltk.stem.porter import PorterStemmer
stem = PorterStemmer()
word = "multiplying"
lem.lemmatize(word, "v")
>> "multiply"
stem.stem(word)
>> "multipli"
```
2.3對(duì)象標(biāo)準(zhǔn)化
文本數(shù)據(jù)經(jīng)常包含不在任何標(biāo)準(zhǔn)詞典里出現(xiàn)的詞匯或短語(yǔ)。搜索引擎和模型都識(shí)別不了這些。
比如,首字母縮略詞、詞匯附加標(biāo)簽和通俗俚語(yǔ)。通過(guò)正則表達(dá)式和人工準(zhǔn)備的數(shù)據(jù)詞典,這種類(lèi)型的噪聲可以被修復(fù)。以下代碼使用了詞典查找方法來(lái)替代文本中的社交俚語(yǔ)。
```
lookup_dict = {\'rt\':\'Retweet\', \'dm\':\'direct message\', "awsm" : "awesome", "luv" :"love", "..."}
def _lookup_words(input_text):
words = input_text.split()
new_words = []
for word in words:
if word.lower() in lookup_dict:
word = lookup_dict[word.lower()]
new_words.append(word) new_text = " ".join(new_words)
return new_text
_lookup_words("RT this is a retweeted tweet by Shivam Bansal")
>> "Retweet this is a retweeted tweet by Shivam Bansal"
```
除了目前為止討論過(guò)的三個(gè)步驟,其他類(lèi)型的文本預(yù)處理有編碼-解碼噪聲,語(yǔ)法檢查器和拼寫(xiě)改正等。我之前的一篇文章給出了預(yù)處理及其方法的細(xì)節(jié)。
3.文本到特征(文本數(shù)據(jù)上的特征工程)為了分析已經(jīng)預(yù)處理過(guò)的數(shù)據(jù),需要將數(shù)據(jù)轉(zhuǎn)化成特征(feature)。取決于用途,文本特征可通過(guò)句法分析、實(shí)體/N元模型/基于詞匯的特征、統(tǒng)計(jì)特征和詞匯嵌入等方法來(lái)構(gòu)建。下面來(lái)詳細(xì)理解這些技巧。
3.1句法分析
句法分析涉及到對(duì)句中詞的語(yǔ)法分析和位置與詞匯的關(guān)系的分析。依存語(yǔ)法(Dependency Grammar)和詞性標(biāo)注(Part of Speech tags)是重要的文本句法屬性。
依賴樹(shù)(Dependency Trees)——由一些詞匯共同組成的句子。句中詞與詞之間的聯(lián)系是由基本的依存語(yǔ)法決定的。從屬關(guān)系語(yǔ)法是一類(lèi)解決(已標(biāo)簽)兩個(gè)詞匯項(xiàng)(字詞)間二元不對(duì)稱關(guān)系的句法文本分析。每一種關(guān)系都可用三元組(關(guān)系、支配成分、從屬成分)來(lái)表示。例如:考慮下面這個(gè)句子:“Bills on ports and immigration were submitted by Senator Brownback, Republican of Kansas.”詞匯間的關(guān)系可由如下所示的樹(shù)的形式觀察得到。
觀察樹(shù)的形狀可得:“submitted”是該句的根詞(root word),由兩顆子樹(shù)所連接(主語(yǔ)和賓語(yǔ)子樹(shù))。每一顆子樹(shù)本身又是一顆依存關(guān)系樹(shù)(dependency tree ),其中的關(guān)系比如有 - (“Bills” <-> “ports” <by> “proposition” 關(guān)系),(“ports” <-> “immigration” <by> “conjugation” 關(guān)系)
這種類(lèi)型的樹(shù),當(dāng)從上至下迭代分析時(shí)可以得到語(yǔ)法關(guān)系三元組。對(duì)于很多自然語(yǔ)言處理問(wèn)題,比如實(shí)體性情感分析,執(zhí)行者(actor)與實(shí)體識(shí)別和文本分類(lèi)等,語(yǔ)法關(guān)系三元組都可以用作特征。Python wrapper 的StanfordCoreNLP( http://stanfordnlp.github.io/CoreNLP/ 來(lái)自斯坦福自然語(yǔ)言處理組,只允許商業(yè)許可證)和NTLK從屬關(guān)系語(yǔ)法可以用來(lái)生成依賴樹(shù)。
詞性標(biāo)注(PoS/Part of speech tagging)——除了語(yǔ)法關(guān)系外,句中每個(gè)詞都與詞性(名詞、動(dòng)詞、形容詞、副詞等等)聯(lián)系起來(lái)。詞性標(biāo)注標(biāo)簽決定了句中該詞的用法和作用。這里有賓夕法尼亞大學(xué)定義的所有可能的詞性標(biāo)簽表。以下代碼使用了NTLK包對(duì)輸入文本執(zhí)行詞性標(biāo)簽注釋。(NTLK提供了不同的實(shí)現(xiàn)方式,默認(rèn)是感知器標(biāo)簽)
```
from nltk import word_tokenize, pos_tag
text = "I am learning Natural Language Processing on Analytics Vidhya"
tokens = word_tokenize(text)
print pos_tag(tokens)
>>> [(\'I\', \'PRP\'), (\'am\', \'VBP\'), (\'learning\', \'VBG\'), (\'Natural\', \'NNP\'),(\'Language\', \'NNP\'),
(\'Processing\', \'NNP\'), (\'on\', \'IN\'), (\'Analytics\', \'NNP\'),(\'Vidhya\', \'NNP\')]
```
詞性標(biāo)注被用在許多重要的自然語(yǔ)言處理目的上:
A. 詞義消歧:一些詞匯根據(jù)用法有很多種意思。例如,下面的兩個(gè)句子:
I.“Please book my flight for Delhi”
II. “I am going to read this book in the flight”
“Book”在不同的上下文中出現(xiàn),然而這兩種情況的詞性標(biāo)簽卻不一樣。在第一句中,“book”被用作動(dòng)詞,而在第二句中,它被用作名詞。(Lesk算法也可被用于相同的目的)
B. 提高基于詞匯的特征:當(dāng)詞匯作為特征時(shí),一個(gè)學(xué)習(xí)模型可以學(xué)習(xí)到不同的詞匯上下文,然而特征與詞性連接起來(lái),上下文就被保留了,因此得到了很強(qiáng)的特征。例如:
句 - “book my flight, I will read this book”
標(biāo)簽 – (“book”, 2), (“my”, 1), (“flight”, 1), (“I”, 1), (“will”, 1), (“read”, 1), (“this”, 1)帶有POS的標(biāo)簽 – (“book_VB”, 1), (“my_PRP$”, 1), (“flight_NN”, 1), (“I_PRP”, 1), (“will_MD”, 1), (“read_VB”, 1), (“this_DT”, 1), (“book_NN”, 1)
C. 規(guī)范化和詞形歸并(Lemmatizatio):詞性標(biāo)簽是將詞轉(zhuǎn)化為其基本形式(引理)的基礎(chǔ)
D. 高效移除停止詞:詞性標(biāo)簽在移除停止詞方面也非常有用。
例如,有一些標(biāo)簽總是定義低頻/較低重要性的詞匯。
例如:(IN – “within”, “upon”, “except”), (CD – “one”,”two”, “hundred”), (MD – “may”, “must” 等)
3.2 實(shí)體提取(實(shí)體作為特征)
實(shí)體(entity)被定義為句中最重要的部分——名詞短語(yǔ)、動(dòng)詞短語(yǔ)或兩者都有。實(shí)體檢測(cè)算法通常是由基于規(guī)則的解析、詞典查詢、詞性標(biāo)簽和依存分析組合起來(lái)的模型。實(shí)體檢測(cè)的適用性很廣泛,在自動(dòng)聊天機(jī)器人、內(nèi)容分析器和消費(fèi)者見(jiàn)解中都有應(yīng)用。
主題建模和命名實(shí)體識(shí)別是自然語(yǔ)言處理領(lǐng)域中兩種關(guān)鍵的實(shí)體檢測(cè)方法。
A. 命名實(shí)體識(shí)別(NER/Named Entity Recognition)
從文本中檢測(cè)命名實(shí)體比如人名、位置、公司名稱等的過(guò)程叫做命名實(shí)體識(shí)別(NER)。例如:
句 - Sergey Brin, the manager of Google Inc. is walking in the streets of New York.命名實(shí)體 - ( “人” : “Sergey Brin” ), (“公司名” : “Google Inc.”), (“位置” : “New York”)典型NER模型包含三個(gè)模塊:
名詞短語(yǔ)識(shí)別:使用從屬關(guān)系分析和詞性分析將所有名詞性短語(yǔ)從文本中提取出來(lái)。
短語(yǔ)分類(lèi):將提取出的名詞短語(yǔ)分類(lèi)到各自的目錄(位置,名稱等)中。谷歌地圖API提供了通往消除歧義位置的很好路徑。然后,dbpedia,維基百科的開(kāi)源數(shù)據(jù)庫(kù)可以用來(lái)識(shí)別人名或公司名。除了這個(gè),我們能通過(guò)結(jié)合不同來(lái)源的信息精確的查找表和詞典。
實(shí)體消歧:有些時(shí)候?qū)嶓w可能會(huì)誤分類(lèi),因此在結(jié)果層上建一層交叉驗(yàn)證層非常有用。知識(shí)圖譜就可以用來(lái)使用。目前流行的知識(shí)圖譜有:谷歌知識(shí)圖譜、IBM Watson 和維基百科。
B.主題建模
主題建模是自動(dòng)識(shí)別文本集中主題的過(guò)程,它以無(wú)監(jiān)督的方式從語(yǔ)料庫(kù)中的詞匯里提取隱藏的模式。主題(topic)被定義為“文本集中共同出現(xiàn)術(shù)語(yǔ)的重復(fù)模式”。一個(gè)好的主題模型能對(duì)“健康”、“醫(yī)生”、“病人”、“醫(yī)院”建模為“健康保健”,“農(nóng)場(chǎng)”、“作物”、“小麥”建模為“耕作”。
隱含狄利克雷分布(LDA)是最流行的主題建模技術(shù),以下是在Python環(huán)境下使用LDA技術(shù)實(shí)現(xiàn)主題建模的代碼。若想查看更詳細(xì)的細(xì)節(jié),請(qǐng)參看:https://www.analyticsvidhya.com/blog/2016/08/beginners-guide-to-topic-modeling-in-python/
```
doc1 = "Sugar is bad to consume. My sister likes to have sugar, but not my father."
doc2 = "My father spends a lot of time driving my sister around to dance practice."
doc3 = "Doctors suggest that driving may cause increased stress and blood pressure."
doc_complete = [doc1, doc2, doc3]
doc_clean = [doc.split() for doc in doc_complete]
import gensim from gensim
import corpora
# Creating the term dictionary of our corpus, where every unique term is assigned an index.
dictionary = corpora.Dictionary(doc_clean)
# Converting list of documents (corpus) into Document Term Matrix using dictionary prepared above.
doc_term_matrix = [dictionary.doc2bow(doc) for doc in doc_clean]
# Creating the object for LDA model using gensim library
Lda = gensim.models.ldamodel.LdaModel
# Running and Training LDA model on the document term matrix
ldamodel = Lda(doc_term_matrix, num_topics=3, id2word = dictionary, passes=50)
# Results
print(ldamodel.print_topics())
```
C.N-Grams 特征
N-Grams是指N個(gè)詞匯的結(jié)合體。N-Grams(N>1)作為特征與詞匯(Unigrams)作為特征相比,通常會(huì)更加富含信息。同時(shí),bigrams(N=2)被認(rèn)為是最重要的特征。以下代碼生成了文本的 bigrams。
```
def generate_ngrams(text, n):
words = text.split()
output = []
for i in range(len(words)-n+1):
output.append(words[i:i+n])
return output
>>> generate_ngrams(\'this is a sample text\', 2)
# [[\'this\', \'is\'], [\'is\', \'a\'], [\'a\', \'sample\'], , [\'sample\', \'text\']]
```
3.3 統(tǒng)計(jì)特征
文本數(shù)據(jù)使用該節(jié)所講的幾種技術(shù)可直接量化成數(shù)字。
A. 術(shù)語(yǔ)頻率 - 逆文獻(xiàn)頻率(TF – IDF)
TF-IDF 是經(jīng)常被使用在信息檢索問(wèn)題上的權(quán)重模型。TF-IDF在不考慮文獻(xiàn)中詞的具體位置情況下,基于文獻(xiàn)中出現(xiàn)的詞匯將文本文獻(xiàn)轉(zhuǎn)化成向量模型。例如,假設(shè)有一個(gè)N 個(gè)文本文獻(xiàn)的數(shù)據(jù)集,在任何一個(gè)文獻(xiàn)“D”中,TF和IDF會(huì)被定義為 - 術(shù)語(yǔ)頻率(TF) - 術(shù)語(yǔ)“t”的術(shù)語(yǔ)頻率被定義為“t”在文獻(xiàn)“D”中的數(shù)量。
逆文獻(xiàn)頻率(IDF)- 術(shù)語(yǔ)的逆文獻(xiàn)頻率被定義為文本集中可用文獻(xiàn)的數(shù)量與包含術(shù)語(yǔ)“t”的文獻(xiàn)的數(shù)量的比例的對(duì)數(shù)。
TF-IDF公式給出了文本集中術(shù)語(yǔ)的相對(duì)重要性,以下為T(mén)F-IDF公式和使用Python的scikit學(xué)習(xí)包將文本轉(zhuǎn)換為tf-idf向量。
```
from sklearn.feature_extraction.text import TfidfVectorizer
obj = TfidfVectorizer()
corpus = [\'This is sample document.\', \'another random document.\', \'third sample document text\']
X = obj.fit_transform(corpus)
print X
>>>
(0, 1) 0.345205016865
(0, 4) ... 0.444514311537
(2, 1) 0.345205016865
(2, 4) 0.444514311537
```
模型創(chuàng)建了一個(gè)詞典并給每一個(gè)詞匯賦了一個(gè)索引。輸出的每一行包含了一個(gè)元組(i,j)和在第i篇文獻(xiàn)索引j處詞匯的tf-idf值。
B. 數(shù)量/密度/可讀性特征
基于數(shù)量或密度的特征同樣也能被用于模型和分析中。這些特征可能看起來(lái)比較繁瑣但是對(duì)學(xué)習(xí)模型有非常大的影響。一些特征有:詞數(shù)、句數(shù)、標(biāo)點(diǎn)符號(hào)數(shù)和特定行業(yè)詞匯的數(shù)量。其他類(lèi)型的測(cè)量還包括可讀性測(cè)量(比如音節(jié)數(shù)量、smog index 和易讀性指數(shù))。參考 Textstat 庫(kù)創(chuàng)建這樣的特征:https://github.com/shivam5992/textstat
3.4 詞嵌入(文本向量)
詞嵌入是將詞表示為向量的方法,在盡量保存文本相似性的基礎(chǔ)上將高維的詞特征向量映射為低維特征向量。詞嵌入廣泛用于深度學(xué)習(xí)領(lǐng)域,例如卷積神經(jīng)網(wǎng)絡(luò)和循環(huán)神經(jīng)網(wǎng)絡(luò)。Word2Vec和GloVe是目前非常流行的兩種做詞嵌入的開(kāi)源工具包,都是將文本轉(zhuǎn)化為對(duì)應(yīng)的向量。
Word2Vec:https://code.google.com/archive/p/word2vec/
GloVe:http://nlp.stanford.edu/projects/glove/
Word2Vec是由預(yù)處理模塊和兩個(gè)淺層神經(jīng)網(wǎng)絡(luò)(CBOW/Continuous Bag of Words和Skip-gram)組成,這些模型廣泛用于自然語(yǔ)言處理問(wèn)題。Word2Vec首先從訓(xùn)練語(yǔ)料庫(kù)中組織詞匯,然后將詞匯做詞嵌入,得到對(duì)應(yīng)的文本向量。下面的代碼是利用gensim包實(shí)現(xiàn)詞嵌入表示。
```
from gensim.models import Word2Vec
sentences = [[\'data\', \'science\'], [\'vidhya\', \'science\', \'data\', \'analytics\'],[\'machine\', \'learning\'], [\'deep\', \'learning\']]
# train the model on your corpus
model = Word2Vec(sentences, min_count = 1)
print model.similarity(\'data\', \'science\')
>>> 0.11222489293
print model[\'learning\']
>>> array([ 0.00459356 0.00303564 -0.00467622 0.00209638, ...])
```
這些向量作為機(jī)器學(xué)習(xí)的特征向量,然后利用余弦相似性、單詞聚類(lèi)、文本分類(lèi)等方法來(lái)衡量文本的相似性。
4.自然語(yǔ)言處理(NLP)的重要任務(wù)本節(jié)討論NLP的不同案例和問(wèn)題。
4.1文本分類(lèi)
文本分類(lèi)是NLP的經(jīng)典問(wèn)題之一。例如垃圾郵件識(shí)別、新聞主題分類(lèi)、搜索引擎的網(wǎng)頁(yè)組織和情感分類(lèi)。
通俗來(lái)講,文本分類(lèi)就是系統(tǒng)地將文本對(duì)象(文件和句子)按照一定的分類(lèi)體系或標(biāo)準(zhǔn)進(jìn)行自動(dòng)分類(lèi)標(biāo)記。尤其是當(dāng)數(shù)據(jù)量太大時(shí),文本分類(lèi)對(duì)于組織、信息過(guò)濾、儲(chǔ)存非常有幫助。典型的自然語(yǔ)言分類(lèi)包括兩部分:a)訓(xùn)練(b)預(yù)測(cè)。首先,文本輸入是創(chuàng)建特征過(guò)程,機(jī)器學(xué)習(xí)從這些特征中學(xué)習(xí),然后對(duì)新文本進(jìn)行預(yù)測(cè)。
下面的代碼利用了Python的TextBlob文本處理庫(kù)中的樸素貝葉斯模型。
```
from textblob.classifiers import NaiveBayesClassifier as NBC
from textblob import TextBlob
training_corpus = [
(\'I am exhausted of this work.\', \'Class_B\'),
("I can\'t cooperate with this", \'Class_B\'),
(\'He is my badest enemy!\', \'Class_B\'),
(\'My management is poor.\', \'Class_B\'),
(\'I love this burger.\', \'Class_A\'),
(\'This is an brilliant place!\', \'Class_A\'),
(\'I feel very good about these dates.\', \'Class_A\'),
(\'This is my best work.\', \'Class_A\'),
("What an awesome view", \'Class_A\'),
(\'I do not like this dish\', \'Class_B\')]
test_corpus = [
("I am not feeling well today.", \'Class_B\'),
("I feel brilliant!", \'Class_A\'),
(\'Gary is a friend of mine.\', \'Class_A\'),
("I can\'t believe I\'m doing this.", \'Class_B\'),
(\'The date was good.\', \'Class_A\'), (\'I do not enjoy my job\', \'Class_B\')]
model = NBC(training_corpus)
print(model.classify("Their codes are amazing."))
>>> "Class_A"
print(model.classify("I don\'t like their computer."))
>>> "Class_B"
print(model.accuracy(test_corpus))
>>> 0.83
```
Scikit.Learn為文本分類(lèi)提供了另一種途徑:
```
from sklearn.feature_extraction.text
import TfidfVectorizer from sklearn.metrics
import classification_report
from sklearn import svm
# preparing data for SVM model (using the same training_corpus, test_corpus from naive bayes example)
train_data = []
train_labels = []
for row in training_corpus:
train_data.append(row[0])
train_labels.append(row[1])
test_data = []
test_labels = []
for row in test_corpus:
test_data.append(row[0])
test_labels.append(row[1])
# Create feature vectors
vectorizer = TfidfVectorizer(min_df=4, max_df=0.9)
# Train the feature vectors
train_vectors = vectorizer.fit_transform(train_data)
# Apply model on test data
test_vectors = vectorizer.transform(test_data)
# Perform classification with SVM, kernel=linear
model = svm.SVC(kernel=\'linear\')
model.fit(train_vectors, train_labels)
prediction = model.predict(test_vectors)
>>> [\'Class_A\' \'Class_A\' \'Class_B\' \'Class_B\' \'Class_A\' \'Class_A\']
print (classification_report(test_labels, prediction))
```
文本分類(lèi)的效果在很大程度上依賴于特征的選擇,在機(jī)器學(xué)習(xí)中,使用越來(lái)越多的訓(xùn)練數(shù)據(jù)總是一個(gè)好的選擇。
4.2 文本匹配/相似性
NLP的一個(gè)重要應(yīng)用是對(duì)文本對(duì)象進(jìn)行匹配以找到相似性。文本匹配的重要應(yīng)用包括自動(dòng)拼寫(xiě)校正、刪除重復(fù)數(shù)據(jù)和基因組分析等。目前有許多文本分類(lèi)方法,本節(jié)對(duì)一些重要的分類(lèi)方法進(jìn)行詳細(xì)介紹。
A. Levenshtein距離 —— 兩個(gè)字符串之間的Levenshtein距離被定義為將一個(gè)字符串轉(zhuǎn)換為另一個(gè)字符串所需的最小編輯次數(shù),允許的編輯操作包括單個(gè)字符的插入、刪除或替換。以下代碼是高效內(nèi)存計(jì)算的具體實(shí)現(xiàn)。
```
def levenshtein(s1,s2):
if len(s1) > len(s2):
s1,s2 = s2,s1
distances = range(len(s1) + 1)
for index2,char2 in enumerate(s2):
newDistances = [index2+1]
for index1,char1 in enumerate(s1):
if char1 == char2:
newDistances.append(distances[index1])
else:
newDistances.append(1 + min((distances[index1], distances[index1+1], newDistances[-1])))
distances = newDistances
return distances[-1]
print(levenshtein("analyze","analyse"))
```
B.音素匹配 ——音素匹配算法以關(guān)鍵詞作為輸入(人的姓名、位置名稱等),然后產(chǎn)生一個(gè)字符串來(lái)標(biāo)識(shí)一組音素相似的單詞。音素匹配對(duì)于搜索大文本語(yǔ)料庫(kù)、更正拼寫(xiě)錯(cuò)誤和匹配相關(guān)名稱非常有用。 Soundex和Metaphone是目前兩種主要音素匹配算法。 Python的Fuzzy模塊用來(lái)計(jì)算不同單詞的soundex字符串,例如:
```
import fuzzy
soundex = fuzzy.Soundex(4)
print soundex(\'ankit\')
>>> “A523”
print soundex(\'aunkit\')
>>> “A523”
```
C.靈活的字符串匹配 —— 一個(gè)完整的文本匹配系統(tǒng)包括不同的算法,這些算法計(jì)算各種文本差異。正則表達(dá)式對(duì)字符串匹配非常有幫助。另一些常見(jiàn)的字符串匹配技術(shù)有精確串匹配,lemmatized匹配和緊湊匹配(考慮空格、標(biāo)點(diǎn)符號(hào)、俚語(yǔ)等)。
D.余弦相似性 —— 當(dāng)文本以向量表示時(shí),也可以應(yīng)用余弦相似性來(lái)表征矢量的相似性。下面的代碼將文本轉(zhuǎn)換為向量(使用術(shù)語(yǔ)頻率),并應(yīng)用余弦相似性來(lái)衡量文本之間的相近性。
```
import math
from collections import Counter
def get_cosine(vec1, vec2):
common = set(vec1.keys()) & set(vec2.keys())
numerator = sum([vec1[x] * vec2[x] for x in common])
sum1 = sum([vec1[x]**2 for x in vec1.keys()])
sum2 = sum([vec2[x]**2 for x in vec2.keys()])
denominator = math.sqrt(sum1) * math.sqrt(sum2)
if not denominator:
return 0.0
else:
return float(numerator) / denominator
def text_to_vector(text):
words = text.split()
return Counter(words)
text1 = \'This is an article on analytics vidhya\'
text2 = \'article on analytics vidhya is about natural language processing\'
vector1 = text_to_vector(text1)
vector2 = text_to_vector(text2)
cosine = get_cosine(vector1, vector2)
>>> 0.62
```
4.3指代消解
指代消解是指找出句子中相對(duì)應(yīng)的詞或短語(yǔ)??紤]如下例子“Donald went to John’s office to see the new table. He looked at it for an hour.”,人類(lèi)很容易識(shí)別出“He”表示的是Donald而不是John’s office,“it”是指new table而不是John’s office。指代消解是自然語(yǔ)言處理的重要內(nèi)容,它被用于自動(dòng)摘要、問(wèn)答系統(tǒng)和信息采集等方面。 Stanford CoreNLP提供了一個(gè)商用Python wrapper:https://github.com/Wordseer/stanford-corenlp-python
4.4其它NLP問(wèn)題/任務(wù)
自動(dòng)摘要 ——給定文章或段落,系統(tǒng)按一定順序生成最重要和最相關(guān)的句子。
機(jī)器翻譯 ——通過(guò)處理語(yǔ)法、語(yǔ)義和現(xiàn)實(shí)世界的信息等,系統(tǒng)自動(dòng)地將文本從一種語(yǔ)言翻譯成另一種語(yǔ)言。
自然語(yǔ)言生成和理解 —— 將計(jì)算機(jī)數(shù)據(jù)庫(kù)中的信息轉(zhuǎn)換為人類(lèi)易于理解的語(yǔ)言被稱為語(yǔ)言生成; 將文本塊轉(zhuǎn)換為計(jì)算機(jī)程序易于操作的更富邏輯的結(jié)構(gòu)稱為語(yǔ)言理解。
光學(xué)字符識(shí)別(OCR)——給定要打印的文本圖像,計(jì)算機(jī)識(shí)別出相應(yīng)的文本。
文檔轉(zhuǎn)化成信息 ——將文檔(網(wǎng)站、文件、PDF 和圖像)中的文本數(shù)據(jù)解析為可分析的、整齊的格式。
5.重要的自然語(yǔ)言處理庫(kù)(Python)Scikit-learn:Python中的機(jī)器學(xué)習(xí)庫(kù)。
Natural Language Toolkit (NLTK):NLP的完整工具包。
Pattern:用于NLP和機(jī)器學(xué)習(xí)的Web挖掘模塊。
TextBlob:易于使用的NLP的API,構(gòu)建在NLTK和Pattern之上。
spaCy:具有工業(yè)級(jí)強(qiáng)度的Python和Cython工具包。
Gensim:Python的主題模型工具包。
Stanford Core NLP:Stanford NLP Group提供的NLP服務(wù)和包。
以上就是關(guān)于違規(guī)解碼pos機(jī),理解和實(shí)現(xiàn)自然語(yǔ)言處理的終極指南的知識(shí),后面我們會(huì)繼續(xù)為大家整理關(guān)于違規(guī)解碼pos機(jī)的知識(shí),希望能夠幫助到大家!
![](/style/images/zhouzong.jpg)