人們對人工智能的興趣隨着科幻電影的誕生和發展變得愈發濃厚。每當咱們聽到「人工智能」這個詞,便會聯想到《終結者》、《黑客帝國》、《我,機器人》等電影。算法
機器人具備獨立思考的能力在目前看來還比較遙遠,但機器學習和天然語言理解領域已經在過去幾年取得了重大進展。我的助理(Siri/Alexa)、聊天機器人及問答機器人等應用程序正悄無聲息地改變着人們的生活方式。網絡
人們須要理解大量有歧義且結構多變的語言並從中獲取意義,這促使天然語言理解(Natural Language Understanding,NLU)和天然語言生成(Natural Language Generation, NLG)成爲人工智能中發展最快的應用。Gartner預測,「到2019年,天然語言生成將是90%的現代BI和分析平臺的標準特徵」。本文將回顧NLG的歷史,並展望其將來。機器學習
什麼是NLG?
NLG經過預測句子中的下一個單詞傳達信息。使用語言模型可以預測下一個可能出現的單詞,也就是找到單詞在序列中的機率分佈。舉個例子,預測「I need to learn how to __」的下一個單詞,語言模型會計算下一個單詞,如「write」,「drive」可能出現的機率。RNNs及LSTMs等高級神經網絡可以處理較長的句子,提升了語言模型預測的準確性。ide
馬爾可夫鏈(Markov Chains)
馬爾可夫鏈是最先用於語言生成的算法。它經過當前單詞預測句子中的下一個單詞。舉個例子,模型經過下面兩個句子進行訓練,「I drink coffee in the morning」和「I eat sandwiches with tea」。「drink」後面出現「coffee」的機率是100%,「I」後面出現「eat」和「drink」的機率分別爲50%。馬爾可夫鏈在計算下一個單詞出現機率的時候,會把每一個單詞之間的關係考慮進去。該模型最先用於爲智能手機輸入句子提供下一個單詞生成建議。學習
但因爲僅注意當前單詞,馬爾可夫模型沒法探測當前單詞與句子中其它單詞的關係以及句子的結構,使得預測結果不夠準確,在許多應用場景中受限。編碼
循環神經網絡(Recurrent Neural Network, RNN)
神經網絡啓發於人類大腦的工做原理,經過對輸入和輸出數據之間的非線性關係進行建模,爲計算提供了一種新的方法,用於語言建模即稱爲神經語言建模。人工智能
RNN是神經網絡的一種,它可以捕捉輸入數據的序列特徵。經過前饋網絡處理序列中的每個item,並將模型的輸出做爲序列的next item,此過程可以幫助存儲前面每步的信息。這樣的「記憶」使得RNN在語言生成中有着出色的表現,由於記住過去的信息可以幫助更好的預測將來。與馬爾可夫鏈不一樣的是,在進行預測時,RNN不只關注當前單詞,還關注已經處理過的單詞。翻譯
利用RNN進行語言生成
在RNN的每一次迭代中,模型都能在其「記憶」單元中存儲出現過的單詞,以及計算下一個單詞出現的機率。舉個例子,有「We need to rent a __」,此時要預測句子中的下一個單詞。模型可以記住在詞典中每一個單詞隨前面單詞出現的機率。在上述例子中,「house」或者「car」比「river」和「dinner」有着更高的出現機率。「記憶」單元選擇機率更高的單詞,並對其進行排序,而後進行下一次迭代。orm
但RNN有一個很大的問題——梯度消失。隨着序列長度的增長,RNNs不能存儲那些好久前遇到的單詞,便只能根據最近的單詞進行預測。這使得RNNs沒法應用於生成連貫的長句子。視頻
長短時間記憶網絡(Long Short-Term Memory, LSTM)
長短時間記憶網絡是RNNs的變體,比vanilla RNNs更適合處理長序列。LSTM應用普遍,其與RNNs的結構相似。不一樣的是,RNNs只有一個簡單的層結構,而LSTM內部有4個層結構。一個LSTM由4部分組成:cell,輸入門,輸出門以及遺忘門。
利用LSTM進行語言生成
示例,輸入句子爲「I am from Spain. I am fluent in ___」。爲了正確預測出下一個單詞「Spanish」,LSTM會更加關注上一句中的「Spain」而且利用cell對其進行記憶。在處理序列時cell會對獲取的信息進行存儲,這些信息會用於預測下一個單詞。當遇到句號時,遺忘門會意識到句子中的上下文發生了改變,並忽略當前cell中存儲的狀態信息,換句話說,遺忘門的做用是讓循環神經網絡「忘記」以前沒有用到的信息。
LSTM及其變體可以解決梯度消失問題並生成連貫的句子。可是,LSTM也有其侷限性:計算要求高,難以訓練。
Transformer
Transformer在2017年,由Google團隊在論文《Attention Is All You Need》中首次提出,並涉及到一種名爲「self-attention mechanism」的新方法。Transformers目前普遍用於解決NLP問題,例如語言建模,機器翻譯以及文本生成等。Transformer模型由一組編碼器和一組解碼機器組成,前者負責處理任意長度的輸入,後者負責輸出生成的句子。
在上述示例中,編碼器處理輸入句子,併爲其生成表示。解碼機器利用表示生成用於輸出的句子。每一個單詞最初的表示或嵌入由空心圓表示。接下來,Transformer模型利用self-attention機制獲取全部其餘單詞之間的關係,生成每一個單詞的新表示,如圖中的實心圓。對每一個單詞重複該步驟,連續生成新的表示,相似地,解碼機器從左往右依次生成單詞。
與LSTMs不一樣的是,Transformer須要的步驟少,應用self-attention機制可以在不考慮單詞位置的狀況下,直接捕捉句子中全部單詞之間的關係。
最近,許多研究學者對vanilla transformer模型進行了改進,提高了速度與精度。在2018年,谷歌提出BERT模型,此模型在各類NLP任務中均取得了最早進的結果。在2019年,OpenAI發佈了一個基於transformer的語言模型,只須要輸入幾行文本就能夠生成長篇文章。
利用Transformers進行語言生成
Transformer模型一樣能夠用於語言生成,最著名的要數OpenAI提出的GPT-2語言模型。該模型經過將注意力集中在與預測下一個單詞相關的單詞上,更好的學習並預測句子中的下一個單詞。
使用Transformer進行文本生成與機器翻譯所遵循的結構相似。舉個例子,「Her gown with the dots that are pink, white and ____」。經過利用self-attention機制對前面所出現的顏色(白色和粉色)進行分析,理解須要預測的單詞也是一種顏色,此時模型的輸出爲「blue」。Self-attention可以幫助模型選擇性地關注每個單詞在句子中擔任的角色,而不只僅是經過循壞記住些許特徵。
語言生成的將來
本文帶咱們縱覽了語言生成的發展,從利用馬爾可夫鏈預測下一個單詞,到使用self-attention生成連貫的文章。可是,咱們仍處於生成語言建模的初期,從此還會往自主生成文本的方向邁進。生成模型也將用於圖像、視頻、音頻等內容的開發。
原文連接 本文爲雲棲社區原創內容,未經容許不得轉載。