AgentWrite:為什么你的模型生成的內(nèi)容長度總是不超過2K? 精華
1. 為什么要研究 LongWriter
隨著大語言模型的發(fā)展,越來越多的大語言模型都具備了長上下文能力,甚至有的達到了100萬token。但是,相較于大家關注的海量輸入,大模型的生成長篇幅的內(nèi)容時就顯得力不從心了。
圖片
比如,如上圖,作者在各種模型上要求生成超過2000字的內(nèi)容時,基本上都沒有成功。隨著提示詞中要求輸出的內(nèi)容長度的增加,輸出的最終長度始終停留在2K左右。但是,在對WildChat的用戶日志分析時發(fā)現(xiàn),有 1% 的用戶明確要求生成的內(nèi)容長度要超過2K,這證明生成長篇幅內(nèi)容也是大家迫切需要的能力之一。
2. 為什么大多數(shù)模型只能生成2K左右的內(nèi)容?
為了探究為什么幾乎所有的模型都只能生成2K左右的數(shù)據(jù)這一問題,作者進行了一系列實驗。
首先,創(chuàng)建了LongWrite-Ruler評估工具,來探索大語言模型(LLMs)的生成長度上限。
接著,分析了生成長度受限的根本原因:通過調(diào)整模型在監(jiān)督微調(diào)(SFT)階段數(shù)據(jù)的最大輸出長度,發(fā)現(xiàn)訓練后的模型在LongWrite-Ruler測試中的最大輸出長度與其SFT數(shù)據(jù)的最大輸出長度存在顯著的正相關性。
在此論文中,統(tǒng)一以單詞(或中文文本的字符)來衡量輸出長度,而不是token,因為不同模型的token化方法可能會有所不同。
LongWrite-Ruler 測試方案
制定了8條不同指令,中英文各半,并在指令中調(diào)整輸出長度要求“L”。
例如,“撰寫一篇關于羅馬帝國歷史的L詞文章”。測試時,選取L值包括{1000, 2000, 5000, 10000, 20000, 30000},共產(chǎn)生了48個測試案例。
測評過程
圖片
在LongWrite-Ruler上對4個開源模型和4個專有模型進行了最大輸出長度的測量(評估模型的詳細信息如上表)。
? 溫度參數(shù)設為0.5
? 對于專有模型,根據(jù)各自模型API支持的最大輸出長度設置了max tokens參數(shù)。
? 對于開源模型,將其設為32k。確保了沒有模型因max tokens限制而產(chǎn)生截斷輸出,這可能會低估它們的最大輸出能力。
圖片
測試結(jié)果在上圖中進行了可視化展示:對于每個長度要求(x軸),在8條相應指令下的平均輸出長度(y軸),并使用了對數(shù)刻度。
從圖中可以看出,所有模型的最大輸出長度大約為2k詞。專有模型的有效輸出窗口通常未能達到它們宣稱的最大token生成長度。而且,隨著所需長度超過10k,由于拒絕響應的案例增多,平均輸出長度甚至出現(xiàn)了下降趨勢。
控制變量實驗
由上述實驗推測,普遍存在的2000字輸出長度限制可能源于SFT數(shù)據(jù)本身固有的輸出長度約束(簡單的說,就是模型沒見過這么長的輸出長度)。為檢驗這一假設,通過調(diào)整SFT數(shù)據(jù),開展了一系列控制性實驗。
選用GLM-4-9B作為基準模型,并選取GLM-4的聊天SFT數(shù)據(jù)(總計180k條,為GLM-4全部SFT數(shù)據(jù)的一個子集)作為完整的訓練數(shù)據(jù)集。為控制訓練數(shù)據(jù)的最大輸出長度,分別剔除了輸出長度超過500、1000和2000字的數(shù)據(jù),形成了三個不同的訓練集,分別保留了原始數(shù)據(jù)的72%、98%和99.9%。
基于這些訓練集,對GLM-4-9B模型進行了訓練,并在LongWriter-Ruler上測試了模型的最大輸出長度(測試L值包括{500, 1000, 2000, 4000})。
圖片
如上圖,模型的最大輸出長度與SFT數(shù)據(jù)中的最大輸出長度成正比,分別提升至約600、900和1800字。這種最大輸出長度的增長同樣反映在模型對各指定長度要求的指令的平均輸出長度的提高上。
這一發(fā)現(xiàn)揭示了模型輸出限制的根源在于SFT數(shù)據(jù)中輸出長度的不足。此外,這種限制無法通過LLM合成的訓練數(shù)據(jù)或迭代SFT來克服,因為現(xiàn)有模型生成的數(shù)據(jù)依舊無法超越這一長度限制。
為了解除這個限制,作者推出了 AgentWriter,一種新的基于 Agent 的流程,能夠利用大語言模型自動構建、擴展連貫的長文本輸出。
3. AgentWrite 設計思路
AgentWrite分兩步執(zhí)行任務:
? 首先,根據(jù)用戶輸入制定詳盡的寫作計劃,明確每段的結(jié)構和目標字數(shù)。
? 接著,按照計劃,引導模型順序生成每個段落的內(nèi)容。
圖片
AgentWrite首先將長篇寫作任務拆解為多個小任務,每個小任務僅需模型撰寫一個段落。模型隨后按順序完成這些小任務,再將這些段落的輸出合并,形成最終的長篇大作。
3.1 內(nèi)容規(guī)劃
如同人類作家在著手長篇寫作前會制定一個全局性的策劃,包括構思文章結(jié)構、規(guī)劃各部分內(nèi)容及其篇幅長度,借鑒了這一思路。利用大型語言模型(LLMs)的策劃功能,根據(jù)寫作指令生成寫作大綱,明確每個段落的核心內(nèi)容和所需字數(shù)。以下是作者采用的提示詞:
I need you to help me break down the following long-form writing instruction into multiple subtasks. Each subtask will guide the writing of one paragraph in the essay, and should include the main points and word count requirements for that paragraph.
The writing instruction is as follows:
{User Instruction}
Please break it down in the following format, with each subtask taking up one line:
Paragraph 1 - Main Point: [Describe the main point of the paragraph, in detail] - Word Count: [Word count requirement, e.g., 400 words]
Paragraph 2 - Main Point: [Describe the main point of the paragraph, in detail] - Word Count: [word count requirement, e.g. 1000 words].
...
Make sure that each subtask is clear and specific, and that all subtasks cover the entire content of the writing instruction. Do not split the subtasks too finely; each subtask’s paragraph should be no less than 200 words and no more than 1000 words. Do not output any other content.
3.2 分步撰寫
在第一步規(guī)劃完畢后,依次調(diào)用大語言模型(LLM)來逐一完成子任務,逐段構建寫作內(nèi)容。為保障文本的連貫性,每當請求模型撰寫第n段時,也會一并提供前n-1段的內(nèi)容,使模型能夠在已有寫作的基礎上續(xù)寫。
雖然這種串行處理方式無法讓模型同時并行處理多個子任務,但這種方式生成的文本在整體連貫性和質(zhì)量上,遠遠超過了并行生成的結(jié)果。
以下是使用的提示詞:
You are an excellent writing assistant. I will give you an original writing instruction and my planned writing steps. I will also provide you with the text I have already written. Please help me continue writing the next paragraph based on the writing instruction, writing steps, and the already written text.
Writing instruction:
{User Instruction}
Writing steps:
{The writing plan generated in Step I}
Already written text:
{Previous generated (n-1) paragraphs}
Please integrate the original writing instruction, writing steps, and the already written text, and now continue writing {The plan for the n-th paragraph, i.e., the n-th line in the writing plan}
3.3 驗證測試
對提出的AgentWrite方法在兩個長篇寫作數(shù)據(jù)集上進行了生成長度和質(zhì)量的測試:
? LongWrite-Ruler:用于準確測量該方法能夠生成的文本長度。
? LongBenchWrite:用以評價模型生成文本在長度和寫作品質(zhì)上與用戶指令的契合度。
LongBench-Write
為了更全面地評估模型在多種長篇寫作指令上的表現(xiàn),搜集了120條多樣化的用戶寫作指令,其中中文和英文各占一半。確保所有指令均明確指出了字數(shù)要求。
根據(jù)字數(shù)要求被劃分為四組:0-500字、500-2000字、2000-4000字和4000字以上。
根據(jù)輸出類型,將指令分為七大類:文學與創(chuàng)意寫作、學術與專著、科普、實用寫作、新聞報道、社區(qū)論壇以及教育與培訓。
圖片
評估時,采用了兩項衡量標準:
? 評估輸出長度:當文本輸出恰好滿足長度要求時,得分達到滿分100分。若輸出長度超過要求的四倍或低于三分之一,則得分將線性遞減至零。鑒于篇幅過短的文本通常比過長的文本問題更大,為篇幅不足的文本設置了更高的扣分率。
? 評估輸出品質(zhì)。期望模型生成的文本長度盡可能貼近指令中的要求。有鑒于此,通過一個分段線性函數(shù)來計算輸出長度得分Sl(其中l(wèi)代表預期長度,l'代表實際生成長度):從六個維度對文本進行評分:相關性、準確性、連貫性、清晰度、內(nèi)容廣度與深度以及閱讀體驗,以下是作者用GPT-4o打分的提示詞:
You are an expert in evaluating text quality. Please evaluate the quality of an AI assistant’s response to a user’s writing request. Be as strict as possible.
You need to evaluate across the following six dimensions, with scores ranging from 1 to 5. The scoring criteria from 5 to 1 for each dimension are as follows:
1. Relevance: From content highly relevant and fully applicable to the user’s request to completely irrelevant or inapplicable.
2. Accuracy: From content completely accurate with no factual errors or misleading information to content with numerous errors and highly misleading.
3. Coherence: From clear structure with smooth logical connections to disorganized structure with no coherence.
4. Clarity: From clear language, rich in detail, and easy to understand to confusing expression with minimal details.
5. Breadth and Depth: From both broad and deep content with a lot of information to seriously lacking breadth and depth with minimal information.
6. Reading Experience: From excellent reading experience, engaging and easy to understand content to very poor reading experience, boring and hard to understand content.
Please evaluate the quality of the following response to a user’s request according to the above requirements.
?User Request?
{User request}
?/User Request?
圖片
上圖展示了LongWrite-Ruler的輸出長度的對比結(jié)果。AgentWrite顯著提升了GPT-4o的輸出能力,將其從最高2000詞延長至約20000詞。
還在LongBench-Write上對輸出品質(zhì)及其對所需長度的契合度進行了評估。鑒于GPT-4o在AgentWrite性能測試中能輕松應對2000詞以內(nèi)的任務,僅對要求2000詞以上輸出的指令采用AgentWrite。還考察了AgentWrite的一個變種“+Parallel”,它在第二步中采用并行方式調(diào)用模型,為每個段落生成輸出。
圖片
圖片
上表展示了LongBench-Write的測試結(jié)果。融入AgentWrite后,GPT-4o能創(chuàng)作長達20000詞的內(nèi)容,顯著優(yōu)化了其長度符合度得分(Sl),特別是在[4k, 20k)詞的輸出范圍內(nèi)。
AgentWrite在拓展輸出長度的同時,并未降低輸出品質(zhì)。通過對比六個維度的質(zhì)量得分,AgentWrite顯著提升了內(nèi)容的廣度與深度得分(提升5%),而在連貫性和清晰度上略有下降(下降2%)。在審視輸出數(shù)據(jù)時,偶爾發(fā)現(xiàn)使用AgentWrite生成的文本中存在輕微的重復現(xiàn)象,如模型可能會重述前文內(nèi)容,或在輸出中頻繁進行總結(jié)。此外,+Parallel雖然在一定程度上提升了模型的輸出長度得分,卻犧牲了AgentWrite的輸出品質(zhì),尤其是在連貫性上(下降6%)。這表明在AgentWrite的第二步中,向模型提供已生成的上下文是至關重要的。
4. 如何訓練一個超長文本生成模型
能否進一步教會這些模型生成超長文本的能力,讓它們能夠一次性完成長篇寫作任務?
4.1 數(shù)據(jù)構建
從現(xiàn)有數(shù)據(jù)集中精選了6000條需要超長輸出的用戶指令(字數(shù)超過2000)。即:從GLM-4的SFT數(shù)據(jù)中篩選了3000條,多以中文為主。同時也從WildChat1M中篩選了3000條指令,這個數(shù)據(jù)集收錄了用戶與ChatGPT/GPT-4的公開對話日志,以英文為主。
自動篩選過程中,調(diào)用了GPT-4o。還利用基于規(guī)則的匹配技術剔除了包含毒性的指令以及那些用于數(shù)據(jù)抓取的指令。
經(jīng)過自動篩選后,對這些指令進行了人工審核,確認超過95%的指令確實需要長篇回復,字數(shù)達到數(shù)千。針對這些指令,采用了AgentWrite流水線,并搭配GPT4o來生成回答。
還對收集到的數(shù)據(jù)進行了后期處理,包括剔除過短的輸出以及因AgentWrite第一步中規(guī)劃步驟過多導致模型輸出失敗的案例。大約0.2%的數(shù)據(jù)因此被排除。同時,也清除了模型可能在每個輸出段的開頭添加的諸如“第一段”、“第二段”等不相關的標識符。將最終得到的長篇輸出數(shù)據(jù)集命名為“l(fā)ongwriter-6k”。
在模型訓練階段,為保證模型的通用性,將“l(fā)ongwriter-6k”與常規(guī)SFT數(shù)據(jù)結(jié)合起來,構成了完整的訓練集。
使用了180k條來自GLM-4的聊天SFT數(shù)據(jù)作為常規(guī)SFT數(shù)據(jù)。
圖片
所獲數(shù)據(jù)的輸出長度分布如上圖。從圖中可以明顯看出,“l(fā)ongwriter-6k”有效地彌補了常規(guī)SFT數(shù)據(jù)在2k字以上輸出長度的不足,且在2k至10k字的范圍內(nèi),輸出長度分布相對均勻。
4.2 模型訓練
監(jiān)督式微調(diào)
選用了兩個最新的開源模型作為基礎,分別為GLM-4-9B和Llama-3.1-8B,均支持高達128k tokens的上下文窗口,非常適合進行長文本輸出的訓練。
經(jīng)過訓練,得到了兩個新模型:LongWriter-9B和LongWriter-8B。
所有模型均在 8xH800 80G GPU的節(jié)點上,利用DeepSpeed和ZeRO-3以及CPU offloading進行訓練。訓練參數(shù)包括批量大小為8,學習率為1e-5,經(jīng)過4個周期的訓練,大約需要2500至3000步。
對齊優(yōu)化(DPO)
為了進一步提升模型輸出質(zhì)量,增強其遵循指令中長度限制的能力,在經(jīng)過監(jiān)督式微調(diào)的LongWriter-9B模型上實施了直接偏好優(yōu)化。
DPO數(shù)據(jù)來源于GLM-4的聊天DPO數(shù)據(jù)集,大約包含50k條記錄。此外,特別為長篇寫作指令構建了4k對樣本數(shù)據(jù)。對于每條寫作指令,從LongWriter-9B生成的輸出中篩選出4個樣本。
還結(jié)合了長度符合度得分,選取得分最高的輸出作為正面樣本,隨機選擇剩余三個輸出中的一個作為負面樣本。經(jīng)過上述數(shù)據(jù)混合訓練250步后,得到的LongWriter-9B-DPO模型。
4.3 評估結(jié)果
4.3.1 主要成果
在LongBench-Write基準上評估了4種專有模型和5種開源模型,以及訓練的LongWriter系列模型。
與LongWrite-Ruler的評估配置相同,將輸出溫度設定為0.5,并根據(jù)模型API允許的最大值設置生成的最大token數(shù)。對于開源模型,此值設定為32,768。
圖片
主要的評估結(jié)果如上表。
圖片
上圖展示了LongBench-Write中120條指令要求長度與模型響應長度之間的關系。
1. 相較于先前模型難以達到2000字以上長度的要求,LongWriter系列模型能夠一貫地提供更長、更詳盡的回答。
從各長度區(qū)間內(nèi)提示的輸出長度得分Sl來看,現(xiàn)有模型在2000至4000字的區(qū)間內(nèi)普遍得分較低(低于70分),僅有Claude 3.5 Sonnet模型得分尚可。在4000至20000字的區(qū)間內(nèi),幾乎所有現(xiàn)有模型都無法達到目標輸出長度,得分甚至為零(即所有輸出長度都不到要求長度的三分之一)。
通過融入LongWriter-6k的訓練數(shù)據(jù),訓練的模型不僅能有效滿足長度要求,還能保持輸出質(zhì)量,這一點從2000至20000字區(qū)間的Sl和Sq得分以及上面散點圖可以看出。
2. DPO有效地提升了模型在長文本生成中的輸出品質(zhì)及其遵循長度要求的能力。
對比LongWriter-9B與經(jīng)過DPO訓練的LongWriter-9B-DPO的評分,發(fā)現(xiàn)DPO在Sl(提升了4%)和Sq(提升了3%)上都有顯著提升,且這種優(yōu)化效果在各個長度區(qū)間內(nèi)都保持一致。這證明了在長文本生成任務中,DPO不僅能增強模型的輸出品質(zhì),還能更精準地控制輸出長度以滿足要求。類似地,在短文本生成任務中也能得出了這一結(jié)論。
圖片
此外,還對GPT-4o及三款Longwriter模型在LongBench-Write上的輸出進行了人工成對比較,并在上圖展示了結(jié)果。數(shù)據(jù)顯示,在58%的情況下,人們更傾向于選擇經(jīng)過DPO訓練的模型而非LongWriter-9B。值得注意的是,盡管模型規(guī)模較小,LongWriter-9B-DPO的表現(xiàn)卻能與GPT-4o持平。
3. LongWriter模型的輸出限制已擴展至1萬至2萬字,但為了支持更長文本的輸出,仍需更多長文本數(shù)據(jù)的支撐。
圖片
在上圖中同樣展示了LongWriter模型的測試成果。
模型的最大生成長度能夠達到1萬至2萬字。缺乏長輸出的SFT數(shù)據(jù)很可能是限制模型實現(xiàn)更長輸出長度的主要因素。
輸出長度達到或超過2萬字的數(shù)據(jù)點不足100個。
未來構建更長的訓練SFT數(shù)據(jù)將進一步突破模型輸出長度的限制,有望實現(xiàn)10萬甚至更長的文本輸出。
4.3.2 消融分析
去除LongWriter-6k數(shù)據(jù)集
對LongWriter-6k數(shù)據(jù)集的消融分析。數(shù)據(jù)顯示,在融入LongWriter-6k數(shù)據(jù)集之后,LongWriter-9B模型能夠輕松應對2000字以上的輸出任務,這一點從輸出長度指標Sl中得到了體現(xiàn)。
在輸出質(zhì)量方面,該模型在加入LongWriter-6k數(shù)據(jù)集后的質(zhì)量評分提升了5%,特別是在處理需要輸出長度在2000至4000字范圍內(nèi)的任務時表現(xiàn)尤為突出。
模型在“廣度和深度”這一維度上的質(zhì)量提升最為顯著,與基線模型相比有18%的絕對增長。LongWriter-6k數(shù)據(jù)集的加入并沒有導致模型趨向于生成更長篇幅的響應,顯示出數(shù)據(jù)集對模型輸出長度沒有引入偏差。
寫作計劃增強數(shù)據(jù)
對加入寫作計劃的輸出數(shù)據(jù)進行消融分析。
通過思維鏈或思維樹,能有效提升處理復雜任務的性能。這啟發(fā)探究一個問題:在生成寫作內(nèi)容之前,先讓模型輸出寫作計劃,是否能夠為長篇寫作任務帶來好處?
為了解答這一疑問,創(chuàng)建了一份加入了計劃的LongWriter-6k數(shù)據(jù)集。
具體做法是,將通過AgentWrite第一步得到的寫作計劃與寫作內(nèi)容的起始部分合并,并用兩個換行符作為分隔,將合并后的文本作為SFT數(shù)據(jù)的輸出。
在評估時,會從模型生成的文本開頭移除寫作計劃的輸出。
圖片
上表中的結(jié)果顯示,使用這份加入了計劃的數(shù)據(jù)訓練的模型,在輸出長度指標Sl上有所提升,但在輸出質(zhì)量上卻有所下降。總體來看,與直接生成寫作內(nèi)容相比,先讓模型輸出其推理過程(即寫作計劃),再生成寫作內(nèi)容,并沒有顯著提升任務執(zhí)行的效率。這可能是因為模型在學習直接生成寫作內(nèi)容的過程中,已經(jīng)內(nèi)化了思維鏈(CoT)的步驟,因此不再需要顯性地輸出推理過程。
與傳統(tǒng)的合成數(shù)據(jù)相比較
探究了利用指令來創(chuàng)建長篇輸出的SFT數(shù)據(jù),這一方法在以往的大型語言模型(LLM)長篇生成研究中頗為常見。
基于指令數(shù)據(jù)訓練出的模型在生成更長文本方面未能達到用戶期望。其輸出長度得分Sl并未超越僅使用通用SFT數(shù)據(jù)訓練的模型,且輸出質(zhì)量Sq亦有所下降。
這種方法之所以不利于模型學習,主要有兩個原因:
? 首先,選定的長文本質(zhì)量參差不齊,由于這些文本多來源于網(wǎng)絡抓取,因此格式混亂,可能包含噪聲;
? 其次,回譯的指令與真實用戶的指令在分布上存在差異,這限制了模型學習到更廣泛的應用能力。
本文轉(zhuǎn)載自 ??大語言模型論文跟蹤??,作者:HuggingAGI
