16.6 C
Taipei
星期二, 16 4 月, 2024

一面白板打通關- NLP自然語言 解析應用範例篇|天地人學堂

這個應用例是IMDB的影評分析,使用的是IMDb線上電影資料庫,始於 1990 年,1998 年起,成為amazon旗下的網站,收錄了4百多萬筆作品資料。IMDb 資料集共有 50000 筆影評文字,分訓練與測試資料各 25000筆,每一筆資料都被標記為「正面評價」或「負面評價」。

黃 煒盛
黃 煒盛https://www.tiandiren.tw/product/c1443dac
黃煒盛|嘉南藥理大學 智慧健康產業技術研發與人才培育中心 助理教授 業師經歷第一科技技術股份有限公司技術長、社團法人台灣產學研合作發展策進會秘書長等實務,專注於數位影像分析、影像分析、人工智慧深度學習與物聯網。在策進會、工業局等各單位教授人工智慧、機器學習應用實務、Python網路爬蟲與資料分析、邊緣運算影像辨識實務等課程。具豐富實務與教學經歷。

這張醜醜的白板圖是常用 NLP自然語言 解析應用步驟,我上課的時候說明的。

這個應用例是IMDB的影評分析,使用的是IMDb(Internet Movie Database)線上電影資料庫,始於 1990 年,1998 年起,成為amazon旗下的網站,收錄了4百多萬筆作品資料。IMDb 資料集共有 50000 筆影評文字,分訓練與測試資料各 25000筆,每一筆資料都被標記為「正面評價」或「負面評價」。新版的IMDb資料集做了更多的分類,總共有七種,有興趣的可以參考 https://www.imdb.com/interfaces,我們這邊用舊版的來說明。


大綱
STEP1.下載檔案、解壓縮
STEP2.建立Token字典、統計出現次數
STEP3.透過Tokenizer,把文字化成數字List
STEP4.截長補短。超過砍尾巴、不足填前面
STEP5.把數字List embedding成向量List
STEP6.建立模型框架
STEP7.設定神經元數目、激發函數(activation function)類型
STEP8.進入訓練,設定最小批次、epoch及optimal方法
STEP9.評估效能,使用Test Dataset評估
STEP10.建立預測模型
結語


STEP1.下載檔案、解壓縮

將檔案從史丹佛大學下載,檢查是否已經存在,若不存在則建立並解壓縮。

 

STEP2.建立Token字典、統計出現次數

導入用到的Packages,先進行正規化表示法(RE, Regular Expression)的設定,用來去除標籤。因為有些資料檔裡面還留有標籤文字的符號,RE去除標籤的詠唱語法為<[^>]+>,一不小心還以為是表情符號呢。


把資料集的資料進行分配,資料夾名稱為train的設定為訓練資料集,test的設定為測試資料集。


檢查一下筆數內容有沒有問題。


建立Token字典,數字的順序是文字出現的次數累計,最多的排第一。

 

STEP3.透過Tokenizer,把文字化成數字List

把文字化成數字List,並檢查一下有沒有問題。

 

STEP4.截長補短。超過砍尾巴、不足填前面


截長補短,這篇比較長就被刪掉了。資料格式也從原來的list轉換為ndarray的數字矩陣型態。

 

STEP5.把數字List embedding成向量List

載入Packages, 把正負評價輸出從list轉換為ndarray型態,以利後續訓練。並建立Embedding層,把輸入的內容轉換為32個向量型態。並增加20%的Dropout。

 

STEP6.建立模型框架

前一個STEP的這一行就是建立線性模型框架。Embedding跟Dropout都是屬於線性模型框架中的操作。

 

STEP7.設定神經元數目、激發函數(activation function)類型

  1. 建立平坦層。
  2. 新增一層神經元為256的隱藏層,激發函數為relu。
  3. 建立一層捨棄率為35%的Dropout層。
  4. 建立一層神經元為1的輸出層,因為只有正評跟負評,用一個神經元就夠了,1為正評,0為負評。激發函數為sigmoid,這裡也可以用softmax作為激發函數。
  5. 看一下模型的摘要,這次用了88萬個參數,算是少的了。

在中間如果寫錯的話,修改完後記得從Sequential()開始跑喔,不然模型會累積下去。

 

STEP8.進入訓練,設定最小批次、epoch及optimal方法

使用超小型MLP進行訓練,最小批次設定為100,epoch迴圈數設定為10次,驗證組比例設定為20%。訓練10次後,訓練組準確率為99.12%,驗證組準確率為72.96%。實際在跑時,是要參考驗證組準確率的。效果算是不好的,因為使用的模型太簡單。

 

STEP9.評估效能,使用Test Dataset評估

拿測試組資料來做二次驗證,發覺準確率為80.66%。

 

STEP10.建立預測模型

建立預測模型,這樣未來就可以餵自己的資料來做預測啦! 建立好後試跑看看每一組的預測值,因為前25,000組是正評,所以算出來接近1是正常的,表示模型正確。把預測數值轉換為文字顯示,比較容易理解數值意義。建立轉換測試結果函數,可以用來檢查每個測試檔的真實值跟預測值差異。

建立自訂值的預測函數。從這裡就可以直接放入文字到input_text,就會自動輸出預測結果。
在IMDb網站上隨便複製一段影評,確定他是正評或是負評,像這段它就是負評。也可以依照機率可能機率來區分幾星,就可以知道這段文字評分約是幾星了!

結語

這邊說明了影評的情緒分析。總體而言,使用英文的訓練相對簡單,在詞性抓取上比較沒問題,若是中文時,需要再安裝其他packages,才能夠正確使用。另外,因為使用的模型相對比較小,預測精準度就會相對性變低,可以再挑選比較好的模型來進行訓練,評分會更準確。


提供ChatGPT AI應用指南學習 – ChatGPT 與 Python 社群網路輿情分析實戰班

ChatGPT 社群分析相關新聞
AI應用技術擴散飛快,你知道目前市場上已經有哪些應用實務?
– 最新突破!OpenAI推ChatGPT官方外掛:能連網更新、訂餐廳>>>瞭解更多 〔註1〕
– 玉山銀行開始運用ChatGPT協助KYC開戶調查,未來Chatbot客服也要用?>>>瞭解更多 〔註2〕


資料來源
〔註1〕聯合新聞網
〔註2〕iThome