TF2 RNN篇之序列的表示方式

TF2 RNN篇之序列的表示方式



具有先後順序的數據一般叫作序列(Sequence),比如隨時間而變化的商品價格數據就是非常典型的序列,。考慮某件商品A 在1 月到6 月之間的價格變化趨勢,我們記爲一維向量:[𝑥1, 𝑥2, 𝑥3, 𝑥4, 𝑥5, 𝑥6] ,如果要表示𝑏件商品在1 月到6 月之間的價格變化趨勢,可以記爲2 維張量:張量的形狀是[b,6]其中𝑏表示商品的數量.

這麼看來,序列信號表示起來並不麻煩,只需要一個shape 爲[𝑏, 𝑠]的張量即可,其中𝑏爲序列數量,𝑠爲序列長度。但是對於很多信號並不能直接用一個標量數值表示,比如每個時間戳產生長度爲𝑛的特徵向量,則需要shape 爲[𝑏, 𝑠, 𝑛]的張量才能表示。考慮更復雜的文本數據:句子。它在每個時間戳上面產生的單詞是一個字符,並不是數值,不能直接用某個標量表示。我們已經知道神經網絡本質上是一系列的矩陣相乘、相加等數學運算,它並不能夠直接處理字符串類型的數據。如果希望神經網絡能夠用於自然語言處理任務,那麼怎麼把單詞或字符轉化爲數值就變得尤爲關鍵。接下來我們主要探討文本序列的表示方法,其他非數值類型的信號可以參考文本序列的表示方法。

對於一個含有𝑛個單詞的句子,單詞的一種簡單表示方法就是One-hot編碼。以英文句子爲例,假設我們只考慮最常用的1 萬個單詞,那麼每個單詞就可以表示爲某位爲1,其它位置爲0 且長度爲1 萬的稀疏One-hot 向量;對於中文句子,如果也只考慮最常用的5000 個漢字,同樣的方法,一個漢字可以用長度爲5000 的One-hot 向量表示。如圖中所示,如果只考慮𝑛個地名單詞,可以將每個地名編碼爲長度爲𝑛的Onehot向量。

在這裏插入圖片描述
我們把文字編碼爲數值的過程叫作Word Embedding。One-hot 的編碼方式實現WordEmbedding 簡單直觀,編碼過程不需要學習和訓練但是One-hot 編碼的向量是高維度而且極其稀疏的,大量的位置爲0,計算效率較低,同時也不利於神經網絡的訓練。從語義角度來講,One-hot 編碼還有一個嚴重的問題,它忽略了單詞先天具有的語義相關性。舉個例子,對於單詞“like”、“dislike”、“Rome”、“Paris”來說,“like”和“dislike”在語義角度就強相關,它們都表示喜歡的程度;“Rome”和“Paris”同樣也是強相關,他們都表示歐洲的兩個地點。對於一組這樣的單詞來說,如果採用One-hot 編碼,得到的向量之間沒有相關性,不能很好地體現原有文字的語義相關度,因此One-hot 編碼具有明顯的缺陷。

在自然語言處理領域,有專門的一個研究方向在探索如何學習到單詞的表示向量(Word Vector),使得語義層面的相關性能夠很好地通過Word Vector 體現出來。一個衡量詞向量之間相關度的方法就是餘弦相關度(Cosine similarity):
similarity(a,b)=cos(θ)=abab similarity(\vec a,\vec b) = cos(\theta) = \frac{\vec a·\vec b}{|\vec a||\vec b|}

下圖演示了單詞“France”和“Italy”的相似度,以及單詞“ball”和“crocodile”的相似度,𝜃爲兩個詞向量之間的夾角。可以看到cos(𝜃)較好地反映了語義相關性。其實有時候真的感覺很神奇,明明學數學的時候兩向量餘弦角就是餘弦角會計算就行了,但是它在自然語言處理中卻有着這樣的運用。

在這裏插入圖片描述


參考書籍: TensorFlow 深度學習 — 龍龍老師

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章