1. 程式人生 > >Embed,encode,attend,predict:the new deep learning formula for state-of-the -art NLP models

Embed,encode,attend,predict:the new deep learning formula for state-of-the -art NLP models

轉載來自:https://explosion.ai/blog/deep-learning-formula-nlp 在過去六個月,一種強大的新型神經網路工具出現應用於自然語言處理。新型的方法可以總結為四步驟:嵌入(embed),編碼(encode),加入(attend),預測(predict)。本篇文章解釋了新方法的各個部分。並在最近的兩個系統中展示如何使用。 當人們思考機器學習的改善時,他們通常會考慮效率與準確率,但是這最重要的問題是通用性。比如,如果你想要在社交平臺上編寫程式來檢測帶有辱罵資訊,你應該能夠問題延伸為需要文字來預測類別的問題。因此不管是檢測帶有辱罵資訊的帖子還是辨明垃圾郵件,如果這兩種問題採用同樣型別的輸入,和輸出同樣型別的輸出。我們可以採用相同的模型程式碼,並且可以通過在不同的資料資料上得到不同的解決問題方式。——採用相同的工程演繹不同的問題。

基於深度學習的四步法處理文字

詞嵌入表示,即詞向量是現在自然語言處理最流行的方法。詞嵌入可以將分離的詞當做有關聯的單元,而不是完全不同的ID。可是大多數自然語言處理問題要求理解很長的文字,不單單是獨立的詞語。在將 文字嵌入一個詞向量後,雙向RNN用來編碼向量為詞矩陣。這個矩陣可以理解為詞向量。詞向量對於分詞文字的上下文很敏感。最後讓人疑惑的是一個加入機制,是的你的句子矩陣轉換為句子向量,來準備預測。

1:詞嵌入(embed)

一個嵌入表可以將一個很長,稀疏的,二進位制向量表示為很短,高位,具有連續的詞向量,比如,我們火車的文字是一組ASCII類別的序列,將會有256個可能的值,因此我們需要將每一個值用二進位制來表示需要256維。對於a來說,只有屬於97的值會是1,其他值為0 。a=0000…1…0000.(256) b表示為在98位置為1,其餘為0.。這種方式叫做one-hot編碼,不同值代表不同的向量。 在這裡插入圖片描述

大多數神經網路模型開始與將本文分詞為詞語,然後嵌入這些詞語到詞向量裡面,奇特的模型將詞向量延伸到其他資訊裡面。比如建立一個詞袋通常是非常有用的。除了word IDS 你可以學習標籤嵌入,將標籤嵌入連線到單詞嵌入。這使得你將一些有用的位置敏感的資訊加入詞表示中。可是,這會有很多強有力的方法使得詞表達特定的上下文。

2: 詞編碼(Encode)

給定一個詞向量序列,彪馬這部分可以計算一個城市為句子矩陣的表示方式。其中每一行表示句子其他部分上下文中的每個標記含義。 在這裡插入圖片描述 這個技術可以用bidirectional RNN來實現,LSTM和GRU體系結構已經顯示了很好的效果。每一個標註都可以用兩部分來計算,一部分是通過前向傳播,另一個是後向傳播。為了得到全部的詞向量,我們簡單的將兩個貼上一起,下面是簡單的程式碼:

def encode(fwd_rnn, bwd_rnn, word_vectors):
    fwd_out = ndarray((len(word_vectors), fwd_rnn.nr_hidden), dtype='float32')
    bwd_out = ndarray((len(word_vectors), bwd_rnn.nr_hidden), dtype='float32')
    fwd_state = fwd_rnn.initial_state()
    bwd_state = bwd_rnn.initial_state()
    for i in range(len(word_vectors)):
        fwd_state = fwd_rnn(word_vectors[i], fwd_state)
        bwd_state = bwd_rnn(word_vectors[-(i+1)], bwd_state)
        fwd_out[i] = fwd_state
        bwd_out[-(i+1)] = bwd_state
    return concatenate([fwd_state, bwd_state])

我認為雙向RNN將是一個隨著時間而變得更加具有洞察力、更有效。可是RNN大部分的直接應用是讀取文字,然後從文字中預測資訊。編碼(encode)所做的功能是計算一箇中間表示方式,特別是每一個標註特徵。重要的是這個表示我們可以通過在上下文的標記來反向表達。我們可以學習到詞語 “pick up” 與詞語“pick on”的不同。甚至我們可以通過分離標記來處理這兩個詞語。這是NLP模型最大的挪點,但是現在我們解決了。

3:載入(Attend)

載入(attend)步驟將編碼(encode)步驟產生的矩陣表示減少到單個向量。以至於可以通過一個標準的前向傳播網路預測。載入步驟區別於其他類似操作的機制典型的優點是作為輔助上下文向量的輸入。 在這裡插入圖片描述 通過減少矩陣到向量,你必然會丟失資訊。這就是為什麼上下文向量是至關重要的:它告訴你丟棄哪些資訊。因此,“摘要”向量是適合於網路來計算它。最近的研究表明,載入機制是一種靈活的技術,它的新變體可以用來建立優雅和強大的解決方案。例如,Palikh等人。(2016)引入兩個句子矩陣的載入機制,並輸出一個向量。在這裡插入圖片描述 楊等人。(2016)引入一個載入機制,它採用一個矩陣並輸出一個向量。而不是從輸入的某個方面派生的上下文向量。“摘要”是參照作為模型引數學習的上下文向量來計算的。這使得注載入機制是純粹的還原操作,它可以用來代替任何和或平均池步驟。

4:預測(Predict)

一旦文字或文字對被簡化為單個向量,我們就可以學習目標表示——類標籤、實值、向量等。我們也可以通過使用網路作為狀態機的控制器,例如基於轉換的解析器來進行結構化預測。 在這裡插入圖片描述 有趣的是,大多數NLP模型通常支援較淺的前饋網路。這意味著一些最新的計算機視覺最重要的技術,如剩餘連線和批量標準化,到目前為止對NLP社群的影響相對較小。