|
--- |
|
language: |
|
- tw |
|
tags: |
|
- t5 |
|
license: afl-3.0 |
|
--- |
|
|
|
# Hotel review multi-aspect sentiment classification using T5 |
|
|
|
We fine tune a T5 pretrained model to generate multi-aspect sentiment classes. The outputs are whole sentiment, aspect, and aspect+sentiment. |
|
|
|
T5情緒面向分類多任務,依據中文簡體孟子T5預訓練模型微調,訓練資料集只有3萬筆,做NLP研究與課程的範例模型用途。 |
|
|
|
# 如何測試 |
|
在右側測試區輸入不同的任務文字 |
|
|
|
範例1: |
|
面向::早餐可以吃的饱,但是东西没了,不一定会补 |
|
範例2: |
|
面向情绪::房间空调系统有烟味,可考虑做调整 |
|
範例3: |
|
整体情绪::位置离逢甲很近 |
|
|
|
資料集: |
|
資料集蒐集自線上訂房網站的顧客留言10050筆,整理成3項任務,總筆數變成為3倍,共有30150筆(資料由本實驗室成員YYChang蒐集)。 |
|
|
|
輸入與輸出格式:有三個種類任務分別為: |
|
|
|
'整体情绪::' |
|
'面向::', |
|
'面向情绪::' |
|
|
|
舉例如下: |
|
整体情绪::因为防疫期间早餐要在房内用餐,但房内电视下的平台有点窄,有点不方便,负面情绪 |
|
整体情绪::只是隔音有点不好,负面情绪 |
|
整体情绪::订的是豪华家庭房,空间还算大,正面情绪 |
|
整体情绪::床大,正面情绪 |
|
|
|
面向::房间有奇怪的味道,"整洁舒适面向,设施面向" |
|
面向::干净、舒适、亲切,价钱好~,"整洁舒适面向,性价比面向" |
|
面向::位置便利,可以在附近悠闲散步,至市区也不远,又临近大海,住得十分舒服。,"整洁舒适面向,地点面向" |
|
|
|
面向情绪::反应无效,服务面向的负面情绪 |
|
面向情绪::床其实还蛮好睡,枕头床被还算干净,至少不会让皮肤痒。离火车站市场闹区近。,"整洁舒适面向的正面情绪,设施面向的正面情绪,地点面向的正面情绪" |
|
面向情绪::设备真的太旧了,灯光太暗了。,设施面向的负面情绪 |
|
面向情绪::住四天,没人打扫清洁,第一天有盥洗用品,其余就没补充,热水供应不正常,交通尚可。,"整洁舒适面向的负面情绪,设施面向的负面情绪,地点面向的正面情绪" |
|
面向情绪::饭店太过老旧,房内桌子衣橱近乎溃烂,浴室有用过未清的毛巾,排水孔有近半垃圾未清,马桶肮脏,未提供浴巾,莲蓬头只能手持无法挂著墙上使用,空调无法控制,壁纸剥落,走道昏暗,近车站。,"整洁舒适面向的负面情绪,设施面向的负面情绪,地点面向的正面情绪" |
|
|
|
預訓練模型: |
|
目前初步先使用"Langboat/mengzi-t5-base"簡體中文預訓練模型加以微調。 |
|
由"Langboat/mengzi-t5-base"官網資訊得知是由簡體中文語料所訓練,因此我們將繁體中文留言先轉成簡體中文,再進行微調訓練。 |
|
|
|
訓練平台: 使用Google colab Tesla T4 GPU進行了3 epochs訓練,費時55分鐘,val_loss約為0.0315,初步實驗,仍有很大的改善空間。 |
|
|
|
未來改善工作:下一階段會進行數據增強(由於蒐集的語料是不平衡),以及使用Google的mt5繁體簡體中文預訓練模型加以微調,微調語料就可直接使用繁體中文。 |
|
|
|
使用範例:(輸入繁體中文需先將文字轉為簡體中文,再丟給模型產出輸出文字) |
|
|
|
# 載入模型(使用的是simplet5套件) |
|
#pip install simplet5 |
|
from simplet5 import SimpleT5 |
|
model = SimpleT5() |
|
model.load_model("t5","clhuang/t5-hotel-review-sentiment", use_gpu=False) |
|
|
|
# 整體情緒分類任務 |
|
text="整体情绪::位置离逢甲很近" |
|
model.predict(text) |
|
#['正面情绪'] |
|
|
|
# 面向分類任務 |
|
text="面向::早餐可以吃的饱,但是东西没了,不一定会补" |
|
model.predict(text) |
|
#['服务面向'] |
|
|
|
# 面向分類+情绪分類任務 |
|
text='面向情绪::房间空调系统有烟味,可考虑做调整' |
|
model.predict(text) |
|
#['设施面向的负面情绪'] |
|
|
|
# 輸入輸出改成是繁(正)體中文,輸出三項分類任務資訊 |
|
from opencc import OpenCC |
|
t2s = OpenCC('t2s') # convert from Traditional Chinese to Simplified Chinese |
|
s2t = OpenCC('s2t') # convert from Simplified Chinese to Traditional Chinese |
|
class_types = ['整体情绪::','面向::','面向情绪::'] |
|
def predict(text): |
|
text = t2s.convert(text) |
|
response=[] |
|
for prefix in class_types: |
|
response.append(s2t.convert(model.predict(prefix+text)[0])) |
|
return response |
|
|
|
text='位置近市區,人員親切,食物好吃' |
|
predict(text) |
|
#['正面情緒', '服務面向,地點面向', '服務面向的正面情緒,地點面向的正面情緒'] |
|
|