LangChain+ChatGLM如何調(diào)優(yōu)?
SMP 2023金融大模型挑戰(zhàn)賽實(shí)踐優(yōu)化調(diào)試分享(三)
眾所周知,調(diào)試是在開(kāi)發(fā)過(guò)程中以及在項(xiàng)目投入使用前必不可少的階段,甚至有80%的0時(shí)間我們都在進(jìn)行這一步驟,以此找出錯(cuò)誤原因和具體位置,然后修正代碼,最終呈現(xiàn)出最符合自己理想的設(shè)計(jì)。下面是我這兩天在調(diào)試代碼中得到的經(jīng)驗(yàn):
一、大概思路:
1、抽取部分輸出樣本進(jìn)行數(shù)據(jù)標(biāo)注
2、將樣本debug,找出錯(cuò)誤原因并歸類(lèi)
3、修改代碼,逐個(gè)解決每類(lèi)問(wèn)題
二、詳細(xì)步驟:
(一)抽取部分輸出樣本進(jìn)行數(shù)據(jù)標(biāo)注
資料給了5000個(gè)左右的問(wèn)題,其中包括初級(jí)問(wèn)題、中級(jí)問(wèn)題和高級(jí)問(wèn)題。我從初級(jí)問(wèn)題中抽取了50個(gè)進(jìn)行數(shù)據(jù)標(biāo)注。為了思路清晰我列了個(gè)表,表頭包括:id、文本、輸出答案、答案是否正確、修改后的答案以及可能出錯(cuò)的原因。其中,修改后的答案是我人為查找并記錄在表格里的,沒(méi)有對(duì)文件進(jìn)行操作。

(二)將樣本debug,找出錯(cuò)誤原因并歸類(lèi)
這里需要寫(xiě)一個(gè)debug程序,目的是在運(yùn)行這個(gè)程序的時(shí)候能把中間的步驟輸出出來(lái)(就是在主代碼的基礎(chǔ)上改編一下)。我通過(guò)這個(gè)程序?qū)⒚總€(gè)回答有錯(cuò)誤的問(wèn)題依次運(yùn)行,找出錯(cuò)誤原因(查看它是從哪里得到答案),并把錯(cuò)誤原因歸類(lèi)。我大致分為了以下六種情況:
1、數(shù)據(jù)庫(kù)中沒(méi)這年的數(shù)據(jù)(資源文件中有):即文件在上傳數(shù)據(jù)庫(kù)時(shí)出現(xiàn)了問(wèn)題。
2、數(shù)據(jù)沒(méi)找對(duì)(資源文件中有):即文件在上傳數(shù)據(jù)庫(kù)沒(méi)問(wèn)題,但機(jī)器找錯(cuò)了文件。
3、找對(duì)了資源文件,但是GLM沒(méi)回答對(duì):即文件在上傳數(shù)據(jù)庫(kù)沒(méi)問(wèn)題,機(jī)器找文件沒(méi)問(wèn)題,但沒(méi)找到具體字段。
4、資源文件中沒(méi)有:即資源文件本來(lái)就不包含某年的報(bào)告,無(wú)從查找。
5、debug沒(méi)錯(cuò):即bug已修正。
6、no company:debug時(shí)有時(shí)會(huì)輸出這一行,找不到公司的問(wèn)題。
為了更快歸類(lèi),我在之前的表格中加了一列“調(diào)試得到的原因”來(lái)進(jìn)行記錄:

(三)修改代碼,逐個(gè)解決每類(lèi)問(wèn)題
這里我就列舉解決“找對(duì)了資源文件,但是GLM沒(méi)回答對(duì)”的問(wèn)題。
1、首先debug,可以看到它的問(wèn)題是找對(duì)了資源文件,但明擺著的“公司網(wǎng)址”它卻說(shuō)無(wú)法找到。

同時(shí),在沒(méi)有任何改動(dòng)的情況下,類(lèi)似的問(wèn)題它卻可以輸出正確答案。

2、查看debug代碼,猜想是prompt的問(wèn)題,最開(kāi)始的prompt如下:

3、經(jīng)過(guò)反復(fù)的刪減調(diào)試,發(fā)現(xiàn)prompt文本中的“需要根據(jù)文檔提供的內(nèi)容回答問(wèn)題”導(dǎo)致部分問(wèn)題不能正確回答網(wǎng)址。修改后如下:

最終得到了正確的輸出:

以上就是我在LangChain+ChatGLM2-6B+SMP 2023金融大模型挑戰(zhàn)賽實(shí)踐優(yōu)化調(diào)試分享,希望可以幫到大家。歡迎發(fā)私信與我共同討論更多該領(lǐng)域的知識(shí)!