AgentWrite:為什么你的模型生成的內容長度總是不超過2K? 精華
1. 為什么要研究 LongWriter
隨著大語言模型的發展,越來越多的大語言模型都具備了長上下文能力,甚至有的達到了100萬token。但是,相較于大家關注的海量輸入,大模型的生成長篇幅的內容時就顯得力不從心了。
圖片
比如,如上圖,作者在各種模型上要求生成超過2000字的內容時,基本上都沒有成功。隨著提示詞中要求輸出的內容長度的增加,輸出的最終長度始終停留在2K左右。但是,在對WildChat的用戶日志分析時發現,有 1% 的用戶明確要求生成的內容長度要超過2K,這證明生成長篇幅內容也是大家迫切需要的能力之一。
2. 為什么大多數模型只能生成2K左右的內容?
為了探究為什么幾乎所有的模型都只能生成2K左右的數據這一問題,作者進行了一系列實驗。
首先,創建了LongWrite-Ruler評估工具,來探索大語言模型(LLMs)的生成長度上限。
接著,分析了生成長度受限的根本原因:通過調整模型在監督微調(SFT)階段數據的最大輸出長度,發現訓練后的模型在LongWrite-Ruler測試中的最大輸出長度與其SFT數據的最大輸出長度存在顯著的正相關性。
在此論文中,統一以單詞(或中文文本的字符)來衡量輸出長度,而不是token,因為不同模型的token化方法可能會有所不同。
LongWrite-Ruler 測試方案
制定了8條不同指令,中英文各半,并在指令中調整輸出長度要求“L”。
例如,“撰寫一篇關于羅馬帝國歷史的L詞文章”。測試時,選取L值包括{1000, 2000, 5000, 10000, 20000, 30000},共產生了48個測試案例。
測評過程
圖片
在LongWrite-Ruler上對4個開源模型和4個專有模型進行了最大輸出長度的測量(評估模型的詳細信息如上表)。
? 溫度參數設為0.5
? 對于專有模型,根據各自模型API支持的最大輸出長度設置了max tokens參數。
? 對于開源模型,將其設為32k。確保了沒有模型因max tokens限制而產生截斷輸出,這可能會低估它們的最大輸出能力。
圖片
測試結果在上圖中進行了可視化展示:對于每個長度要求(x軸),在8條相應指令下的平均輸出長度(y軸),并使用了對數刻度。
從圖中可以看出,所有模型的最大輸出長度大約為2k詞。專有模型的有效輸出窗口通常未能達到它們宣稱的最大token生成長度。而且,隨著所需長度超過10k,由于拒絕響應的案例增多,平均輸出長度甚至出現了下降趨勢。
控制變量實驗
由上述實驗推測,普遍存在的2000字輸出長度限制可能源于SFT數據本身固有的輸出長度約束(簡單的說,就是模型沒見過這么長的輸出長度)。為檢驗這一假設,通過調整SFT數據,開展了一系列控制性實驗。
選用GLM-4-9B作為基準模型,并選取GLM-4的聊天SFT數據(總計180k條,為GLM-4全部SFT數據的一個子集)作為完整的訓練數據集。為控制訓練數據的最大輸出長度,分別剔除了輸出長度超過500、1000和2000字的數據,形成了三個不同的訓練集,分別保留了原始數據的72%、98%和99.9%。
基于這些訓練集,對GLM-4-9B模型進行了訓練,并在LongWriter-Ruler上測試了模型的最大輸出長度(測試L值包括{500, 1000, 2000, 4000})。
圖片
如上圖,模型的最大輸出長度與SFT數據中的最大輸出長度成正比,分別提升至約600、900和1800字。這種最大輸出長度的增長同樣反映在模型對各指定長度要求的指令的平均輸出長度的提高上。
這一發現揭示了模型輸出限制的根源在于SFT數據中輸出長度的不足。此外,這種限制無法通過LLM合成的訓練數據或迭代SFT來克服,因為現有模型生成的數據依舊無法超越這一長度限制。
為了解除這個限制,作者推出了 AgentWriter,一種新的基于 Agent 的流程,能夠利用大語言模型自動構建、擴展連貫的長文本輸出。
3. AgentWrite 設計思路
AgentWrite分兩步執行任務:
? 首先,根據用戶輸入制定詳盡的寫作計劃,明確每段的結構和目標字數。
? 接著,按照計劃,引導模型順序生成每個段落的內容。
圖片
AgentWrite首先將長篇寫作任務拆解為多個小任務,每個小任務僅需模型撰寫一個段落。模型隨后按順序完成這些小任務,再將這些段落的輸出合并,形成最終的長篇大作。
3.1 內容規劃
如同人類作家在著手長篇寫作前會制定一個全局性的策劃,包括構思文章結構、規劃各部分內容及其篇幅長度,借鑒了這一思路。利用大型語言模型(LLMs)的策劃功能,根據寫作指令生成寫作大綱,明確每個段落的核心內容和所需字數。以下是作者采用的提示詞:
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 分步撰寫
在第一步規劃完畢后,依次調用大語言模型(LLM)來逐一完成子任務,逐段構建寫作內容。為保障文本的連貫性,每當請求模型撰寫第n段時,也會一并提供前n-1段的內容,使模型能夠在已有寫作的基礎上續寫。
雖然這種串行處理方式無法讓模型同時并行處理多個子任務,但這種方式生成的文本在整體連貫性和質量上,遠遠超過了并行生成的結果。
以下是使用的提示詞:
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方法在兩個長篇寫作數據集上進行了生成長度和質量的測試:
? LongWrite-Ruler:用于準確測量該方法能夠生成的文本長度。
? LongBenchWrite:用以評價模型生成文本在長度和寫作品質上與用戶指令的契合度。
LongBench-Write
為了更全面地評估模型在多種長篇寫作指令上的表現,搜集了120條多樣化的用戶寫作指令,其中中文和英文各占一半。確保所有指令均明確指出了字數要求。
根據字數要求被劃分為四組:0-500字、500-2000字、2000-4000字和4000字以上。
根據輸出類型,將指令分為七大類:文學與創意寫作、學術與專著、科普、實用寫作、新聞報道、社區論壇以及教育與培訓。
圖片
評估時,采用了兩項衡量標準:
? 評估輸出長度:當文本輸出恰好滿足長度要求時,得分達到滿分100分。若輸出長度超過要求的四倍或低于三分之一,則得分將線性遞減至零。鑒于篇幅過短的文本通常比過長的文本問題更大,為篇幅不足的文本設置了更高的扣分率。
? 評估輸出品質。期望模型生成的文本長度盡可能貼近指令中的要求。有鑒于此,通過一個分段線性函數來計算輸出長度得分Sl(其中l代表預期長度,l'代表實際生成長度):從六個維度對文本進行評分:相關性、準確性、連貫性、清晰度、內容廣度與深度以及閱讀體驗,以下是作者用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的輸出長度的對比結果。AgentWrite顯著提升了GPT-4o的輸出能力,將其從最高2000詞延長至約20000詞。
還在LongBench-Write上對輸出品質及其對所需長度的契合度進行了評估。鑒于GPT-4o在AgentWrite性能測試中能輕松應對2000詞以內的任務,僅對要求2000詞以上輸出的指令采用AgentWrite。還考察了AgentWrite的一個變種“+Parallel”,它在第二步中采用并行方式調用模型,為每個段落生成輸出。
圖片
圖片
上表展示了LongBench-Write的測試結果。融入AgentWrite后,GPT-4o能創作長達20000詞的內容,顯著優化了其長度符合度得分(Sl),特別是在[4k, 20k)詞的輸出范圍內。
AgentWrite在拓展輸出長度的同時,并未降低輸出品質。通過對比六個維度的質量得分,AgentWrite顯著提升了內容的廣度與深度得分(提升5%),而在連貫性和清晰度上略有下降(下降2%)。在審視輸出數據時,偶爾發現使用AgentWrite生成的文本中存在輕微的重復現象,如模型可能會重述前文內容,或在輸出中頻繁進行總結。此外,+Parallel雖然在一定程度上提升了模型的輸出長度得分,卻犧牲了AgentWrite的輸出品質,尤其是在連貫性上(下降6%)。這表明在AgentWrite的第二步中,向模型提供已生成的上下文是至關重要的。
4. 如何訓練一個超長文本生成模型
能否進一步教會這些模型生成超長文本的能力,讓它們能夠一次性完成長篇寫作任務?
4.1 數據構建
從現有數據集中精選了6000條需要超長輸出的用戶指令(字數超過2000)。即:從GLM-4的SFT數據中篩選了3000條,多以中文為主。同時也從WildChat1M中篩選了3000條指令,這個數據集收錄了用戶與ChatGPT/GPT-4的公開對話日志,以英文為主。
自動篩選過程中,調用了GPT-4o。還利用基于規則的匹配技術剔除了包含毒性的指令以及那些用于數據抓取的指令。
經過自動篩選后,對這些指令進行了人工審核,確認超過95%的指令確實需要長篇回復,字數達到數千。針對這些指令,采用了AgentWrite流水線,并搭配GPT4o來生成回答。
還對收集到的數據進行了后期處理,包括剔除過短的輸出以及因AgentWrite第一步中規劃步驟過多導致模型輸出失敗的案例。大約0.2%的數據因此被排除。同時,也清除了模型可能在每個輸出段的開頭添加的諸如“第一段”、“第二段”等不相關的標識符。將最終得到的長篇輸出數據集命名為“longwriter-6k”。
在模型訓練階段,為保證模型的通用性,將“longwriter-6k”與常規SFT數據結合起來,構成了完整的訓練集。
使用了180k條來自GLM-4的聊天SFT數據作為常規SFT數據。
圖片
所獲數據的輸出長度分布如上圖。從圖中可以明顯看出,“longwriter-6k”有效地彌補了常規SFT數據在2k字以上輸出長度的不足,且在2k至10k字的范圍內,輸出長度分布相對均勻。
4.2 模型訓練
監督式微調
選用了兩個最新的開源模型作為基礎,分別為GLM-4-9B和Llama-3.1-8B,均支持高達128k tokens的上下文窗口,非常適合進行長文本輸出的訓練。
經過訓練,得到了兩個新模型:LongWriter-9B和LongWriter-8B。
所有模型均在 8xH800 80G GPU的節點上,利用DeepSpeed和ZeRO-3以及CPU offloading進行訓練。訓練參數包括批量大小為8,學習率為1e-5,經過4個周期的訓練,大約需要2500至3000步。
對齊優化(DPO)
為了進一步提升模型輸出質量,增強其遵循指令中長度限制的能力,在經過監督式微調的LongWriter-9B模型上實施了直接偏好優化。
DPO數據來源于GLM-4的聊天DPO數據集,大約包含50k條記錄。此外,特別為長篇寫作指令構建了4k對樣本數據。對于每條寫作指令,從LongWriter-9B生成的輸出中篩選出4個樣本。
還結合了長度符合度得分,選取得分最高的輸出作為正面樣本,隨機選擇剩余三個輸出中的一個作為負面樣本。經過上述數據混合訓練250步后,得到的LongWriter-9B-DPO模型。
4.3 評估結果
4.3.1 主要成果
在LongBench-Write基準上評估了4種專有模型和5種開源模型,以及訓練的LongWriter系列模型。
與LongWrite-Ruler的評估配置相同,將輸出溫度設定為0.5,并根據模型API允許的最大值設置生成的最大token數。對于開源模型,此值設定為32,768。
圖片
主要的評估結果如上表。
圖片
上圖展示了LongBench-Write中120條指令要求長度與模型響應長度之間的關系。
1. 相較于先前模型難以達到2000字以上長度的要求,LongWriter系列模型能夠一貫地提供更長、更詳盡的回答。
從各長度區間內提示的輸出長度得分Sl來看,現有模型在2000至4000字的區間內普遍得分較低(低于70分),僅有Claude 3.5 Sonnet模型得分尚可。在4000至20000字的區間內,幾乎所有現有模型都無法達到目標輸出長度,得分甚至為零(即所有輸出長度都不到要求長度的三分之一)。
通過融入LongWriter-6k的訓練數據,訓練的模型不僅能有效滿足長度要求,還能保持輸出質量,這一點從2000至20000字區間的Sl和Sq得分以及上面散點圖可以看出。
2. DPO有效地提升了模型在長文本生成中的輸出品質及其遵循長度要求的能力。
對比LongWriter-9B與經過DPO訓練的LongWriter-9B-DPO的評分,發現DPO在Sl(提升了4%)和Sq(提升了3%)上都有顯著提升,且這種優化效果在各個長度區間內都保持一致。這證明了在長文本生成任務中,DPO不僅能增強模型的輸出品質,還能更精準地控制輸出長度以滿足要求。類似地,在短文本生成任務中也能得出了這一結論。
圖片
此外,還對GPT-4o及三款Longwriter模型在LongBench-Write上的輸出進行了人工成對比較,并在上圖展示了結果。數據顯示,在58%的情況下,人們更傾向于選擇經過DPO訓練的模型而非LongWriter-9B。值得注意的是,盡管模型規模較小,LongWriter-9B-DPO的表現卻能與GPT-4o持平。
3. LongWriter模型的輸出限制已擴展至1萬至2萬字,但為了支持更長文本的輸出,仍需更多長文本數據的支撐。
圖片
在上圖中同樣展示了LongWriter模型的測試成果。
模型的最大生成長度能夠達到1萬至2萬字。缺乏長輸出的SFT數據很可能是限制模型實現更長輸出長度的主要因素。
輸出長度達到或超過2萬字的數據點不足100個。
未來構建更長的訓練SFT數據將進一步突破模型輸出長度的限制,有望實現10萬甚至更長的文本輸出。
4.3.2 消融分析
去除LongWriter-6k數據集
對LongWriter-6k數據集的消融分析。數據顯示,在融入LongWriter-6k數據集之后,LongWriter-9B模型能夠輕松應對2000字以上的輸出任務,這一點從輸出長度指標Sl中得到了體現。
在輸出質量方面,該模型在加入LongWriter-6k數據集后的質量評分提升了5%,特別是在處理需要輸出長度在2000至4000字范圍內的任務時表現尤為突出。
模型在“廣度和深度”這一維度上的質量提升最為顯著,與基線模型相比有18%的絕對增長。LongWriter-6k數據集的加入并沒有導致模型趨向于生成更長篇幅的響應,顯示出數據集對模型輸出長度沒有引入偏差。
寫作計劃增強數據
對加入寫作計劃的輸出數據進行消融分析。
通過思維鏈或思維樹,能有效提升處理復雜任務的性能。這啟發探究一個問題:在生成寫作內容之前,先讓模型輸出寫作計劃,是否能夠為長篇寫作任務帶來好處?
為了解答這一疑問,創建了一份加入了計劃的LongWriter-6k數據集。
具體做法是,將通過AgentWrite第一步得到的寫作計劃與寫作內容的起始部分合并,并用兩個換行符作為分隔,將合并后的文本作為SFT數據的輸出。
在評估時,會從模型生成的文本開頭移除寫作計劃的輸出。
圖片
上表中的結果顯示,使用這份加入了計劃的數據訓練的模型,在輸出長度指標Sl上有所提升,但在輸出質量上卻有所下降。總體來看,與直接生成寫作內容相比,先讓模型輸出其推理過程(即寫作計劃),再生成寫作內容,并沒有顯著提升任務執行的效率。這可能是因為模型在學習直接生成寫作內容的過程中,已經內化了思維鏈(CoT)的步驟,因此不再需要顯性地輸出推理過程。
與傳統的合成數據相比較
探究了利用指令來創建長篇輸出的SFT數據,這一方法在以往的大型語言模型(LLM)長篇生成研究中頗為常見。
基于指令數據訓練出的模型在生成更長文本方面未能達到用戶期望。其輸出長度得分Sl并未超越僅使用通用SFT數據訓練的模型,且輸出質量Sq亦有所下降。
這種方法之所以不利于模型學習,主要有兩個原因:
? 首先,選定的長文本質量參差不齊,由于這些文本多來源于網絡抓取,因此格式混亂,可能包含噪聲;
? 其次,回譯的指令與真實用戶的指令在分布上存在差異,這限制了模型學習到更廣泛的應用能力。

本文轉載自 ??大語言模型論文跟蹤??,作者:HuggingAGI

















