譯者 | 朱先忠
審校 | 重樓
簡介
如果要求GPT-4在提示語押韻的同時證明存在無窮多的素數,那么它的確能夠實現。但是,如果問一下GPT-4:你們公司上個季度的表現如何?結果一定是慘??!這說明了當前的大型語言模型(“LLM”)普遍面臨一個根本挑戰:它們雖然能夠很好地掌握一般的公共知識,但是卻完全不知道專有的非公開信息(參考補注[1])。而另一方面,專有信息對于絕大多數企業應用工作流都是至關重要的。一個了解公共互聯網的模型固然很可愛;但對大多數組織來說,它的原始形式用處并不大。
在過去的一年里,我有幸與許多將LLM應用于企業用例的組織合作過。本文將詳細介紹任何踏上這段旅程的人都應該知道的關鍵概念和關注點,以及我認為LLM將如何發展以及其對ML產品戰略的影響。本文面向的是產品經理、設計師、工程師和其他讀者,并假設他們對LLM如何“在引擎蓋下”工作知之甚少或一無所知,但是對學習LLM有關概念卻很感興趣,只是不涉及技術細節。
四個概念
提示工程、上下文窗口和嵌入
使LLM對專有數據進行推理的最簡單方法是在模型的提示中提供專有數據。大多數LLM都會正確回答以下問題:“我們有兩個客戶,A和B,他們分別花了10萬美元和20萬美元。誰是我們最大的客戶,他們花了多少錢?”我們剛剛測試完類似于這樣的一些基本提示工程——通過在查詢(第二句)前加上上下文(第一句)。
嵌入(Embeddings)可以獲得在上下文中回答問題所需的信息。嵌入是一種將文本轉換為數字向量的方法,其中相似的文本會生成相似的向量(在N維空間中“緊密存儲在一起”的向量)(參考補注[2])。我們可能會嵌入網站文本、文檔,甚至可能是SharePoint、Google Docs或Notion的整個語料庫。然后,對于每個用戶提示,我們嵌入它,在提示向量和矢量化文本語料庫之間進行相似性搜索。例如,如果我們在維基百科上嵌入了關于動物的頁面,而用戶問了一個關于狩獵的問題,我們的相似性搜索會對維基百科上關于獅子、斑馬和長頸鹿的文章進行高度排名。這使我們能夠識別與提示最相似的文本塊,從而最有可能回答它(參考補注[3])。我們將這些最相似的文字塊包含在提示前的上下文中,這樣提示就有望包含LLM回答問題所需的所有信息。
微調
嵌入的一個缺點是,對LLM的每次調用都需要在傳遞提示時傳遞所有上下文。LLM甚至連最基本的企業特定概念都沒有“記憶”。由于大多數基于云的LLM提供商對每個提示令牌收費,這可能會導致有關費用很快變得昂貴(參考補注[4])。
微調有助于LLM理解特定于企業的概念,而無需在每個提示中都包含這些概念。我們采用了一個基礎模型,該模型已經對數十億個學習參數中的一般知識進行了編碼,并調整這些參數以反映特定的企業知識,同時仍然保留基本的一般知識(參考補注[5])。當我們使用新的微調模型生成推論時,我們可以“免費”獲得企業知識。
與嵌入/提示工程(底層模型是第三方黑盒)相比,微調更接近于經典的機器學習——ML團隊可以從頭開始創建自己的模型。微調需要一個帶有標記觀測值的訓練數據集;微調模型對訓練數據的質量和數量高度敏感。我們還需要做出配置決策(迭代次數、學習率等),安排長期的訓練工作,并跟蹤模型版本。目前,一些基礎模型提供程序提供了一些抽象掉這種復雜性的API,有些則沒有。
雖然微調模型的推斷可能更便宜,但昂貴的訓練工作可能會超過這一點(參考補注[6])。一些基礎模型提供商(如OpenAI)只支持對滯后邊緣模型進行微調(因此不支持ChatGPT或GPT-4:https://platform.openai.com/docs/guides/fine-tuning)。
Evals框架
LLM提出的一個新穎而重大的挑戰是測量復雜輸出的質量。經典的ML團隊已經嘗試了通過真實的方法來測量簡單輸出的準確性,比如數字預測或分類。但LLM的大多數企業用例都涉及生成數萬到數千個單詞的響應。復雜到需要十多個單詞的概念通??梢杂枚喾N方式表達。因此,即使我們有一個經過人工驗證的“專家”響應,將模型響應與專家響應進行精確的字符串匹配也是一個過于嚴格的測試,并且會低估模型響應的質量。
幸運的是,由OpenAI開源的Evals框架解決這個問題提供了一種方法。該框架需要一個標記的測試集(其中提示與“專家”響應相匹配),但它允許在模型和專家響應之間進行廣泛類型的比較。例如,是模型生成的答案(專家答案的子集或超集;事實上與專家的答案相當)比專家的答案簡潔多少?需要注意的是,Evals使用LLM執行這些檢查。如果“checker”LLM中存在缺陷,則Evals的返回結果本身可能不準確。
對抗性例子
如果您在生產中使用LLM,您需要確信它能夠安全地處理被誤導或惡意的用戶輸入。對于大多數企業來說,出發點是確保該模式不會傳播假新聞。這意味著,一個系統知道自己的局限性,知道什么時候該說“我不知道”。這里有很多戰術方法。它可以通過提示工程來完成,并使用提示語言,如“如果無法用上面提供的上下文回答問題,請回答‘我不知道’”??梢酝ㄟ^提供范圍外的訓練示例進行微調,專家的回答是“我不知道”。
企業還需要防范惡意用戶輸入,例如即時黑客攻擊。限制系統可接受的輸入和輸出的格式和長度可以是一個簡單有效的開始。如果你只為內部用戶服務,那么預防措施是個好主意,如果你為外部用戶服務,預防措施也是必不可少的。
三個關注點
偏見永久化
最受歡迎的LLM(OpenAI/GPT-4、Google/Bard)的開發人員已經努力使他們的模型與人類偏見相一致,并部署了復雜的調節層。如果你讓GPT-4或Bard給你講一個種族主義或厭惡女性者的笑話,他們會禮貌地拒絕(參考補注[7])。
這是個好消息。壞消息是,這種針對社會偏見的溫和并不一定能防止制度偏見。想象一下,我們的客戶支持團隊有對特定類型客戶無禮的歷史。如果歷史上的客戶支持對話被天真地用來構建一個新的人工智能系統(例如,通過微調),該系統很可能會復制這種偏見。
如果你正在使用過去的數據來訓練人工智能模型(無論是經典模型還是生成模型),請仔細檢查哪些過去的情況你想延續到未來,哪些不想。有時,在不直接使用過去的數據的情況下,設置原則并根據這些原則工作更容易(例如,通過提示工程)。
模型鎖定
除非你一直生活與世隔絕,否則你知道生成式人工智能模型的發展速度非常快。給定一個企業用例,目前最好的LLM可能不是六個月內的最佳解決方案,幾乎可以肯定也不會是六年內的最佳方案。聰明的ML團隊知道他們在某個時刻需要切換模型。
但是,還存在另外兩個主要的原因來構建簡單的LLM“交換”。首先,許多基礎模型提供商一直在努力支持呈指數級增長的用戶量,導致服務中斷和降級。在系統中構建后備基礎模型是個好主意。其次,在系統中測試多個基礎模型(類似于賽馬比賽)以了解哪一個表現最好是非常有用的。根據上面關于Evals框架知識,通常很難通過分析來衡量模型質量,所以有時你只想運行兩個模型,并對響應進行定性比較。
數據泄露
建議閱讀您正在考慮使用的任何基礎模型的條款和條件。如果模型提供者有權在未來的模型訓練中使用用戶輸入,那就令人擔憂了。LLM如此之大,以至于特定的用戶查詢/響應可能會直接編碼在未來的模型版本中,然后該版本的任何用戶都可以訪問。想象一下,您所在組織的一位用戶詢問“我如何清理執行XYZ的代碼?[此處為您的專有機密代碼]”。如果模型提供商隨后使用此查詢來重新訓練他們的LLM,則LLM的新版本可能會了解到您的專有代碼是解決用例XYZ的好方法。如果競爭對手詢問如何執行XYZ,LLM可能會“泄露”您的源代碼或類似內容。
OpenAI現在允許用戶選擇不使用他們的數據來訓練模型,這是一個很好的先例,但并不是每個模型提供商都效仿了他們。一些組織也在探索在自己的虛擬私有云中運行LLM;這是人們對開源LLM感興趣的一個關鍵原因。
兩個熱門話題
提示工程將主導微調
當我第一次開始將LLM應用于企業時,我對微調比對提示工程更感興趣。使用微調讓我們感覺它遵守了我習慣的經典ML系統的原則:爭論一些數據,生成訓練/測試數據集,開始訓練工作,等待一段時間,根據一些指標評估結果。
但我逐漸相信,對于大多數企業用例來說,提示工程(使用嵌入)是一種更好的方法。首先,提示工程的迭代周期遠比微調快,因為沒有模型訓練,這可能需要數小時或數天的時間。更改提示和生成新的響應可以在幾分鐘內完成。相反,就模型訓練而言,微調是一個不可逆轉的過程;如果您使用了不正確的訓練數據或出現了更好的基礎模型,則需要重新啟動微調工作。其次,提示工程所需的ML概念知識要少得多,如神經網絡超參數優化、訓練作業編排或數據爭論。微調通常需要經驗豐富的ML工程師,而提示工程通??梢杂蓻]有ML經驗的軟件工程師完成。第三,提示工程更適用于快速增長的模型鏈接策略,在該策略中,復雜的請求被分解為更小的組成請求,每個請求都可以分配給不同的LLM。有時,最好的“組成模型”是經過微調的模型(參考補注[8])。但企業的大部分增值工作是(i)弄清楚如何分解他們的問題;(ii)為每個組成部分編寫提示,以及(iii)為每個部分確定最佳的現成模型;這不在于創建自己的微調模型。
提示工程的優勢可能會隨著時間的推移而擴大。如今,提示工程需要長而昂貴的提示(因為每個提示中都必須包含上下文)。但我敢打賭,隨著模型提供商空間變得更有競爭力,提供商想出了如何更便宜地訓練LLM,每個代幣的成本會迅速下降。提示工程今天也受到最大提示大小的限制。如今,OpenAI在GPT-4的每個提示中最多可接受32K個令牌(約平均40頁英文文本)。我敢打賭在不久的將來會出現更大的上下文窗口。
數據不再是曾經的護城河
隨著LLM越來越善于產生人類可解釋的推理,考慮人類如何使用數據進行推理以及這對LLM意味著什么是有用的(參考補注[9])。人類實際上并不使用太多數據!大多數時候,我們進行“零鏡頭學習”,這只是意味著我們在回答問題時不附帶一組示例問答。提問者只是提供了問題,我們根據邏輯、原則、啟發法、偏見等進行回答。
這與幾年前的LLM不同,后者只擅長少數鏡頭學習,在那里你需要在提示中包括一些示例問答。它與經典ML非常不同,在經典ML中,模型需要在數百、數千或數百萬個問答上進行訓練。
我堅信,LLM用例中越來越多的主導份額將是“零樣本”。LLM將能夠在沒有任何用戶提供的示例的情況下回答大多數問題。他們需要以指令、策略、假設等形式進行及時的工程設計。例如,這篇文章使用GPT-4來審查代碼中的安全漏洞;該方法不需要關于易受攻擊代碼的過去實例的數據。擁有明確的指示、政策和假設將變得越來越重要,但擁有大量高質量、有標簽的專有數據將變得不那么重要。
如果您正在積極地將LLM應用于您的企業數據,我很想聽聽您發現哪些有效,哪些無效。歡迎您留言評論!
補注
【1】直到最近,LLM還不知道最近的公共知識——例如,GPT-4是根據截至2021年9月收集的信息進行訓練的。然而,GPT-4和Bard的消費者界面現在能夠查詢開放的互聯網并收集有關最近事件的信息。因此,最近性(recency)作為LLM的知識限制正在迅速消失。
【2】嵌入可以處理所有類型的數據結構,而不僅僅是文本。
【3】整個嵌入工作流發生在調用LLM之前。例如,OpenAI建議使用其ada-002模型進行嵌入,該模型比任何領先的GPT模型都更便宜、更快。
【4】標記(tokens)是單詞或單詞的構成。鏈接https://blog.quickchat.ai/post/tokens-entropy-question/#:~:text=Why%20tokens%3F,up%20on%20features%20that%20matter.處提供的文章很好地解釋了為什么語言模型使用標記而不是單詞。
【5】學習參數數量可能在數百萬到數萬億之間。如今,最廣泛使用的大型數據模型通常都擁有數十億學習參數。
【6】便宜的推斷服務并不是必然的。例如,對于具有8K上下文窗口的GPT-4,OpenAI每1k代幣收取0.03–0.06美元(分別取決于代幣是輸入還是輸出)。Davinci(一種滯后模型)的微調版本每1k代幣收費0.12美元。
【7】當然,這些都是OpenAI和谷歌雇傭的人。由于許多人不同意這些組織的價值觀,他們不同意節制政策。
【8】例如,GOAT是針對算術進行微調的開源模型LLaMA的一個版本。它在許多算術基準測試上都優于GPT-4。大多數企業的工作流程都需要算術運算;在鏈式方法下,工作流中涉及算術的部分將被識別并路由到GOAT。對于這樣一家企業來說,大力投資于良好的路由和與GOAT進行集成是很有道理的;但在我看來,不要微調他們自己的算術LLM。
【9】關于今天的LLM是否真的能推理,以及實際推理的含義(它需要意識嗎?自我意識嗎?代理?)還存在很多爭論。撇開這場更具哲學意義而非實證意義的辯論不談,值得注意的是,LLM顯然越來越善于做出符合人們普遍認為的良好推理概念的解釋;鏈接https://arxiv.org/pdf/2303.12712.pdf處的這篇論文提供了許多很好的例子。
譯者介紹
朱先忠,51CTO社區編輯,51CTO專家博客、講師,濰坊一所高校計算機教師,自由編程界老兵一枚。
原文標題:Applying LLMs to Enterprise Data: Concepts, Concerns, and Hot-Takes,作者:Sam Stone