【NLP】文本生成專題1:基礎(chǔ)知識
大家好,好久不見,疫情封控在家兩個月寫文章都不利索了??。
在這段時間我反思了一下之前寫的東西,基本是最近用了什么、看到什么就寫什么,感覺系統(tǒng)性比較差。后面我打算少寫一些零散話題,多總結(jié)一些更有體系的內(nèi)容。第一個小專題我想總結(jié)一下我最近關(guān)注比較多的領(lǐng)域,文本生成。文本生成領(lǐng)域很廣泛,我主要會聚焦在文本摘要(Text Summarization)和數(shù)據(jù)驅(qū)動生成(Data2Text)。
這篇文章是第一篇,將介紹以下的內(nèi)容:
問題定義和數(shù)據(jù)集
文本摘要
數(shù)據(jù)驅(qū)動生成
常用的評價指標
ROUGE
BLEU
目前的技術(shù)水平
后面的安排
除了第二部分外都比較像科普文,沒有相關(guān)技術(shù)背景的朋友也可以看懂。
問題定義和數(shù)據(jù)集
文本摘要
摘要這個問題比較好理解,就是把長的文章,例如學術(shù)論文、新聞等等縮寫成更短的文本,并且保留重要的信息。
摘要領(lǐng)域常見的典型數(shù)據(jù)集CNN/DailyMail[1], arXiv[2], Pubmed[3], XSUM[4]等。其中CNN/DailyMail的原始文本是大約幾百個詞的新聞,摘要(ground truth)是人寫的,大概五六十個詞。中間兩個都是來自學術(shù)論文的數(shù)據(jù)集,原始文本比新聞長不少。學術(shù)論文通常都需要作者提供摘要,一般一百來個詞,天然適合拿來做摘要的數(shù)據(jù)集。X-SUM是里面摘要長度最短的數(shù)據(jù)集,基本是一句話的長度。還有一些數(shù)據(jù)集,大家可以參考papwerswithcode[5]。

數(shù)據(jù)驅(qū)動生成
數(shù)據(jù)驅(qū)動生成則是給定一些結(jié)構(gòu)化的數(shù)據(jù),例如餐館信息、實體間的關(guān)系等,生成一段自然語言。
這個領(lǐng)域典型的數(shù)據(jù)集有WebNLG[6]和E2E[7]。WebNLG的每條樣本會提供一系列用三元組描述的實體及關(guān)系,以及一段陳述三元組表達事實的自然語言文本作為標簽。

E2E數(shù)據(jù)集則提供了成對的餐館結(jié)構(gòu)化信息和自然語言描述。自然語言描述相比于WebNLG數(shù)據(jù)集更簡短一些。更多數(shù)據(jù)集大家參考這個頁面[8]。

常用的評價指標
除了數(shù)據(jù)集,要理解一個技術(shù)的發(fā)展水平,另一個很重要的方面是理解評價指標。評價機器生成的文本,最常用的指標是ROUGE和BLEU。
ROUGE
摘要里最常用的指標是ROUGE,它的全稱是Recall-Oriented Understudy for Gisting Evaluation,是在2004年的論文ROUGE: A Package for Automatic Evaluation of Summaries[9]里提出的。從名字可以看出來它比較關(guān)注recall。它有很多形式,在論文里比較??吹降挠?/span>ROUGE-N(N=1,2,3...)和ROUGE-L兩種。
對于ROUGE-N,計算方式就是生成結(jié)果和參考文本中都出現(xiàn)的ngram占參考文本ngram的比例。ROUGE-L比較麻煩,需要考慮最長公共子串,但相比于預(yù)設(shè)ngram大小的ROUGE-N有一定的優(yōu)勢。單句的ROUGE-L是最長子串長度除以參考句的長度,舉一個論文里的例子
S1. police killed the gunman S2. police kill the gunman S3. the gunman kill police
假設(shè)S1是參考句,那S2和S3的ROUGE-2都是1/3(匹配上了the gunman),但S2的ROUGE-L是3/4比S3的2/4大,實際情況確實是S2更好一些。
可以看出ROUGE,特別是ROUGE-N是比較考察和參考文本用詞的一致性的,理論上不是個語義上的評價,這也和后面會寫到的一些trick有直接的關(guān)聯(lián)。
ROUGE指標的python實現(xiàn)可以參考這個repo[7],看代碼應(yīng)該是是最清楚的。
BLEU
在Data2Text領(lǐng)域常用的指標是BLEU,全稱是bilingual evaluation understudy,從名字也能看出來,最開始是在機器翻譯的評價里使用。BLEU像是一個precision指標,基本是在算生成結(jié)果和參考文本都出現(xiàn)的ngram和參考文本長度的比值。主要考慮的問題是多次匹配,例如
candidate:ha ha ha reference: only saying ha is not good
candidate只有一種詞,且在標簽中出現(xiàn)了,但若BLEU是100分,顯然是不合理的。因為ha在reference中只出現(xiàn)一次,所以只能匹配一次,所以BLEU是1/3。
另一個要解決的問題是防止candidate過短而導致的高分。因為precision的分母是自己ngram的數(shù)目,只輸出有把握的詞是可以提高分數(shù)的。這里引入了一個叫brevity penalty的參數(shù)。這個參數(shù)的計算公式如下:

確定n 統(tǒng)計每種n-gram在reference和candidate中的出現(xiàn)次數(shù),reference中出現(xiàn)次數(shù)后面作為匹配數(shù)的上限 對于candidate中的每種n-gram,計算匹配次數(shù), 計算BLEU-N, 用幾何平均計算綜合得分,,通常k為4
目前的技術(shù)水平
首先我想說通過ngram的召回或準確率去評價文本生成的水平是一個非最優(yōu)但比較有效的方式。指標的小幅提升并不能說明產(chǎn)出的文本真的有與之對應(yīng)的肉眼可見的質(zhì)量變化。
我們可以從papwerswithcode上看到近幾年在上述的幾個典型數(shù)據(jù)集模型表現(xiàn)的變化。下圖是CNN/DailyMail數(shù)據(jù)集從16年到現(xiàn)在的SOTA變化圖[8],拉長時間看,這五年多來的提升還是非常明顯的。絕對值上看,不到50%的召回率似乎不盡如人意,但實際使用下來其實還是不錯的,大家可以看后面的例子。分數(shù)低的主要原因還是段落長度的文字自由度實在太高了。

我們可以再去huggingface上體驗一下實際的模型能力。我們選用如下一個同樣的文本,來生成摘要
The tower is 324 metres (1,063 ft) tall, about the same height as an 81-storey building, and the tallest structure in Paris. Its base is square, measuring 125 metres (410 ft) on each side. During its construction, the Eiffel Tower surpassed the Washington Monument to become the tallest man-made structure in the world, a title it held for 41 years until the Chrysler Building in New York City was finished in 1930. It was the first structure to reach a height of 300 metres. Due to the addition of a broadcasting aerial at the top of the tower in 1957, it is now taller than the Chrysler Building by 5.2 metres (17 ft). Excluding transmitters, the Eiffel Tower is the second tallest free-standing structure in France after the Millau Viaduct.
2019年問世的BART模型得出的摘要如下,這個模型在數(shù)據(jù)集上的ROUGE-1得分是44.16:
The tower is 324 metres (1,063 ft) tall, about the same height as an 81-storey building. Its base is square, measuring 125 metres (410 ft) on each side. During its construction, the Eiffel Tower surpassed the Washington Monument to become the tallest man-made structure in the world.
2022年ACL新鮮出爐的SOTA模型BRIO[9]得出的摘要如下,這個模型在數(shù)據(jù)集上的ROUGE-1得分是47.78:
The Eiffel Tower is 324 metres tall and the tallest structure in Paris. The tower is the same height as an 81-storey building. It was the tallest man-made structure in the world until the Chrysler Building in 1930. It is the second tallest free-standing structure in France after the Millau Viaduct.
可以看到,兩個摘要都挺流暢,除了前面兩句比較像,到后面兩個模型的關(guān)注點就有點分叉了,BART更關(guān)注原文的開頭部分,BRIO還帶到了結(jié)尾的信息,但就這個例子看很難說哪個好。
我覺得這個領(lǐng)域很有意思的一點是它并沒有像NLP的其他領(lǐng)域一樣,被大規(guī)模預(yù)訓練語言模型一下拉高SOTA的水平。對于其原因,我也沒想明白,但我傾向于歸因于問題的自由度太高了,長文本摘要本沒有標準答案。從技術(shù)角度講,對于摘要這種技術(shù)ROUGE這種評價體系可能已經(jīng)不適用了;而對于從業(yè)者,關(guān)注這個技術(shù)如何落地比刷排行榜上的幾個點可能更重要得多。
看WebNLG的話這幾年的進步更大一些,如下圖[10]所示,BLEU漲了快十個點

后面的安排
這篇文章算是開頭,后面我打算用幾篇文章分別總結(jié)下這幾個方面的學習成果:
摘要生成的主流算法框架,包括抽取式、生成式和一些結(jié)合兩種框架的方法,以及一些刷榜的方法 摘要生成中長文本的處理方法 數(shù)據(jù)驅(qū)動生成的主流算法框架
如果你對這些話題感興趣,可以關(guān)注這個公眾號,及時獲得更新。
參考資料
CNN/DailyMail: https://github.com/abisee/cnn-dailymail
[2]arXiv: https://snap.stanford.edu/data/cit-HepTh.html
[3]Pubmed: https://linqs.soe.ucsc.edu/data
[4]XSUM: https://github.com/EdinburghNLP/XSum/tree/master/XSum-Dataset
[5]文本摘要數(shù)據(jù)集: https://paperswithcode.com/task/text-summarization
[6]WebNLG: https://aclanthology.org/P17-1017.pdf
[7]E2E: https://arxiv.org/pdf/1706.09254v2.pdf
[8]數(shù)據(jù)驅(qū)動生成數(shù)據(jù)集: https://paperswithcode.com/task/data-to-text-generation
[9]ROUGE: A Package for Automatic Evaluation of Summaries: https://aclanthology.org/W04-1013/
[10]ROUGE in Python: https://github.com/pltrdy/rouge
[11]CNN/DailyMail SOTA變化圖: https://paperswithcode.com/sota/abstractive-text-summarization-on-cnn-daily
[12]BRIO: Bringing Order to Abstractive Summarization: https://arxiv.org/abs/2203.16804v1
[13]WebNLG近年SOTA變化情況: https://paperswithcode.com/sota/data-to-text-generation-on-webnlg,
