AI賦能游戲:問答機器人的設(shè)計與實現(xiàn)
AI發(fā)展快速,最適合的應(yīng)用場景,應(yīng)該是游戲了。光是NPC的問答、選項,就有很多可以操作的空間。本文從游戲行業(yè)出發(fā),分析了問答機器人的實現(xiàn)原理和語料的經(jīng)驗,供大家參考。
隨著AI這兩年的快速發(fā)展,游戲廠商躍躍欲試如何讓AI融入游戲。
半年前,我們也在游戲內(nèi)嵌社區(qū)中,上線了一款以大語言模型為核心打造的問答機器人,旨在滿足玩家快速獲取攻略的需求。
這篇文章,將以游戲行業(yè)產(chǎn)品經(jīng)理的角度,分享這款問答機器人的實現(xiàn)原理,及其語料的制作經(jīng)驗。
一、為什么需要問答機器人
問答機器人所落地的游戲,是一款三國策略類游戲。游戲中玩家被隨機分到魏蜀吳中的一個國家,并通過一系列玩法攻城略地,擴展疆土。玩家可以招募各色三國英雄,并給英雄搭配不同裝備、學(xué)習(xí)不同技能以提升戰(zhàn)力,并可以組建不同的英雄陣容去挑戰(zhàn)別的玩家以及掠奪別國的城池。因此,游戲玩法的自由度給予了玩家很多策略探索的可能。
起初,我們只是搭建了一個問答社區(qū),供用戶發(fā)表問題與分享攻略心得。隨著玩家人數(shù)增加及賽季的深入,玩家對攻略的需求日益明顯。官方發(fā)布的攻略,不一定能滿足玩家快速獲取攻略的需求。有時候玩家只想找一個答案,卻要看完一整篇攻略。因此,我們想通過智能問答機器人的形式,滿足玩家快問快答的痛點,以提升玩家的游戲體驗。
我們的智能機器人名為“諸葛先生”,以H5的形式開展對話。對用戶來說沒有復(fù)雜的功能,只要提問,機器人就會回答。
(頁面樣式這里用原型圖代替了哈)
二、機器人技術(shù)原理:大語言模型RAG的應(yīng)用
在介紹問答機器人的原理前,先說一個前提,就是我們的大語言模型的語料庫中,有一種語料是QA形式的,即一問(question)一答(answer),與一般的段落形文章有所區(qū)別。關(guān)于語料庫的介紹,下邊章節(jié)會繼續(xù)細(xì)說。這里將繼續(xù)講機器人的運行原理。
如下圖,在用戶提出問題后,我們的機器人分有兩個答案輸出邏輯。首先,用戶提問的問題都會先進(jìn)行內(nèi)容檢索,通過檢索模型檢索出與用戶提問相關(guān)的內(nèi)容。當(dāng)檢索到用戶提問有匹配的QA時(即玩家提問匹配到語料庫中預(yù)設(shè)的Question),則程序會直接輸出Answer;另一種邏輯是,當(dāng)檢索模型沒有檢索到匹配的QA,那程序就會繼續(xù)檢索其他內(nèi)容(如文章段落),并產(chǎn)出一條帶內(nèi)容的提示詞(prompt)輸入到大語言模型中,由大語言模型生成答案。
舉個例子,假設(shè)用戶提問了“趙云怎么培養(yǎng)”,則程序會通過檢索模型,先檢索是否存在與“趙云怎么培養(yǎng)”接近的question,存在則輸出對應(yīng)answer,否則找出“趙云培養(yǎng)”相關(guān)的內(nèi)容。我們比擬程序找到的相關(guān)內(nèi)容為AABB,此時給到大語言模型的提示詞(prompt)就是:“AABB,請根據(jù)上述內(nèi)容回答:趙云怎么培養(yǎng)?!贝笳Z言模型則根據(jù)上述提示詞生成答案。
為什么我們不直接使用大語言模型,而是前置一步加入檢索模型呢?
我們知道,大語言模型基于神經(jīng)網(wǎng)絡(luò)模型,使用大量的語料庫進(jìn)行訓(xùn)練,比如互聯(lián)網(wǎng)上的大量文本數(shù)據(jù)。因此,大語言模型能高效準(zhǔn)確地回答通用知識類的問題。而游戲?qū)儆趯S蓄I(lǐng)域,如何讓大語言模型直接回答專有領(lǐng)域知識,則它給出的答案必定會差強人意(答非所問或是回答不出)。因此我們會先前置一步進(jìn)行內(nèi)容搜索,通過內(nèi)容來約束大語言模型的生成。這樣的技術(shù)邏輯也稱為RAG(Retrieval-Augmented Generation,檢索增強生成)。
RAG其實就是對大語言模型的檢索能力及聯(lián)想能力的外擴,讓大語言模型在可控范圍內(nèi)生成更準(zhǔn)確高精的回答,尤其適用于專有領(lǐng)域的問答工具。RAG的原理如下圖:
圖片源自《Chatbot從0到1》(第2版),作者李佳芮、李卓桓
RAG 系統(tǒng)的起點一般是一個文本文檔的語料庫,簡單看起來是這樣的: 把文本分割成塊,然后把這些分塊嵌入到向量與transformer編碼器模型,把所有這些向量建立索引,從而查詢出與用戶提問相關(guān)的上下文,最后創(chuàng)建一個帶上下文的大語言模型提示語,讓模型回答用戶的查詢。
我們可以對比有無檢索模型對回答的差別:
大語言模型同樣是ChatGPT3.5,提問“趙云要怎么培養(yǎng)”,單純使用大語言模型,而沒有檢索模型的約束時,回答的內(nèi)容就和游戲不沾邊(左圖)。而使用了檢索模型,讓大語言模型的回答就完全貼合游戲了(右圖)。
三、問答質(zhì)量的打磨調(diào)優(yōu)
為了提升機器人的回答準(zhǔn)確率。我們的調(diào)優(yōu)有幾個方面:
增強對用戶提問的理解
對于用戶的提問,除了分詞切割,我們還有錯字甄別、同義詞判定等邏輯,希望程序能盡量清晰理解用戶的意向。
增強檢索模型的召回質(zhì)量
在眾多語料中如何找到最匹配玩家的內(nèi)容呢?我們的檢索算法,會在對用戶提問進(jìn)行分詞后,會先用BM25算法根據(jù)關(guān)鍵詞對文檔進(jìn)行第一次評分,然后根據(jù)評分閾值提取top-k文檔進(jìn)行第二次評分,還有問題和文檔稠密向量的相關(guān)性評分等。每一步都可能影響檢索的內(nèi)容及LLM的回答結(jié)果。
選擇更智能的語言模型
機器人上線初期,使用的模型是國內(nèi)的ChatGLM2.0。但通過拉取用戶的實際問答數(shù)據(jù),我們發(fā)現(xiàn)答案質(zhì)量并不理想,答案中存在較多答非所問、胡編亂造的問題。并且在多次調(diào)優(yōu)檢索模型后(提高召回文檔的相關(guān)性),答案質(zhì)量仍然不佳。
于是我們考慮更換大語言模型。我們找來了兩款智能體做對比,分別是ChatGPT3.5及Google旗下的Gemma。三者對比后我們發(fā)現(xiàn),ChatGLM2.0的幻覺問題較其他兩個模型會更為明顯。意思就是,如果檢索模型召回的文檔中不存在用戶提問的相關(guān)內(nèi)容(相關(guān)性低),則ChatGLM2.0會一本正經(jīng)胡說八道。即便是檢索模型召回的文檔中有用戶所需的內(nèi)容(相關(guān)性高),ChatGLM2.0也可能會回答失準(zhǔn)。
最后我們選擇了ChatGPT3.5。對比下來,ChatGPT3.5在對話生成的流暢度、連貫性以及上下文理解方面的表現(xiàn)都更出色,能夠生成更加精準(zhǔn)和自然的回答,對于無法回答的問題,也會更直接地告知用戶它不清楚。
四、語料的構(gòu)成
如果說模型是問答機器人的肉軀,那語料就是血液。語料足夠多,覆蓋面足夠廣,問答機器人才會更具活力。
我們的語料有幾個部分構(gòu)成:
- 游戲內(nèi)所有呈現(xiàn)給玩家的文案,包括道具名稱、說明及玩法簡介。這類內(nèi)容屬于短內(nèi)容,只有單個句子或單一段落。
- 發(fā)布于官網(wǎng)、論壇的游戲攻略。這類內(nèi)容屬于長內(nèi)容,由多個段落構(gòu)成。
- QA問答對。一問一答的固定內(nèi)容。
如前所述,我們機器人分了兩個答案輸出邏輯,如果檢索模型命中QA,則會更快給玩家產(chǎn)出答案?;诖耍覀兗哟罅薗A問答對的產(chǎn)量,以提升問答效率。QA來源于玩家的真實提問,我們提取了高頻問題,以及部分刁鉆的提問,做成了問答對。
制作問答對比較費人工,因為answer都是人工寫的,有時候還要玩一下游戲驗證寫的answer是否正確。為了節(jié)約工時,我們又借用了AI工具協(xié)助我們生產(chǎn)問答對。這里AI工具的作用不是幫我們快速生成答案,而是提前生成玩家可能問到的問題并產(chǎn)出答案。我們給AI喂入上述語料中的2-攻略長內(nèi)容,并讓AI根據(jù)文章內(nèi)容中生成QA。不過,雖然生產(chǎn)速度提高了,但內(nèi)容的實用性卻并不高。AI生成的問題并不像玩家的提問,更像是老師出的考題,需要再二次修改問答對的內(nèi)容。因此,目前的問答對維護(hù)還是集中在人工生產(chǎn)。
五、問答機器人的未來創(chuàng)想
我們的問答機器人還有很多優(yōu)化空間。目前,雖然它在提升玩家體驗方面已經(jīng)取得一定成效,但仍存在一些需要改進(jìn)的地方。例如尚未開發(fā)連續(xù)對話,玩家無法追問,造成對話交互不夠自然流暢。此外,隨著游戲內(nèi)容的不斷更新,我們的語料庫也需要持續(xù)地維護(hù)和擴充,這也是需要不斷消耗人力的工作。
不過我相信,問答機器人將在未來的游戲世界中扮演更加重要的角色,為玩家?guī)砀泳屎捅憬莸挠螒蝮w驗。
歡迎在評論區(qū)一起探討問答機器人的更多可能~
作者:楊桃,游戲行業(yè)B端產(chǎn)品經(jīng)理,愛用文字記錄觀察及想法。
本文由 @楊桃 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理,未經(jīng)許可,禁止轉(zhuǎn)載。
題圖來自 Unsplash,基于CC0協(xié)議。
該文觀點僅代表作者本人,人人都是產(chǎn)品經(jīng)理平臺僅提供信息存儲空間服務(wù)。
請問下 從語料學(xué)習(xí)訓(xùn)練到成為可用的問答機器人,大概用了多久?
從0到1的階段其實很快,一個月左右就產(chǎn)出模型和功能了。不過,驗證問答效果及打磨問答質(zhì)量的用時就比較久,花了將近半年。
否則找出“趙云培養(yǎng)”相關(guān)的內(nèi)容。我們比擬程序找到的相關(guān)內(nèi)容為AABB,此時給到大語言模型的提示詞(prompt)就是:“AABB,請根據(jù)上述內(nèi)容回答:趙云怎么培養(yǎng)。”這段內(nèi)容沒看懂,AABB是什么意思?能不能舉一下具體的例子,謝謝
好像是把大模型找到的相關(guān)內(nèi)容,再以一個新的prompt輸入給程序,新的指令不是趙云怎么培養(yǎng),而是根據(jù)AABB的內(nèi)容回答趙云怎么培養(yǎng)
明白了,謝謝
是的,正如那位朋友說的那樣。當(dāng)用戶提問“趙云怎么培養(yǎng)”,檢索模型會找出一段內(nèi)容,然后再把這段內(nèi)容加上用戶的提問,以提示詞的形式喂入大語言模型。
再舉個例子:
玩家提問:趙云怎么培養(yǎng)
檢索模型:找到的內(nèi)容是“趙云是一個×××的英雄,他應(yīng)該這樣培養(yǎng):×××。”
大語言模型的提示詞:“趙云是一個×××的英雄,他應(yīng)該這樣培養(yǎng):×××。,請根據(jù)上述內(nèi)容回答:趙云怎么培養(yǎng)”
明白了,謝謝