**:
什麼是 seq2seq?
seq2seq 是乙個encoder–decoder 結構的網路,它的輸入是乙個序列,輸出也是乙個序列, encoder 中將乙個可變長度的訊號序列變為固定長度的向量表達,decoder 將這個固定長度的向量變成可變長度的目標的訊號序列。
這個結構最重要的地方在於輸入序列和輸出序列的長度是可變的,可以用於翻譯,聊天機械人,句法分析,文字摘要等。
下面是寫過的 seq2seq 的應用:
rnn與機器翻譯
如何自動生成文字摘要
自己動手寫個聊天機械人吧
encoder–decoder 結構?
cho 在 2014 年提出了 encoder–decoder 結構,即由兩個 rnn 組成,
(其中的 rnncell 可以用 rnn ,gru,lstm 等結構)
在每個時刻, encoder中輸入乙個字/詞,隱藏層就會根據這個公式而改變,
到最後乙個字/詞 xt 時 ,隱藏層輸出 c ,因為 rnn 的特點就是把前面每一步的輸入資訊都考慮進來了,所以c 相當於把整個句子的資訊都包含了,可以看成整個句子的乙個語義表示。
decoder 在 t 時刻的隱藏層狀態 ht 由 ht−1,yt−1,c 決定:
yt 是由 ht,yt−1,c 決定:
f 和 g 都是啟用函式,其中 g 函式一般是 softmax。
模型最終是要最大化下面這個對數似然條件概率:
其中每個 (xn, yn) 表示一對輸入輸出的序列, θ 為模型的引數。
seq2seq 結構?
sutskever 在 2014 年也發表了**:
這個模型結構更簡單,
因為decoder 在 t 時刻yt 是由 ht,yt−1 決定,而沒有 c:
**中的encoder 和 decoder 都用的 lstm 結構,注意每句話的末尾要有 「」 標誌。 encoder 最後乙個時刻的狀態 [cxt,hxt] 就和第一篇**中說的中間語義向量 c 一樣,它將作為 decoder 的初始狀態,在 decoder 中,每個時刻的輸出會作為下乙個時刻的輸入,直到 decoder 在某個時刻**輸出特殊符號 結束。
lstm 的目的是估計條件概率 p(y1, … , yt′ |x1, … , xt ) ,
它先通過最後乙個隱藏層獲得輸入序列 (x1, … , xt ) 的固定長度的向量表達 v,
然後用 lstm-lm 公式計算輸出序列 y1, … , yt′ 的概率,
在這個公式中,初始狀態就是 v,
而且用了 4 層的 lstm,而不是一層:**中的實驗結果表明深層的要比單層的效果好
下面是個 3 層的例子
計算公式如下:
為了便於理解,單層的表示如下:
並且對輸入序列做了乙個翻轉,即不是把 a, b, c 對映到 α, β, γ, 而是把 c, b, a 對映到 α, β, γ, 這樣的結果是相應的 a 會更接近 α,並且更利於 sgd 建立輸入輸出間的關係。
參考:
learning phrase representations using rnn encoder–decoder
for statistical machine translation
sequence to sequence learning
with neural networks
generating sequences with
recurrent neural networks
系統學習NLP(三) NLP入門綜述
從這個月開始,進入nlp方向了,因此,系統了看了一遍 自然語言處理綜論 對nlp做了點系統性的了解,後面抽時間乙個乙個業務或者方向進行實現學習。這裡主要是入門的認識,因此,大多數不涉及每個業務應用的最佳實現,比如基本沒有深度學習層面的 因為那本書只總結了2009年之前的 不過有了這個基礎,每個業務應...
系統學習NLP(二十六) NBSVM
baselines and bigrams good sentiment and topic classification 參考 跟原文有一定差異,理解不一致。樸素貝葉斯 bayes,nb 和支援向量機 support vector machines,svm 的變體常被用作文字分類的基線方法,但它們...
系統學習NLP(二十七) EMLo
deep contextualized word representations 參考 elmo的語言理解是通過 訓練單詞序列中的下乙個單詞來實現,這項任務被稱為語言建模。這是很方便的,因為我們有大量的文字資料,這樣的模型不需要標籤就可以從中學習。今天給大家介紹一篇2018年提出的 deep con...