自然語言處理-第十三期-Chatbot Seq2Seq

背景

自然語言處理-第十三期-Chatbot Seq2Seq

上一期做了Chatbot開篇,提的非常淺。目前很多Chatbot模型都使用的 Seq2Seq Model +attention Mechanism. 本期將給大家介紹,該模型的一個基礎框架部分Seq2Seq。

這週末看了一些東西,碰到最好的及最適合初學者的是 Stanford Open Course CS224-Lecture10,強烈推薦大家去看下。最近也瞭解到Seq2Seq模型最初是使用在NMT(神經網絡翻譯)中,所以後續再講解時,可能會提到NMT。 Maybe,搞定這個模型就能同時搞定Chatbot和NMT,有點興奮吶。

Seq2Seq看名字是一個 序列 to 序列 的模型,其是建立在Encoder-Decoder框架的基礎上,所以我們需要先介紹下Encoder-Decoder。

大家在讀完此篇之後會對以下概念有所瞭解:

  • Encoder-Decoder的框架
  • Encoder-Decoder的作用
  • Encoder-Decoder的一個例子

另外申明下,本篇文章的部分圖片來自於Stanford Open Course CS224.


Encoder-Decoder

什麼是Encoder-Decoder?

其實就是字面理解的意思,加碼解碼 或者 加密解密。其基礎框架也非常簡單。如下圖,假設我們面對的是一個翻譯的場景,下圖中展示的是將Input Text“Encode”成一個Vector,將然Decoder基於該向量將其轉化為翻譯後的文本。

Encoder-Decoder 最大的特點是將輸入值濃縮成 一個向量。然後基於向量再擴展成我們所需要的文本。

自然語言處理-第十三期-Chatbot Seq2Seq

Encoder-Decoder的意義?

  • 首先,從翻譯或者chatbot的角度來講,我們並不是要針對每個詞、每個字進行翻譯。而且中文的一個詞翻譯後可能成為多個英文單詞。所以就翻譯或者Chatbot的場景來說,我們並不是要詞的意思,我們需要的是整個句子的意思表達。 那麼Encoder 所做的就是將原始本文的意思表達濃縮成一個 Vector;
  • End-to-End. Encoder-Decoder可以實現End-to-End,其意義非常中大。傳統的方法可能需要先對原始文本進行處理,語意及語法等等一系列操作。而Encoder-Decoder框架可以使得輸入值是 原始文本X,輸出值為目標文本Y。其最大的好處可以使得各個部分的參數,對於最終的loss function來說是統一的。End-To-End 模型輸入原始數據,直接輸出目標數據。這個也和使用場景是一摸一樣的。

Encoder-Decoder例子

本次給大家帶來一個Unsupervised Learning的例子。Autoencoder,可能可以翻譯成自動編碼?

Autoencoder就是Encoder-Decoder的一種特殊形式。比如上圖中Encoder-Deocder輸入原始文本,輸出目標文本。而Autoencoder就完全不一樣,Autoencoder的輸入值和輸出值是同一個。我在以前有一片文章是用Autoencoder 來做客戶分層,鏈接在最後。

Autoencoder框架

下圖是一個典型的Autoencoder框架,其中藍色的框框代表著原始數據,綠色圓形代表著神經元。

從圖中大家能看到,這就是一個縮小再擴大的形態。

自然語言處理-第十三期-Chatbot Seq2Seq

Autoencoder訓練

Autoencoder 的訓練過程和其他神經網絡訓練的過程是一樣的。其最大的特點是,訓練樣本的X=Y,輸入值=輸出值。 大家知道,神經網絡訓練的目標就是讓輸出值趨近於訓練樣本Y。那麼就是意味著訓練的結果是,輸入X,輸出X。

具體的神經網絡訓練過程就不再贅述,本系列第四期有提到,另外新開的“機器學習Basics”也將會涉及。

Autoencoder的作用

我第一次看到Autoencoder 感覺挺怪的,因為輸入一個值X,經過一系列騷操作,然後輸出仍然是X。但是從Autoencoder的框架可以看出,這個模型可以完成數據的濃縮 再 擴展的過程;或者說降緯 在 升緯 的過程。

這個過程可以理解成,壓縮與解壓的過程。當一個物體壓縮完再解壓後,還是原來的物體時,那麼說明 壓縮後的狀態也能代表原物體的特徵。

Seq2Seq

Seq2Seq與Autoencoder的不同點在於,Autoencoder輸入的是一個個單獨的值,而Seq2Seq輸入的是序列。

如下圖是一個簡略的Seq2Seq框架,我簡略描述下數據流向;

  • 首先,下圖左邊是Encoder,右邊是Decoder
  • 原始文本為“How are you ?” 在經過Embedding處理後,其依次進入Encoder的RNN神經元;
  • 最終,Encoder的輸出值為一個Hidden State 或者說一個向量;
  • 該向量進入Decoder中,並且每個預測出的單詞將進入下一個RNN神經元中;
  • 最終輸出文本為“I am good”
自然語言處理-第十三期-Chatbot Seq2Seq

從上圖可以看出,Seq2Seq是循環神經網絡與Encoder-Decoder的結合。下圖是CS224的圖片,可以直觀的理解。其過程簡單的總結下,就是將原始文本通過循環神經網絡進行加密or濃縮,形成一個Y,然後基於Y 進行擴展成 目標文本。

自然語言處理-第十三期-Chatbot Seq2Seq

下期預告

本期提到了Seq2Seq 模型最基礎的部分,Encoder-Decoder其實蠻簡單的,但是其遠遠沒有完成。

其中一個困難是,大家可以想象下,這個模型中的Decoder部分,只是在最初始的神經元輸入了一個Vector。而我們需要將這個Vector轉化為一個句子。當這個句子還很短的時候,可能可行。但是當面對長句子的時候,該模型就不可靠了。因為 Vanishing Gradient 或者 Exploding Gradient。這個問題可以通過Attention Mechanism解決,當然Attention Model我還沒有搞懂。。。真的有點難。

希望下期可以給大家帶來Attention Mechanism


分享到:


相關文章: