在數字時代,準確可靠的數據對企業來說至關重要。這些數據為企業提供個性化的體驗,并幫助他們做出明智的決策[1]。然而,由于龐大的數據量和復雜度,處理數據常常面臨重大挑戰,需要進行大量枯燥且手動的工作。在這種情況下,大語言模型(LLM)應運而生,這項變革性技術具備了自然語言處理和模式識別的能力,有望徹底改變數據清洗的過程,使數據更具可用性。
在數據科學家的工具箱中,LLM就像是扳手和螺絲刀,能夠重塑活動并發揮作用,以提升數據質量。就像諺語中說的一錘定音,LLM將揭示出可行的洞見,最終為創造更好的客戶體驗鋪平道路。
現在,讓我們直接進入今天的案例。
案例
當對學生進行調查問卷時,將事實字段設為自由形式的文本是最糟糕的選擇!你可以想象我們收到的一些回答。
開個玩笑,我們的客戶之一是Study Fetch,這是一個AI驅動的平臺,利用課程材料為學生創建個性化的全方位學習套件。他們在大學生中進行了一項調查,收到了超過10,000個反饋。然而,他們的首席執行官兼聯合創始人Esan Durrani遇到了一個小問題。原來,在調查中,"主修"字段是一個自由形式的文本框,這意味著回答者可以輸入任何內容。作為數據科學家,我們知道這對于進行統計計算來說絕對不是一個明智的選擇。所以,從調查中獲得的原始數據看起來像這樣...
天了嚕,讓你的Excel準備好吧!準備好花上一個小時,甚至三個小時的冒險來對付這些數據異類。
但是,別擔心,我們有一把大語言模型(LLM)的錘子。
正如一位長者所言,假如你只有一把錘子,那么所有的問題都會像是釘子。而數據清洗工作難道不正是最適合這把錘子的任務嗎?
我們只需要簡單地使用我們友好的大語言模型將它們歸類到已知的類別中。特別是,OpenAI的生成式預訓練Transformer(GPT)模型,正是當下流行的聊天機器人應用ChatGPT背后的LLM。GPT模型使用了高達1750億個參數,并且已經通過對來自公開數據集Common Crawl的26億個存儲網頁進行訓練。此外,通過一種稱為從人類反饋中的強化學習(RLHF)的技術,訓練者可以推動并激勵模型提供更準確和有用的回答[2]。
對于我們的目標來說,我相信超過1750億個參數應該足夠了,只要我們能給出正確的提示(prompt)。
圖片由Kelly Sikkema上傳至Unsplash
關鍵在于提示語
來自某AI公司的Ryan和Esan,他們的主要業務是編寫出色的提示語。他們提供了我們的提示語的第一個版本。這個版本很棒,使用語言推斷[3]效果非常好,但有兩個可以改進的地方:
首先,它僅適用于單個記錄。
其次,它使用了達芬奇模型的'Completion'方法(一提到它,我的銀行賬戶就開始恐慌)。
這導致了過高的成本,這是我們無法接受的。因此,Ryan和我分別使用'gpt-3.5-turbo'重新編寫了提示語,以便進行批量操作。對我來說,OpenAI的提示語最佳實踐和ChatGPT Prompt Engineering for Developers課程非常有幫助。經過一系列思考、實施、分析和改進的迭代,我們最終獲得了一個出色的工作版本。
現在,讓我們馬上展示經過第二次修訂后的提示語:
對這個提示語,LLM給的回應是:
這個方法或多或少會有些效果。但我并不太喜歡那些重復的、長篇大論的項目名稱。在LLM中,文本就是tokens,tokens就是真金白銀啊。你知道,我的編程技能是在互聯網泡沫破裂的火熱深淵中鍛煉出來的。讓我告訴你,我從不放過任何一次節省成本的機會。
因此,我在“期望的格式”部分略微修改了提示語。我要求模型只輸出調查反饋的序數(例如,上面的戲劇為1)和項目的序數(例如,文學為1)。然后Ryan建議我應該要求輸出JSON格式而不是CSV,以便更簡單地解析。他還建議我添加一個“示例輸出”部分,這是一個極好的建議。
最終的提示語如下(為清晰起見,已簡化):
模型的輸出結果是:
所以,正如我們之前討論的,模型的輸出是我們定義的類別與調查響應的序數之間的映射。以第一行為例:1,1。這意味著1是響應編號,1是相應的映射程序編號。調查響應1是“戲劇”,映射的程序1是“文學與人文”。這看起來很正確!戲劇在它應有的#1位置,成為了所有人的焦點。
雖然輸出結果乍看之下像是嵌入的輸出(用于聚類和降維),但它們只是相同的映射信息,只不過是序數位置。除了在token使用上提供一些成本優勢外,這些數字還更容易解析。
我們現在可以把原始的調查反饋文件轉換為有意義的專業,做聚合,獲得有價值的可操作的洞察。
但等等,我不打算坐在電腦前,把每一塊調查反饋輸入瀏覽器并計算映射。這除了令人頭腦麻木,錯誤率也是無法接受的。
我們需要的是一些好的自動化工具。讓我們來看看API...
API救世主
可能你已經知道,應用程序接口(API)使我們的程序能夠高效地與第三方服務進行交互。盡管許多人通過使用ChatGPT實現了令人印象深刻的成果,但語言模型的真正潛力在于利用API將自然語言能力無縫地集成到應用程序中,使用戶感覺不到它的存在。就像你正在用來閱讀這篇文章的手機或電腦背后的令人難以置信的科學技術。
我們將使用REST來調用chat completion API。調用的示例如下:
我們快速看一下參數及其效果。
模型
到目前為止,對公眾開放的聊天完成模型只有gpt-3.5-turbo。Esan可以使用GPT 4模型,我對此非常嫉妒。雖然gpt-4更準確,且出現錯誤的可能性更小[2],但它的成本大約是gpt-3.5-turbo的20倍,對于我們的需求來說,gpt-3.5-turbo完全足夠了,謝謝。
溫度(temperature)
temperature是我們可以傳遞給模型的最重要的設置之一,僅次于提示。根據API文檔,它可以設置在0和2之間的值。它有著顯著的影響[6],因為它控制輸出中的隨機性,有點像你開始寫作前體內的咖啡因含量。你可以在這里找到一個對于每個應用可以使用的值的指南[7]。
對于我們的用例,我們只想要沒有變化的輸出。我們希望引擎給我們原封不動的映射,每次都是相同的。所以,我們使用了0的值。
N值
生成多少個聊天完成選擇?如果我們是為了創造性寫作并希望有多個選擇,我們可以使用2或者3。對于我們的情況,n=1(默認)會很好。
角色
角色可以是system(系統)、user(用戶)或assistant(助手)。系統角色提供指令和設定環境。用戶角色代表來自最終用戶的提示。助手角色是基于對話歷史的響應。這些角色幫助構造對話,并使用戶和AI助手能夠有效地互動。
模型最大Token
這不一定是我們在請求中傳遞的參數,盡管另一個參數max_tokens限制了從聊天中獲取的響應的總長度。
首先,token可以被認為是一個詞的一部分。一個token大約是英語中的4個字符。例如,被歸于亞伯拉罕·林肯(Abraham Lincoln)和其他人的引語“The best way to predict the future is to create it”包含了11個token。
如果你認為一個token就是一個詞,那么這里有一個64個token的例子,可以顯示它并非那么簡單。
做好準備,因為現在要揭示一個令人震驚的事實:每個你在消息中使用的表情符號都會額外增加高達6個重要令牌的成本。沒錯,你喜愛的笑臉和眨眼都是偷偷摸摸的小令牌竊賊!
模型的最大token窗口是一種技術限制。你的提示(包括其中的任何額外數據)和答案必須適應模型的最大限制。在對話完成的情況下,內容、角色和之前的所有消息都會占用token。如果你從輸入或輸出(助手消息)中刪除一條消息,模型將完全失去對它的了解[8]。就像多麗在尋找奇科時,沒有法比奧,沒有賓果,沒有哈波,沒有艾爾莫?... 尼莫!
對于gpt-3.5-turbo,模型的最大限制是4096個token,或大約16000個字符。對于我們的示例來說,提示大約占用2000個字符,每個調查反饋平均約20個字符,映射反饋約為7個字符。因此,如果我們在每個提示中放入N個調查反饋,最大字符數應為:
2000 + 20N + 7N應小于16000。
解這個等式后,我們得到一個小于518或大約500的N值。從技術角度來說,我們可以在每個請求中放入500個調查反饋,并處理我們的數據20次。然而,我們選擇在每個反饋中放入50個反饋,并進行200次處理,因為如果我們在單個請求中放入超過50個調查反饋,我們會偶爾收到異常響應。有時候,服務可能會出現問題!我們不確定這是一個系統的長期問題,還是我們碰巧遇到了不幸的情況。
那么,我們該如何使用我們擁有的API呢?讓我們進入精彩部分,代碼。
代碼的方法
Node.js是一個JavaScript運行環境[9]。我們將編寫一個Node.js/JavaScript程序,它將按照這個流程圖所描述的動作執行操作:
程序的流程圖,由作者繪制
我的Javascript技能并不是那么出色。我可以寫更好的Java,PHP,Julia,Go,C#,甚至Python。但是Esan堅持使用Node,所以就用Javascript吧。
完整的代碼,提示和樣本輸入可以在這個GitHub鏈接(https://github.com/aaxis-nram/data-cleanser-llm-node)中找到。然而,讓我們先看一下最吸引人的部分:
首先,讓我們看看我們如何使用“csv-parser” Node庫來讀取CSV文件。
接下來,我們調用分類器來生成映射。
然后,我們從類別、主提示文本以及CSV中的數據構造出提示。接著,我們使用他們的 OpenAI Node 庫將提示發送給服務。
最后,當所有迭代都完成后,我們可以將 srcCol 文本(即調查反饋)轉換為 targetCol(即標準化的項目名稱),并寫出CSV。
這點 JavaScript 并沒有我預期的那么復雜,而且在2到3小時內就完成了。我想,任何事情在你開始做之前總是看起來令人生畏的。
所以,現在我們已經準備好了代碼,是時候進行最終的執行了…
執行過程
現在,我們需要一個地方來運行這個代碼。在爭論是否應該在云實例上運行負載之后,我做了一些快速的計算,意識到我可以在我的筆記本電腦上在不到一個小時內跑完。這還不算太糟糕。
我們開始進行一輪測試,并注意到該服務在10次請求中有1次會返回提供給它的數據,而不是映射數據。因此,我們只會收到調查反饋的列表。由于沒有找到映射,CSV文件中的這些反饋將被映射為空字符串。
為了避免在代碼中檢測并重試,我決定重新運行腳本,但只處理目標列為空的記錄。
腳本會先將所有行的目標列設為空,并填入規范化的程序名稱。由于響應中的錯誤,一些行的目標列不會被映射,保持為空。當腳本第二次運行時,它只會為第一次運行中未處理的響應構建提示。我們運行了幾次程序,并將所有內容都映射出來。
多次運行大約花費了30分鐘左右,并且不需要太多監督。以下是模型中一些更有趣的映射的精選:
輸入與程序名稱之間的樣例映射,圖表由作者繪制
大多數看起來都對。不確定組織行為(Organizational Behavior)是否屬于社會科學(Social Sciences)或商業(Business)?我想任何一個都可以。
每個大約50條記錄的請求總共需要大約800個token。整個練習的成本是40美分。我們可能在測試、重新運行等方面花費了10美分。所以,總成本大約是50美分,大約2.5小時的編碼/測試時間,半小時的運行時間,我們完成了任務。
總成本:大約不到1美元
總時間:大約3小時
或許手動使用Excel進行轉換,排序,正則表達式,和拖拽復制,我們可能在相同的時間內完成它,并節省了一點小錢。但是,這樣做更有趣,我們學到了東西,我們有了可以重復的腳本/流程,并且還產出了一篇文章。而且,我覺得StudyFetch可以負擔得起50美分。
這是我們以高效率,高收益的方式實現的一個很好的應用,但LLM還可以用于哪些其他用途呢?
探索更多的用例
將語言功能添加到你的應用程序中可能有比我上面所示更多的用例。以下是與我們剛剛查看的評論數據相關的更多用例:
數據解析和標準化:LLM可以通過識別和提取非結構化或半結構化數據源(如我們剛剛看到的數據源)中的相關信息,幫助解析和標準化數據。
數據去重:LLM可以通過比較各種數據點來幫助識別重復記錄。例如,我們可以在評論數據中比較姓名、專業和大學,以標記潛在的重復記錄。
數據摘要:LLM可以對不同的記錄進行摘要,以了解回答的概況。例如,對于問題“在學習過程中你面臨的最大挑戰是什么?”,一個大語言模型可以對來自同一專業和大學的多個回答進行摘要,以查看是否存在任何模式。然后,我們可以將所有的摘要放入一個請求中,得到一個整體的列表。但我猜每個客戶細分的摘要可能會更有用。
情感分析:LLM可以分析評論以確定情感,并提取有價值的見解。對于問題“你愿意為幫助你學習的服務付費嗎?”,LLM可以將情感分類為0(非常負面)到5(非常正面)。然后,我們可以利用這一點通過細分分析學生對付費服務的興趣。
盡管學生評論只是一個微小的示例,但這項技術在更廣泛的領域中有著多種應用。在我所在的AAXIS公司,我們專注于企業和消費者數字商務解決方案。我們的工作包括將大量數據從現有的舊系統遷移到具有不同數據結構的新系統。為了確保數據的一致性,我們使用各種數據工具對源數據進行分析。這篇文章中介紹的技術對于這個目標非常有幫助。
其他數字商務用例包括檢查產品目錄中的錯誤、編寫產品說明、掃描評論回復和生成產品評論摘要等等。相比詢問學生的專業,編寫這些用例的代碼要簡單得多。
然而,需要注意的是,盡管LLM在數據清洗方面是強大的工具,但它們應與其他技術和人工監督相結合使用。數據清洗過程通常需要領域專業知識、上下文理解和人工審核,以做出明智的決策并保持數據的完整性。LLM并不是推理引擎[10],它們只是下一個詞的預測器。它們往往以極大的自信和說服力提供錯誤的信息(幻覺)[2][11]。在我們的測試中,由于我們主要涉及分類,我們沒有遇到任何幻覺的情況。
如果您謹慎行事并了解其中的陷阱,LLM可以成為您工具箱中強大的工具。
尾聲
在這篇文章中,我們首先研究了數據清洗的一個具體應用案例:將調查問卷反饋規范化為一組特定的值。這樣做可以將反饋進行分組并獲得有價值的見解。為了對這些反饋進行分類,我們使用了OpenAI的GPT 3.5 Turbo,一個強大的LLM。我們詳細介紹了使用的提示、如何利用API調用來處理提示以及實現自動化的代碼。最終,我們成功地將所有組件整合在一起,以不到一美元的成本完成了任務。
我們是不是像拿著一把傳說中的LLM錘子,找到了在自由文本形式的調查反饋中那顆完美閃亮的釘子?也許吧。更可能的是,我們拿出了一把瑞士軍刀,用它剝皮并享用了一些美味的魚肉。雖然LLM不是專門為此而設計的工具,但仍然非常實用。而且,Esan真的非常喜歡壽司。
那么,你有什么LLM的用例呢?我們非常樂意聽聽你的想法!
鳴謝
本文的主要工作由我、Esan Durrani和Ryan Trattner完成,我們是StudyFetch的聯合創始人。StudyFetch是一個基于人工智能的平臺,利用課程資料為學生創建個性化的一站式學習集。
我要感謝AAXIS Digital的同事Prashant Mishra、Rajeev Hans、Israel Moura和Andy Wagner對本文的審查和建議。
我還要感謝我30年的朋友、TRM Labs的工程副總裁Kiran Bondalapati,感謝他在生成式人工智能領域的初期引導以及對本文的審閱。
同時,我要特別感謝我的編輯Megan Polstra,她一如既往地為文章增添了專業和精致的風格。
-
人工智能
+關注
關注
1791文章
47183瀏覽量
238266 -
語言模型
+關注
關注
0文章
520瀏覽量
10268 -
AI驅動
+關注
關注
0文章
57瀏覽量
4128
原文標題:從混沌到清晰:大語言模型如何化繁為簡,開創數據清洗新時代!
文章出處:【微信號:AI智勝未來,微信公眾號:AI智勝未來】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論