我們是如何測試人工智慧的(八)包含大模型的企業級智慧客服系統拆解與測試方法 -- 大模型 RAG

孙高飞發表於2024-03-22

大模型的缺陷 -- 幻覺

接觸過 GPT 這樣的大模型產品的同學應該都知道大模型的強大之處, 很多人都應該調戲過 GPT,跟 GPT 聊很多的天。 作為一個面向大眾的對話機器人,GPT 明顯是鶴立雞群,在世界範圍內還沒有看到有能跟 GPT 扳手腕的存在。 也許很多人都認為 GPT 是非常強大的對話機器人了, 它學時豐富,什麼領域內的問題都能回答。但其實就如我上一篇帖子中說道的, 雖然這種大模型看似什麼問題都能回答,但其實它無法在特定領域內給出專業且精準的回答。比如我們問大模型寶馬 5 系的發動機的設計細節,這個是不可能得到正確的答案的。 甚至我們問一個大模型蘋果今天的股價是多少,它也是回答不出來的。 如下圖:

這是為什麼呢, 看過我之前教程的同學就知道人工智慧是你給它什麼樣的資料,它就訓練出什麼樣的效果。 所以大模型可以根據海量的訓練資料,找出資料之間的規律從而推理出使用者想要的答案。 但這個答案涉及的知識範圍無法脫離訓練資料的基礎。 也就是說大模型可以根據訓練資料得出人類的語言習慣,內容組織的方式, 它知道輸出什麼樣的內容是人類容易理解的, 但是它自己掌握的知識範圍沒辦法超出訓練資料包含的範圍。 所以使用者在限定的知識範圍內提出的問題,大模型可以給出近乎完美的答案。但超出了這個範圍它就無能為力了,如果是比較容易識別的場景會得出上面那樣的回覆,這樣起碼使用者會知道大模型無法回答這個問題。 但更多的場景下可能會出現大模型的幻覺問題。

幻覺用大白話來說就是模型在瞎編一個答案。 比如我在問 GPT 一個程式碼問題的時候,其實會發現有些時候它會瞎編一些不存在的函式出來。為什麼會出現這種問題, 這就要涉及到它的訓練原理了。 我在之前的教程中說過所有監督學習基本上都逃不開二分類,多分類和迴歸這三種型別。 而大模型其實就可以劃分為一個多分類模型。 因為實際上它的原理是有我們有一個詞表,這個詞表裡包含了這個語言的大部分常用詞,比如是中文的詞表的話可能包含了絕大部分的中文字。而模型實際上在生成答案的時候就是使用使用者的問題去計算生成的第一個字應該是哪個字,詞表中每一個詞都會計算一個機率, 比如詞表中一共有 1w 個字,模型就會去計算這 1w 個字中,每個字出現在當前位置上的機率,取機率最高的那個輸出。 然後模型再用問題 + 生成的第一個字 為基礎又去詞表中計算第二個字,以此類推。所以對於大模型本身來說它並不知道絕對的正確答案是什麼,它只是在會在詞表中取出機率最高的那個字。 所以使用者才會感覺到大模型總是在瞎編一個答案。

說回對話機器人中的意圖識別

大模型的幻覺是無法避免的,起碼靠大模型自己是無法避免的, 就像上面說的, 它並不知道真實的答案, 它只是去猜一個它認為最靠譜的答案給使用者。 所以說回上一篇中提到的,對話機器人一般會在最前方設定一個多分類的模型,名為意圖識別模型。 它的責任就是根據使用者的問題去計算出應該由哪個子系統來回答使用者的問題。 這正是因為我們知道很多問題是大模型無法回答的。 它沒有專業的知識(比如你問寶馬 5 系的發動機要如何更換,它需要到知識引擎中檢索對應文件),或者無法回答實時變動的問題(比如蘋果今天的股價是多少, 它需要傳送到搜尋引擎中檢索答案)。 所以一個看似簡單的客服對話機器人,實際上是一個非常龐大的系統,它背後是非常多的子系統的模型共同弄支撐起來的。 而測試人員往往第一個就要測試這個意圖識別模型,它的這個多分類效果是否達到了足夠高的標準,因為這個意圖識別錯了, 它就會傳送到錯誤的子系統中,那麼答案也一定就是錯誤的。

大模型 RAG

當我們瞭解了大模型的侷限性後,又要開始面對另一個問題。 就是透過知識引擎或者搜尋引擎這些子系統檢索出來的答案直接返回給使用者可能也是有問題的。 比如:

  • 資訊過多:我們可能從檢索結果中獲得大量相關資訊,使用者難以從中篩選出最準確、最有用的部分。
  • 資訊不完整或不準確:檢索結果可能只包含部分資訊,或者由於搜尋引擎的侷限性,返回的資訊可能不夠準確。
  • 缺乏連貫性或者不符合人類的理解習慣:直接返回的檢索結果可能是一系列獨立的片段,缺乏整體的連貫性和邏輯性,這會影響使用者的理解和體驗。

所以業界的專家們推出了一種把檢索和大模型組合在一起的解決方案,也就是大模型 RAG(檢索增強生成)。一句話總結:RAG(中文為檢索增強生成)= 檢索技術 + LLM 提示。例如,我們向大模型提一個問題,我們先從各種資料來源檢索相關的資訊,並將檢索到的資訊和問題封裝成 prompt 注入到大模型中,讓大模型給出最終答案。比如:

【任務描述】
假如你是一個專業的客服機器人,請參考【背景知識】做出專業的回答。
【背景知識】
{content} // 資料檢索得到的相關文字
【問題】
XX品牌的掃地機器人P10的續航時間是多久?

之前我們說大模型的缺點就是缺少專業領域和實時變化型別的相關知識資訊。 所以它才會出現幻覺問題。 現在我們把這些專業知識封裝到了 prompt 中,這樣大模型就有了這些知識背景,就可以比較完美的回答出使用者想要的答案了。

所以其實我們說對話機器人是一個比較複雜的系統,它背後有多個子系統,有多種模型服務。 但它的核心流程其實就是透過意圖模型決定問題應該交由哪個子系統來處理, 然後把該子系統的答案封裝進 prompt 裡讓大模型給出最終答案。 當然這其中還有很多流程, 比如安全稽核,頻控,拒答黑名單等等, 我們先不過多涉及這些細節。

測試人員利用大模型 RAG 進行效果的評估

當我們瞭解到大模型 RAG 的原理後,其實也就猜到測試人員也是可以利用這個方法來開展一些工作的。在我以前的文章中介紹過這種大模型的評測工作是非常消耗人力的, 其中一個非常消耗人力的地方就是即便我們已經有了標註好的資料(就是問題和答案都是已知的),我們也很難去自動化的去測試。 這主要是因為比較難以去自動化的對比參考答案與實際答案之間的匹配程度,因為對話機器人每次回答的內容可能是不一樣的,而且回答的內容不一樣不代表回答的就錯誤,語言這個東西是博大精深的(尤其是漢語),不同的描述表達同一個意思是比較常見的,比如我的名字叫孫高飛孫高飛是我的名字 其實表達的是差不多的意思。 所以不能簡單的用字串匹配來驗證回答的正確性。 常見的思路可能是引入文字相似度演算法,比如把兩個文字向量化後計算餘弦相似度。 這樣一定程度上可以從語義的角度來分析兩個文字的相似程度。 就是開源的這種語義相似度的演算法效果確實需要在專案中去實踐驗證。 第二種思路就是一些測試人員習慣讓 GPT 來完成這個工作, 我們可以把相關的問題,參考答案以及模型給出的答案封裝成 prompt,讓 gpt 來評判回答質量,比如:

會選擇讓 GPT 來參與評分除了要解決自動化的問題外,也是要解決主觀問題, 其實 NLP(自然語言處理)領域內的場景都很難避開這個問題。同樣一段文字,每個人對它的感受是不一樣的。 我在以前講過要評估主觀問題,人工的方法一般是需要 3 人仲裁製或者多人平均分制(以前的文章中有介紹)。 如果沒有人力來完成這樣的評估,那麼把 GPT 引入進來讓它來打個分也是一個不錯的選擇。

其實很多時候在交給 GPT 打分的時候也是不帶參考答案的,因為標註資料高昂的成本代價會讓很多小團隊無法承擔,所以就在不帶參考答案的前提下讓 GPT 打分。 當然這種方法在專業知識領域內,它的打分結果就是比較糟糕的。 但一些閒聊對話類和通用知識場景中,GPT 的答案還是有一定的可信度的。 所以在測試中我們也可以選擇在這些場景中不帶參考答案,而在專業知識領域內把參考答案作為背景交給 GPT。

當然這裡要澄清的是,使用這種方式來參與評估是一種在人力不足以支撐人工評估下的權宜之計, 如果要評價評估模型的準確性, 還是人工最為準確的。 GPT 畢竟還是有很多不可控的因素存在。

最後推銷一下自己的星球,我會定期更新測試領域內的手把手教程:

如果覺得我的文章對您有用,請隨意打賞。您的支援將鼓勵我繼續創作!
打賞支援

相關文章