AI 影評家: 用 Hugging Face 模型打造一個電影評分機器人

本文為社區(qū)成員 Jun Chen 為 百姓 AI 和 Hugging Face 聯(lián)合舉辦的黑客松所撰寫的教程文檔,歡迎你閱讀今天的第二條推送了解和參加本次黑客松活動。文內(nèi)含有較多鏈接,我們不再一一貼出,請在文末查看渲染后的 Notebook 文件鏈接。
隨著人工智能和大模型 ChatGPT 的持續(xù)火爆,越來越多的個人和創(chuàng)業(yè)者都想并且可以通過自己創(chuàng)建人工智能 APP 來探索這個新興領(lǐng)域的機會。只要你有一個想法,你就可以通過各種開放社區(qū)和資源實現(xiàn)一些簡單功能,滿足特定領(lǐng)域或者用戶的需求。
試想現(xiàn)在有一部新的電影剛剛上線了,我們和朋友在家熱烈的討論著這部新的電影,這些都是非常有價值的電影評價的信息,不過估計這個時候很少有人會特地去登陸自己的豆瓣賬號再去發(fā)表這些剛剛的評論,如果有一個電影評論機器人可以自動收集這些評論并且根據(jù)評論打分,然后自動上傳到制定的電影評論網(wǎng)站呢?再比如,我們在某個餐廳吃飯,我們只用對著手機說幾句話,我們的評分就自動上傳到大眾點評呢?我們來試試如何實現(xiàn)這樣一個小小的機器人吧!
在本教程中,我們將探索如何使用 Hugging Face 資源來 Finetune 一個模型且構(gòu)建一個電影評分機器人。我們將向大家展示如何整合這些資源,讓你的聊天機器人具備總結(jié)評論并給出評分的功能。我們會用通俗易懂的語言引導(dǎo)你完成這個有趣的項目!
為了可以簡單的說明實現(xiàn)的步驟,我們簡化這個【電影打分機器人】的實現(xiàn)方法:
App 直接收集來自?
input
?的?text
?作為輸入,有興趣的小伙伴們可以研究一下如何接入到語音,Whisper to ChatGPT 是一個很有好的例子。App 不會實現(xiàn)自動上傳評價到特定網(wǎng)站。
第一步: 訓(xùn)練電影評價打分模型
首先我們需要一個可以看懂評論且給評論打分的模型,這個例子選用的是利用數(shù)據(jù)集 IMDb 微調(diào) DistilBERT,微調(diào)后的模型可以預(yù)測一個電影的評論是正面的還是負面的且給出評分(五分滿分)。
當(dāng)然大家可以根據(jù)各自的需求找到不同的數(shù)據(jù)集來 Finetune 模型,也可以使用不同的基礎(chǔ)模型,Hugging Face 上提供了很多可選項。
本任務(wù)使用或間接使用了下面模型的架構(gòu):
ALBERT, BART, BERT, BigBird, BigBird-Pegasus, BLOOM, CamemBERT, CANINE, ConvBERT, CTRL, Data2VecText, DeBERTa, DeBERTa-v2, DistilBERT, ELECTRA, ERNIE, ErnieM, ESM, FlauBERT, FNet, Funnel Transformer, GPT-Sw3, OpenAI GPT-2, GPT Neo, GPT-J, I-BERT, LayoutLM, LayoutLMv2, LayoutLMv3, LED, LiLT, Longformer, LUKE, MarkupLM, mBART, Megatron-BERT, MobileBERT, MPNet, MVP, Nezha, Nystr?mformer, OpenAI GPT, OPT, Perceiver, PLBart, QDQBert, Reformer, RemBERT, RoBERTa, RoBERTa-PreLayerNorm, RoCBert, RoFormer, SqueezeBERT, TAPAS, Transformer-XL, XLM, XLM-RoBERTa, XLM-RoBERTa-XL, XLNet, X-MOD, YOSO
在使用本示例前請安裝如下庫文件:
我們建議登陸 Hugging Face 賬戶進行操作,這樣就可以方便的上傳和分享自己創(chuàng)建的模型。當(dāng)有彈框時請輸入個人的 token 。根據(jù)下圖找到我們自己的 Hugging Face Tokens。

加載 IMDb 數(shù)據(jù)集
開始從 Datasets 庫中加載 IMDb 數(shù)據(jù)集 ?? :
檢查一下數(shù)據(jù)是否載入成功:?
在這個數(shù)據(jù)集中有兩個字段:
text
: 電影評論。label
: 0 或者 1。0
?代表負面評價、1
?代表正面評價。
輸入數(shù)據(jù)預(yù)處理
這一步是加載 DistilBERT tokenizer,并創(chuàng)建一個預(yù)處理函數(shù)來預(yù)處理?text
,且保證輸入不會大于 DistilBERT 的最長輸入要求:
使用 ?? Datasets map 函數(shù)把預(yù)處理函數(shù)應(yīng)用到整個數(shù)據(jù)集中。我們還可以使用?batched=True
?來加速?map
:?
使用 DataCollatorWithPadding 來生成數(shù)據(jù)包,這樣動態(tài)的填充數(shù)據(jù)包到最大長度能夠更加節(jié)省資源。
模型評測函數(shù)
選擇一個合適的測評指標(biāo)是至關(guān)重要的。大家可以直接調(diào)用庫函數(shù) ?? Evaluate 里的各種測評指標(biāo)。在這個例子中,我們使用了accuracy,了解更多請 查看文檔快速上手:
這里我們需要定義一個可以 計算 指標(biāo)的函數(shù):
訓(xùn)練模型
在開始訓(xùn)練前,需要定義一個id到標(biāo)簽和標(biāo)簽到id的?map
?:
如果不熟悉如何使用 Trainer 來訓(xùn)練模型, 可以查看更詳細的教程!
好了,一切已經(jīng)準(zhǔn)備就緒!我們可以使用 AutoModelForSequenceClassification 加載 DistilBERT 模型:?
接下來只有三步需要完成:
在 TrainingArguments 中定義模型超參,只有?
output_dir
?參數(shù)是必須的。我們可以設(shè)置?push_to_hub=True
?來直接上傳訓(xùn)練好的模型(如果已經(jīng)登陸了Hugging Face)。在每一個訓(xùn)練段,Trainer 都會評測模型的 accuracy 和保存此節(jié)點。傳入超參數(shù),模型,數(shù)據(jù)集和評測函數(shù)到 Trainer。
調(diào)用 train() 來微調(diào)模型。
訓(xùn)練結(jié)束后大家就可以通過 push_to_hub() 方法 上傳模型到 Hugging Face 上了,這樣所有人都可以看見并且使用你的模型了。
第二步:模型上傳到 Hugging Face
大家可以在 PyTorch Notebook或者 TensorFlow Notebook 查看更加詳細的關(guān)于如何微調(diào)模型的教程。
第三步:創(chuàng)建自己的 App
恭喜大家已經(jīng)獲得了自己的模型!下面我們可以在 Hugging Face 中創(chuàng)建一個自己的 App 了。
創(chuàng)建新的 Hugging Face Space 應(yīng)用
在 Spaces 主頁上點擊?Create new Space
?。
添加 App 邏輯
在?app.py
?文件中接入以下代碼:
成功運行后,大家應(yīng)該可以看見下面類似的界面:

注意,我們需要把必須的庫文件放在?requirements.txt
?中,例如這個 App 需要:
另外,由于我們在示范中只跑了 2 個 epoch,所以最終模型 accuracy 不高。大家可以根據(jù)自己的情況調(diào)整超參和訓(xùn)練時長。
上傳到 Hugging Face Spaces
而且?app.py
?以及?requirements.txt
?文件,都可以在 Hugging Face Hub 的界面上直接操作,如下圖:

第四步: 完成機器人開發(fā)
現(xiàn)在,你已經(jīng)創(chuàng)建了一個能夠根據(jù)電影評論給電影打分的機器人。當(dāng)你向機器人提問時,它會使用 Hugging Face 的模型進行情感分析,根據(jù)情感分析結(jié)果給出一個評分。
chjun/movie_rating_bot 是根據(jù)以上教程完成的一個機器人 App,大家也可以直接復(fù)制這一個 Space 應(yīng)用,并在此基礎(chǔ)上更改開發(fā)。
點擊?submit
,與你的 AI 伙伴互動吧!這個項目僅僅是一個起點,你可以根據(jù)自己的需求和興趣進一步完善這個聊天機器人,使其具備更多有趣的功能。
第五步: 接入 BaixingAI 機器人廣場
還有更激動人心的一步,我們可以把機器人接口根據(jù) BaixingAI 機器人廣場需求 擴展,讓我們自己創(chuàng)建的機器人可以去和其他機器人交流對話,以下是代碼示范:
更多詳情請參考 Hugging Face 上 baixing 的 Spaces:
https://hf.co/baixing
渲染后的 Notebook 文件: https://ipynb.cn/urls/huggingface.co/datasets/HuggingFace-CN-community/translation/raw/main/events/movie_rating_bot_FINAL.ipynb
未來已來,各位 Hackathon 參賽者們都是探索者,預(yù)祝大家一切順利!