如果企業(yè)提示ChatGPT關(guān)于其企業(yè)的文檔中包含的內(nèi)容,它將提供不準(zhǔn)確的響應(yīng)。如果用戶(hù)正在處理的應(yīng)用程序的語(yǔ)言是高度技術(shù)性的或特定于某個(gè)領(lǐng)域的,那么這可能會(huì)出現(xiàn)問(wèn)題。
為了解決這個(gè)問(wèn)題,用戶(hù)可以用自己的定制文檔來(lái)增強(qiáng)大型語(yǔ)言模型。本文將展示一個(gè)框架,通過(guò)使用文檔嵌入為用戶(hù)自己的數(shù)據(jù)提供ChatGPT或GPT-4(或任何其他大型語(yǔ)言模型)的場(chǎng)景。
為大型語(yǔ)言模型提供場(chǎng)景
大型語(yǔ)言模型對(duì)場(chǎng)景敏感。如果用戶(hù)給它一個(gè)簡(jiǎn)單的提示,就會(huì)根據(jù)它們從訓(xùn)練數(shù)據(jù)中提取的知識(shí)做出反應(yīng)。但是,如果在提示符前添加自定義信息,則可以修改它們的行為。
例如,如果用戶(hù)問(wèn)ChatGPT這個(gè)問(wèn)題,“使用運(yùn)行率的風(fēng)險(xiǎn)是什么?”,它會(huì)提供一個(gè)很長(zhǎng)的答案。
ChatGPT給出的一般性答案
但是,用戶(hù)可以提示ChatGPT根據(jù)特定文檔提供答案。在下面的例子中,問(wèn)了ChatGPT同樣的問(wèn)題,但是在提示符前加上了“根據(jù)以下文檔回答我的問(wèn)題”,后面是來(lái)自Investopedia公司的一篇關(guān)于運(yùn)行率的文章。這一次,ChatGPT提供了一個(gè)不同的答案,從文章的文本中提取。
從文檔中給出ChatGPT場(chǎng)景
ChatGPT根據(jù)文檔場(chǎng)景進(jìn)行響應(yīng)
這種技術(shù)的價(jià)值是顯而易見(jiàn)的,特別是在場(chǎng)景非常重要的應(yīng)用程序中。但是,人工向提示添加場(chǎng)景是不切實(shí)際的,特別是有數(shù)千個(gè)文檔時(shí)。
假設(shè)企業(yè)有一個(gè)網(wǎng)站,該網(wǎng)站有數(shù)千個(gè)頁(yè)面,其中包含有關(guān)金融主題的豐富內(nèi)容,并且希望創(chuàng)建一個(gè)基于ChatGPT API的聊天機(jī)器人,以幫助用戶(hù)瀏覽這些內(nèi)容。用戶(hù)需要一種系統(tǒng)的方法來(lái)將其提示與正確的頁(yè)面相匹配,并使用大型語(yǔ)言模型來(lái)提供場(chǎng)景感知的響應(yīng)。這就是文檔嵌入的用武之地。
使用嵌入捕獲語(yǔ)義
在進(jìn)入嵌入之前,先為聊天機(jī)器人創(chuàng)建一個(gè)高級(jí)框架:
1.用戶(hù)輸入提示。
2.檢索與提示相關(guān)的最佳文檔。
3.創(chuàng)建一個(gè)新的提示,其中包括用戶(hù)的問(wèn)題以及文檔中的場(chǎng)景。
4.給語(yǔ)言模型提供新制作的提示。
5.將答案返回給用戶(hù)。
為ChatGPT提供場(chǎng)景
從編程的角度來(lái)看,除了第2步之外,這個(gè)過(guò)程非常簡(jiǎn)單。那么如何決定哪個(gè)文檔與用戶(hù)的查詢(xún)相關(guān)?一個(gè)基本的答案是使用經(jīng)典的索引和關(guān)鍵字搜索。更好的解決方案是使用嵌入。
嵌入是一個(gè)數(shù)字向量(一個(gè)數(shù)字列表),它捕獲了一條信息的不同特征。嵌入的維度越多,它可以學(xué)習(xí)的特征就越多。
用戶(hù)可以對(duì)不同類(lèi)型的數(shù)據(jù)使用嵌入。例如,在與圖像相關(guān)的任務(wù)中,嵌入可以表示不同物體的存在與否,不同顏色的強(qiáng)度,不同物體之間的距離等。
在文本中,嵌入捕獲文本的不同語(yǔ)義方。例如,單詞嵌入可能包含有關(guān)單詞是否與城市或國(guó)家、動(dòng)物物種、體育活動(dòng)、政治概念等相關(guān)的信息。在同樣的意義上,短語(yǔ)嵌入創(chuàng)建了單詞序列內(nèi)容的數(shù)字表示。通過(guò)測(cè)量?jī)蓚€(gè)嵌入向量之間的距離,可以得到它們對(duì)應(yīng)內(nèi)容的相似度。
通過(guò)訓(xùn)練機(jī)器學(xué)習(xí)模型(通常是深度神經(jīng)網(wǎng)絡(luò))在大量示例數(shù)據(jù)集上創(chuàng)建嵌入。在許多情況下,嵌入模型是用于最終應(yīng)用(例如,文本生成或圖像分類(lèi))的相同模型的修改版本。
為文檔創(chuàng)建嵌入數(shù)據(jù)庫(kù)
要將嵌入集成到聊天機(jī)器人工作流中,用戶(hù)需要一個(gè)包含所有文檔嵌入的數(shù)據(jù)庫(kù)。如果文檔已經(jīng)在數(shù)據(jù)庫(kù)中以純文本形式存在,那么就可以創(chuàng)建嵌入了。如果沒(méi)有,需要使用某種技術(shù),例如使用Python Beautiful Soup的網(wǎng)頁(yè)抓取來(lái)從網(wǎng)頁(yè)中提取文本。如果其文檔是PDF文件,例如研究論文,則需要從中提取文本(可以使用Python PyPDF庫(kù)執(zhí)行此操作)。
要為文檔創(chuàng)建嵌入,用戶(hù)可以使用在線(xiàn)服務(wù),例如OpenAI的嵌入API。用戶(hù)向API提供文檔的文本,它將返回其嵌入。OpenAI的嵌入有1536個(gè)維度,是最大的嵌入之一?;蛘呖梢允褂闷渌度敕?wù),例如Hugging Face或用戶(hù)自己的自定義Transformer模型。
一旦有了嵌入,就必須將它們存儲(chǔ)在“矢量數(shù)據(jù)庫(kù)”中。向量數(shù)據(jù)庫(kù)專(zhuān)門(mén)用于嵌入,并提供不同的功能,例如基于不同度量(歐幾里得距離,余弦相似度等)的查詢(xún)。
Facebook公司的Faiss是一個(gè)流行的開(kāi)源矢量數(shù)據(jù)庫(kù),它提供了一個(gè)豐富的Python庫(kù)來(lái)托管用戶(hù)自己的嵌入數(shù)據(jù)。另外,可以使用Pinecone,這是一個(gè)在線(xiàn)矢量數(shù)據(jù)庫(kù)系統(tǒng),它抽象了存儲(chǔ)和檢索嵌入的技術(shù)復(fù)雜性。
現(xiàn)在,用戶(hù)已經(jīng)擁有了創(chuàng)建針對(duì)自己的專(zhuān)有數(shù)據(jù)定制的大型語(yǔ)言模型應(yīng)用程序所需的一切?,F(xiàn)在可以像下面這樣改變應(yīng)用程序的邏輯:
1.用戶(hù)輸入提示
2.為用戶(hù)提示創(chuàng)建嵌入
3.在嵌入數(shù)據(jù)庫(kù)中搜索最接近提示嵌入的文檔
4.檢索文檔的實(shí)際文本
5.創(chuàng)建一個(gè)新的提示,其中包括用戶(hù)的問(wèn)題以及文檔中的場(chǎng)景
6.給語(yǔ)言模型提供新制作的提示
7.將答案返回給用戶(hù)
8.獎(jiǎng)勵(lì):提供一個(gè)鏈接到文件,用戶(hù)可以進(jìn)一步獲取信息
使用嵌入和矢量數(shù)據(jù)庫(kù)檢索相關(guān)文檔
為了避免人工創(chuàng)建整個(gè)工作流,用戶(hù)可以使用LangChain,這是一個(gè)用于創(chuàng)建大型語(yǔ)言模型應(yīng)用程序的Python庫(kù)。LangChain支持不同類(lèi)型的大型語(yǔ)言模型和嵌入式,包括OpenAI、Cohere、AI21Labs以及開(kāi)源模型。它還支持不同的矢量數(shù)據(jù)庫(kù),包括Pinecone和FAISS。它為不同類(lèi)型的應(yīng)用程序提供了現(xiàn)成的模板,包括聊天機(jī)器人、問(wèn)答和活動(dòng)代理。
關(guān)于嵌入的重要考慮
為了正確使用大型語(yǔ)言模型的嵌入,需要記住以下事項(xiàng):
·在用戶(hù)使用的嵌入框架中保持一致:確保在整個(gè)應(yīng)用程序中使用相同的嵌入模型。例如,如果用戶(hù)選擇OpenAI嵌入,需要確保使用相同的API和模型來(lái)創(chuàng)建文檔嵌入、用戶(hù)提示嵌入和搜索矢量數(shù)據(jù)庫(kù)。否則,將得到不一致的結(jié)果。
·令牌限制:每個(gè)大型語(yǔ)言模型都有令牌限制。例如,ChatGPT可以保留多達(dá)4096個(gè)令牌的場(chǎng)景。GPT-4有8000個(gè)和32000個(gè)令牌限制。許多開(kāi)源模型限制為2048個(gè)令牌。這包括文檔場(chǎng)景、用戶(hù)提示和模型響應(yīng)。因此,用戶(hù)必須確保場(chǎng)景數(shù)據(jù)不會(huì)填滿(mǎn)大型語(yǔ)言模型的內(nèi)存。一個(gè)良好的經(jīng)驗(yàn)法則是將文檔限制為1000個(gè)令牌。如果文檔比這個(gè)大,可以將其分成幾個(gè)塊,每個(gè)部分之間有一點(diǎn)重疊(大約100個(gè)令牌)。
·使用多個(gè)文檔:用戶(hù)的回復(fù)不必局限于單個(gè)文檔。可以檢索嵌入與提示符相似的幾個(gè)文檔,并使用它們來(lái)獲取響應(yīng)。為了確保不會(huì)遇到令牌限制,可以為每個(gè)文檔分別提示模型。
為什么不微調(diào)大型語(yǔ)言模型呢?
為什么不用微調(diào)大型語(yǔ)言模型來(lái)代替場(chǎng)景嵌入?微調(diào)是一個(gè)很好的選擇,使用它取決于用戶(hù)的應(yīng)用程序和資源。通過(guò)適當(dāng)?shù)奈⒄{(diào),用戶(hù)可以從大型語(yǔ)言模型中獲得良好的結(jié)果,而無(wú)需提供場(chǎng)景數(shù)據(jù),從而降低了付費(fèi)API的令牌和推理成本。然而,微調(diào)可能是昂貴和復(fù)雜的。使用場(chǎng)景嵌入是一種簡(jiǎn)單的選擇,能夠以最小的成本和努力實(shí)現(xiàn)。
最后,如果用戶(hù)有一個(gè)良好的數(shù)據(jù)收集管道,可以通過(guò)根據(jù)其目的的微調(diào)模型來(lái)改進(jìn)系統(tǒng)。
關(guān)于企業(yè)網(wǎng)D1net(hfnxjk.com):
國(guó)內(nèi)主流的to B IT門(mén)戶(hù),同時(shí)在運(yùn)營(yíng)國(guó)內(nèi)最大的甲方CIO專(zhuān)家?guī)旌椭橇敵黾吧缃黄脚_(tái)-信眾智(www.cioall.com)。同時(shí)運(yùn)營(yíng)19個(gè)IT行業(yè)公眾號(hào)(微信搜索D1net即可關(guān)注)
版權(quán)聲明:本文為企業(yè)網(wǎng)D1Net編譯,轉(zhuǎn)載需在文章開(kāi)頭注明出處為:企業(yè)網(wǎng)D1Net,如果不注明出處,企業(yè)網(wǎng)D1Net將保留追究其法律責(zé)任的權(quán)利。