到底該——如何提高“AI回復的準確性”? |課題時間Vol.1

當我們在琢磨“提高AI回復準確性”這個問題時,都繞不過對Finetune和Prompt Engineering(提示詞工程)這兩個技術(shù)路徑的考察。
這二者,都是為了達成一個樸素的目標——利用“私有數(shù)據(jù)+大模型”,讓機器理解人的意圖,以獲得盡可能符合人類預期的答復。
所以,我該選Finetune還是Prompt Engineering呢?
凡對大模型的小規(guī)模訓練,皆可視為Finetune。除了數(shù)據(jù)集上的差別,它在技術(shù)流程上跟預訓練沒有本質(zhì)區(qū)別,沒條件的企業(yè),建議忽略這個選項,一來是貴(肯定比預訓練便宜,但相比Prompt Engineering還是貴多了),二來Finetune還真未必就比Prompt Engineering要準,理想的條件下,你的私有數(shù)據(jù)集足夠大、且跟預訓練模型相似度極高的話,最容易訓練。但實際情況是:
Finetune須依賴標注好的數(shù)據(jù)集。然而你并沒有,原始的私有數(shù)據(jù)是不能直接用的;
Finetune容易發(fā)生過度擬合問題。假設(shè)你有數(shù)據(jù)集,跟模型數(shù)據(jù)相似度較高,但參數(shù)量太小,通常會在很大程度上影響模型泛化的能力,導致過度擬合,這就好比一個正常人如果一輩子只見過父親和母親分別各一個的男人和女人,就無法很好的在人群中區(qū)分男女,用人類的語言來說就是“見的太少”。
Finetune容易造成模型“失憶”。跟2相反,如果數(shù)據(jù)集跟原有訓練數(shù)據(jù)相差過大,則容易“一邊學新任務,一邊忘記舊任務”,由于訓練數(shù)據(jù)時某些參數(shù)權(quán)重被大幅改變(舊任務的能力依賴這個參數(shù)),模型在掌握新技能的同時,做舊任務的能力容易斷崖式下降,學界稱之為“災難性遺忘”。
企業(yè)私有數(shù)據(jù)通常更新速度太快。比如變化中的購買記錄、播放記錄、評論記錄、聊天記錄等,動不動就要求大模型根據(jù)最新產(chǎn)生的“小數(shù)據(jù)”Finetune,未免過于殺雞用牛刀了。
重新認識Prompt Engineering
當前條件下,我們在實際AI應用落地過程中,都是采用的Prompt Engineering這個策略——原因很簡單,“四兩撥千斤”。下面你會看到,利用好提示詞工程,你會更容易觸摸大模型的能力和邊界。
純?nèi)?/span>工生成的Prompt
提到Prompt,很多人都有狹義的理解,就是在各種“GPT”里面變著法兒地提問、各種做示范blabla——很明顯這是完全人工生成的Prompt。不管什么樣的Prompt,抽象一下的話,大致都是由“上下文+指令”這兩部分元素構(gòu)造而成,像角色設(shè)定(Role Prompt)、輸出樣例(Few Shot)等等,都可以視作“context”。你可以直接把代表某種設(shè)定的Prompt“封印”在應用里(給它一個初始化設(shè)定):

如果你想更好的控制整個咨詢的流程,可以進一步的補充流程信息,這里我們以一個訂房AI的場景舉例:

人機協(xié)作生成的Prompt
但是,如果你給到大模型的“上下文”太長的話,一來很費Token,二來模型有限制,根本不支持大規(guī)模輸入上下文(就算是Claude也才支持10萬token)——比如,你有一份18萬字的公告規(guī)范和培訓資料,該怎么讓大模型學習呢?這時候我們就要借助檢索增強生成技術(shù)(Retrieval Augmented Generation,RAG)的力量了,簡單來講,它是一種允許我們在基礎(chǔ)模型外部檢索數(shù)據(jù),且把檢索到的相關(guān)性數(shù)據(jù)注入到上下文中,以增強提示信息,以確保響應的質(zhì)量和準確性。具體來講,我們需要通過“向量化數(shù)據(jù)庫”的相似性搜索能力和“embedding”來做數(shù)據(jù)預處理——把這個18萬字的文本進行關(guān)鍵信息提煉,最終會跟人類的提問(也就是指令)合成在一起,作為最終版本的Prompt給到模型,模型據(jù)此給出更加貼合上下文的回復。下面這個流程圖,可以更清晰地解釋這個人機協(xié)作生成Prompt的過程。(下個月我們會正式推出產(chǎn)品化的工具,令到大家可以自己制作AI應用)

這樣還覺得抽象,我們可以看一個企業(yè)知識庫對話場景的案例。如果你是一個入職不久的新員工,想了解清楚年假該怎么計算,但又不想去翻找HR發(fā)你的一疊疊資料,就可以直接問行政小助手,“年假應該怎么計算?”,這時,它會根據(jù)你的問題,在向量數(shù)據(jù)庫中展開搜索,以下是它找到的內(nèi)容。

此時把搜索結(jié)果作為上文,再利用大模型就能輸出精確的結(jié)果——也就是說上面這段撈出來的內(nèi)容經(jīng)過向量化處理以后,加上用戶的提問,就是最后給到大模型的Prompt,根據(jù)這個Prompt,小助手會給到你下面的回復。

再說回來 Finetune 和 Prompt Engineering 的區(qū)別,在此權(quán)且不嚴謹?shù)仡惐纫幌隆偃缜罢呤菆罅藗€課外補習班的話,索性把后者理解為開卷考試好啦。
再多分享一些正在落地中的case
基于上面的原理,我們已經(jīng)實現(xiàn)了一些垂直場景的例子,在此可以對比下直接跟大模型對話和Prompt Engineering驅(qū)動下的回答效果有何不同。
以這個服裝導購助手為例:(藍紫色背景圖為使用以上方法的小模型結(jié)果,另外一個為直接使用GPT 4的結(jié)果)


回復更加有服務感且不會有太多冗余的回答:


對于像服裝搭配的具體問題,基于自己企業(yè)的私有數(shù)據(jù)輸出的結(jié)果是更符合期待的,少了許多正確的廢話。那么回到技術(shù)選型本身,大模型最大的價值其實就在于,通過利用這樣一個基礎(chǔ)知識極寬的模型,可以使用很小的成本(調(diào)整提示詞)就實現(xiàn)自己的“小模型”制作,而且這樣的模型很多時候的表現(xiàn)都會超過模型微調(diào),所以我們優(yōu)先選擇了使用提示工程這一路徑。以上就是我們本次課題介紹的全部啦,不管你在任何一個垂直領(lǐng)域,有任何想要落地的AI場景,都可以直接加COO 趙赫切磋、咨詢!
