1. 程式人生 > 實用技巧 >機器學習筆記19(unspervised learning -> Word Embedding)

機器學習筆記19(unspervised learning -> Word Embedding)

unspervised learning -> Word Embedding

簡單來說,目的就是將文字資訊進行編碼,變為及其可以識別的向量

單詞的表示

人可以理解文字,但是對於機器來說,數字是更好理解的(因為數字可以進行運算),因此,我們需要把文字變成數字。

  • 中文句子以“字”為單位。一句中文句子是由一個個字組成的,每個字都分別變成詞向量,用一個向量vector來表示一個字的意思。
  • 英文句子以“單詞”為單位。一句英文句子是由一個個單片語成的,每個單詞都分別變成詞向量,用一個向量vector來表示一個單詞的意思。

句子的表示

對於一句句子的處理,先建立字典,字典內含有每一個字所對應到的索引。比如:

  • “I have a pen.” -> [1, 2, 3, 4]
  • “I have an apple.” -> [1, 2, 5, 6]

得到句子的向量有兩種方法:

  1. 直接用 bag of words (BOW) 的方式獲得一個代表該句的向量。
  2. 我們已經用一個向量 vector 來表示一個單詞,然後我們就可以用RNN模型來得到一個表示句子向量

1-of-N encoding

一個向量,長度為N,其中有1 11個是1,N − 1 N-1N−1個都是0,也叫one-hot編碼,中文翻譯成“獨熱編碼”。

現在假設,有一句4個單片語成的英文句子“I have an apple.”,先把它變成一個字典:
“I have an apple.” -> [1, 2, 5, 6]

然後,對每個字進行 1-of-N encoding:

	1 -> [1,0,0,0]
	2 -> [0,1,0,0]
	5 -> [0,0,1,0]
	6 -> [0,0,0,1]

這裡的順序是人為指定的,可以任意賦值,比如打亂順序:

	5 -> [1,0,0,0]
	6 -> [0,1,0,0]
	1 -> [0,0,1,0]
	2 -> [0,0,0,1]

1-of-N encoding非常簡單,非常容易理解,但是問題是:

  • 缺少字與字之間的關聯性 (當然你可以相信 NN 很強大,它會自己想辦法)
  • 佔用記憶體大:總共有多少個字,向量就有多少維,但是其中很多都是0,只有1個是1.
    比如:200000(data)*30(length)*20000(vocab size) *4(Byte) =4.8 ∗ 1 0 11 4.8*10^{11}4.8∗1011= 480 GB

Bag of Words (BOW)

BOW 的概念就是將句子裡的文字變成一個袋子裝著這些詞,BOW不考慮文法以及詞的順序。

比如,有兩句句子:

1. John likes to watch movies. Mary likes movies too.
2. John also likes to watch football games.

有一個字典:[ “John”, “likes”, “to”, “watch”, “movies”, “also”, “football”, “games”, “Mary”, “too” ]

在 BOW 的表示方法下,第一句句子 “John likes to watch movies. Mary likes movies too.” 在該字典中,每個單詞的出現次數為:

  • John:1次
  • likes:2次
  • to:1次
  • watch:1次
  • movies:2次
  • also:0次
  • football:0次
  • games:0次
  • Mary:1次
  • too:1次

因此,“John likes to watch movies. Mary likes movies too.”的表示向量即為:[1, 2, 1, 1, 2, 0, 0, 0, 1, 1],第二句句子同理,最終兩句句子的表示向量如下:

1. John likes to watch movies. Mary likes movies too. -> [1, 2, 1, 1, 2, 0, 0, 0, 1, 1]
2. John also likes to watch football games.           -> [1, 1, 1, 1, 0, 1, 1, 1, 0, 0]

之後,把句子的BOW輸入DNN,得到預測值,與標籤進行對比。

word embedding

詞嵌入(word embedding),也叫詞的向量化(word to vector),即把單詞變成向量(vector)。訓練詞嵌入的方法有兩種:

    • 可以用一些方法 (比如 skip-gram, CBOW) 預訓練(pretrain)出 word embedding ,在本次RNN作業中只能用已有.txt中的資料進行預訓練。

    • 可以把它作為模型的一部分(詞嵌入層),與模型的其他部分一起訓練