FLAN:微調語言模型是 Zero-Shot 學習者

摘要

本文探討了一種簡單的方法來提升語言模型的零樣本學習能力。我們展示了指令微調——即在通過指令描述的數據集集合上對語言模型進行微調——能夠顯著提升模型在未見任務上的零樣本表現。

我們以一個擁有1370億參數的預訓練語言模型為基礎,在60多個通過自然語言指令模板表達的NLP數據集上進行了指令微調。我們對該指令微調模型(命名為FLAN)在未見任務類型上的表現進行了評估。

結果顯示,FLAN顯著提升了原始模型的性能,并在我們評測的25個數據集中,有20個超過了零樣本的1750億參數GPT-3模型。FLAN甚至在ANLI、RTE、BoolQ、AI2-ARC、OpenbookQA和StoryCloze等任務上大幅超越了GPT-3的少樣本表現。消融研究表明,微調數據集的數量、模型規模和自然語言指令是指令微調成功的關鍵因素。

在這里插入圖片描述

1 引言

大規模語言模型(如 GPT-3 (Brown et al., 2020))在少樣本學習方面表現非常出色。然而,它們在零樣本學習上的表現則相對較差。例如,在閱讀理解、問答和自然語言推理等任務中,GPT-3 的零樣本表現遠不如少樣本表現。其中一個可能的原因是,缺少少樣本示例時,模型更難在與預訓練數據格式不相似的提示上取得良好表現。
本文探討了一種簡單的方法以提升大規模語言模型的零樣本性能,從而使其適用范圍更廣。我們的直覺是,NLP 任務可以通過自然語言指令來描述,例如“這條電影評論的情感是正面還是負面?”或“將‘how are you’翻譯成中文”。我們以一個擁有1370億參數的預訓練語言模型為基礎,進行指令微調——即在60多個通過自然語言指令表達的NLP數據集混合上微調該模型。我們將此微調后的模型稱為FLAN(Finetuned Language Net)。

為了評估FLAN在未見任務上的零樣本表現,我們根據任務類型將NLP數據集分成若干簇,并在指令微調時保留其中一簇用于評測。例如,如圖1所示,為了評估FLAN執行自然語言推理的能力,我們在常識推理、翻譯、情感分析等其他NLP任務上對模型進行指令微調。這樣,FLAN在指令微調階段并未接觸任何自然語言推理任務,我們隨后評估其執行零樣本自然語言推理的能力。

評測結果表明,FLAN顯著提升了基礎1370億參數模型的零樣本性能。FLAN的零樣本表現甚至在我們評測的25個數據集中,有20個超過了1750億參數GPT-3的零樣本表現,并且在ANLI、RTE、BoolQ、AI2-ARC、OpenbookQA和StoryCloze等任務上大幅超越了GPT-3的少樣本表現。消融實驗發現,指令微調中任務簇數量的增加有助于提升未見任務的表現,而指令微調的效益僅在模型規模足夠大時才會顯現。
指令微調是一種簡單的方法,如圖2所示,它結合了預訓練-微調范式和提示范式的優勢,通過微調的監督提升語言模型對推理時文本交互的響應能力。我們的實驗證明語言模型在純指令驅動的任務上表現出良好的潛力。

用于FLAN指令微調數據集加載的源碼已公開,地址為:https://github.com/google-research/flan

在這里插入圖片描述

2 FLAN:指令微調提升零樣本學習能力

指令微調的動機是提升語言模型對NLP指令的響應能力。其核心思想是通過監督訓練,讓語言模型學習執行通過指令描述的任務,從而使模型能夠遵循指令,即使是面對未見過的任務也能有效完成。為了評估模型在未見任務上的表現,我們將數據集按照任務類型分成多個簇,并在指令微調時保留每個任務簇用于評測,同時在其余簇上進行微調。

2.1 任務與模板

由于從頭創建包含眾多任務的指令微調數據集需要大量資源,我們將研究界已有的數據集轉換為指令格式。我們匯總了TensorFlow Datasets中公開的62個文本數據集,這些數據集涵蓋語言理解和語言生成任務,整合成一個混合數據集。圖3展示了這些數據集——每個數據集被歸類到十二個任務簇中的一個,簇內的數據集均屬于相同任務類型。各數據集的描述、規模和示例見附錄G。

在這里插入圖片描述

對于每個數據集,我們手工設計了十個獨特的模板,這些模板使用自然語言指令來描述該數據集對應的任務。雖然大多數模板都是描述原始任務,但為了增加多樣性,我們還為每個數據集包含了最多三個“反向任務”的模板(例如,對于情感分類任務,我們會加入要求生成電影評論的模板)。隨后,我們對預訓練語言模型在所有數據集的混合數據上進行指令微調,每個數據集中的示例通過隨機選擇的指令模板進行格式化。圖4展示了一個自然語言推理數據集的多個指令模板示例。

在這里插入圖片描述

2.2 評估劃分

我們關注 FLAN 在未見過的任務上的表現,因此定義“未見任務”至關重要。與某些先前工作僅通過禁止訓練時出現相同數據集來定義未見任務不同,我們采用更保守的定義,利用圖3中的任務簇。在本工作中,僅當某個數據集 D 所屬的所有任務簇都未在指令微調中出現時,我們才認為該數據集 D 在評估時是未見的。例如,如果 D 是一個蘊含任務,則在指令微調中不包含任何蘊含數據集,而是在所有其他任務簇上進行了指令微調。

因此,為了對 c 個任務簇進行零-shot FLAN 評估,我們會指令微調 c 個模型,每個模型保留一個不同的任務簇用于評估。

2.3 帶選項的分類

某個任務的輸出空間可能是多個類別之一(分類任務)或自由文本(生成任務)。由于 FLAN 是一個僅解碼器的指令微調語言模型,它自然以自由文本形式響應,因此生成任務不需要額外修改。

對于分類任務,先前工作(Brown 等,2020)采用了排序分類方法,例如只考慮兩個輸出(“是”和“否”),選擇概率較高的作為模型預測。雖然這種方法在邏輯上合理,但存在不足,因為答案的概率質量可能被表達答案的多種方式稀釋(例如,“是”有很多不同表達方式,可能導致“是”的概率總和下降)。

因此,我們在分類任務末尾添加一個“OPTIONS”后綴,并附上該任務所有輸出類別列表,讓模型明確知道分類時的選擇范圍。圖1中的自然語言推理和常識推理示例展示了這種選項的用法。

2.4 訓練細節

模型結構與預訓練
實驗中我們使用 LaMDA-PT,這是一個1370億參數的密集左到右解碼器Transformer語言模型(Thoppilan 等,2022)。該模型在網絡文檔(含代碼)、對話數據和維基百科上預訓練,使用 SentencePiece(Kudo & Richardson,2018)進行分詞,詞匯表大小為32k,總計2.49萬億BPE標記。約10%的預訓練數據是非英語。注意,LaMDA-PT 僅進行語言模型預訓練(不同于針對對話微調的 LaMDA)。

指令微調過程
FLAN 是 LaMDA-PT 的指令微調版本。微調過程中,我們將所有數據集混合,并隨機采樣。為了平衡數據集大小差異,我們對每個數據集的訓練示例數限制為3萬,并采用按樣本數比例混合(Raffel 等,2020)且混合率最大為3000。
我們對所有模型進行了3萬步梯度更新,批量大小為8192個token,使用 Adafactor 優化器(Shazeer & Stern,2018),學習率為3e-5。微調時輸入序列長度為1024,目標序列長度為256。我們使用 packing 技術(Raffel 等,2020),將多個訓練樣本拼接成一個序列,并用特殊的EOS標記分隔輸入和目標。指令微調大約花費60小時,在128核的TPUv3上完成。所有評估均基于訓練3萬步的最終檢查點。

3 結果

我們在自然語言推理、閱讀理解、閉卷問答、翻譯、常識推理、指代消解和結構化文本生成等任務上評估 FLAN。按照§2.2所述,我們通過任務簇劃分未見任務,且對每個簇單獨保留用于評估,指令微調時使用剩余簇(即每個評估簇對應一個不同的檢查點)。
對于每個數據集,我們評估所有模板的性能均值,以反映基于典型自然語言指令的期望表現。有些數據集有開發集,可用于手動設計提示(Brown 等,2020),我們也報告使用開發集表現最佳模板在測試集上的結果。

作為對比,我們報告了未經指令微調的 LaMDA-PT 在同樣提示下的零-shot 和 few-shot 結果(LaMDA-PT未經指令微調不適合自然語言指令任務)。該基線直接展示了指令微調的提升效果,結果顯示指令微調顯著提升了 LaMDA-PT 的表現。

我們還展示了 GPT-3 175B(Brown 等,2020)和 GLaM 64B/64E(Du 等,2021)在相關論文中報告的 zero-shot表現。使用最佳開發集模板,FLAN 的 zero-shot 性能在25個數據集中有20個優于 GPT-3 的 zero-shot,且在10個數據集上大幅超過 GPT-3 的 few-shot 性能。在可用的19個數據集上, zero-shot FLAN 在13個數據集上優于零-shot GLaM,在11個數據集上優于 one-shot GLaM。

總體上,指令微調在自然語言表達清晰的任務(如自然語言推理、問答、翻譯、結構化文本生成)上效果顯著,而在直接以語言建模形式呈現的任務(如常識推理和指代消解,即完成不完整句子或段落)上效果較弱,因為指令在這些任務中冗余。自然語言推理、閱讀理解、閉卷問答和翻譯任務的結果總結見圖5,并在下文描述。

在這里插入圖片描述

自然語言推理(NLI)。在五個NLI數據集上,模型需要判斷在給定前提的情況下假設是否成立,FLAN以較大優勢優于所有基線模型。正如Brown等人(2020)所指出的,GPT-3在NLI上表現不佳的一個可能原因是NLI示例不太可能自然出現在無監督訓練集中,因此這些示例被尷尬地表述為句子的續寫。對于FLAN,我們將NLI表述為更自然的問題“ 是否意味著 ?”,從而實現了更高的性能。

閱讀理解。在閱讀理解任務中,模型需要根據提供的段落回答問題,FLAN在MultiRC(Khashabi等,2018)和OBQA(Mihaylov等,2018)上優于基線。在BoolQ(Clark等,2019a)上,FLAN大幅超過了GPT-3,盡管LaMDA-PT在BoolQ上已經取得了較高的性能。

閉卷問答。閉卷問答要求模型在不訪問包含答案的具體信息的情況下回答關于世界的問題,FLAN在所有四個數據集上均優于GPT-3。與GLaM相比,FLAN在ARC-e和ARC-c(Clark等,2018)上的表現更好,而在NQ(Lee等,2019;Kwiatkowski等,2019)和TQA(Joshi等,2017)上表現略低。

翻譯。與GPT-3類似,LaMDA-PT的訓練數據約90%為英文,包含一些未專門用于訓練機器翻譯的其他語言文本。我們還評估了FLAN在GPT-3論文中涉及的三個數據集上的機器翻譯表現:WMT’14的法語-英語(Bojar等,2014),以及WMT’16的德語-英語和羅馬尼亞語-英語(Bojar等,2016)。與GPT-3相比,FLAN在所有六項評測中均優于零樣本GPT-3,但在大多數情況下低于少樣本GPT-3。與GPT-3類似,FLAN在翻譯成英語方面表現強勁,并且相較于監督翻譯基線表現良好。然而,從英語翻譯成其他語言的表現相對較弱,這也符合預期,因為FLAN使用的是英文sentencepiece tokenizer,并且大部分預訓練數據為英文。

附加任務。盡管在上述任務類別中表現強勁,但指令調優的一大局限是它無法提升許多語言建模任務的性能(例如以句子補全形式構造的常識推理或指代消解任務)。在七個常識推理和指代消解任務(見附錄表2)中,FLAN僅在其中三個任務上優于LaMDA-PT。該負面結果表明,當下游任務與原始語言建模預訓練目標相同時(即指令大多冗余時),指令調優并無用處。最后,我們報告了情感分析、復述檢測和結構到文本任務的結果,以及GPT-3結果不可用的其他數據集,詳見附錄表2和表1。總體而言,零樣本FLAN優于零樣本LaMDA-PT,并且可與少樣本LaMDA-PT相媲美或更好。

溫馨提示:
閱讀全文請訪問"AI深語解構" FLAN:微調語言模型是 Zero-Shot 學習者

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/87352.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/87352.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/87352.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

springboot中的事件發布和監聽

事件定義 創建一個自定義事件類 UserLoginEvent,繼承 ApplicationEvent,用于攜帶用戶登錄信息: import org.springframework.context.ApplicationEvent;public class UserLoginEvent extends ApplicationEvent { //關鍵點1:ext…

“開源雙軌架構+40億參數擴散Transformer——ComfyUI-OmniGen2本地部署教程:重塑多模態生成的效率邊界!

一、簡介 OmniGen2 是由北京智源研究院最新推出的一個強大、高效的開源多模態生成模型。與 OmniGen v1 不同,OmniGen2 具有兩種不同的文本和圖像模態解碼路徑,利用非共享參數和解耦的圖像分詞器。OmniGen2 在四個主要功能方面具有競爭力的性能&#xff…

Java的SpringAI+Deepseek大模型實戰之會話記憶

文章目錄 背景項目環境實現步驟第一步、定義會話存儲方式方式一、定義記憶存儲ChatMemory方式二、注入記憶存儲ChatMemory 第二步、配置會話記憶方式一、老版本實現方式二、新版本實現 第三步、存儲會話信息 異常處理1、InMemoryChatMemory 無法解析 背景 前兩期【環境搭建】和…

RDS MySQL vs. Aurora MySQL:高需求工作負載的終極遷移指南

在 AWS 上,開發團隊最常見且關鍵的決策之一就是選擇合適的關系型數據庫。通常,討論會從 RDS for MySQL 這個可靠且熟悉的“老黃牛”開始。但很快,就會有人提到一個更強大、更云原生的選項:Aurora MySQL。 也許,就像最…

使用倉頡編程語言是一種怎樣的體驗?

2024年6月21日下午,華為終端BG軟件部總裁龔體先生在華為開發者大會主題演講《鴻蒙原生應用,全新出發!》中向全球開發者介紹了華為自研倉頡編程語言,并發布了HarmonyOS NEXT倉頡語言開發者預覽版。這是華為首次公開倉頡編程語言。 …

Qt Creator自定義控件開發流程

Qt Creator自定義控件開發流程 在 Qt 5.9 Creator 中開發自定義控件的完整流程如下,分為設計、實現、集成和測試四個階段: 1. 創建自定義控件類 (1) 新建類文件 右鍵項目 → 添加新文件 → C Class基類選擇 QWidget 或現有控件(如 QPushBu…

翻譯《The Old New Thing》- 如何創建一個與屏幕大小相同的窗口,而不會被當作全屏窗口處理?

How can I create a window the size of the screen without it being treated as a fullscreen window? - The Old New Thinghttps://devblogs.microsoft.com/oldnewthing/20250522-00/?p111211 問題描述 任務欄允許全屏窗口覆蓋它。這樣,當你在放映幻燈片或進行…

深分頁末日救星:MySQL延遲關聯原理與實戰手冊

MySQL 深分頁(如 LIMIT 100000, 10)本質是 高代價的偏移量掃描,可通過以下方案優化,附核心原理和實操示例: 一、深分頁為什么慢? SELECT * FROM orders ORDER BY id DESC LIMIT 100000, 10; 執行過程&…

前端技術棧 —— HTML、CSS和JavaScirpt執行環境

以下內容由GLM回答生成,不保證正確性。 前端技術棧 —— HTML、CSS和JavaScirpt執行環境 JavaScript 的執行環境HTML 和 CSS 的執行環境HTML 和 CSS 是否可以在其他環境中執行?總結 JavaScript 是一種 解釋型語言,但它也可以被編譯。JavaScr…

多項式帶余除法——線性代數題目為例

一、多項式帶余除法的定義 二、例題 使用方法將在例題中展示:

學習日記-spring-day40-7.3

知識點: 1.自動裝配Resource(3) 知識點 核心內容 重點 Autowired與Resource注入規則 默認注入邏輯:未指定參數時,Resource優先按屬性名匹配(by name),失敗后按類型匹配&#xf…

重新認識JNIEnv

引言 拋開一堆概念,我們從本質出發。 java 調用c 我們開發移動端或者后端服務 ,都是用的java 或者kotlin 語言。有時候我們需要用c的一些庫(ocr識別/導航的算法/ 等) 因為一些跟硬件相關的接口或者系統的api 都是c寫的。 C調用J…

人工智能訓練師——智能語音識別ASR

人機對話——ASR 概念 ASR(Automatic Speech Recognition,自動語音識別)是一種將人類語音轉換為文本的技術。它使得計算機能夠“聽”懂人類的語音指令或對話,并將其轉換成可讀、可編輯的文本形式。ASR技術是人機交互領域中的一個…

Compose 常用命令詳解——AI教你學Docker

3.3 Compose 常用命令詳解 Docker Compose 通過一系列命令高效管理多容器應用。理解這些命令,可以讓你靈活地啟動、停止、查看、調試、擴縮容和配置 Compose 項目。 一、核心命令詳解 1. docker compose up 功能:啟動并構建所有服務,生成網…

Mausezahn - 網絡流量生成與測試工具(支持從鏈路層到應用層的協議模擬)

Mausezahn 是一個 網絡流量生成與測試工具,主要用于模擬各種網絡協議行為、測試網絡設備性能、驗證安全策略或進行故障排查。它支持從底層鏈路層(如 Ethernet、VLAN)到高層應用層(如 HTTP、DNS)的協議模擬,…

08-three.js Textures

Three.js Journey — Learn WebGL with Three.jsThe ultimate Three.js course whether you are a beginner or a more advanced developerhttps://threejs-journey.com/?c=p3 使用原生 JavaScript 首先是靜態頁面的放置位置,如果使用Vite模版配置,可以直接放在 /static/ …

git 倉庫取消合并的分支

要取消 Git 倉庫中某次特定的分支合并(例如第一次合并),同時保留其他分支的合并,需要通過 Git 的版本控制功能來操作。以下是具體的步驟和方法,假設你想撤銷某次合并(例如某個提交),并確保其他合并不受影響: 背景假設 你有一個 Git 倉庫,主分支(例如 main)上已經合…

【從歷史數據分析英特爾該如何擺脫困境】

與大多數其他分析師不同,自2013年以來,筆者就一直在積極強調英特爾未來將遭遇冰山,最終我們預測英特爾將在試圖執行其之前的戰略時破產。盡管我們更愿意采用與英特爾不同的代工廠方法(即與臺積電成立合資企業)&#xf…

【PyTorch】PyTorch中張量(Tensor)微分操作

PyTorch深度學習總結 第六章 PyTorch中張量(Tensor)微分操作 文章目錄 PyTorch深度學習總結前言一、torch.autograd模塊二、主要功能和使用方法1. 張量的 requires_grad 屬性2. backward() 方法3. torch.no_grad() 上下文管理器三、函數總結前言 上文介紹了PyTorch中張量(Ten…

Rust 項目實戰:Flappy Bird 游戲

Rust 項目實戰:Flappy Bird 游戲 Rust 項目實戰:Flappy Bird 游戲理解 Game loop開發庫:bracket-libbracket-terminalCodepage 437導入 bracket-lib 創建游戲游戲的模式添加玩家添加障礙最終效果項目源碼 Rust 項目實戰:Flappy Bi…