文本摘要的寫作機器人目前有哪些應用?效果如何?能否代替一定的人力?

類似新聞機器人?

本題已收錄至知乎圓桌:人工智慧 · 語言智能,更多「人工智慧」相關話題歡迎關注討論


我們只是沒有足夠的時間,互聯網時代已經讓數十億用戶對無法預計的大量信息觸手可及。儘管我們的生活已經被可獲取的有限數據所改變,但是我們仍然被信息過載的問題困擾著。所以,自動文本摘要變得越來越重要,自動文本摘要就是自動地把一段文字壓縮為它對應的較短的版本的任務。下文是ACL 2017論文《Get To The Point: Summarization with Pointer-Generator Networks》作者Abigail See(斯坦福大學)對自動文本摘要生成系統的一篇解讀,希望能對你有所幫助。

兩種類型的概括

一般而言,有兩種自動文本摘要的方法:抽取式的的抽象式的。

  • 抽取式的的方法會從源文本中選擇一些段落,然後重新組織它們,以形成一段概括。你可以將這種方法想像成一支熒光筆。

  • 抽象式的方法利用自然語言生成技術來寫出原創的句子。用類似的比喻,這種方法就像一支鋼筆。

現存的文本摘要的方法中,大部分都是抽取式的,主要是因為選擇文本要比從零開始生成文本來得更加容易。例如,如果你用到的抽取式的方法涉及到了從源文本所有的句子中選擇和重新組織,那麼,你可以保證,生成的摘要是符合語法的、完全可讀的,並且是和源文本相關的。被應用到中等長度的事實性文本中時,這些系統會比較成功,如新聞文章和技術性文檔。
幾個可以在線使用的抽取式文本摘要系統的鏈接如下:

http://autosummarizer.com/
http://textcompactor.com/
http://smmry.com/

然而,另一方面,抽取式摘要的方法過於局限,它不能產生像人一樣的文本總結,尤其是面對更長、更複雜的文本時。想像你試圖僅僅通過選擇和重新組織句子來為一部小說寫出具有維基百科的風格的劇情簡介,例如狄更斯的《遠大前程》。這是不可能的。首先,《遠大前程》是以第一人稱寫的,而劇情簡介應該以第三人稱來寫。更重要的是,將一整章的內容壓縮為一句話需要強大釋義,這隻在一個很抽象的框架下才是有可能的,例如「iPip 拜訪了 Havisham 小姐,並且愛上了她的養女 Estella」。
簡言之,抽象式摘要可能比較困難,但是它是很必要的!
了解循環神經網路
如果你不熟悉循環神經網路和注意力(attention)機制,請參閱 WildML(http://www.wildml.com/2015/09/recurrent-neural-networks-tutorial-part-1-introduction-to-rnns/), Andrej Karpathy(http://karpathy.github.io/2015/05/21/rnn-effectiveness/)以及 Distill(http://distill.pub/2016/augmented-rnns/)的優秀教程。

近年來,循環神經網路(RNN)這種能夠執行序列數據的計算(例如單詞序列)的神經網路已經成為了許多自然語言處理任務的標準方法。特別地,如下圖所示的具有 attention 的序列到序列(sequence-to-sequence)模型在文本摘要中已經變得流行。下面我們看著結構圖逐步了解!

在這個例子中,源文本是一篇以「Germany emerge victorious in 2-0 win against Argentina on Saturday」開始的新聞文章,我們正在生成這樣的摘要——「Germany beat Argentina 2-0」。首先,編碼 RNN 逐詞讀取源文本,生成一個編碼器隱藏狀態的序列(因為我們的編碼器是雙向的,所以圖中的序列有兩個方向的箭頭。不過,在這裡並不重要)。

當編碼器讀取整個源文本之後,解碼 RNN 開始輸出應該形成文本摘要的單詞序列。在每一步,解碼器將摘要中之前的單詞作為輸入(在第一步,特定的&標誌作為寫作開始的信號),並用它們來更新解碼器的隱藏狀態。解碼器隱藏狀態被用來計算注意力分布,注意力分布是源文本中所有單詞的概率分布。直觀地說,注意力分布告訴網路「應該看哪裡」,以幫助網路生成下一個單詞。在上圖中,解碼器目前生成了第一個單詞Germany,並且專註於源文本中的 win 和 victorious,以生成下一個單詞 beat。

然後,注意力分布被用來生成一個編碼器隱藏狀態的加權和,它被稱作語境向量 (context vector)。語境向量可以被視為解碼器在這一步驟中「從源文本中看到的東西」。最後,語境向量和解碼器隱藏狀態被用來計算出辭彙分布,它就是在一個通常為成千上百這麼大的固定辭彙集合中的概率分布。最大概率的單詞將會被選為輸出(在這一步中,被選中的是 beat),然後,解碼器開始下一個步驟。

解碼器的這種以任意順序自由地生成包括像 beat 這種並未出現在源文本中的單詞的能力,使得序列到序列的模型在抽象式摘要中成為一個很有潛力、強大的解決方案。

兩大問題

不幸的是,用這種方法進行文本摘要時會被兩大問題困擾:

  • 問題 1:有時候這種摘要會不準確地複製事實細節(例如,Germany beat Argentina 3-2)。這對像「2-0」這種罕見的或者辭彙集之外的詞來說尤其常見。
  • 問題 2:有時候摘要會重複它們本身(例如,Germany beat Germany beat Germany beat…...)

事實上,這種問題對循環神經網路而言是很常見的。在深度學習中總是這樣,很難去解釋清楚為什麼網路會出現一些特殊的行為。如果你感興趣,請看下面對這兩個問題做出的解釋。如果你對這兩個問題的原因不感興趣,請直接跳到後文的解決方案部分(即用指針生成網路來實現更加容易的複製)。

對問題 1 的解釋:基於 attention 的端到端模型讓從源文本中複製一個單詞 w(w 即 word,代表一個單詞)變得更加困難。在接收到經過幾個層的計算(這些計算包括將單詞 w 與它的 word embedding 進行匹配)才傳遞過來的信息之後,網路必須以某種方式去恢復原始單詞。

尤其是,如果 w 是那些在訓練的時候不經常出現的罕見辭彙,並且有著較差的 word embedding(即它與完全不相關的單詞聚集在一起),那麼,從網路的角度來說,w 在很多單詞中是無法無分的,所以也就不可能被生成。

即便 w 有著較好的 word embedding,網路也可能仍然很難去生成它。例如,RNN 摘要系統經常將一個人名替換成另一個人名(例如 Anna → Emily),或者將一個城市替換為另一個城市(例如,Delhi → Mumbai)。這是因為女性的名字或者印度的城市名的 word embeddings 傾向於聚集在一起, 在嘗試重建原始單詞的時候,這可能造成混淆。

簡而言之,這貌似是執行一個簡單的複製(copying)操作的不必要的困難方式,複製操作是摘要任務中的基本操作。

對問題 2 的解釋:重複或許是由解碼器對輸入(即之前的摘要單詞)的過度依賴造成的,而非解碼器狀態存儲了長時間的信息。這可以通過以下事實來看出:單個重複的單詞通常觸發無休止的循環。例如,Germany beat Germany這麼一個微小的錯誤會導致災難性的 Germany beat Germany beat Germany beat Germany beat…...,而不是錯誤不太嚴重的 Germany beat Germany 2-0。

用指針生成網路來實現更加容易的複製(解決問題 1)

我們(Abigail See)針對問題 1(不準確複製)的解決方案是指針生成網路。這是一個可以通過指針從源文本中選擇複製單詞的混合網路,同時還保留了從固定辭彙集中生成單詞的能力。下面我們以這張圖進行逐步解釋!

上圖展示了解碼器的第三步,截至目前我們已經生成了一部分摘要 Germany beat。和之前一樣,我們計算出注意力分布和辭彙分布。然而,這次我們還計算出了生成概率 pgen(此處公式、符號不好展示,具體參見原文),它是介於 0 到 1 之間的標量。它代表從辭彙集中生成一個單詞的概率,而不是從源文本進行複製。生成概率pgen 被用來對辭彙分布Pvocab(用來生成單詞) 和注意力分布 aa(用來指向元單詞 w_iwi)進行加權,並通過如下所示的公式將兩者結合成最終分布 Pfinal,結合公式如下所示:

這個公式的含義是:生成單詞 w 的概率等於從辭彙集生成 w 的概率再加上指向原文本任何位置出現該詞的概率。

與基於 attention 的端到端系統相比,指針生成網路具有以下優點:

  1. 指針生成網路讓從源文本生成單詞變得更加容易。這個網路僅需要將足夠多的 attention 集中在相關的單詞上,並且讓pgen 足夠的大。
  2. 指針生成網路甚至可以複製原文本中的非正式單詞(如例子中的 2-0)。這是此方法帶給我我們的主要福利,讓我們能夠處理那些沒出現過的單詞,同時也允許我們使用更小規模的辭彙集(需要較少的計算資源和存儲空間)。
  3. 指針生成網路能夠被更快地訓練,尤其是訓練的前幾個階段。

如此一來,指針生成網路就是兩種方法中最好的,它用指向(pointing)和生成(generating)把抽取式摘要和抽象式摘要結合起來了。

用匯聚的方法來消除重複(解決問題 2)

為了解決問題 2(重複性摘要),我們採用了一種叫做匯聚(Coverage)的技術。其思想就是,利用注意力分布區追蹤目前應被覆蓋的單詞,並且當網路再次注意同一部分的時候,予以懲罰。在解碼器的每一個時間步長 t 上,匯聚向量 ct 是截至目前所有的注意力分布 at"的和。如下式所示:

換言之,某個特定的源單詞的收斂就是到此刻它所受到 attention 的和。在我們運行的例子中,匯聚可以按照這種方式來構建:其中,黃色陰影的強度代表匯聚向量的大小。

最後,我們引入額外的損失項來懲罰匯聚向量 c"t 和新的注意力分布 a"t 之間的任何交疊:如下所示:

這樣可以避免網路繼續重視(從而摘錄)那些已經被覆蓋到的辭彙。

輸出示例

現在,來看一下上述幾個系統在一些實際數據上的對照試驗。我們在 CNN/Daily Mail 數據集上訓練並測試我們的網路,這個數據集包含配以多句式摘要的新聞文章。

下面的例子展示的是源文本(關於英式橄欖球的新聞文章)和原本就有的參考摘要,以及由我們的三個系統所生成的自動摘要。通過將游標懸停在自動摘要系統生成的摘要中的一個單詞上邊,你會在源文本中看到注意力分布被投影成了黃色。這告訴你,當網路生成這個詞的時候,它正在「注意」源文本中的那個詞。

對於指針生成模型,生成概率 pgen 的值也被投影成了綠色陰影。將游標懸停在自動摘要文本中的某一個單詞上時,會顯示出這個單詞對應的生成概率 pgen 的大小。

(請訪問原文Taming Recurrent Neural Networks for Better Summarization以體驗 demo 中的三個自動摘要系統)

結果

  • 基本的序列到序列系統不能複製諸如 Saili 這樣的辭彙集之外的單詞,相反,它會輸出「未知標誌」[UNK]。相比之下,指針生成系統在複製這類單詞時沒有問題。
  • 儘管報導的事件發生在紐西蘭,但是基本的序列到序列系統錯誤地說成球員是荷蘭人,球隊是愛爾蘭的,也許這反映了訓練數據的內容主要有關歐洲,存在偏差。當系統在生成這些單詞時,網路卻在極度地關注 Munster (愛爾蘭南部一個省) 和 Francis,這貌似說明系統在儘力去正確地完成複製。
  • 由於未知原因,短語「a great addition to their backline」被基本的序列到序列系統替換成了「a great addition to their respective prospects」。儘管網路直接關注單詞 backline,但是它沒有被正確地複製。
  • 基本的指針生成摘要系統會不斷地重複自身,我們注意到,它每一次都在關注源文本中的同一個部分。與之對應,指針生成+匯聚模型並不包含重複,我們可以看到,儘管這個模型在生成的摘要中兩次使用了單詞 Saili,但是網路在這兩次生成 Saili 的時候所關注的 Saili 在關注源文本中出現的地方卻是完全不同的(在博客原網址的 demo 中顯而易見),這就是匯聚系統(converge syatem)在起作用的證據。
  • 綠色陰影顯示,每當網路在「編輯」源文本的時候,生成概率一般都會很高。例如,當網路生成簡化一句話的片段時,或者跳轉到文本的另一部分(例如,will move to the province… and was part of the new zealand under-20 side...)時,pgen 都會很高。
  • 在這三個系統中,注意力分布是相當集中的:通常每次只關注一個或者兩個單詞。當注意力比較分散的時候,通常會出錯,因為這個時候網路不確定做什麼。
  • 在生成摘要的第一個單詞時,三個系統都注意 Munster 和 Francis 這兩個詞。總之,網路傾向於尋找人名或者地名來作為摘要的開始。

那麼,抽象式摘要實現了沒?

遠沒到實現的程度!儘管我們展示這些進步可以幫助我們馴服循環神經網路的一些野蠻行為,但是仍然有很多未解決的問題。

  • 儘管我們的系統生成了抽象式摘要,但是生成的單詞通常都是和原文相當接近的。更高水平的抽象——例如更加強大的壓縮釋義,仍然未被解決。
  • 有時候,網路沒有去聚焦源文本的核心內容,反而概括一些不太重要的信息。
  • 有時候,網路錯誤地組合了原文的片段,例如,作出的摘要是 work incorrectly composes fragments of the source text – for example reporting that,而事實上剛好相反。
  • 多句式摘要有時候並沒有構成一個有意義的整體,例如,在沒有事先介紹的情況下,就用一個代詞(例如 she)去代替一個實體 (例如德國總理 Angela Merkel)。

未來最重要的研究方向或許是可解釋性(interpretability)。通過揭示網路正在關注什麼,注意力機制在神經網路的黑盒中點亮了珍貴的光芒,以幫助我們調試類似重複和複製的問題。為了取得進一步的進展,我們需要深入了解遞歸神經網路從文本中學習到的內容以及知識的表徵方式。

參考內容:Taming Recurrent Neural Networks for Better Summarization


作為寫作機器人方向探索的PM,跟大家分享一下我們目前探索和階段性的進展吧。

目前我們的智能寫作機器人產出的文章主要有三種類型:速報類、知識類和資訊聚合類。

速報類,如比賽信息、股訊快報等,對時效性要求比較高,需要瞬時將結果生成文章。

知識類主要是科普類的文章,如教育(詩詞、歷史知識)、生活(菜譜,保健知識)、旅遊等。知識類文章的數據內容主要來自百度的知識庫和全網優質資源,通過對優質數據資源的組織聚合和計算推理,為用戶提供更加豐富的知識和信息。

而資訊聚合類是基於全網實時資訊數據,根據用戶關注點,生成用戶感興趣的、以話題為中心的資訊文章,比如某一個電影熱映,我們會對電影的主演、之前的作品等信息做一些擴展和盤點;對於熱點事件,我們會對事件的發展過程和關鍵信息進行分析聚合,形成事件脈絡,便於用戶了解事件全貌等。這類文章是在現有的資訊信息基礎上,重新智能聚合生成新的文章。

從技術方案上看,主要分為兩類:

  • 一類是基於結構化數據、知識庫或優質資源直接生成的文章。速報和大部分知識類文章是基於這類技術方案。這類文章因為直接從數據通過分析聚合或知識推理生成原始稿件,因此可以說是原創。
  • 另一類是在已有稿件的基礎上通過內容分析聚合生成的新的文章。大部分資訊聚合類文章,如話題盤點、事件脈絡、熱門要聞回顧等都屬於此類。因為是基於已有稿件內容創作新的稿件,因此可以看作是二次創作。當然,我們也可以在一篇文章的生成中結合上述兩種技術,進行混合創作。

那麼,產品層面的知識類+資訊聚合類和技術里的第二類其實就是文本摘要的寫作方式。

從我們實踐來看,雖然百度已經具備相當海量的知識圖譜數據了,但是第一類文章的生產還是有很高門檻,因為依賴大量的已有語料庫和穩定且良好的結構化數據,目前我們在體育和金融類別已經可以穩定產出這方面內容了,大家感興趣的話可以留意手機百度feed流,如果你是一名體育愛好者或者金融領域關注者,會在手機百度首頁看到我們的內容,或者也可以關注百家號「百度體育新聞」看到我們的體育賽報。

那麼第二類的實踐,則是我們現在重點要突破的方向。

我們從產品層面逐步嘗試和落地了幾種機器文章的形態,

第一種是實體盤點,這種做法的本質類似實體搜索,實體數據建立倒排索引後,以預期最符合用戶需求的粒度進行檢索,例如「位置在某城市的符合tag為某屬性的10家餐館」,而排序則引入了搜索用戶行為、實體間關聯度等數據,保證了排序的合理性和動態變化;

第二種則是同主題匯聚, 聚合類文章的話題選擇和資訊內容獲取是基於內容理解和用戶理解技術。利用百度自建的關注點圖譜(主題、實體、事件標籤以及標籤間的關係)和標籤預測技術,我們為每篇資訊內容打上關注點標籤,同時根據用戶的搜索或閱讀行為可以獲得用戶的關注點標籤,即用戶的興趣點。這樣就獲得了用戶感興趣的話題,同時基於內容標籤可以獲得相關話題的資訊內容。其次,基於內容理解和生成技術對於同一話題的內容進行壓縮和聚合,相關技術包括:事件分析,話題聚類,事件脈絡抽取,自動摘要,標題生成、結構生成等,而機器學習和知識推理是這些技術實現的基本方法。

目前,我們的智能寫作機器人在百家號和百度資訊流產品中已累計發文近萬篇,閱讀量超過千萬。下圖是智能機器人寫作的新聞實例,包括通用領域新聞,生活新聞,體育新聞等。隨著產品的應用,我們可以積累更多數據和用戶反饋,不斷實現技術的更新迭代。

關於能否代替一定人力,我個人認為是可以的。 人類作者在撰寫文章時通常會對數據、內容和話題進行深入理解,並可以進行演繹、推理和聯想,從而完成更深入的報道,充分表達自己的觀點和立場。而相比之下,機器則更長於數據分析和規範的寫作,在自然語言深入理解,以及讓稿件具有觀點和立場等方面還有很大的提升空間。

我們希望可以將作者的重複性、規範性寫作和客觀數據聚合類勞動用機器進行替代,讓作者可以更好的投入到深度文章的創作。同時,人工智慧可以通過大數據幫助編寫深度文章的作者,進行語料、素材的高效率搜集與初級加工工作,同時也可以基於行業的深度結構化數據完成基礎數據分析及文章生成工作,服務於內容生產者,提升他們的寫作效率。而這也正是我們智能寫作的未來的發展目標——人機混合編輯。

我們的服務即將開始小範圍內測和持續探索,我們非常清楚智能寫作機器人和人類相比可以說是各有所長,智能寫作首先肯定是速度快,可以在短時間內搜集大量數據和信息完成創作,其次是有特彆強的數據分析、收集能力。人一天看一百篇文章就很多了,但是機器則可以不知疲倦不停學習,隨時隨地收集和生產內容。儘管人類寫作相對機器而言,時間較長,成本也較高,但人可以對一個事件進行演繹、聯想,從更加豐富的層面上進行創作,表達自己的觀點和立場,因而在深度撰寫方面具有難以替代的優勢,因此在可預見的未來,我們認為機器完全取代人類的可能性不大,智能寫作機器人對於能夠深耕文章內容、有獨立觀點見解的內容創作者而言,不僅不會成為「搶飯碗」的替代者,反而會成為幫助作者生產優質內容的貼心助理。


bat 頭條均有對應產品,但目前仍然是規則模版主導,模型只能解決一些局部問題,不管是壓縮還是融合,或者抽取,都是nlp的老大難。重新生成更不現實,seq2seq + x 的框架也能力有限。

所以,當前能自動寫的文章都是套路比較清楚的,如財經報道,體育報道,股市快報,天氣,美食,遊記,遊戲,美妝等,算是解決量的問題,質的問題還是靠人。

我們與某報業集團合作了一個項目,就是讓記者專註寫高質量的分析、調研報告,而雞湯文類似的,交給機器。

北大萬小軍老師在這方面研究比較多,有一篇文本生成的綜述,講的停詳細,搜一下就有了。

可能一些偏題,但是這也是目前這個方向的情況。


文摘寫作和新聞寫作不是一回事,用到的技術也不一樣。這裡只說文摘寫作的應用:

單文本文摘:新聞簡介的生成,如:頭條、網易新聞那種標題下面的一小段,大多是生成的。也可以做作文的概要,資訊的生成等。這一種效果相對較好,能很大程度上代替人工。如果是關鍵句子抽取式的文摘,基本可以不用人工干預。總結生成式的,經常會有句子不通順的問題。

多文本文摘:比如知識類文章整合,舉個例子:10篇講科學飲食的文章,自動生成一個總結。或者諸多論文,生成一個總結。這種目前效果不是太好,多半以規則為主。也是有兩種做法,一是基於關鍵句子抽取,一是總結生成。

關鍵句子抽取會有如下幾個問題:1、句子的重複;2、客觀邏輯的完整性;3、時間關係的準確性;4、上下文主語變動;5、主題數量的選擇;6、句子的組合是否通順,等等……

多文本融合式摘要:現在大多用attention lstm做,也會有上述問題,但是效果會好,唯一不好解決的就是經常性的句子不通順,而且知識邏輯不會完整的保留。

至於聯想推理這些噱頭的東西,也許將來會實現的很完美。


推薦閱讀:

[資訊理論基礎]互信息計算公式如何推導的?
GAN在自然語言處理方面有哪些有趣的文章和應用?
漢語中「著」「了」「過」等,處理成詞尾還是處理成助詞對漢語的詞法分析有什麼影響?
谷歌翻譯原理是什麼,從語言A到B,中間是否要翻譯成中介語言C(如英語)?
如何使用「爬蟲/數據挖掘」自動尋找某「話題」的「父話題」?

TAG:自然語言處理 | 文本挖掘 | 文本分析 |