指令數據:大模型背後的隱形助力_風聞
谭婧在充电-谭婧在充电官方账号-偏爱人工智能(数据、算法、算力、场景)。-1小时前
作者:譚婧
(一)指令數據,瞭解一下
先聊一件圈內趣事:
2023年初,大約在1月到2月份前後,
百度公司如流工作卡上有一個任務,
讓百度員工打開腦洞,寫“問答對”。
一問一答都讓員工設計。
如流是百度員工內部通訊,相當於企業微信。
我推測此舉很可能是在充實其“指令數據集”。
百度的做法是非常科學的指令數據集構造方法。

指令數據(Instruct data)是一種用於訓練大模型的數據類型。
通常以有****問有答的形式呈現。
在一問一答中傳遞信息,非常直觀。
這種形式更接近人類的交流方式,
經過訓練,能夠更直接地引導大模型“行為”。
對比預訓練環節的數據多來自於互聯網數據爬取,需要經過清洗,抽取等冗長過程,指令數據的構造是另一種難度。
問題以一種人類真實需求來表達,不能瞎編。
答案則是儘量正確,且有針對性的回答,不能亂造。
例如,回答“今天天氣怎麼樣?”時,
不能説“很好”,
而應該説“今天天氣晴朗,氣温為20℃,風力微弱。”

大語言模型的知識主要是在預訓練期間學習的。
大語言模型“煉成後”,仍需“三大”步驟;
在第一個步驟中,通過指令數據進行有監督學習,至關重要。
指令(Instruct)可以簡單理解為,
“命令”“指示”“指揮”,就是人類下達指令“讓”大模型“幹活”:
寫封信,寫首詩,寫代碼,等等。
比如,閒聊中也會有問有答的句子,但明顯不同於指令數據,指令數據的內容針對問題來回答,所以針對性強。閒聊數據中找問答對,效率太低。
從學術人員的角度,
以前是小模型百花齊放的世界,一個模型幹一件事(任務)。
現在是大模型一統天下,一個大模型能幹得活可太多了,不能亂指揮,
得有一直方式讓它知道你想幹啥。
人類寫好的一問一答的這種方式,
很適合大模型學習。
指令數據的微調讓大模型多遵循指令,
少胡編事實。

指令(Instruct)和提示詞(Prompt)的區別?
兩者的相同之處在於都可以引導模型。
通常來説,指令更強調對模型的具體要求,讓其執行某個特定的任務,
而提示詞更廣泛,可能是一個問題、一個主題或一個啓發性的語境。
大家觀察GPT-3.5,喜歡參考Instruct-GPT的論文,看看論文裏怎麼説:
“我們收集了一個數據集,並使用此數據集做訓練,讓模型學習和參考,期望大模型的輸出像人類已經編寫好的例子這樣。”

浪潮信息人工智能軟件研發總監吳韶華的觀點是,模型對於訓練數據集學習能力是非常強的,高質量數據成為大模型決勝關鍵。
他談到的例子讓人印象深刻:
“在源1.0研發的時候,數據主要來自於互聯網,我們從2017年到2021年之間互聯網數據裏邊蒐集出來了差不多800TB互聯網數據。
我們清理出來大約5TB比較高質量數據,分析發現,哪怕應用很多的優化手段,數據質量依然不夠高,依然會有噪聲。
於是,在源2.0研發的時候,我們在數據方面做了大量的工作。
首先,大幅降低了來自互聯網的數據佔比,為了獲得高質量數學數據,我們清洗了從2018到2023年之間互聯網頁,試圖獲取中文數學數據;我們開始處理的原始數據體量高達12PB,但最後獲得的中文數學數據數據量不到10GB。
從12PB到小於10GB,大家可以想一下是什麼概念。
高質量的數據非常難以獲得。
為了彌補高質量數據的缺失,我們下了額外的功夫:
在預訓練數據構建的時候,我們用大模型生成了一部分合成數據,比如部分代碼數據,部分數學數據。
我們構建了一套基於大模型生成合成數據的工作流,通過這種形式可以保證生成數據的多樣性,在每個類目裏邊保證數據的質量,通過這形式我們構建了一個比較完備的預訓練數據集。
當然,類似的方式我們也用在了構建微調數據集上面。”

一般説來,有些數據既可以處理成預訓練數據,
也可以處理成指令數據,取決於處理的方法。
(二)開源指令數據集
目前,大部分大模型團隊都有自建指令數據集,很多不願意公開。
開源的指令數據應該很多元。
按任務可以分為:數學能力,文本改編,知識問答,編程,標題生成,邏輯推理等。
程序算作計算機可執行的語言,和文字不做區分,都算做語言。
比如,“幫我用python語言實現排序算法。”
大模型回覆的是代碼,代碼可以執行.
這對指令數據中,含有的內容以代碼為主。
解數學題的過程則屬於邏輯推理。
指令數據也可以分為單模態和多模態;
多模態的數據集會在問答中含有圖片,聲音,視頻等數據類型,比如,聽歌識歌名,就需要音樂和文本的問答對進行訓練。
這篇主要聊單模態。
“指令數據”全是人類手寫也非常麻煩,所以,有一些是生成的。
生成的時候,因為問題和答案都是生的,所以要進行篩選。
為了縱覽中文視角下的全球開源指令數據集情況,
“親愛的數據”做了一個盤點:

(三)提高質量的“魔法”
一位AI工程師告訴我:“敢開源,能開源的團隊,都有點東西。”
我深以為意。
雖然不是每一次開源都讓人興奮,但是開源後,到底質量怎麼樣,有目共睹。
至少自信和敢作敢為這一波,力量是拉滿了。
獲得高質量數據這件事,是費時費力費人的工程活。
猛一看,技術含量不高,
細一看,大家都不願意開源,可見技術含量藏的有點深。
我觀察認為,有大模型訓練實際經驗的團隊,比研究團隊更有動力幹這件事。
武漢人工智能研究院用一篇論文公開了他們構建指令數據集的方法。
實際上,武漢人工智能研究一直在研發迭代“紫東太初大模型”,他們對指令數據集的需求,來源於真實的複雜工程需求。
論文的方法,也是“紫東太初”大模型在用的方法。
省流版本是:
對於指令數據集來説,需要先定義什麼是好問題好答案。
問題和答案的覆蓋度足夠全,有寫代碼,寫作業,寫信等形形色色的事情;1000個問題不能總在聊“吃”這個話題。
再定義什麼是好答案。
武漢人工智能研究院的實踐是訓練了一個判斷答案問答對質量的打分模型。
打分模型也是原創訓練,基座還是語言模型,優化目標變成排序。給定一個任務,給出候選答案。標註好壞,訓練結束,就具備了打分的功能。然後就能針對開源的指令數據打成績單。
餵給模型,就會得到質量得分。
一千對問答,一千個分數。
高分留下,低分不要。
以分數來篩選。
更為詳細的做法,可參見論文:
MoDS: Model-oriented Data Selection for Instruction Tuning
《MoDS:面向模型的指令數據選擇》。

我認為論文題目可以叫,大模型指令數據高效選擇方法MoDS。
論文回答了,如何為LLM選擇合適的指令數據?
論文作者為:杜倩龍、宗成慶、張家俊。

武漢人工智能研究院副院長的張家俊教授是論文作者之一,
他向我強調,
我們提出一種新穎的指令數據選擇方法。
大家通常關注指令數據的兩個方面:
一個是指令數據質量高不高,
另外一個方面指令數據的多樣性覆蓋度夠不夠。
但是很多時候會忽略一點,
每個大模型都有自身的特點,每個大模型訓練數據不一樣,模型架構不一樣,訓練參數又不一樣,很顯然不是每一個模型都應該用相同的指令數據。
為什麼?
比如,有一些大模型這條指令給它的時候發現完成地非常好,或者有一些指令推理的時候,你發現這些指令完成地不夠好,非常差。
本質上,非常差的指令才是需要去提升的能力。
因此,我們還提出來另外一個角度,數據必要性。
即從指令數據的質量、數據覆蓋度和數據必要性三個角度衡量指令數據。

我理解,大模型所藴含的知識是在預訓練階段內化到大語言模型裏,而不是到指令微調階段才開始“補課”,指令微調起到激發引導大模型的作用。
不同大模型的能力不同,我們引導的工具也應該不同。
就好比,一個大學生和一個小學生,你要教他們一人一個技能,是不是應該用不同的方法?
因此,論文中強調每個大語言模型都應該有一套與其相匹配的指令數據集;也就是我們常常看到的現象:訓練GPT-4與LLaMA肯定不應該用一樣的指令數據。
順着這個邏輯,正是因為各種大模型所需的指令數據集不同,
我們就更需要“通用的指令數據篩選工具。
(完)
作者:譚婧
《我看見了風暴:人工智能基建革命》
