文 | 小餵老師
編 | 小軼
作為NLP領域的「三高」用戶(高產、高能、高鈔),FaceBook最近(2020年11月)又發表了一篇高水準文章,目前已被COLING-2020接收,號稱解決了自然語言生成(NLG)落地的問題:Best Practices for Data-Efficient Modeling in NLG:How to Train Production-Ready Neural Models with Less Data
看到這個有點標題黨的文章,我不禁要發出關於NLG落地的素質三連:
眾所周知,對於自然語言處理中的NLG問題,一直都沒有很好的落地場景,即便是目前最合適的「文本自動摘要-Auto Text Summarization」,也沒有特別合適的產品和落地領域。所以雖說你是大佬,但我也不覺得你可以做第一個吃螃蟹的人!
抱著這些疑惑,我一口氣讀完了整個paper,然後不禁發出感慨:「就這?」——啊不,打錯了——然後不禁發出感慨:「四高一」!!!
本篇文章的亮點比較多,屬於一篇偏實驗性論文,總結為一句話就是:流程化NLG在對話系統落地過程中開發步驟和評估策略。
文中研究的NLG主要指對話系統中的NLG。為解決NLG應用落地的難題,論文設計了一套Tree-Based數據集,並據此推出Bucketing訓練策略 + TreeAccuracy評價策略。此外,還討論了NLG中的數據增強,知識蒸餾,生成模型選擇和Data-fficiency問題。為對話系統中的NLG落地給出了一套完備&Less-Data&Low-Latency&生成結果High-Acceptable的方案。
哈哈,這麼高的評價,那我們看一下這篇文章到底做了啥!
論文題目:
Best Practices for Data-Efficient Modeling in NLG:How to Train Production-Ready Neural Models with Less Data
論文連結:
https://arxiv.org/abs/2011.03877
Arxiv訪問慢的小夥伴也可以在 【夕小瑤的賣萌屋】訂閱號後臺回復關鍵詞 【1221】 下載論文PDF~
NLG先驗知識在談論這篇論文之前,我先和大家的溝通一下NLG這個任務,保證大家有一個共通的認知觀點。
自然語言生成(Natural Language Generation)是一個很難或者說高複雜度的自然語言處理任務。廣義的NLG是給定一個輸入(可以是文本、表格、圖片或是結構化的數據),輸出符合該輸入的一段文本描述(可以是文章寫作、摘要,也可是圖片內容描述)。NLG通常被認為是真正意義上的人工智慧,一個完備的NLG任務意味著圖靈機的實現。本論文的NLG是特指對話系統(Chatbot System)中的自然語言生成,對於一個對話系統,它通常有如下幾個部分:
對於此處的NLG任務,它的輸入是<Query, DM產生的Actions>,輸出的是一段文本回復。
因為是一篇偏實驗性的論文,所以論文的要點理解和模型框架並不算特別的難,但是需要大量的先驗知識儲備。接下來的四個小節中,我將依次列舉一些必要的先驗知識,包括:
Chabot System中的NLG在對話系統中,經過NLU,DM之後會獲得一系列的Dialogue Actions,這類Dialogue Actions就是NLG的重要輸入。在Chabot System中做NLG,常用的方法是基於模板生成結果。但是太過於死板且不可遷移。後來就提出了基於Encoder-Decoder的模型生成,和模板生成進行比較,也是有各自的優劣點(具體討論可見論文細節)。
這裡為了能讓讀者有一個對NLG任務比較直觀的理解,給出了一個簡單的例子(其中Query和Actions通常作為NLG的輸入,ExpectResponse則指代模型NLG的輸出):
Query: "我要買一張明天去北京的火車票。"
Actions: {
"intent":"買火車票",
"slots":["destination":北京,
"departure":UNK,
"time":DayTime[「明天」]_DetailTime["UNK]]
"actions":["詢問具體時間","詢問出發地點"]
"ExpectResponse":"請問您想買【明天】【幾點】的火車票?【出發地點】又是哪裡呢?"
}
Structured NLG Data如果使用Encoder-Decoder的生成模型來做NLG,那麼不可避免地就引入了模型輸出結果不可控制的問題。在生成的模型中,可能缺少重要的要素,也可能要素值生成錯誤,這些都是生成模型中不可控制的。
作者所在的團隊在2019年的一篇論文中(Constrained decoding for neural NLG from compositional representations in task-oriented dialogue ),給出了一種解決方法:它將輸入的action使用tree-structured的方式進行存儲。這樣的結構引入了更多的信息,也便於後面對生成結果進行判定。本文實際上也算是Facebook在以前工作上的一種再創新。
為了便於讀者理解,這裡給出了論文中一個關於tree-structured input的數據。這是Facebook發布的Dialogue System中的一個case。他將Actions結構化。Reference指期望給出的NLG輸出。
Query: "Do I have any reminder to buy milk?"
Structured Actions:
INFORM 1[amount[ 3 ]]
INFORM 2[todo[ buy milk ] date time[time[ 7 pm ]]]
INFORM 3[todo[ buy milk ] date time[colloquial[ tomorrow ]]]
INFORM 4[amount remaining[1]]
Reference: Yes, there are 3 reminders. The first two are, buy milk at 7 PM and tomorrow. There’s 1 other reminder.
Bucketing策略這種策略方式使用比較少,在機器學習中有使用過(我也是諮詢了一位同事之後,才了解和理解的)。
在深度學習中,我們通常隨機選取一批數據進行模型的訓練。如batch_size = 64,選取64個隨機數據進行訓練。Bucketing則是一種按照某種【策略】將數據分成一個個的bucket(桶),然後將一個個的Bucket的數據丟入到模型中進行訓練。這樣的訓練方法可以減少在模型訓練過程中由imbanlanced distribution帶來的bias,也能提高數據的利用率,是常用的一種利用「少量數據」訓練模型的方法。
在Bucketing的過程中,這種【策略】就非常的重要。好的策略能大大提高數據利用率,壞的策略通常不比隨機好,甚至會誤導模型的學習。設置Bucket策略的出發點是:各個bucket中的數據中,不一樣的信息是希望模型能夠學習的信息,一樣的(共有的)信息是模型可以忽略的信息。
在本論文的任務上,因為數據是tree-structured的數據,作者這裡數據的tree-structured degree和argument values,嘗試了多種方法進行Bucketing,都取得了比random好的效果。
BART模型BERT模型我聽過,BART模型又是啥??是不是寫錯了?BART是FaceBook AI團隊在2019年發布的一款適用於生成的預訓練語言模型。
▲BERT、GPT、BART模型框架比較如果說BERT適合做NLU,GPT框架適合做NLG。那如果我二者取其長,是不是就能更好的做NLP任務了?這個想法很簡單也很正常,但你發不了paper,因為你沒錢去訓練這樣的模型,但人家FaceBook有,所以人家FaceBook發了Paper(手動狗頭)。模型框架很簡單,但是非常有效,出來即刷新榜單,目前在NLP任務中,同量級的模型上仍有多處屬於SOTA。
BART模型在HuggingFace的Transformers上開源了自己的預訓練模型。筆者在今年8月份使用過BART模型進行過文本摘要生成。對於英文的生成來說,效果確實非常好,基本不用fine-tune也能比較好的生成通順的有意義的文本;但是對於中文,因為沒有Bart-zh,所以無法直接測試。不過FaceBook開放了25種語言的mBART,可用來做中文的文本生成,但直接生成的效果不好,語句通順都成問題,還未嘗試過fine-tune。不過從當前他人的使用評價和論文的結果來看,BART是一個很適合文本生成的預訓練模型。
Paper Body在介紹文章主體之前,我們再梳理一下文章說到的幾個要點知識。確保這幾個知識點你都能接受和掌握,我們再來看文章細節。
NLG任務是給定輸入的(dialog act,user query),生成語句通順,信息正確的回答。傳統NLG系統大多使用基於模板的文本生成(template-based text generation),有優有劣。新的基於神經網絡的NLG(neural-network-based language generation),其框架中主要步驟包括:對於輸入進行meaning representation(MR);使用sequence-to-sequence(S2S)框架,產生對應的response。因為本論文要探討的是NLG產品化落地,所以我們期望探索不同數據量下模型精度結果的情況。即,在Data-Reduction的情況下,如何提高Data-Efficiency。因為是要探討NLG的產品化落地,所以也期望做一下模型壓縮在NLG方面的探索。在上面的幾點理解後,我們從以下4個方面來看這篇論文:
四種訓練數據數據這裡使用的是Facebook團隊2019年給出的四個對話系統相關的數據,數據的存儲格式都是tree-structured的,數據的領域分別是:Weather, Reminder, Time, Alarm。數據的樣例格式如上面給出。
四種數據處於不同難度級別,其中Weather最難,Alarm最簡單。論文作者認為,這四個領域的數據能基本代表Task-oriented Dialogue System上NLG的難度水平,也基本滿足NLG任務的任務需求(雖然筆者我不這麼認為,讀者也不一定這麼認為😂)。
三種Bucketing策略這裡作者根據數據tree-structured的結構特色,使用了三種Bucketing策略,分別是:
Coarse grained(CB): 使用data中argument names進行Bucket groupMedium grained(MB): 精細到使用data中sub-arguments進行Bucket group,對於詞語的形態進行歸一化Fine grained buckets(FB&FBQ): 更精細化的操作,包括對argument-value去語義化,甚至對query進行去語義化 (FBQ)▲Bucketing 策略示例一個完整的訓練集使用不同的Bucketing策略,將會被分割成不同數量的buckets。越精細的Bucketing策略,被劃分的buckets數量就越多。比如Weather的訓練數據集使用CB:MB:FB劃分得到的buckets數量分別是2240:6406:15456. 如上圖是一個case以及其各種bucket策略的例子表述。
實驗結果證明,無論哪種Bucketing策略,效果都優於random。其實可以預料得到,因為一個正確的bucket策略相當於引入了先驗知識,讓模型更能按照正確的方向進行優化學習。所以同等訓練量和模型容納能力的情況下,模型效果會更優。
三種評估方法說到NLG問題,就一定繞不開NLG產生結果的評估。因為是自然語言生成的結果,和標準結果之間不能簡單的用「==」來判斷結果是否正確,因為會存在語義相同,表述不同的結果;也不能使用簡單的Rouge-L來評判,因為如果在關鍵詞(如數字,是否)上表述錯誤,是不可原諒的。所以NLG的結果評判也一直是一個問題。當然,可以引入人為評測,但是如果每一個NLG都使用認為評測,那麼成本將非常的高昂。這裡作者所使用的3種評測方法是:
Tree Accuracy: 因為數據本身是tree-structured數據,所以非常方便的檢測生成文本的重要token是否是MR中的token,如果是記為1,否或者缺失記為0;BLEU: 2002年提出,是NLG中通用的一種結果檢測方法。此處不做細述。人工評測:有錢土豪用人工,土豪FaceBook沒道理不用。這裡論文從Correctness和Grammaticality兩個方面對生成文本進行測評。三種模型方法和結果在原論文中最後給了7種模型策略,但我只列舉了三種,因為其它都是在該三種方法上的排列組合。
S2S:使用Sequence-to-Sequence框架,用LSTM做encoder和decoder,輸入的embedding使用的是glove的embedding。優點是輕量級,小。BART:基於BART的模型框架進行Encoder-Decoder的模型訓練,在BART的基礎上進行fine-tune。KD(Knowledge Distillation,知識蒸餾):使用BART的模型太大了,不利於模型的線上使用,需要使用知識蒸餾的做法。這裡KD指的是將BART蒸餾到S2S模型中。此外,作者還提到了JT和DDA。這不算模型,算是兩種通用的增強模型效果的方法:
Joint-Training(JT): 將多個相近領域的數據一起訓練。Dynamic Data Augmentation (DDA):對於不同的Epoch,隨機替換每個argument value。這樣即便使用一批數據進行訓練,每個Epoch的數據都不一樣,增大數據可用性。個人認為:由於此任務數據的固有特點,才得以使用該方法進行數據增強,算是合理利用數據特色進行數據增強的一種方法。最終輸出的7種模型分別的輸出結果如下:
圖中橫坐標是訓練數據量,縱坐標是精度。最後作者認為:S2S+KD 和 S2S+KD+DDA取得了最好的效果。
當然,全文的重點是NLG的Data Efficiency,所以會實驗各種數據量之下的模型結果,DDA策略無疑Data Efficiency最佳。而KD效果最差,但KD主要是為了工程應用而生,畢竟KD之後的S2S模型只有2M。
能達到這樣的結果,確實振奮人心。用幾句話總結論文的結論,那就是:我們的Bucketing策略很好,我們的DDA很好,我們的TreeAccuracy很好,我們的KD很好。
此外,論文還分別給出了在四個Domian上的3種測評結果以及人工測評結果,最後給出結論:我們提出的Tree Accuracy還是很有代表性的;我們使用的S2S+KD+DDA是很有效果的,在四個Domain上通用。
論文結論文章的結論我打算整體翻譯一下,因為確實是提綱挈領,很有概括性(英文好的建議讀原文,原文截圖我保留在下面):
在訓練task-oriented對話系統時,不僅要考慮模型的精度,還需要考慮模型的數據利用率以及可接受性(acceptability),響應延遲和所需的開發維護成本。為此,我們提出一個NLG開發流程:
根據數據中的結構(此處為基於樹)對meaning representation進行Bucketing採樣,以避免不必要和不平衡的數據採集,每個bucket收集1-3個case。訓練模型並進行評估。如果有任務和語義相似的多個domain數據,可以先進行聯合訓練,然後進行domain內微調。訓練模型並進行評估。實施動態數據增強(DDA),以減少響應對「可互換參數值」的依賴。與增強數據一起訓練,並評估模型性能。首先,使用預訓練的模型(例如BART)為未標記數據生成響應,得到增強數據。然後,用增強數據和人工標記的數據,訓練一個小模型(KD)。最後,用人工標記數據,進一步微調該模型。評估模型性能。如有必要,請為每個MR存儲桶收集更多示例,並從頭開始部署模型。▲論文結論我的理解關於論文論文本身是一個偏實驗性的論文,所以閱讀時需要注重理解論文設計的原因。因為是做對話系統中的NLG,而且是基於該組2019年發表的數據集進行訓練,其格式化的數據格式,引入了本文中兩個非常大的亮點:Bucketing策略 和 DDA方法。注意,這兩種方法都是需要在Tree-based數據上進行實現的。此外,模型使用的BART模型和KD方法,都屬於比較通用的方法,創新性屬於錦上添花。
當然,論文期望知道 NLG落地對數據的需求(Data Reduction)、可能的數據增強方法(DDA)、模型壓縮(S2S+KD)能達到的精度和應用領域的差異影響 的結果是什麼,並為此設計了一系列實驗,也給出了相應的結論。
關於NLG如開頭所說的,一個完備的NLG意味著真正圖靈機的實現,也意味著真正人工智慧時代的到來。目前各大頂級公司都在走這樣的路,包括目前很多論文都是將大量的NLP任務轉化為語義理解的任務,如:機器閱讀理解代替NER,QA方式代替信息抽取,模型生成代替文本分類。例如T5模型將各類NLP任務轉化為一個通用任務模型,例如GPT-3的finetune用普通的自然語言描述代替。NLG目前不屬於一個很好的可以工業落地和應用的領域,但是自然語言學者們卻一直在探索NLG的任務。
一直說NLG的回答有很多的不可控性,本論文給出了一種Tree Accuracy的方法來評測模型生成的結果,確實從一定程度上衡量了模型輸出結果的準確性,算是為NLG的落地提供了一些方向(在格式化文本輸出的落地上提供可能)。但是這種情況其實是假設我們已經獲取到了輸出所需的槽位值,而非真正意義上的從文本中去理解,然後獲取相關關係,再產出合理化的回覆。所以本文對於通用意義上的NLG有參考意義,但對於問題的解決還是有很長的路要走!路漫漫其修遠兮!
最後的最後,請記得,素質三連!!!
後臺回復關鍵詞【入群】
加入賣萌屋NLP/IR/Rec與求職討論群
後臺回復關鍵詞【頂會】
獲取ACL、CIKM等各大頂會論文集!