iT邦幫忙

2021 iThome 鐵人賽

DAY 3
1

一. 前言

這部份我比較不會著墨太多,因為通常是在處理中文文本比較不會處理這一塊,而在非中文的語言上,例如英文語句中,同一個單詞在拼法上可能隨著時態、單複數、主被動等狀況不同,ex: speaking 與 speak,然而其所要表達的語意並沒有太大的不同。
Stemming 與 Lemmatization的目的就是及將這些不同的表示型態歸一化,藉此來降低文本的複雜度。

其優點為能夠大幅降低詞數量,在建立 BOW (bag of word,在後面的文章會慢慢介紹到,一個文章或句子的表示型態) 時可以降低表示文本的維度,以降低資料複雜度,加快語言模型訓練速度,ex: speak 與 speaking 想表達的語意相當接近,如果將兩者都轉為 speak。

缺點其實就是喪失的訊息,以上述 speaking / speak 為例,有可能某些預測需要利用到時態的訊息,當我們將兩者都轉為 speak 輸入模型時, speak-ing 中 ing 的訊息也被我們移除。

二. 方法介紹

  1. Stemming:較偏向rule-base的方式去拆解單詞,例如下列:

    university
    universal
    universities
    universe
    
    • 上面這些詞stemming完後會變->univers,但這樣就會有Overstemming的問題,就是切的太多了~~
  2. Lemmatization: 還原字的元型,精度比Stemming好很多~例如:

    amused
    amusing
    
    • 上面這些詞經過 stemming 後會返回 amus,但經Lemmatization返回 amuse,因為他並不是切分

就以結論來說,Lemmatization 相較於 Stemming 會是更好的選擇,但Stemming 的優點為計算速度快。

三. 利用nltk來處理

nltk是一個處理文字的package,通常在英文的文本上,可以參考這篇[1]。
這邊稍微介紹一下怎麼使用nltk來處理Stemming與Lemmatization

  1. 下載nltk的套件:
    pip install nltk
  2. 初始Stemming處理器與Lemmatization處理器:
    from nltk.stem import WordNetLemmatizer 
    from nltk.stem.porter import PorterStemmer
    import nltk
    
    #stemmer
    ps=PorterStemmer()
    
    #Lemmatizer
    lm = WordNetLemmatizer()
    
  3. 範例的部份:
    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 初學指南


上一篇
[Day2] 斷詞介紹
下一篇
[Day4] 語言模型(一)-N-gram
系列文
30天初步了解自然語言處理-自學筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言