1樓:Ghost Fan
keras 的embedding層我記得是可以接受multi-hot的輸入的
類似於如下
user_var_input
=Input
(shape=(
max_length
,),dtype
='int32'
,name
='user_var_input'
)item_var_input
=Input
(shape=(
max_length
,),dtype
='int32'
,name
='item_var_input'
)Embedding_tag
=Embedding
(input_dim
=TRIGRAM_D
,output_dim
=tag_emb_size
,name
='embedding_tag'
,input_length
=max_length
,embeddings_initializer=kernel_initializer
,embeddings_regularizer=kernel_regularizer
,mask_zero
=True
)var_vec_user
=Embedding_tag
(user_var_input
)var_vec_item
=Embedding_tag
(item_var_input)
2樓:溪亭日暮
在做使用者畫像或為使用者做興趣標籤的時候,往往會遇到這樣的問題,就是multi-hot特徵的處理。multi-hot編碼之後每個id對應的是多個的1,而且不同樣本中1的個數還不一樣。
對multi-hot特徵的處理無非也是一種稀疏矩陣的降維壓縮,因此可以使用embedding的方法。對於某個屬性對應的分類特徵,可能該特徵下有多個取值,比如乙個特徵表示對哪些物品感興趣,那麼這個特徵不是單個值,而是有多個取值。
例如我們現在有3個樣本: - 樣本1 在該屬性下取值有1,2兩種特徵 - 樣本2 在該屬性下有2一種特徵 - 樣本3 在該屬性下有3,4 兩種特徵
我們以multi-hot編碼的形式來定義特徵應為 - 樣本1 [1,1,0,0] - 樣本2 [0,1,0,0] - 樣本3 [0,0,1,1]
但是這種變數不能夠直接用embedding_lookup去做,embedding_lookup只接受只有乙個1的one-hot編碼,那麼為了完成這種情況的embedding需要兩個步驟:
將輸入屬性轉化為型別one-hot編碼的形式, 在tensorflow中這個過程是通過tf.SparseTensor來完成的,實際上就是構建了乙個字典矩陣,key為座標,value為1或者0表示是否有值,對於乙個樣本如樣本1來說就是構建了乙個矩陣[[1,1,0,0]]表示有物品1和2,這個矩陣的規模為[batch_size,num_items],這個過程即為multi-hot編碼
將構建好的類似於one-hot編碼的矩陣與embedding矩陣相乘, embedding矩陣的規模為[num_items, embedding_size],相乘之後得到的輸出規模為[batchi_size, embedding_size],即對多維多屬性的特徵構建了embedding vector。
溪亭日暮:彙編 | 我的AI 技術回答
[1] multi-hot編碼原理
作為程式設計師,你在程式設計時吃了哪些數學的虧?
CNNQJ 舍友去面試的時候,面試官讓他寫個程式求出0 1000w之間所有的素數和,舍友直接用了埃式篩,面試官說 這麼小的運算量直接窮舉不就好了嗎?舍友一臉懵逼 不願坐下的陳獨秀 原來有人小學就開始學程式設計 orz,在下有句臥槽不知當講不當講。我小學還在彈彈珠,看 虹貓藍兔七俠傳 呢,麻蛋大學才開...
React使用hooks時 如何做條件渲染
Ranger 不會的學起來,老師精講React,可以一看https www. pretty kernel 基本的套路是 useRef 返回乙個 flag,將其放在 hook 的 deps 陣列引數中。由於 useRef 可以在兩幀之間保持狀態,你可以通過 flag.current 來修改這個 fla...
如何在程式設計路上走的更快,更有效率
不要因為怕走彎路而遲遲不出發,每次出發與彎路都是成長。但努力不走重樣的彎路。Learn programming the hard way.程式設計是乙個低成本的活,多挖坑,但是一定要填。做什麼,都要知其然知其所以然。寫寫部落格挺好的,文字與表達也是組織與抽象能力的鍛鍊。 yunyun 多動腦子!多想...