自然語言處理入門 - olay

banq發表於2021-07-14

自然語言可以採用文字或語音的形式,機器學習可用於以文字和語音的形式解決涉及人類自然語言的問題。這被稱為自然語言處理,它已經有許多迷人的現實世界應用程式。
非結構化文字,例如文章、新聞、評論或評論,是自然語言資料的常見來源。必須從非結構化資料中檢索有用的資訊。為了檢索這些有用的資料,我們必須完成一系列步驟。
在本文中,我們將使用自然語言工具包 (NLTK)、一個 Python 包以及 Jupyter 筆記本來演示我們需要採取的常規程式來提取這些有用的資料。Anaconda 軟體包預裝了這些軟體包,因此您可以安裝它。
這些步驟包括:

1. 分詞
這是將多個短語或段落分解為更小的元件(例如單個句子或單詞)的過程。要執行這一步,我們需要匯入 NLTK 庫並下載punkt

import nltk
nltk.download('punkt')


然後匯入傳送的標記器和單詞標記器以分別生成句子和單詞標記。我們將使用它來標記一個句子,結果如下所示:

from nltk.tokenize import sent_tokenize, word_tokenize


使用的示例文字是:
'Mary had a little lamb. Her fleece is white as snow' 

text = 'Mary had a little lamb. Her fleece is white as snow'
sents = sent_tokenize(text)
print(sents)


句子標記器的結果如下所示:

['Mary had a little lamb.', ' Her fleece is white as snow' ]


在同一個句子上使用單詞分詞器:

words = word_tokenize(text)
print(words)


word tokenizer的結果如下圖:

['Mary', 'had', 'a', 'little', 'lamb', '.', 'Her', 'fleece', 'is', 'white', 'as', 'snow' ]
 

2. 停用詞去除
句子被標記化後,停用詞將被刪除。停用詞是用於結構和語法目的但不為文字提供意義的詞。此類詞的示例是“is”、“for”等。除此之外,要刪除停用詞,我們需要下載 nltk 中的停用詞。一個例子如下所示

# Downloading the stop words
nltk.download('stopwords')

# Importing the downloaded stopwords
from nltk.corpus import stopwords

# Importing punctuations in other to also remove them from the sentence 
from string import punctuation

# Creating a custom stopwords by adding the list of punctuation to the stopwords
custom_stop_words = set(stopwords.words('english')+list(punctuation))
print(custom_stop_words)

你需要建立一個
自定義停用詞列表,英文包括don its等詞語

# sentence to remove stop words from
text = 'Mary had a little lamb. Her fleece is white as snow'

# Creating list of words without stopwords
# Code below means to return each word in the tokenized word, if the words cant be found in the custom stop words
words_without_stopwords = [word for word in word_tokenize(text) if word not in custom_stop_words]
print(words_without_stopwords)

上面程式碼的結果如下圖所示:

['Mary','little', 'lamb', 'Her', 'fleece','white','snow' ]

從結果中,我們可以看到諸如had, a, is, 和等詞as沒有被包含在結果中,因為它們沒有為句子增加意義而是為結構增加了含義。
 

3. N-GRAMS
這需要確定一組一起找到的術語。例如,在一篇關於“勞斯萊斯”的文章中,“Rolls Royce”和 "Rolls" 與"Royce" 這兩個詞幾乎肯定會一起出現。如果將“Rolls Royce”保留為一個單一的實體,則可能會從該語言中衍生出更多的含義。單詞集合中單詞的數量以 n-gram 為單位,可以是 bi-gram、tri-gram 等。下面顯示了一個 n-gram 的例子。

from nltk.collocations import *
bigram_measures = nltk.collocations.BigramAssocMeasures()
finder = BigramCollocationFinder.from_words(words_without_stopwords)


# Bi-grams
sorted(finder.ngram_fd.items())


結果:

自然語言處理入門 - olay

使用tri-grams:

find = TrigramCollocationFinder.from_words(words_without_stopwords)
sorted(find.ngram_fd.items())



結果:

自然語言處理入門 - olay
 

4. 詞幹
具有相同基本含義的單詞可能會因使用時的時態和上下文結構而不同。關閉、關閉和關閉是此類術語的示例。詞幹提取是將所有這些詞返回到它們的根詞並讓計算機對它們一視同仁的過程。為了說明詞幹提取,我們將使用不同的句子和 lancaster 詞幹提取器,如下所示

# New text to be used 
text_2 = 'Mary closed on closing night when she was in the mood to close.'

from nltk.stem.lancaster import LancasterStemmer
st = LancasterStemmer()
stemmed_words = [st.stem(word) for word in word_tokenize(text_2)]
print(stemmed_words)


詞幹提取的結果如下所示,我們可以看到單詞“closed”、“close”和“close”返回到詞根“clos”,因此計算機將以相同的方式對待它們。自然語言處理入門 - olay

 

5. 部分語音標籤
計算機如何確定短語中的單詞是名詞、動詞、代詞還是詞性的其他部分。為了說明這一點,我們將使用 NLTK 下載“averaged_perceptron_tagger”,如下所示

nltk.download('averaged_perceptron_tagger')

nltk.pos_tag(word_tokenize(text_2))


結果如下所示,眾所周知,Mary 是專有名詞,閉合動詞等,因為它們已被標記

自然語言處理入門 - olay
 

5. 詞義歧義
這就是計算機如何根據使用的上下文來解釋單詞的含義。有些詞根據情況有不同的含義。根據上下文,“洋流”一詞既可以指海洋的流動,也可以指現代的任何事物。為了說明這一點,我們將使用 nltk 下載 wordnet,我們將使用 wordnet 來檢查單詞“bass”的含義

nltk.download('wordnet')

from nltk.corpus import wordnet as wn
for ss in wn.synsets('bass'):
    print(ss, ss.definition())


從下面顯示的結果來看,bass 一詞有多種含義,從“音樂範圍的最低部分”到“Serranidae 科鹹水魚的瘦肉”

自然語言處理入門 - olay
我們將舉例說明wordnet能否根據上下文判斷單詞的意思

from nltk.wsd import lesk
sense_1 = lesk(word_tokenize('sing in a lower tone, along with the bass.'), 'bass')
print(sense_1, sense_1.definition())


輸出如下所示,wordnet 能夠根據上下文確定單詞的含義

自然語言處理入門 - olay
顯示另一個例子

sense_2 = lesk(word_tokenize('This sea bass was really hard to catch.'), 'bass')
print(sense_2, sense_2.definition())


這些結果如下所示

自然語言處理入門 - olay
這些是在訓練自然語言處理模型之前執行的 5 項常見活動。
本文的程式碼可以在我的 Github 儲存庫中找到
如果您有任何疑問,請隨時傳送郵件至[email]olayemibolaji1@gmail.com[/email]




 

相關文章