違規(guī)解碼pos機(jī),理解和實(shí)現(xiàn)自然語(yǔ)言處理的終極指南

 新聞資訊2  |   2023-05-25 11:26  |  投稿人:pos機(jī)之家

網(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)看下吧!

本文目錄一覽:

1、違規(guī)解碼pos機(jī)

違規(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í),希望能夠幫助到大家!

轉(zhuǎn)發(fā)請(qǐng)帶上網(wǎng)址:http://m.afbey.com/newsone/54862.html

你可能會(huì)喜歡:

版權(quán)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn),該文觀點(diǎn)僅代表作者本人。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如發(fā)現(xiàn)本站有涉嫌抄襲侵權(quán)/違法違規(guī)的內(nèi)容, 請(qǐng)發(fā)送郵件至 babsan@163.com 舉報(bào),一經(jīng)查實(shí),本站將立刻刪除。