seq2seq(sequence to sequence) 是乙個處理序列問題的模型,傳統的 rnn 或 lstm 只能處理 輸入及輸出是定長即 一對一或多對多的問題,而 seq2seq 則能處理一對多的問題,它也是 rnn 最重要的乙個變種:n vs m(輸入與輸出序列長度不同),
編碼-解碼模型,主要的思想就是二個 rnn,乙個 rnn 作為 encoder,另乙個 rnn 作為 decoder
encoder 主要負責將輸入序列壓縮成指定長度向量,這個向量可以看成是這個序列的語義,這個過程叫做編碼
decoder 主要負責將語義詞向量分成指定的序列,這個過程叫解碼
讓模型在解碼過程中學習集中關注輸入序列特定部分的模型
以 英-中 翻譯為例,給定 "cat chase mouse ", 輸出 「貓捉老鼠」,在翻譯 「mouse」 時,我們發現 「cat」、「chase」、「mouse」 對 「老鼠」 的關注度都是一樣的,但實際上 「mouse」 才是對 「貓」 影響最大的,因此我們需要在解碼時,對輸入序列在不同時刻分配不同的注意力,這就是注意力機制的由來在 encoder 中我們使用的都是同乙個語義向量 c,我們想使用不同的向量來表示不同時刻的 c,那麼可以寫成 c
1c_1
c1、c
2c_2
c2、c
3c_3
c3 … c
ic_i
ci用 c
ic_i
ci 來表示 i 時刻的語義向量,我們之前用過最後乙個值或者平均值,很容易的想到可以用加權求和來表示ci=
∑j=1
t∂ij
hjc_i = \sum_^\partial_h_j
ci=∑j
=1t
∂ij
hj ,其中h
jh_j
hj 表示 encoder 中的隱層狀態, ∂ij
\partial_
∂ij
表示的是乙個分布概率,即 softmax 值
∂ ij
\partial_
∂ij
既然是乙個 softmax 值,那麼可以寫成 ∂ij
=exp
(etj
)∑k=
1tex
p(et
j)\partial_ = \frac^exp(e_tj)}
∂ij=∑
k=1t
exp
(et
j)ex
p(et
j)
,其中 etj
e_tj
etj
表示的是當前時刻 encoder 的隱層狀態 h
th_t
ht 與 上一時刻 decoder 的隱層狀態 st−
1s_st−1
的相似程度
e tj
e_et
j既然表示的是 h1~ht 之間的相似程度,那麼我們可以用乙個 score 函式來表示 eij
=sco
re(s
t−1,
hj)e_ =score(s_,h_j)
eij=s
core
(st−
1,h
j),score 函式可以是多樣的,後面會介紹
為了方便理解,我們可以結合下面的示意圖來更清楚的了解其中的步驟:
ht 表示,decoder 輸出狀態 s
ts_t
st 表示 etj
=sco
re(s
t−1,
hj)e_ = score(s_, h_j)
etj=s
core
(st−
1,h
j)
∂ tj
=exp
(eij
)∑k=
1tex
p(et
k)\partial_ = \frac)}^exp(e_)}
∂tj=∑
k=1t
exp
(etk
)ex
p(ei
j)
c t=
∑j=1
t∂tj
hjc_t = \sum_^\partial_h_j
ct=j=
1∑t
∂tj
hj st
=f(s
t−1,
yt−1
,ct)
s_t = f(s_, y_, c_t)
st=f(
st−1
,yt
−1,
ct)
至此,attention 機制的結構與執行方式就很清晰了,在上面我們使用了乙個 score 函式來表示 h
th_t
ht 與 s
ts_t
st 之間的相似度,一般來說常用的也就下面的幾種:
s co
re(s
t−1,
hj)=
,h_j) = \begins_^h_j\\s_^w_ah_j\\v_a^tanh(w_a[s_;h_j])\end
score(
st−1
,hj
)=⎩
⎪⎨⎪⎧
st−
1th
jst
−1t
wah
jva
tta
nh(w
a[s
t−1
;hj
])此處介紹的是最基礎的 attention 結構,具體細節仍然需要在**中仔細理解,還有 self-attention 機制及針對不同 score 函式的選取而得到的不同的注意力機制,留在以後的文章中再學習
seq2seq模型詳解
在李紀為博士的畢業 中提到,基於生成的閒聊機械人中,seq2seq是一種很常見的技術。例如,在法語 英語翻譯中,的當前英語單詞不僅取決於所有前面的已翻譯的英語單詞,還取決於原始的法語輸入 另乙個例子,對話中當前的response不僅取決於以往的response,還取決於訊息的輸入。其實,seq2se...
介紹 Seq2Seq 模型
2019 09 10 19 29 26 問題描述 什麼是seq2seq模型?seq2seq模型在解碼時有哪些常用辦法?問題求解 seq2seq模型是將乙個序列訊號,通過編碼解碼生成乙個新的序列訊號,通常用於機器翻譯 語音識別 自動對話等任務。在seq2seq模型提出之前,深度學習網路在影象分類等問題...
seq2seq聊天模型 一
最近完成了sqe2seq聊天模型,磕磕碰碰的遇到不少問題,最終總算是做出來了,並符合自己的預期結果。利用流程圖,從理論方面,回顧,總結seq2seq模型,你給模型一段輸入,它返回一段輸出!可以用在這些情景,聊天模型 翻譯 看圖說話 主旨提取等等涉及自然語言的層面,用途較廣泛 例如 輸入 今天中午吃什...