此專案為成功大學敏求智慧學院 聊天機器人之互動設計
課程期末專題報告。
以交通部精選之台南市觀光餐飲店約150家為基礎,爬取每家餐飲店的google評論內容與星級進行NLP語言模型訓練,針對各條評論的主題與情緒
進行分類標記後進行模型訓練,最終部署於Line聊天機器人上,詳細專案內容及實際Demo影片可參考以下連結。
步驟四:NLP模型會針對上述語句做二個面向的判斷,一是 主題
(價格/服務/食物/環境/地點/其他),二是 情緒
(正面/中立/負面),之後針對句子做各項詞句標記,用意系為了找到食物主題之名詞
,最終由上述這三個資訊和後端資料庫進行比對,找出相似度最高且評分最高的餐飲店進行推薦。
例外情況一:若輸入之食物不在資料庫內,聊天機器人將自動將其透過 Google Places API
進行搜尋並回傳評分最高之餐廳,因此即便使用者想吃的食物不在資料庫內也能進行推薦,是避免機器人癱瘓之保護機制之一,
以下為資料庫建置與模型訓練過程簡介
Final Project
├── app.py # LineBot主程式
├── view.py # LineBot回應內容
├── emotional_bert.py # 情緒分類模型(正面/中立/負面)
├── response_emotion.tsv # 使用者傳入訊息紀錄
├── emotional_model/ # 預訓練情緒模型
│ ├── pytorch_model.bin
│ └── config.json
├── subject_bert.py # 主題分類模型(食物/環境/價錢/服務/地點/其他)
├── response.tsv # 使用者傳入訊息紀錄
├── subject_model/ # 預訓練主題模型
│ ├── pytorch_model.bin
│ └── config.json
├── recognize_food_n.py # 擷取開放式回應中"名詞內容"
├── compute_n_silimar.py # 計算該名詞與資料庫中"名詞相似度"
├── food_database.py # 店家、美食品項資料庫建置
├── database_1.json # 美食資料庫
├── database_1_max.json
├── google_api_dataset.json # 店家資料庫
├── review_preprocess.py # 評論資料前處理
├── dataset/ # 處理後評論資料集
│ └── ...
├── data/ # 處理前評論資料集
│ └── ...
├── config.ini
├── Dockerfile
└── requirements.txt
- 情緒模型訓練: https://colab.research.google.com/drive/1lSt67rvvuMsUizAnNsX81lLiy8WsgdPT?usp=sharing
- 主題模型訓練: https://colab.research.google.com/drive/1y8krqcxPTxV1-6jX5ZXRITWSx7FGuEuv?usp=sharing
- Calculate N similarity:
- Using Bert-base-chinese/CKIP transformer: https://colab.research.google.com/drive/1IV1lUzXyGIm68ytvH3yH10CWLyuSaiK-?usp=sharing
- Using Sentense Transformers' distiluse-base-multilingual-cased-v2:https://colab.research.google.com/drive/1SeuwuAvQzNu6swZnzgLDXW_59M0YkinY?usp=sharing