一文本到文本框架的NLP范式革命與實踐指南)
1. 項目概述從“多任務(wù)”到“統(tǒng)一文本”的范式革命幾年前當(dāng)我們面對自然語言處理NLP領(lǐng)域的各種任務(wù)時感覺就像在管理一個雜亂無章的工具箱。機(jī)器翻譯有一套模型文本摘要有另一套情感分析、問答系統(tǒng)、語法糾錯……每個任務(wù)都需要我們收集特定的數(shù)據(jù)集、設(shè)計特定的模型架構(gòu)、編寫特定的訓(xùn)練和推理代碼。這不僅讓研究變得繁瑣更讓工業(yè)界的落地成本高企。直到2019年Google Brain團(tuán)隊在論文《Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer》中提出的T5模型為我們帶來了一個極具啟發(fā)性的解決方案將所有文本處理任務(wù)都重新定義為“文本到文本”的轉(zhuǎn)換問題。這個想法聽起來簡單得近乎天真無論輸入是什么輸出也是文本。翻譯輸入英文句子輸出中文句子。摘要輸入長文章輸出簡短摘要。甚至文本分類如情感分析輸入一段影評輸出一個單詞“positive”或“negative”。T5的核心貢獻(xiàn)正是將這種統(tǒng)一的“文本到文本”Text-to-Text框架與強(qiáng)大的Transformer架構(gòu)以及大規(guī)模的遷移學(xué)習(xí)相結(jié)合在一個模型上實現(xiàn)了對眾多NLP任務(wù)的卓越性能。它不再是一個針對單一任務(wù)的“專家”而是一個經(jīng)過海量數(shù)據(jù)預(yù)訓(xùn)練的“通才”只需通過簡單的任務(wù)前綴提示如“translate English to German: ”就能切換到相應(yīng)的工作模式。這篇筆記我將從一個實踐者的角度深入拆解T5論文的精髓。我們不僅會回顧其核心思想與實驗設(shè)計更會聚焦于這套“統(tǒng)一框架”背后的深遠(yuǎn)影響、實操中的關(guān)鍵細(xì)節(jié)以及它如何塑造了如今大語言模型LLM的基本范式。無論你是剛?cè)腴TNLP的學(xué)生還是正在尋找技術(shù)選型方案的工程師理解T5都能幫你更好地理解當(dāng)前AI處理文本的底層邏輯。2. 核心思想與統(tǒng)一框架的深度解析2.1 “文本到文本”范式的本質(zhì)與優(yōu)勢T5提出的“文本到文本”范式其本質(zhì)是一種任務(wù)表述的統(tǒng)一化。在它之前NLP任務(wù)的目標(biāo)形式五花八門分類任務(wù)輸出離散標(biāo)簽生成任務(wù)輸出序列序列標(biāo)注任務(wù)輸出與輸入等長的標(biāo)簽序列。這種不一致性迫使模型架構(gòu)的最后一層需要做出相應(yīng)調(diào)整如接一個Softmax分類層或一個線性輸出層也使得多任務(wù)學(xué)習(xí)變得復(fù)雜。T5的解決方案是將所有輸出都視為一個文本序列。這帶來了幾個根本性的優(yōu)勢架構(gòu)極度簡化模型只需要一個標(biāo)準(zhǔn)的編碼器-解碼器Transformer。編碼器處理輸入文本解碼器自回歸地生成輸出文本。無需為不同任務(wù)定制輸出頭大大降低了工程復(fù)雜性。損失函數(shù)統(tǒng)一無論什么任務(wù)都使用標(biāo)準(zhǔn)的序列到序列的交叉熵?fù)p失。訓(xùn)練過程變得純粹而一致。多任務(wù)學(xué)習(xí)的天然載體由于所有任務(wù)都共享相同的輸入輸出格式我們可以輕松地將不同任務(wù)的數(shù)據(jù)混合在一起進(jìn)行訓(xùn)練。模型通過輸入中的“任務(wù)前綴”來區(qū)分當(dāng)前要執(zhí)行的任務(wù)。例如在訓(xùn)練時一條翻譯數(shù)據(jù)會被構(gòu)造成“translate English to German: That is good.” - “Das ist gut.”一條摘要數(shù)據(jù)則是“summarize: 長文章...” - “簡短摘要...”。零樣本與少樣本學(xué)習(xí)的橋梁這種通過自然語言提示來指定任務(wù)的方式正是后來提示學(xué)習(xí)Prompt Learning和上下文學(xué)習(xí)In-Context Learning的雛形。它讓模型學(xué)會了理解任務(wù)描述本身而不僅僅是完成訓(xùn)練過的任務(wù)。注意這里有一個關(guān)鍵的實操理解點。T5的“文本到文本”并非簡單地將標(biāo)簽如“positive”作為文本輸出。它要求我們在數(shù)據(jù)預(yù)處理階段就完成這個轉(zhuǎn)換。這意味著你的整個數(shù)據(jù)流水線需要被重構(gòu)以確保每條樣本都符合“文本輸入 - 文本輸出”的格式并包含明確的任務(wù)指示符。2.2 T5模型架構(gòu)選擇為什么是編碼器-解碼器Transformer家族主要有三種架構(gòu)變體僅編碼器如BERT擅長理解、僅解碼器如GPT系列擅長生成以及編碼器-解碼器如原始Transformer擅長轉(zhuǎn)換。T5論文經(jīng)過系統(tǒng)對比最終選擇了標(biāo)準(zhǔn)的編碼器-解碼器結(jié)構(gòu)。其背后的核心考量是任務(wù)的雙重性NLP任務(wù)既需要“理解”輸入文本編碼器的強(qiáng)項也需要“生成”輸出文本解碼器的強(qiáng)項。例如在翻譯中模型必須充分理解源語言句子的語義和語法編碼再流暢地生成目標(biāo)語言句子解碼。僅編碼器模型在生成任務(wù)上天生不足而僅解碼器模型在理解復(fù)雜輸入時由于缺乏獨立的編碼過程可能效率較低。論文中的實驗也證實了這一點。在相同的參數(shù)量和計算成本下編碼器-解碼器結(jié)構(gòu)在文本到文本任務(wù)上的綜合表現(xiàn)最優(yōu)。此外這種結(jié)構(gòu)還帶來一個好處編碼器和解碼器可以共享參數(shù)。T5探索了這種“共享參數(shù)”的變體T5-Small, Base等版本默認(rèn)不共享發(fā)現(xiàn)雖然能減少參數(shù)量但在大規(guī)模預(yù)訓(xùn)練中不共享參數(shù)的版本性能更優(yōu)這說明為理解和生成分配獨立的參數(shù)容量是有益的。實操心得當(dāng)你自己設(shè)計基于Transformer的文本轉(zhuǎn)換模型時如果你的任務(wù)明確涉及“從A文本生成B文本”如翻譯、摘要、風(fēng)格遷移、問答生成那么編碼器-解碼器結(jié)構(gòu)通常是更穩(wěn)妥和強(qiáng)大的起點。如果你的任務(wù)主要是對輸入文本進(jìn)行分類或打標(biāo)且輸出非常簡短如情感分類、主題分類那么僅編碼器模型如BERT微調(diào)可能更簡單高效。T5的統(tǒng)一框架以略微的架構(gòu)復(fù)雜性為代價換來了無與倫比的靈活性和擴(kuò)展性。2.3 龐大的“C4”數(shù)據(jù)集與無監(jiān)督預(yù)訓(xùn)練目標(biāo)T5的強(qiáng)大能力根基在于其海量的預(yù)訓(xùn)練數(shù)據(jù)——Colossal Clean Crawled Corpus (C4)。這是一個從互聯(lián)網(wǎng)上爬取并經(jīng)過嚴(yán)格清洗的750GB純英文文本數(shù)據(jù)集。清洗步驟包括只保留以正確標(biāo)點結(jié)尾的句子、過濾掉污言穢語和代碼片段等確保了數(shù)據(jù)質(zhì)量。其預(yù)訓(xùn)練目標(biāo)采用了經(jīng)典的去噪自編碼思路具體來說是“掩碼語言建?!钡囊粋€變種在論文中被稱為“破壞文本片段”任務(wù)。操作步驟如下從輸入文本中隨機(jī)采樣并丟棄一定比例例如15%的token。將被丟棄的連續(xù)token替換為一個唯一的哨兵標(biāo)記如X,Y。模型的目標(biāo)是輸出所有被丟棄的token序列每個序列前加上對應(yīng)的哨兵標(biāo)記。例如原始句子“Thank you for inviting me to your party last week.” 破壞后輸入“Thank youXme to your partyYweek.” 訓(xùn)練目標(biāo)“Xfor invitingYlast .”這個目標(biāo)的高明之處在于它迫使模型進(jìn)行深度理解為了預(yù)測被掩碼的片段模型必須基于完整的上下文進(jìn)行推理而不是簡單的詞語共現(xiàn)。它天然適配文本到文本格式輸入是破壞后的文本輸出是被掩碼的原始文本完美契合框架。它訓(xùn)練了生成能力模型需要順序生成被掩碼的片段這直接鍛煉了解碼器的文本生成能力。提示理解這個預(yù)訓(xùn)練目標(biāo)是理解T5為何強(qiáng)大的關(guān)鍵。它不是一個簡單的“完形填空”預(yù)測單個詞而是“段落復(fù)原”預(yù)測可能包含多個詞的文本片段。這要求模型具備更強(qiáng)的語言建模和上下文推理能力為后續(xù)各種下游任務(wù)的微調(diào)打下了堅實的基礎(chǔ)。3. 系統(tǒng)性實驗與關(guān)鍵發(fā)現(xiàn)的實踐解讀T5論文之所以成為經(jīng)典不僅在于提出了好想法更在于其近乎“暴力”的、系統(tǒng)性的實驗分析。它像一份詳盡的“煉丹手冊”探索了遷移學(xué)習(xí)中的幾乎所有重要超參數(shù)和設(shè)計選擇。對于我們實踐者而言這些實驗結(jié)論具有極高的參考價值。3.1 模型規(guī)模與計算成本的權(quán)衡論文訓(xùn)練了從6千萬參數(shù)T5-Small到110億參數(shù)T5-11B不等的五個規(guī)模模型。一個清晰的結(jié)論是在計算預(yù)算允許的情況下更大的模型幾乎總是帶來更好的性能。這直接推動了后續(xù)模型規(guī)模競賽的浪潮。然而論文也給出了一個至關(guān)重要的洞察性能的提升與計算量FLOPs的對數(shù)大致呈線性關(guān)系。這意味著為了將性能提升一點點可能需要付出指數(shù)級增長的計算成本。這對于資源有限的團(tuán)隊或個人開發(fā)者來說是一個必須面對的現(xiàn)實。實操建議起步選擇對于大多數(shù)研究和小規(guī)模應(yīng)用T5-Base2.2億參數(shù)或T5-Large7.7億參數(shù)是一個非常好的起點。它們在性能、速度和顯存占用上取得了較好的平衡。Hugging Face等開源庫提供了這些模型的預(yù)訓(xùn)練權(quán)重開箱即用??s放定律當(dāng)你計劃增加模型規(guī)模以提升效果時心里要有一本“經(jīng)濟(jì)賬”。性能的邊際收益是遞減的。有時將資源投入到更高質(zhì)量的數(shù)據(jù)、更精細(xì)的微調(diào)策略或更好的提示設(shè)計中可能比單純放大模型更劃算。3.2 遷移學(xué)習(xí)策略的對比微調(diào)、多任務(wù)學(xué)習(xí)與提示微調(diào)論文花了大量篇幅比較不同的知識遷移方式微調(diào)Fine-tuning先在C4上預(yù)訓(xùn)練然后在單個下游任務(wù)數(shù)據(jù)上繼續(xù)訓(xùn)練。這是最傳統(tǒng)、最常用的方法。多任務(wù)學(xué)習(xí)Multi-task Learning將所有下游任務(wù)的數(shù)據(jù)混合與預(yù)訓(xùn)練目標(biāo)一起進(jìn)行聯(lián)合訓(xùn)練。模型同時學(xué)習(xí)多個任務(wù)。提示微調(diào)Prompt Tuning這是T5論文后期探索的一種參數(shù)高效方法。只微調(diào)添加到輸入中的任務(wù)提示詞一個小的可學(xué)習(xí)向量而凍結(jié)整個預(yù)訓(xùn)練模型的主干參數(shù)。實驗結(jié)果與啟示微調(diào)在單個任務(wù)上通常能達(dá)到最佳性能因為它為特定任務(wù)做了深度適配。多任務(wù)學(xué)習(xí)訓(xùn)練出的模型更具通用性和魯棒性在零樣本或新任務(wù)上表現(xiàn)更好但可能在某個特定任務(wù)上的峰值性能略低于專精微調(diào)的模型。提示微調(diào)是一個革命性的發(fā)現(xiàn)。當(dāng)模型規(guī)模足夠大例如超過10B參數(shù)時僅僅微調(diào)幾個提示向量性能就能接近全參數(shù)微調(diào)的水平而存儲和部署成本大大降低。這為超大模型的輕量化適配打開了新大門。對于我們的項目實踐如果你的目標(biāo)是部署一個高性能的、特定的NLP服務(wù)如一個翻譯引擎那么收集該領(lǐng)域的高質(zhì)量數(shù)據(jù)并對T5-Base/Large進(jìn)行微調(diào)是最直接有效的路徑。如果你的目標(biāo)是構(gòu)建一個通用的、能處理多種未知任務(wù)的文本處理引擎那么可以考慮采用多任務(wù)學(xué)習(xí)的方式用多個任務(wù)的數(shù)據(jù)一起微調(diào)模型使其獲得更強(qiáng)的泛化能力。如果你在研究或使用超大模型并且面臨存儲或部署多個任務(wù)適配后模型的壓力提示微調(diào)是必須掌握的技能。現(xiàn)在許多開源庫如OpenPrompt, PEFT都提供了便捷的實現(xiàn)。3.3 文本預(yù)處理與任務(wù)前綴設(shè)計的藝術(shù)在T5的框架下如何將原始數(shù)據(jù)轉(zhuǎn)換成模型可用的“文本到文本”格式尤其是如何設(shè)計“任務(wù)前綴”是一門微妙的藝術(shù)。這直接影響了模型對任務(wù)意圖的理解。論文中嘗試了多種前綴設(shè)計簡單直接型“translate English to German: ”,“summarize: ”包含數(shù)據(jù)集信息型“cola sentence: ”(用于語法可接受性任務(wù))甚至是一個簡單的單詞“mnli premise: ... hypothesis: ...”(用于自然語言推理)實驗發(fā)現(xiàn)只要前綴能清晰區(qū)分不同任務(wù)具體措辭對最終性能的影響并不顯著。這是一個非常解放性的結(jié)論你不需要在精心設(shè)計提示詞上花費過多精力保持清晰、一致即可。然而在實操中有幾點需要特別注意一致性是關(guān)鍵在訓(xùn)練、驗證、測試乃至最終推理時必須使用完全相同的任務(wù)前綴。前后不一致會導(dǎo)致模型困惑性能急劇下降。輸出格式的約定對于分類任務(wù)輸出標(biāo)簽的詞匯表如“entailment”, “neutral”, “contradiction”也需要在預(yù)處理時確定并在所有數(shù)據(jù)中統(tǒng)一。最好將這些標(biāo)簽作為自然單詞處理而不是特殊的ID。處理多句輸入對于像問答QA或自然語言推理NLI這類需要多個輸入句子的任務(wù)需要用明確的分隔符將它們連接起來。例如T5在處理SQuAD問答時格式為“question: {question} context: {context}”。4. 實操指南如何微調(diào)你自己的T5模型理解了原理我們來動手實踐。假設(shè)我們現(xiàn)在有一個自定義的任務(wù)構(gòu)建一個“客服對話語氣轉(zhuǎn)換器”將用戶可能帶有抱怨或生硬語氣的句子轉(zhuǎn)換成禮貌、專業(yè)的客服回復(fù)風(fēng)格。4.1 環(huán)境準(zhǔn)備與數(shù)據(jù)構(gòu)建首先你需要準(zhǔn)備一個Python環(huán)境并安裝核心庫pip install transformers datasets torch sentencepiece接下來是最關(guān)鍵的一步構(gòu)建你的數(shù)據(jù)集。你需要一個(原始語句, 目標(biāo)禮貌語句)的配對列表。數(shù)據(jù)可以從客服日志中提取并清洗也可以人工構(gòu)造或使用數(shù)據(jù)增強(qiáng)方法生成。數(shù)據(jù)需要被處理成T5的輸入格式。我們定義一個簡單的轉(zhuǎn)換函數(shù)def format_for_t5(raw_text, target_text, task_prefixpolite transfer: ): # 將任務(wù)前綴和輸入文本結(jié)合 input_text task_prefix raw_text # 目標(biāo)文本就是輸出 output_text target_text return input_text, output_text # 示例 raw 這產(chǎn)品太差了根本沒法用 target 您好非常抱歉產(chǎn)品沒能滿足您的期望。能否具體描述一下您遇到的問題以便我們?yōu)槟峁└玫膸椭?input_seq, output_seq format_for_t5(raw, target) print(input_seq) # polite transfer: 這產(chǎn)品太差了根本沒法用 print(output_seq) # 您好非常抱歉產(chǎn)品沒能滿足您的期望...然后使用datasets庫將你的數(shù)據(jù)列表加載成Dataset對象并使用Tokenizer進(jìn)行批處理編碼。4.2 模型加載與訓(xùn)練配置我們使用Hugging Face的Transformers庫來加載預(yù)訓(xùn)練的T5模型和分詞器。中文任務(wù)可以選擇Langboat/mengzi-t5-base等中文預(yù)訓(xùn)練T5模型或者使用多語言版google/mt5-base。from transformers import T5ForConditionalGeneration, T5Tokenizer, Seq2SeqTrainingArguments, Seq2SeqTrainer model_name google/mt5-base # 或多語言T5 tokenizer T5Tokenizer.from_pretrained(model_name) model T5ForConditionalGeneration.from_pretrained(model_name)關(guān)鍵參數(shù)解析T5ForConditionalGeneration這是用于序列到序列任務(wù)的T5模型類。分詞器TokenizerT5使用SentencePiece分詞。它會自動在輸入文本前添加任務(wù)前綴并將文本轉(zhuǎn)換為子詞subwordID。接下來配置訓(xùn)練參數(shù)Seq2SeqTrainingArguments。這里有幾個需要仔細(xì)斟酌的參數(shù)training_args Seq2SeqTrainingArguments( output_dir./t5-polite-transfer, evaluation_strategyepoch, # 每個epoch后在驗證集評估 save_strategyepoch, learning_rate3e-4, # T5微調(diào)的典型學(xué)習(xí)率比BERT等模型稍高 per_device_train_batch_size8, # 根據(jù)你的GPU顯存調(diào)整 per_device_eval_batch_size8, weight_decay0.01, save_total_limit2, num_train_epochs10, # 根據(jù)數(shù)據(jù)集大小調(diào)整通常3-10個epoch predict_with_generateTrue, # 評估時生成文本而不僅僅是計算損失 generation_max_length128, # 生成文本的最大長度 report_tonone, # 可以設(shè)為tensorboard來可視化 )注意學(xué)習(xí)率T5的預(yù)訓(xùn)練使用了相對較高的學(xué)習(xí)率因此微調(diào)時學(xué)習(xí)率通常也設(shè)置在1e-4到5e-4之間而不是像BERT那樣常見的2e-5。這是一個容易踩的坑。4.3 訓(xùn)練循環(huán)與生成推理定義好數(shù)據(jù)整理函數(shù)DataCollator后就可以啟動Trainer進(jìn)行訓(xùn)練了。訓(xùn)練完成后使用模型進(jìn)行推理生成的代碼如下def generate_polite_response(model, tokenizer, raw_sentence, task_prefixpolite transfer: ): input_text task_prefix raw_sentence inputs tokenizer(input_text, return_tensorspt, max_length512, truncationTrue) # 將輸入轉(zhuǎn)移到模型所在的設(shè)備如GPU inputs {k: v.to(model.device) for k, v in inputs.items()} # 生成配置這里使用束搜索beam search以獲得更流暢的結(jié)果 output_ids model.generate( inputs[input_ids], max_length128, num_beams4, # 束搜索寬度越大結(jié)果越好但越慢 early_stoppingTrue, repetition_penalty2.5, # 重復(fù)懲罰對生成任務(wù)很重要 length_penalty1.0, ) response tokenizer.decode(output_ids[0], skip_special_tokensTrue) return response # 使用示例 test_sentence 你們的發(fā)貨速度能不能快點 response generate_polite_response(model, tokenizer, test_sentence) print(f輸入: {test_sentence}) print(f生成回復(fù): {response})5. 常見問題、調(diào)優(yōu)技巧與避坑指南在實際微調(diào)和部署T5模型的過程中你會遇到各種各樣的問題。下面是我從多次實踐中總結(jié)出的經(jīng)驗。5.1 生成結(jié)果不佳重復(fù)、截斷或無意義這是文本生成任務(wù)的通病。除了調(diào)整repetition_penalty和length_penalty還有幾個關(guān)鍵點溫度Temperature和Top-k/p采樣在model.generate()中可以設(shè)置temperature降低溫度使輸出更確定提高溫度更隨機(jī)、top_k和top_p核采樣。對于客服回復(fù)這種需要穩(wěn)定、可靠的場景建議使用較低的溫度如0.7并結(jié)合束搜索。檢查訓(xùn)練數(shù)據(jù)模型生成重復(fù)或無意義內(nèi)容往往根源在于訓(xùn)練數(shù)據(jù)。檢查是否有大量重復(fù)樣本輸出文本的多樣性是否足夠數(shù)據(jù)清洗是否徹底解碼策略選擇貪心搜索Greedy最快但容易陷入局部最優(yōu)生成平淡或重復(fù)的文本。束搜索Beam Search質(zhì)量和速度的平衡之選num_beams4或5是常用值。務(wù)必設(shè)置early_stoppingTrue否則可能生成過長的、包含無意義重復(fù)的序列。采樣Sampling創(chuàng)造性更強(qiáng)適合故事生成等任務(wù)但不適合要求精確和穩(wěn)定的任務(wù)。5.2 模型輸出不遵循指令任務(wù)前綴失效如果模型似乎“忽略”了你的任務(wù)前綴生成了與任務(wù)無關(guān)的內(nèi)容確認(rèn)微調(diào)數(shù)據(jù)格式百分之百確保你的訓(xùn)練、驗證、測試數(shù)據(jù)都完全一致地包含了任務(wù)前綴。一個字符的差異都可能導(dǎo)致模型困惑。檢查學(xué)習(xí)率是否過高過高的學(xué)習(xí)率可能會在微調(diào)初期“沖掉”模型在預(yù)訓(xùn)練中學(xué)到的、對任務(wù)前綴的理解能力??梢試L試將學(xué)習(xí)率降至1e-4或5e-5并使用學(xué)習(xí)率預(yù)熱warmup。嘗試提示微調(diào)Prompt Tuning如果你使用的是大型T5模型如T5-3B以上并且問題依然存在可以考慮采用提示微調(diào)。這種方法通過只更新少量提示參數(shù)最大程度地保留了模型原有的知識使其對任務(wù)指令更敏感。5.3 處理長文本輸入與顯存溢出OOMT5模型尤其是Base及以上在處理長序列時非常消耗顯存。如果你的輸入文本很長如長文檔摘要有效截斷使用分詞器的truncationTrue和max_length參數(shù)。但要注意簡單地截斷開頭或結(jié)尾可能會丟失關(guān)鍵信息。對于摘要任務(wù)可以考慮抽取式方法先獲取關(guān)鍵句或者使用長文本處理的模型變體。梯度累積如果因為序列太長導(dǎo)致批處理大小batch size只能設(shè)為1可以使用梯度累積。設(shè)置gradient_accumulation_steps4相當(dāng)于模擬了批處理大小為4的效果但顯存占用僅相當(dāng)于批處理大小為1。使用更小的模型對于長文本任務(wù)T5-Small或T5-Base可能是更實際的選擇它們在速度和顯存占用上更有優(yōu)勢。啟用混合精度訓(xùn)練在TrainingArguments中設(shè)置fp16True可以顯著減少顯存占用并加快訓(xùn)練速度。現(xiàn)代GPU如V100、A100對半精度計算有很好的支持。5.4 評估生成模型超越困惑度Perplexity對于分類任務(wù)準(zhǔn)確率、F1值是不錯的評估指標(biāo)。但對于生成任務(wù)評估生成文本的質(zhì)量是一個挑戰(zhàn)。人工評估是黃金標(biāo)準(zhǔn)對于像語氣轉(zhuǎn)換這樣的主觀任務(wù)組織人力對生成結(jié)果在“禮貌性”、“專業(yè)性”、“流暢度”等方面進(jìn)行打分是最可靠的方法。自動化指標(biāo)參考ROUGE常用于摘要衡量生成文本與參考文本的重疊度。BLEU常用于翻譯基于n-gram精確度的指標(biāo)。BERTScore利用BERT的上下文嵌入計算生成文本與參考文本的語義相似度通常與人類判斷相關(guān)性更高。困惑度Perplexity衡量模型對目標(biāo)序列的預(yù)測不確定性值越低越好。但它只衡量了語言模型本身的質(zhì)量無法直接衡量任務(wù)完成度如是否禮貌。重要提示不要過度依賴單一自動化指標(biāo)。它們各有缺陷最好結(jié)合多種指標(biāo)和人工抽查來進(jìn)行綜合判斷。T5論文及其所代表的“統(tǒng)一文本到文本”范式遠(yuǎn)不止是一個優(yōu)秀的模型。它提供了一種思考NLP問題的全新視角通過巧妙的框架設(shè)計將復(fù)雜多樣的問題歸一化從而釋放出大規(guī)模預(yù)訓(xùn)練和統(tǒng)一架構(gòu)的洪荒之力。從實踐角度看掌握T5意味著你掌握了一套處理絕大多數(shù)文本生成與轉(zhuǎn)換任務(wù)的“萬能鑰匙”。從微調(diào)技巧到問題排查從解碼策略到評估方法這些經(jīng)驗不僅適用于T5本身也適用于其后涌現(xiàn)的諸多基于Transformer的序列到序列模型。當(dāng)你下次面對一個文本處理需求時不妨先想一想這個問題能否被定義成一個“文本到文本”的轉(zhuǎn)換如果可以那么你的工具箱里已經(jīng)有一個非常強(qiáng)大的起點在等著你了。