一、概述
近些時(shí)間以來,工作內(nèi)容總圍繞著自然語言生成(NLG)方向展開。近些時(shí)間,在NLP(自然語言處理)大熱的當(dāng)下,NLG這個方向也漸漸受到關(guān)注與發(fā)展。其實(shí),自然語言生成(NLG)和自然語言理解(NLU)都是自然語言處理的分支,我們通常所說的自然語言處理主要是關(guān)注自然語言理解這塊兒,從表面看NLG和NLU是一對逆過程,NLU主要關(guān)注點(diǎn)在于以人類語言(自然語言)作為輸入,處理后輸出機(jī)器可讀的語義表示;而NLG則是將語義信息以人類可讀的自然語言形式進(jìn)行表達(dá),選擇并執(zhí)行一定的語法和語義規(guī)則生成自然語言文本。但實(shí)際上,二者的側(cè)重點(diǎn)不同,NLU實(shí)際上是使文本的結(jié)構(gòu)和語義逐步清晰的過程,而NLG的研究重點(diǎn)是確定哪些內(nèi)容是滿足用戶需要必須生成的,哪些內(nèi)容是冗余的?!?】雖然側(cè)重點(diǎn)不同,但是二者在NLP這一領(lǐng)域內(nèi)存在著諸多共同點(diǎn):1、二者均以語言模型研究為基礎(chǔ);2、二者需要使用語法規(guī)則;3、二者都需要解決指代、省略等語用問題等。二者在實(shí)際使用中,很多時(shí)候相互依賴、相互依存,存在于同一系統(tǒng)的不同階段,發(fā)揮著不同的作用。
就像我們研究NLU(我們期望機(jī)器能夠理解我們?nèi)祟惖恼Z言)一樣,我們也期望機(jī)器能像人類一樣,能夠生成高質(zhì)量的人類可讀的文本(語音)信息,NLG是實(shí)現(xiàn)這一目的的關(guān)鍵技術(shù)。根據(jù)文本的長短,NLG可分為句子生成和篇章生成。比如,在聊天機(jī)器人、Image caption中,我們多根據(jù)上下文生成句子;而寫稿機(jī)器人、文案創(chuàng)作等場景中,我們就以篇幅形式的段落文本生成為主要形式。
根據(jù)輸入信息的不同,NLG又可分為:數(shù)據(jù)到文本的生成、文本到文本的生成、意義到文本的生成、圖像到文本的生成等。如果了解encoder-decoder框架,其實(shí)這里也可以這樣理解,我們把不同形式的輸入編碼成某種意義,這樣就把不同的輸入的編碼過程作為上游任務(wù),或者稱為語義信息的提取;而后續(xù)就作為下游任務(wù),統(tǒng)一為意義到文本的生成。在實(shí)際應(yīng)用中,諸如翻譯、摘要等都屬于文本到文本的生成,而這一方面的研究又最為突出;圖像到文本的生成主要應(yīng)用于圖片描述;數(shù)據(jù)到文本的生成應(yīng)用也頗廣,比如新聞生成、文案生成等等。每項(xiàng)技術(shù)都極具應(yīng)用價(jià)值并充滿挑戰(zhàn),近些年在NLP以及AI領(lǐng)域均有相當(dāng)多的前沿研究,而且部分研究已經(jīng)應(yīng)用到工業(yè)應(yīng)用之中。
二、NLG架構(gòu)及方法
NLG技術(shù)在系統(tǒng)的研究及使用中積累了諸多經(jīng)驗(yàn),經(jīng)驗(yàn)證及總結(jié),下面對其架構(gòu)及方法作一概括。
2.1 NLG系統(tǒng)架構(gòu)
NLG 系統(tǒng)的主要架構(gòu)可分為流線型(pipeline)和一體化型(integrated)兩種,流線型的NLG系統(tǒng)由幾個不同的模塊組成,各個模塊之間不透明、相互獨(dú)立,交互僅限于輸入輸出;而一體化的NLG系統(tǒng)各模塊之間是相互作用、共同工作的,更符合人腦的思維過程,但是實(shí)現(xiàn)較為困難。所以,在實(shí)際應(yīng)用中較為常用的是流線型NLG系統(tǒng)。

如上圖所示,典型的三階段式的NLG系統(tǒng)被劃分為文本規(guī)劃、句子規(guī)劃、句法實(shí)現(xiàn)3個模塊。其中,文本規(guī)劃決定文本要說什么(what);句法實(shí)現(xiàn)決定怎么說(how);句子規(guī)劃則負(fù)責(zé)讓句子更加連貫。
2.2 NLG方法
雖然NLG已應(yīng)用于許多實(shí)踐當(dāng)中,但目前對NLG的研究進(jìn)展遠(yuǎn)不如NLU。所以,在NLG技術(shù)發(fā)展的歷史過程中,主要包括基于模板的NLG和基于深度學(xué)習(xí)的NLG方法。
1、基于模板的NLG
NLG模板由句子模板和詞匯模板組成。句子模板包括若干個含有變量的句子,詞匯模板則是句子模板中變量對應(yīng)的所有可能的值。為方便理解,下面引用文獻(xiàn)【1】中的一個例子:
topic->weather
act->query
Content: weather_state
->3 對不起,請[<tell>]您需要[<refer>]{<where>}的[<what>]。
->2 請[<tell>]您需要[<refer>]的[<what>|具體內(nèi)容]。
->1 抱歉,請[<tell>]您需要{<refer>}{(day)|今天|[when]}{(location)||<where>}的[<what>]。
符號說明:
|:或者
[]:內(nèi)部元素出現(xiàn)次數(shù)>=1
{}:內(nèi)部元素出現(xiàn)次數(shù)<=1
():對話管理模塊中的變量
<>:自定義語料中的變量
句子前的數(shù)字:該句子的權(quán)重,權(quán)重越大句子出現(xiàn)的可能性越大。
<center>詢問天氣場景中的句子模板</center>
<tell> -> [告訴我|補(bǔ)充|說明|輸入]
<refer> -> [查詢|知道|獲取|收到|了解|咨詢]
<where> -> [哪里|何處|什么位置|什么地方|什么城市|哪個位置|哪個區(qū)域]
<what> -> [天氣|哪方面信息|什么信息|哪方面情況|哪方面內(nèi)容|何種內(nèi)容]
<when> -> [哪天|什么時(shí)間|哪個時(shí)辰|什么時(shí)候]
<center>詢問天氣場景中的詞匯模板</center>
實(shí)際工作中,基于模板的NLG技術(shù)在項(xiàng)目初期使用較多,由于其可控性,對于語言較為嚴(yán)謹(jǐn)?shù)暮芏囝I(lǐng)域中使用極為普遍。
2、基于深度學(xué)習(xí)的NLG
伴隨深度學(xué)習(xí)的熱潮,以及機(jī)器翻譯相關(guān)研究的快速發(fā)展,基于深度學(xué)習(xí)的NLG技術(shù)也有了較為突出的進(jìn)展。尤其是encoder-decoder框架的流行,使得該框架下的seq2seq技術(shù)也得到了快速發(fā)展,尤其是18年末Bert的提出,將NLP研究推上了一個新的高度?;谏疃葘W(xué)習(xí)的NLG任務(wù)也是使用seq2seq體系結(jié)構(gòu),我們這里主要聊一下data2text這種生成任務(wù),根據(jù)輸入信息的區(qū)別,其過程分為訓(xùn)練階段和生成階段。
(1) Training階段。在訓(xùn)練階段,encoder和decoder都需要輸入信息。encoder端的輸入為結(jié)構(gòu)化或者半結(jié)構(gòu)化的數(shù)據(jù)信息,decoder端的輸入為encoder端輸入信息所對應(yīng)的文本信息,也可簡單的理解為序列標(biāo)簽信息,直觀地可以看出,training階段是有監(jiān)督的學(xué)習(xí)。encoder負(fù)責(zé)將輸入編碼成一條語義向量C,然后語義向量C作為decoder的初始狀態(tài)參與decoder進(jìn)行解碼預(yù)估。
(2)Generation階段。在生成階段,decoder端不再需要外部輸入信息,其網(wǎng)絡(luò)結(jié)構(gòu)需稍作改造,后一位的輸入為前一時(shí)間步的輸出,也就是構(gòu)建RNNLM(RNN語言模型)。
基于上述的描述,這里對基于深度學(xué)習(xí)的data2text生成做一個簡要的總結(jié)。

- 構(gòu)建語料數(shù)據(jù)及預(yù)處理階段主要工作是數(shù)據(jù)的獲取及加工處理。也是最終結(jié)果的基礎(chǔ),其中設(shè)計(jì)到各種技術(shù),如:數(shù)據(jù)爬蟲、數(shù)據(jù)清洗、數(shù)據(jù)選擇、命名實(shí)體識別、依存關(guān)系分析、分詞、word2vec、槽位設(shè)置等等,這里是一個綜合性的NLU任務(wù)。
- 模型構(gòu)建階段目標(biāo)較為明確,使用較多的為biLSTM+attention結(jié)構(gòu)。在encoder-decoder框架中,decoder更為核心,所以,諸多優(yōu)化也都在decoder側(cè)進(jìn)行,如beam search。
- 模型的訓(xùn)練階段是一個損失函數(shù)最優(yōu)化及模型參數(shù)調(diào)優(yōu)的過程,處處問題處處坑,而且對于NLG來說,生成結(jié)果不能很直觀地反映模型的狀態(tài),比如說曾經(jīng)遇到的兩個問題,一個是生成序列中間斷性的出現(xiàn)重復(fù)字串;另一個是模型后半部分出現(xiàn)重復(fù)字串。咋一看兩個現(xiàn)象很相似,尤其是在短文本預(yù)測時(shí)。但是,事實(shí)經(jīng)驗(yàn)總結(jié)結(jié)果是前一種是欠擬合現(xiàn)象,模型不收斂,需加大訓(xùn)練輪數(shù);而后一種是過擬合現(xiàn)象,可通過dropout優(yōu)化。
這里只是要對NLG任務(wù)做一概括性的總結(jié),更深入的一些東西后續(xù)可以繼續(xù)討論。對比基于模板和基于深度學(xué)習(xí)的NLG方法,基于模板的更可控,但是結(jié)果較為生硬、死板,而且后期擴(kuò)展對初期規(guī)劃依賴較大;而基于深度學(xué)習(xí)的方法可以更好的生成創(chuàng)意性、個性化、娛樂性等文本,但是效果不可控或者難以控制??吹竭@里,大家或許就會想到,我們可以權(quán)衡這兩種方法的優(yōu)點(diǎn),結(jié)合起來嘛。的確,哈佛大學(xué)的牛人已經(jīng)開始了相關(guān)研究并取得了一定的成績(https://arxiv.org/abs/1808.10122) 【3】,。
三、NLG任務(wù)
了解了上一部分的NLG體系結(jié)構(gòu),下面對NLG相關(guān)任務(wù)進(jìn)行探討。通常,通過將輸入數(shù)據(jù)分解成若干個子問題來解決將輸入數(shù)據(jù)轉(zhuǎn)換成輸出文本的NLG問題。通過對多數(shù)NLG系統(tǒng)總結(jié),我們可以大致把NLG的任務(wù)分為:
(1)確定內(nèi)容:決定即將構(gòu)建的文本中應(yīng)該包含哪些信息;作為生成過程的第一步,NLG系統(tǒng)需要決定哪些信息應(yīng)該包含在正在構(gòu)建的文本中,哪些不應(yīng)該包含在其中。該部分最大的進(jìn)步應(yīng)該算是對齊機(jī)制的提出,解決了如何自動學(xué)習(xí)數(shù)據(jù)和文本之間的對齊關(guān)系的問題。
(2)文本結(jié)構(gòu):確定文本中呈現(xiàn)信息的順序;在確定了要傳遞什么消息之后,NLG系統(tǒng)需要決定它們向讀者呈現(xiàn)的順序。
(3)句子聚合:決定在單個句子中呈現(xiàn)哪些信息;并非文本計(jì)劃中的每一信息都需要用一個單獨(dú)的句子來表達(dá);通過將多條消息組合成一個句子,使得生成的文本變得更流暢、更具可讀性。盡管也有一些情況認(rèn)為應(yīng)避免聚合,總的來說,聚合很難定義,也很難實(shí)現(xiàn),我們可以用各種方式解釋,比如從冗余消除到語言結(jié)構(gòu)組合。這里對上述語言進(jìn)行“聚合”一下,就是如何用言簡意賅的話語準(zhǔn)確表達(dá)想要表達(dá)的語言信息。
(4)詞匯化:找到正確單詞或短語來表達(dá)信息;即用什么詞或短語來表達(dá)消息的構(gòu)建塊。通常情況下,上下文約束在這里也扮演著重要的角色,所以這一點(diǎn)在中文NLG任務(wù)中尤為突出。
(5)引用表達(dá)式生成:選擇單詞和短語以標(biāo)識域?qū)ο?;這種特征表明與詞匯化有著密切的相似性,但本質(zhì)上的區(qū)別在于,引用表達(dá)式生成是一項(xiàng)“識別任務(wù),系統(tǒng)需要傳遞足夠的信息來區(qū)分一個域?qū)嶓w和其他域?qū)嶓w”。這一個task好抽象,白話解釋一下,詞匯化階段主要是選用合適的詞或短語表達(dá)上下文相關(guān)的語義信息,而引用表達(dá)式生成階段的任務(wù)首先是識別要表達(dá)的對象,然后用合適的詞或短語表示它。
(6)語言實(shí)現(xiàn):將所有單詞和短語組合成格式良好的句子。這項(xiàng)任務(wù)涉及到對句子的成分進(jìn)行排序,以及生成正確的形態(tài)形式,通常還需要插入功能詞(如助動詞和介詞)和標(biāo)點(diǎn)符號等。上部分提到的NLG方法準(zhǔn)確的說應(yīng)該就是這里的語言實(shí)現(xiàn)方法。再來個模板表達(dá)的例子,
模板:由于受到冷空氣影響,${city}${date}將出現(xiàn)${weather}天氣。
例子:1、由于受到冷空氣影響,北京明后兩天將出現(xiàn)降雨天氣。
2、由于受到冷空氣影響,上海市明天將出現(xiàn)大風(fēng)降雨天氣。
下面引用一段話來總結(jié)一下上述幾個任務(wù)之間的邏輯關(guān)系。這些任務(wù)可以從“早期”決策過程(向讀者傳達(dá)哪些信息?)到“后期”(在特定句子中使用哪些單詞,以及如何將它們按正確的順序排列?)的決策過程的角度來考慮。在這里,我們通過區(qū)分更傾向于數(shù)據(jù)的選擇(例如說什么)和具有越來越語言性的選擇(例如,詞匯化或?qū)崿F(xiàn))來指代“早期”和“后期”任務(wù)【3】。
四 NLG結(jié)果評價(jià)
對于最終生成結(jié)果的評價(jià)細(xì)分為線下評價(jià)和線上評價(jià)。
線下評價(jià)是為了對文本本身的質(zhì)量作出量化。如何對生成的文本進(jìn)行評價(jià)也是文本生成研究中重要的一環(huán)。Gkatzia[5]總結(jié)2005年到2014年間的常用的針對文本生成的評價(jià)方法,將其分為內(nèi)在評價(jià)和外在評價(jià)方法。其中內(nèi)在評價(jià)關(guān)注文本的正確性、流暢度和易理解性。常見的內(nèi)在評價(jià)方法又可分為兩類:第一種是借鑒翻譯、摘要中基于數(shù)據(jù)的方式,采用BLEU、NIST和ROUGE等方法從數(shù)據(jù)角度進(jìn)行自動化評價(jià),通過計(jì)算生成文本和訓(xùn)練文本間的相似度來衡量生成質(zhì)量;第二中是專家模式。通過人工評價(jià),從有用性等對文本進(jìn)行打分。外在評價(jià)則關(guān)注生成文本在實(shí)際應(yīng)用中的可用性,這方面我們主要是在前面內(nèi)在評價(jià)方式中設(shè)定相應(yīng)閾值,以獲取較好效果的文本,必要時(shí)再做人工review。
線上評價(jià)則是業(yè)務(wù)導(dǎo)向,我們的直接指標(biāo)便是點(diǎn)擊率或者APP進(jìn)入率,根據(jù)對這些指標(biāo)判斷是否達(dá)到預(yù)期點(diǎn)擊率的提升或者實(shí)際的營銷效果。
小結(jié)
本文對自然語言生成作了概要性的描述,由于該領(lǐng)域在實(shí)際應(yīng)用中并不成熟,相關(guān)研究及實(shí)現(xiàn)與自然語言理解方向相差甚遠(yuǎn),但是近些時(shí)候隨著NLP整體發(fā)展的進(jìn)步,以及諸多工業(yè)界的現(xiàn)實(shí)需求,NLG的相關(guān)研究及工程實(shí)現(xiàn)也受到了諸多關(guān)注。
由于理解及知識的偏差,文中或多或少存在不當(dāng)之處,歡迎批評指正,也希望能與更多在此方向研究或有實(shí)踐經(jīng)驗(yàn)的牛人共同探討學(xué)習(xí)。
參考文獻(xiàn)
【1】自然語言處理實(shí)踐:聊天機(jī)器人技術(shù)原理與應(yīng)用
【2】Survey of the state of the art in nature language generation——core tasks, applications and evaluation
【3】Learning Neural Templates for Text Generation,Wiseman, Shieber, Rush; EMNLP 2018
【4】萬小軍,馮巖松,孫薇薇. 文本自動生成研究進(jìn)展與趨勢. CCF 中文信息技術(shù)專業(yè)委員會
【5】 Gkatzia D, Mahamood S. A Snapshot of NLG Evaluation Practices 2005-2014[C]//Proceedings of ENLG. 2015.
【6】 Reiter E. An architecture for data-to-text systems[C]//Proceedings of the Eleventh European Workshop on Natural Language Generation. Association for Computational Linguistics, 2007: 97-104.