物理大雪茄
我們來討論一下文本生成,最難的自然語言處理任務之一。
文本生成(Text Generation)是自然語言處理中的一個重要技術分支,目的是藉助NLP技術使得計算機能夠自動生成具有人類語言表達效果的文本。本文主要用簡單的語言介紹文本生成的主要思想。
文本生成可以分為:句子生成和對話生成。
1)在句子生成任務中,常見的思想是基於“Char-RNN”。這裡的Char指的是生成文本的細粒度可以是一個字符、也可以是句子分詞後的單詞或其他文本粒度單位。
網絡結構如下圖所示:
輸入一句話作為輸入序列,這句話中的每個字符都按照順序進入RNN,每個字符傳入RNN之後都能夠得到一個輸出,而這個輸出就是這個字符在這句話中緊跟其後的一個字符,可以通過上面的圖示清晰地看到這一點。這裡要注意的是,一個序列最後一個輸入對應的輸出可以有多種選擇,上面的圖示是將這句詩的最開始的字符作為其輸出,當然也可以將下句詩的第一個字符作為輸出圖示例子就是這句詩的最開始的字符作為其輸出。
2)與句子生成任務類似,對話生成以每組Dialogue作為“樣本-標籤”對,循環神經網絡encoder對Dialogue上文進行編碼,再用另一個循環神經網絡decoder對其進行逐詞解碼,並以上一個解碼神經元的輸出作為下一個解碼神經元的輸入,生成Dialogue下文,需要注意的是:在解碼前需配置“開始”標記
以上所介紹的只是Seq2Seq”框架的基礎形態,為了提高基礎Seq2Seq模型的效果,大量的科研人員又提出了很多改進方式,從decoder的角度有Beam-Search Decoder、Attention mechanism Decoder(配置注意力機制的解碼器)等改進,從神經網絡的結構入手,有Pyramidal RNN(金字塔型RNN)、Hierarchical RNN Encoder(分層循環網絡編碼器)等改進。
ICMLL實驗室
現代的計算機是通過統計的方法來處理自然語言的。為了簡單解釋一個處理的過程,我們可以舉一個簡單的例子。自然語言處理的一個重要過程就是識別一句話是否有意義而且能被人們所理解,然後將這句話通過恰當的方式進行輸出。
讓我們看看下面這句話,
我想要帶你去浪漫的土耳其。
這句話的意思很明確也很容易理解,但是如果我們換一種說法,寫成下面這種方式
土耳其浪漫帶你去我想。
這句話雖然各個詞的順序有所顛倒,但是大概的意思也能看出來。
如果我們再換一種方式,寫成下面這樣
其土我想耳的浪漫要你帶去。
這樣恐怕就很難被人理解了。
如果計算機想要對自然語言進行處理,判斷一個句子是否有意義,通過理解然後判斷的方法是很難的。一種合理的方法就是判斷一個句子在語料庫中出現的概率。比如上面的這句話,第一句的概率就要遠大於第二句的概率,第二句的概率要遠大於第三句的概率。因此我們可以得到結論是第一句是一個合理的句子,它是可以被人理解的。
這種方法得出來的結果相對來說是比較可靠的。但是要得到一個句子出現的概率卻不是那麼容易的。一般而言,一個句子是由很多詞組成的。我們在判斷的時候,要判斷不同的詞序出現的概率大小。比如一個句子由s1,s2,s3,s4,s5這五個詞按一定的順序組成,那麼自然語言處理的任務就是要給出這五個詞按特定序排列的概率。一句話中,後面出現的詞要在某種程度上依賴於前面出現的詞,但是如果兩個詞隔得比較遠,相關關係就不是很強了。在考慮某一個詞出現的概率時,概率前一個相鄰的詞對其的影響對應的就是一個二元模型,相應地還有三元模型、四元模型等等。
這種模型最先是由馬爾可夫提出的,因此也叫馬爾科夫模型。對應的元數越高,得到的概率相對越準確。但太高之後效果提升的並不是很顯著了。一般人們常用的就是三元或者四元的馬爾可夫模型。這就是自然語言處理中基於“統計”思想的最基本的原理。