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)
#['正面情緒', '服務面向,地點面向', '服務面向的正面情緒,地點面向的正面情緒']
Downloads last month
14
Inference Examples
This model does not have enough activity to be deployed to Inference API (serverless) yet. Increase its social visibility and check back later, or deploy to Inference Endpoints (dedicated) instead.