multi hot在程式設計時如何做embedding。?

時間 2021-05-06 07:30:40

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 多動腦子!多想...