詞嵌入
詞嵌入其實就是將數據的原始表示表示成模型可處理的或者是更dense的低維表示(lz)。
One-hot Embedding
假設一共有m個物體,每個物體有自己唯一的id,那麼從物體的集合到有一個trivial的嵌入,就是把它映射到中的標準基,這種嵌入叫做One-hot embedding/encoding.
一般使用的低維embedding
應用中一般將物體嵌入到一個低維空間(n<<m),應用中一般將物體嵌入到一個低維空間到的線性映射就好了。每一個n * m的矩陣M都定義了到的一個線性映射:。當x是一個標準基向量的時候,Mx對應矩陣M中的一列,這就是對應id的向量表示。
這個概念用神經網絡圖來表示如下:
從id(索引)找到對應的One-hot encoding,然後紅色的weight就直接對應了輸出節點的值(注意這裏沒有activation function),也就是對應的embedding向量。
1 M隨機初始化並且是可訓練的,查找x對應的embedding表示其實 等價於 找x在下面這個網絡中的權重,而這些權重是可訓練的,且對應於矩陣M。
2 關於嵌入維度數量(New Embedding維度)的一般經驗法則:
embedding_dimensions = number_of_categories**0.25
也就是說,嵌入矢量維數應該是類別數量的 4 次方根。如詞彙量爲 81,建議維數爲 3。
低維向量嵌入在tensorflow中的實現:tf.nn.embedding_lookup()
embedding_map = tf.get_variable( # 默認參數trainable = True,可訓練
name="embedding_map",
shape=[self.config.vocab_size, self.config.embedding_size],
initializer=self.initializer)
seq_embeddings = tf.nn.embedding_lookup(embedding_map, self.input_seqs)
和下面類似:
matrix = np.random.random([1024, 64]) # 64-dimensional embeddings
ids = np.array([0, 5, 17, 33])
print matrix[ids] # prints a matrix of shape [4, 64]
從id類特徵(category類)使用embedding_lookup的角度來講:
1.onehot編碼神經網絡處理不來。embedding_lookup雖然是隨機化地映射成向量,看起來信息量相同,但其實卻更加超平面可分。
2.embedding_lookup不是簡單的查表,id對應的向量是可以訓練的(帶有label信息),訓練參數個數應該是 category num*embedding size,也就是說lookup是一種全連接層。詳見 brain of mat kelcey
3.word embedding其實是有了一個距離的定義,即出現在同一上下文的詞的詞向量距離應該小,這樣生成向量比較容易理解。autoencode、pca等做一組基變換,也是假設原始特徵值越接近越相似。但id值的embedding應該是沒有距離可以定義,沒有物理意義,只是一種特殊的全連接層。
4.用embedding_lookup做id類特徵embedding由google的deep&wide提出。阿里 第七章 人工智能,7.6 DNN在搜索場景中的應用(作者:仁重) 中提下了面對的困難,主要是參數數量過多(引入紫色編碼層)和要使用針對稀疏編碼特別優化過的全連接層( Sparse Inner Product Layer )等。
5.在分類模型中用這種id類特徵,主要是希望模型把這個商品記住。但id類特徵維度太高,同一個商品的數據量也不大,因此也常常用i2i算法產出的item embedding來替代id特徵。
詞嵌入有其它很多方法如word2vec,bert等,embedding lookup只是其中一種。我們可以只使用簡單的embedding lookup讓模型自己去訓練;也可以將embedding lookup中的矩陣先通過word2vec訓練好進行初始化,再通過embedding lookup訓練;或者只使用word2vec進行初始化後,embedding lookup設置成不訓練。
Word2vec
其他的word Representation
句子embedding
1 詞向量直接求平均或者最大值:對句子中所有單詞直接求平均, 每個單詞的權重相同, 得到sentence embedding。
2 使用每個詞的TF-IDF值爲權重, 加權平均, 得到sentence embedding。
3 sif sentence embedding使用預訓練好的詞向量, 使用加權平均的方法, 對句子中所有詞對應的詞向量進行計算, 得到整個句子的embedding向量:模型的輸入是一個已有的word embedding,然後通過加權求平均的方法求得sentence的embedding,最後使用主成分分析去掉一些special direction,即在完成詞加權平均之後,移除所有行爲向量的公共主成分:v_s -= u*u^t*v_s。
其中v_s表示加權平均之後的結果,u表示所有句子向量進行特徵分解之後,最大特徵值對應的特徵向量,相當於所有句子向量的最大主成分,這樣就把所有行爲鏈路中彼此相關的一部分去除,只保留反應序列特性的成分。
詞向量維度的選擇
詞向量集合的距離度量:PIP loss,基於此可以選擇最優詞向量維度
文章分析了LSA, Word2vec, Glove對於不同任務的最優維度