大語言模型兵馬未動,數(shù)據(jù)準備糧草先行
從OpenAI正式發(fā)布ChatGPT開始,大型語言模型(LLM)就變得風(fēng)靡一時。對業(yè)界和吃瓜群眾來說,這種技術(shù)最大的吸引力來自于理解、解釋和生成人類語言的能力,畢竟這曾被認為是人類獨有的技能。類似CoPilot這樣的工具正在迅速融入開發(fā)者的日常工作,而由ChatGPT驅(qū)動的應(yīng)用程序也開始變得日益主流。
大語言模型的流行,另一方面也要歸功于普通開發(fā)者也能輕松用上這樣的技術(shù)。隨著大量開源模型陸續(xù)涌現(xiàn),每天都有新的科技初創(chuàng)公司提出基于大語言模型的解決方案。
然而,就算到了AI時代,數(shù)據(jù)依然是一種“新的石油”。在機器學(xué)習(xí)領(lǐng)域,數(shù)據(jù)充當(dāng)了訓(xùn)練、測試和驗證模型的原材料。高質(zhì)量、多樣化、有代表性的數(shù)據(jù)對于創(chuàng)建準確、可靠和健壯的大語言模型至關(guān)重要。
我們在構(gòu)建自己的大語言模型時可能會面臨挑戰(zhàn),特別是在收集和存儲數(shù)據(jù)這方面。大量非結(jié)構(gòu)化數(shù)據(jù)如何處理,以及該如何存儲和管理對數(shù)據(jù)的訪問,這些可能只是各種挑戰(zhàn)中的一小部分。
本文將探討與數(shù)據(jù)管理有關(guān)的挑戰(zhàn),借此讓讀者清楚了解數(shù)據(jù)在大語言模型中的關(guān)鍵作用,并在此基礎(chǔ)上,為讀者在自己的大語言模型項目中有效管理數(shù)據(jù)提供所需知識。
首先,一起看看有關(guān)大語言模型的基礎(chǔ)知識吧。
大語言模型的工作原理以及現(xiàn)有模型的選擇
從較高層次來看,大語言模型的工作原理很簡單:將單詞(或句子)轉(zhuǎn)換為一種稱為嵌入(Embedding)的數(shù)值表達。這些“嵌入”捕獲了單詞間的語義含義和關(guān)系,模型就是借此理解語言的。例如,大語言模型會學(xué)習(xí)到“狗”和“小狗”這兩個詞是相關(guān)的,并且會將它們放在數(shù)值空間中更接近的位置,而“樹”這個詞則會較遠。
大語言模型最關(guān)鍵的部分是神經(jīng)網(wǎng)絡(luò),這是一類受到人腦功能啟發(fā)創(chuàng)建出的計算模型。神經(jīng)網(wǎng)絡(luò)可以從訓(xùn)練數(shù)據(jù)中學(xué)習(xí)這些嵌入及其相互之間的關(guān)系。與大多數(shù)機器學(xué)習(xí)應(yīng)用一樣,大語言模型需要大量數(shù)據(jù)。通常情況下,對于模型訓(xùn)練而言,數(shù)據(jù)量越大、質(zhì)量越高,模型的準確性就越高,這意味著我們需要一種良好的方法來管理大語言模型用到的數(shù)據(jù)。
權(quán)衡現(xiàn)有模型時需要考慮的因素
幸運的是,對于開發(fā)者而言,目前有很多開源的大語言模型可供選擇,其中不乏一些流行的,甚至可商用的,例如Databricks提供的Dolly、Meta提供的Open LLaMA等。
面對如此廣泛的選擇,想要找到合適的開源大語言模型可能就有些棘手了。我們必須了解大語言模型所需的計算和內(nèi)存資源。模型的大?。ɡ巛斎?yún)?shù)為30億與70億之間的模型)會影響運行和使用模型所需的資源量。因此必須考慮選擇能與自己能力相匹配的模型。例如,一些DLite模型專門設(shè)計為能在筆記本電腦上運行,而不需要高成本的云資源。
在研究每個大語言模型時,一定要注意該模型是如何訓(xùn)練的,以及通常適用于什么樣的任務(wù)。這些區(qū)別也會影響我們的選擇。此時的規(guī)劃工作包括:篩選開源模型,了解每個模型的最佳適用場景,并預(yù)測自己將需要為每個模型使用的資源。
根據(jù)需要大語言模型的應(yīng)用程序或環(huán)境,我們可以選擇從現(xiàn)有大語言模型開始,也可以選擇從零開始訓(xùn)練一個自己的大語言模型。對于現(xiàn)成的大語言模型,我們可以直接使用它,或者也可以使用額外的數(shù)據(jù)對模型進行微調(diào),使其更符合自己所要處理的任務(wù)特點。
為了根據(jù)需求選擇最佳方法,還要求我們對用于訓(xùn)練大語言模型的數(shù)據(jù)有深入了解。
大語言模型中使用的數(shù)據(jù)類型
當(dāng)涉及到大語言模型的訓(xùn)練時,通常使用的數(shù)據(jù)是文本數(shù)據(jù)。然而,這些文本數(shù)據(jù)的性質(zhì)可能有很大差異,了解可能遇到的不同類型數(shù)據(jù)是很重要的。一般來說,大語言模型用到的數(shù)據(jù)可分為兩種類型:半結(jié)構(gòu)化數(shù)據(jù)和非結(jié)構(gòu)化數(shù)據(jù)。結(jié)構(gòu)化數(shù)據(jù)(即以表格數(shù)據(jù)集形式表示的數(shù)據(jù))通常不太可能用在大語言模型的訓(xùn)練工作中。
· 半結(jié)構(gòu)化數(shù)據(jù)
半結(jié)構(gòu)化數(shù)據(jù)會以某種預(yù)定義的方式組織,并遵循某種模型。這種組織方式使得數(shù)據(jù)的搜索和查詢變得相當(dāng)簡單直接。在大語言模型領(lǐng)域,半結(jié)構(gòu)化數(shù)據(jù)的類型有很多,例如文本語料庫,其中的每一項都與某些標簽或元數(shù)據(jù)相關(guān)聯(lián)。半結(jié)構(gòu)化數(shù)據(jù)的其他例子包括:
新聞文章,每篇文章都與一個類別(如體育、政治或技術(shù))相關(guān)聯(lián)。
用戶評論,每條評論都與評分和產(chǎn)品信息相關(guān)聯(lián)。
社交媒體帖子,每個帖子都與發(fā)布者、發(fā)布時間和其他元數(shù)據(jù)相關(guān)聯(lián)。
在這些情況下,大語言模型可能會根據(jù)新聞文章預(yù)測類別,根據(jù)評論文本預(yù)測評分,或根據(jù)內(nèi)容預(yù)測社交媒體帖子蘊含的情緒。
· 非結(jié)構(gòu)化數(shù)據(jù)
另一方面,非結(jié)構(gòu)化數(shù)據(jù)缺乏預(yù)定義的組織或模型。這些數(shù)據(jù)通常以文本為主,并且可能包含日期、數(shù)字和事實,這使得它更加復(fù)雜,難以處理和分析。在大語言模型領(lǐng)域,非結(jié)構(gòu)化數(shù)據(jù)非常普遍,例如:
書籍、文章和其他長篇內(nèi)容
從采訪或播客中提取的文本記錄
網(wǎng)頁或文檔
由于缺乏明確的標簽或組織標記,非結(jié)構(gòu)化數(shù)據(jù)對大語言模型的訓(xùn)練更具挑戰(zhàn)性。然而,這類數(shù)據(jù)也可以產(chǎn)生更通用的模型。例如,用大量書籍語料庫訓(xùn)練出的模型可能會學(xué)會生成逼真的散文,就像GPT-3那樣。
可想而知,數(shù)據(jù)是大語言模型的核心。但這些數(shù)據(jù)如何從原始狀態(tài)轉(zhuǎn)換為大語言模型可以使用的格式?讓我們將焦點轉(zhuǎn)移到其中涉及的關(guān)鍵過程上。
大語言模型的數(shù)據(jù)管道和數(shù)據(jù)攝入
用于獲取和處理大語言模型數(shù)據(jù)的基本構(gòu)件在于數(shù)據(jù)管道(Data pipeline)和數(shù)據(jù)攝入(Data ingestion)的概念。
1.數(shù)據(jù)管道是什么?
數(shù)據(jù)管道在原始的非結(jié)構(gòu)化數(shù)據(jù)與完全訓(xùn)練好的大語言模型之間形成了一個通道,借此確保數(shù)據(jù)被正確地收集、處理和準備,使其能夠在大語言模型構(gòu)建過程的訓(xùn)練和驗證階段順利使用。
數(shù)據(jù)管道是一組流程,可將數(shù)據(jù)從源頭移動到一個可以存儲和分析的目的地。通常情況下,其中包括:
數(shù)據(jù)提取:從源頭提取數(shù)據(jù),這個源頭可以是數(shù)據(jù)庫、數(shù)據(jù)倉庫,甚至外部API。
數(shù)據(jù)轉(zhuǎn)換:原始數(shù)據(jù)需要經(jīng)過清洗和轉(zhuǎn)換,以便轉(zhuǎn)換為適合分析的格式。轉(zhuǎn)換包括處理缺失值、糾正不一致的數(shù)據(jù)、轉(zhuǎn)換數(shù)據(jù)類型或?qū)︻悇e變量進行獨熱編碼(One-hot encoding)。
數(shù)據(jù)加載:轉(zhuǎn)換后的數(shù)據(jù)被加載到存儲系統(tǒng)(例如數(shù)據(jù)庫或數(shù)據(jù)倉庫)。這些數(shù)據(jù)隨后可以立即用于機器學(xué)習(xí)模型中。
當(dāng)談?wù)摂?shù)據(jù)攝入時,我們指的是這些管道過程的前端,即數(shù)據(jù)的獲取和為后續(xù)使用所進行的準備。
2.大語言模型的數(shù)據(jù)管道是什么樣子的?
雖然大語言模型的數(shù)據(jù)管道在一般情況下可能與數(shù)據(jù)團隊使用的大多數(shù)管道有所相似,但大語言模型為管理的數(shù)據(jù)提出了一些獨特的挑戰(zhàn)。例如:
數(shù)據(jù)提取:大語言模型的數(shù)據(jù)提取通常更復(fù)雜、多樣化且計算密集。由于數(shù)據(jù)來源可能是網(wǎng)站、書籍、文本記錄或社交媒體,每個來源都有自己的細微差別,需要獨特的方法。
數(shù)據(jù)轉(zhuǎn)換:由于大語言模型的數(shù)據(jù)來源范圍非常廣泛,每種類型數(shù)據(jù)的每個轉(zhuǎn)換步驟都將不同,需要獨特的邏輯將數(shù)據(jù)處理成大語言模型可以用于訓(xùn)練的更標準化的格式。
數(shù)據(jù)加載:在許多情況下,數(shù)據(jù)加載的最后一步可能需要使用非常規(guī)的數(shù)據(jù)存儲技術(shù)。非結(jié)構(gòu)化文本數(shù)據(jù)可能需要使用NoSQL數(shù)據(jù)庫,而不像很多數(shù)據(jù)管道那樣使用關(guān)系型數(shù)據(jù)存儲。
大語言模型的數(shù)據(jù)轉(zhuǎn)換過程包括了與自然語言處理(NLP)中類似的技術(shù):
詞元化:將文本分解為單個單詞或詞元(Token)。
停用詞去除:消除常用詞如“and”、“the”和“is”。然而,根據(jù)大語言模型所訓(xùn)練任務(wù)的不同,有時候這類停用詞可能會被保留,這可能是為了保留重要的句法和語義信息。
詞形還原:將單詞減少到其基本形式或詞根形式。
可想而知,將所有這些步驟結(jié)合起來,從各種來源攝取海量數(shù)據(jù),可能會導(dǎo)致一個非常復(fù)雜且龐大的數(shù)據(jù)管道。為了順利完成任務(wù),我們需要適合的工具和資源。
數(shù)據(jù)攝入的常見工具
數(shù)據(jù)工程領(lǐng)域有幾個極其流行的工具可以幫助我們處理構(gòu)成數(shù)據(jù)管道的一部分復(fù)雜數(shù)據(jù)攝入過程。如果正在構(gòu)建自己的大語言模型,我們的大部分開發(fā)時間將用于收集、清理和存儲用于訓(xùn)練的數(shù)據(jù)。那些能夠幫助我們管理大語言模型數(shù)據(jù)的工具可以按以下方式加以分類:
管道編排:用于監(jiān)視和管理數(shù)據(jù)管道中過程的平臺。
計算:處理大規(guī)模數(shù)據(jù)所用的資源。
存儲:用于存儲有效大語言模型訓(xùn)練所需的大量數(shù)據(jù)的數(shù)據(jù)庫。
讓我們詳細看看這三類工具。
1.管道編排
Apache Airflow是一個流行的開源平臺,可用于以編程方式編寫、調(diào)度和監(jiān)視數(shù)據(jù)工作流。它可以幫助我們使用基于Python的編程接口創(chuàng)建復(fù)雜數(shù)據(jù)管道,這種接口不僅功能豐富,而且易于使用。Airflow中的任務(wù)可以組織成有向無環(huán)圖(DAG),其中每個節(jié)點代表一個任務(wù),邊表示任務(wù)之間的依賴關(guān)系。
Airflow已被廣泛用于數(shù)據(jù)提取、轉(zhuǎn)換和加載操作,它已經(jīng)成為數(shù)據(jù)攝入過程中的寶貴工具。Linode Marketplace提供了Apache Airflow,用戶可以借此通過簡單的設(shè)置快速上手使用。
2.計算
除了使用諸如Airflow之類的工具進行管道管理,我們還需要能夠可靠地運行大規(guī)模處理所需的計算資源。隨著攝入大量文本數(shù)據(jù)并從許多來源進行下游處理,我們的任務(wù)將需要能夠根據(jù)需求擴展計算資源,最好是以水平的方式進行擴展。
Kubernetes是一種流行的可擴展計算選項。Kubernetes帶來了靈活性,能與許多工具(包括Airflow)很好地集成。通過利用托管的Kubernetes,我們可以快速、簡單地啟動靈活的計算資源。
3.存儲
數(shù)據(jù)庫對于數(shù)據(jù)攝入過程至關(guān)重要,它可充當(dāng)經(jīng)過清理和轉(zhuǎn)換后攝入數(shù)據(jù)的主要目的地。我們可以采用各種類型的數(shù)據(jù)庫。具體使用哪種類型,這取決于數(shù)據(jù)的性質(zhì)和用例的具體要求:
關(guān)系型數(shù)據(jù)庫使用表格結(jié)構(gòu)來存儲和表示數(shù)據(jù)。它適用于具有清晰關(guān)系和數(shù)據(jù)完整性至關(guān)重要的數(shù)據(jù)。盡管我們的大語言模型將依賴于非結(jié)構(gòu)化數(shù)據(jù),但像PostgreSQL這樣的關(guān)系型數(shù)據(jù)庫也可以處理非結(jié)構(gòu)化數(shù)據(jù)類型。
NoSQL數(shù)據(jù)庫:NoSQL數(shù)據(jù)庫包括面向文檔的數(shù)據(jù)庫,它不使用表格結(jié)構(gòu)來存儲數(shù)據(jù),適用于處理大量非結(jié)構(gòu)化數(shù)據(jù),可提供高性能、高可用性和易擴展性。
作為大語言模型數(shù)據(jù)存儲的替代方案,一些工程師更喜歡使用分布式文件系統(tǒng),例如AWS S3或Hadoop。雖然分布式文件系統(tǒng)是存儲大量非結(jié)構(gòu)化數(shù)據(jù)的好選擇,但需要額外的工作來組織和管理大型數(shù)據(jù)集。
在Linode Marketplace提供的各種存儲選項中,我們可以看到托管的PostgreSQL和托管的MySQL。這兩個選項都易于設(shè)置,可與大語言模型數(shù)據(jù)管道連接。
雖然小型大語言模型可能會使用較少的數(shù)據(jù)進行訓(xùn)練,并且可以使用較小的數(shù)據(jù)庫(如單個PostgreSQL節(jié)點),但更重的用例將需要處理大量數(shù)據(jù)。在這些情況下,我們可能需要類似PostgreSQL Cluster的東西來支持將要處理的數(shù)據(jù)量,并為大語言模型管理數(shù)據(jù)以及可靠地提供數(shù)據(jù)服務(wù)。
在選擇用于管理大語言模型數(shù)據(jù)的數(shù)據(jù)庫時,別忘了考慮數(shù)據(jù)的性質(zhì)和具體要求。我們攝入的數(shù)據(jù)類型將決定哪種數(shù)據(jù)庫最適合自己的需求。當(dāng)然,實際用例要求(如性能、可用性和可擴展性)也是重要的考慮因素。
有效和準確地攝入數(shù)據(jù)對大語言模型的成功至關(guān)重要。通過正確使用工具,我們可以為自己的管道構(gòu)建可靠、高效的數(shù)據(jù)攝入過程,處理大量數(shù)據(jù),并確保大語言模型具備學(xué)習(xí)和提供準確結(jié)果所需的一切。
總結(jié)
大語言模型的迅猛崛起在技術(shù)領(lǐng)域開辟了新的大門。這項技術(shù)對開發(fā)者來說易于訪問,但如何管理大語言模型的數(shù)據(jù)以及利用數(shù)據(jù)來訓(xùn)練新的大語言模型或調(diào)整現(xiàn)有大語言模型,將決定開發(fā)者能否在長期范圍內(nèi)持續(xù)獲得成功。