一. 前言
這部份我比較不會著墨太多,因為通常是在處理中文文本比較不會處理這一塊,而在非中文的語言上,例如英文語句中,同一個單詞在拼法上可能隨著時態、單複數、主被動等狀況不同,ex: speaking 與 speak,然而其所要表達的語意並沒有太大的不同。
Stemming 與 Lemmatization的目的就是及將這些不同的表示型態歸一化,藉此來降低文本的複雜度。
其優點為能夠大幅降低詞數量,在建立 BOW (bag of word,在後面的文章會慢慢介紹到,一個文章或句子的表示型態) 時可以降低表示文本的維度,以降低資料複雜度,加快語言模型訓練速度,ex: speak 與 speaking 想表達的語意相當接近,如果將兩者都轉為 speak。
缺點其實就是喪失的訊息,以上述 speaking / speak 為例,有可能某些預測需要利用到時態的訊息,當我們將兩者都轉為 speak 輸入模型時, speak-ing 中 ing 的訊息也被我們移除。
二. 方法介紹
Stemming:較偏向rule-base的方式去拆解單詞,例如下列:
university
universal
universities
universe
Lemmatization: 還原字的元型,精度比Stemming好很多~例如:
amused
amusing
就以結論來說,Lemmatization 相較於 Stemming 會是更好的選擇,但Stemming 的優點為計算速度快。
三. 利用nltk來處理
nltk是一個處理文字的package,通常在英文的文本上,可以參考這篇[1]。
這邊稍微介紹一下怎麼使用nltk來處理Stemming與Lemmatization
pip install nltk
from nltk.stem import WordNetLemmatizer
from nltk.stem.porter import PorterStemmer
import nltk
#stemmer
ps=PorterStemmer()
#Lemmatizer
lm = WordNetLemmatizer()
print(f'Stemming amusing : {format(ps.stem("amusing"))}')
print(f'lemmatization amusing : {format(lm.lemmatize("amusing", pos = "v"))}')
#output: Stemming amusing : amus
#output: lemmatization amusing : amuse
因為這主要是在非中文的文本上比較容易需要~我這邊就不太多敘述了~~這個 nltk套件其實非常猛~非常推薦可以看[1]這個作者寫的介紹~
下一篇會開始說明語言模型與N-gram
四. 參考資訊
[1] NLTK 初學指南