基于本地知識(shí)的問答機(jī)器人langchain-ChatGLM 大語言模型實(shí)現(xiàn)方法詳解
背景
ChatGPT火了后,各種大語言模型(LLM)模型相繼被發(fā)布,完全開源的有ChatGLM、BLOOM、LLaMA等。但是這些模型學(xué)到的知識(shí)是滯后的(比如ChatGPT的知識(shí)是截止到2021年),并且這些知識(shí)是通用領(lǐng)域的。
在實(shí)際應(yīng)用場(chǎng)景中,除閑聊機(jī)器人外,大多數(shù)機(jī)器人是為了完成特定任務(wù)的。比如數(shù)字人虛擬主播、某公司的智能客服等都需要圍繞具體的業(yè)務(wù)來進(jìn)行問答。如何將具體業(yè)務(wù)知識(shí)融合到大語言模型里,是問答機(jī)器人落地應(yīng)用需要考慮的一個(gè)重要問題。
一、langchain-ChatGLM簡(jiǎn)介
langchain-ChatGLM是一個(gè)基于本地知識(shí)的問答機(jī)器人,使用者可以自由配置本地知識(shí),用戶問題的答案也是基于本地知識(shí)生成的。github鏈接為:GitHub - imClumsyPanda/langchain-ChatGLM: langchain-ChatGLM, local knowledge based ChatGLM with langchain | 基于本地知識(shí)的 ChatGLM 問答。
二、以淘寶衣服為例,測(cè)試問答效果
以淘寶衣服屬性構(gòu)建本地知識(shí),測(cè)試問答效果。將淘寶鏈接為https://detail.tmall.com/item.htm?abbucket=6&id=656544342321&ns=1&spm=a230r.1.14.48.b3f84f64A9YLJ0的"寶貝詳情"和"尺碼推薦"整理成《local_knowledge_clothing_describe.txt》,內(nèi)容如下:
身高:160-170cm, 體重:90-115斤,建議尺碼M。 身高:165-175cm, 體重:115-135斤,建議尺碼L。 身高:170-178cm, 體重:130-150斤,建議尺碼XL。 身高:175-182cm, 體重:145-165斤,建議尺碼2XL。 身高:178-185cm, 體重:160-180斤,建議尺碼3XL。 身高:180-190cm, 體重:180-210斤,建議尺碼4XL。 身高:180-195cm, 體重:210-230斤,建議尺碼5XL。 面料分類:滌綸 圖案:幾何圖案 領(lǐng)型:連帽 衣門襟:拉鏈 顏色:黑色302春秋款(斜插口袋) 深灰色302春秋款(斜插口袋) 藍(lán)色302春秋款(斜插口袋) 米色302春秋款(斜插口袋) 黑色303春秋款(工裝口袋) 深灰色303春秋款(工裝口袋) 藍(lán)色303春秋款(工裝口袋) 黑色303(冬季棉衣款加棉加厚) 深灰色303(冬季棉衣款加棉加厚) 藍(lán)色303(冬季棉衣款加棉加厚) 黑色302(冬季棉衣款加棉加厚) 米色302(冬季棉衣款加棉加厚) 黑色303春秋款+黑色302春秋款 深灰色303春秋款+黑色302春秋款 袖型:收口袖 適用季節(jié):春秋 袖長(zhǎng):長(zhǎng)袖 厚?。撼R?guī) 適用場(chǎng)景:其他休閑 衣長(zhǎng):常規(guī)款 版型:寬松型 款式細(xì)節(jié):假兩件 工藝處理:涂層 適用對(duì)象:青少年 面料功能:防風(fēng) 穿搭方式:外穿 材質(zhì)成分:聚酯纖維100%
加載《local_knowledge_clothing_describe.txt》作為本地知識(shí),問答效果如下所示:
用戶:身高173,體重144斤,選什么尺寸客服: 您的身高為173厘米,體重為144斤,建議選擇尺碼為XL。這個(gè)尺寸適用于身高在170-178厘米之間,體重在130-150斤之間的人。選擇XL尺寸可以確保衣服能夠合適地遮蓋住身體,同時(shí)不會(huì)過小或過大,確保穿著舒適。用戶:衣服是什么材質(zhì)客服: 衣服的材質(zhì)成分為聚酯纖維100%
從測(cè)試的問答效果上來看,滿足了基本的要求,具體情況仍需要更多的實(shí)測(cè)結(jié)果來說明。
三、langchain-ChatGLM的原理
先上圖,langchain-ChatGLM的架構(gòu)如下圖所示:
圖1、langchain-ChatGLM的架構(gòu)
3.1、從本地知識(shí)中獲取與用戶query相關(guān)的context
通過Faiss搜索得到與query_embedding關(guān)系最緊密的Top K個(gè)Document,將這些Document的內(nèi)容按換行符拼起來作為query的context。舉例說明如下圖所示:
圖2、通過Faiss搜索得到query相關(guān)的context
3.2、用query和context填充模版得到prompt
模版示例如下,可根據(jù)問答效果自行修改
prompt_template = """基于以下已知信息,簡(jiǎn)潔和專業(yè)的來回答用戶的問題。不允許在答案中添加編造成分。 已知內(nèi)容: {context} 問題: {query}"""
將context和query填充到模版得到的prompt,加它輸入給ChatGLM-6B就能生成response。
四、langchain-ChatGLM使用中
五、問答需要優(yōu)化的環(huán)節(jié)
個(gè)人認(rèn)為langchain-ChatGLM是一種使用本地知識(shí)進(jìn)行問答的框架,它的實(shí)際問答效果與下面兩個(gè)問題相關(guān):
1、如何通過得到query相關(guān)性高的context,即與query相關(guān)的Document盡可能多的能被召回;
2、如何讓LLM基于query和context得到高質(zhì)量的response。
5.1、讓query相關(guān)的Document盡可能多的被召回
將本地知識(shí)切分成Document的時(shí)候,需要考慮Document的長(zhǎng)度、Document embedding質(zhì)量和被召回Document數(shù)量這三者之間的相互影響。在文本切分算法還沒那么智能的情況下,本地知識(shí)的內(nèi)容最好是已經(jīng)結(jié)構(gòu)化比較好了,各個(gè)段落之間語義關(guān)聯(lián)沒那么強(qiáng)。Document較短的情況下,得到的Document embedding的質(zhì)量可能會(huì)高一些,通過Faiss得到的Document與query相關(guān)度會(huì)高一些。
使用Faiss做搜索,前提條件是有高質(zhì)量的文本向量化工具。因此最好是能基于本地知識(shí)對(duì)文本向量化工具進(jìn)行Finetune。另外也可以考慮將ES搜索結(jié)果與Faiss結(jié)果相結(jié)合。
5.2、基于query和context讓LLM得到高質(zhì)量的response
有了query相關(guān)的context后,如何讓LLM生成高質(zhì)量的response,也是一個(gè)非常重要的問題。優(yōu)化的點(diǎn)有兩個(gè):①、嘗試多個(gè)的prompt模版,選擇一個(gè)合適的,但是這個(gè)可能有點(diǎn)玄學(xué);②、用與本地知識(shí)問答相關(guān)的語料,對(duì)LLM進(jìn)行Finetune。
補(bǔ)充:ChatGML模型對(duì)于硬件的要求比較高,內(nèi)存需要32G以上,半精度的 ChatGLM2-6B 模型需要大概 13GB 內(nèi)存。
查看專屬GPU內(nèi)存:因?yàn)镃hatGLM2內(nèi)存要求6GB以上才可以發(fā)揮出性能要求。
下表為ChatGLM2-2B的根據(jù)顯存大小決定的問答性能。
量化等級(jí) | 最低 GPU 顯存(推理) | 最低 GPU 顯存(高效參數(shù)微調(diào)) |
---|---|---|
FP16(無量化) | 13 GB | 14 GB |
INT8 | 8 GB | 9 GB |
INT4 | 6 GB | 7 GB |
- linux環(huán)境部署清華大學(xué)大模型最新版 chatglm2-6b 圖文教程
- macbook安裝環(huán)境chatglm2-6b的詳細(xì)過程
- ChatGLM-6B+LangChain環(huán)境部署與使用實(shí)戰(zhàn)
- ChatGPT平替-?ChatGLM多用戶并行訪問部署過程
- ChatGPT平替-ChatGLM環(huán)境搭建與部署運(yùn)行效果
- ChatGLM?集成LangChain工具詳解
- 基于prompt?tuning?v2訓(xùn)練好一個(gè)垂直領(lǐng)域的chatglm-6b
- 最簡(jiǎn)化ChatGLM2-6b小白部署教程【windows系統(tǒng),16G內(nèi)存即可,對(duì)顯卡無要求,CPU運(yùn)行】
相關(guān)文章
Python區(qū)塊鏈范圍結(jié)論及Genesis Block的添加教程
這篇文章主要為大家介紹了Python區(qū)塊鏈范圍結(jié)論及Genesis Block的添加,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05Pandas實(shí)現(xiàn)Dataframe的重排和旋轉(zhuǎn)
使用Pandas的pivot方法可以將DF進(jìn)行旋轉(zhuǎn)變換,本文將會(huì)詳細(xì)講解pivot的秘密,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-06-06Python?Flask實(shí)現(xiàn)圖片上傳與下載的示例詳解
這篇文章主要為大家詳細(xì)介紹了如何利用Python和Flask實(shí)現(xiàn)圖片上傳與下載(支持漂亮的拖拽上傳),文中示例代碼講解詳細(xì),感興趣的可以了解一下2022-05-05pandas 強(qiáng)制類型轉(zhuǎn)換 df.astype實(shí)例
這篇文章主要介紹了pandas 強(qiáng)制類型轉(zhuǎn)換 df.astype實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-04-04centos+nginx+uwsgi部署django項(xiàng)目上線
本文主要介紹了centos+nginx+uwsgi部署django項(xiàng)目上線,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07