FFM模型

??回顧上一節(jié)說(shuō)的FM模型http://www.itdecent.cn/p/b63c05758b2a
,同樣假設(shè)我們的樣本有m個(gè),維度是n,經(jīng)過(guò)ont-hot或者multi-hot之后的維度是feature_size=N維。則二階項(xiàng)實(shí)際上是如下的表達(dá)式:
(x_{i, 1},x_{i,2},....x_{i,N})\left[ \begin{matrix} v_{1,1} & v_{1, 2} & ... & v_{1,d}\\ v_{2,1} & v_{2,2} &...& v_{2,d}\\ ...& ...&...&...\\ v_{N,1} &v_{N,2}&... & v_{N,d} \end{matrix} \right]^T\left[ \begin{matrix} v_{1,1} & v_{1, 2} & ... & v_{1,d}\\ v_{2,1} & v_{2,2} &...& v_{2,d}\\ ...& ...&...&...\\ v_{N,1} &v_{N,2}&... & v_{N ,d} \end{matrix} \right] \left[ \begin{matrix} x_{i,1}\\ x_{i,2} \\ ... \\ x_{i,N} \end{matrix} \right]
當(dāng)然實(shí)際上我們不這樣求解,因?yàn)橐话?img class="math-inline" src="https://math.jianshu.com/math?formula=N" alt="N" mathimg="1">很大, 這也就解釋了上節(jié)為何我們要進(jìn)行一個(gè)簡(jiǎn)化,由下式也很容易看出,比如\sum_{f=1}^d v_{1,f}x_{i,1}很多計(jì)算是不必要的,因?yàn)閛nt-hot或者multi-hot之后,實(shí)際上很多x_{i,j}都等于0,0乘以一個(gè)數(shù)仍然是0。上節(jié)的問(wèn)題,所謂的embedding的含義,也就可以這樣理解
\left[ \begin{matrix} v_{1, 1} & v_{1, 2} & ... & v_{1,d}\\ v_{2, 1} & v_{2, 2} &...& v_{2,d}\\ ...& ...&...&...\\ v_{N,1} &v_{N,2}&... & v_{N,d} \end{matrix} \right] \left[ \begin{matrix} x_{i,1}\\ x_{i,2} \\ ... \\ x_{i,N} \end{matrix} \right]=\left[ \begin{matrix} \sum_{f=1}^d v_{1,f}x_{i,1}\\ \sum_{f=1}^d v_{2,f}x_{i,2} \\ ... \\ \sum_{f=1}^d v_{N,f}x_{i,N} \end{matrix} \right]
??將原本one-hot或者multi-hot變高維的稀疏向量映射到了d維的低維向量。若我們令上述降維后的向量為z,則二階部分就是<z, z>。有文章說(shuō)這樣做有個(gè)缺陷就是將不同fild看成無(wú)差異性。我們先解釋一下經(jīng)常會(huì)見(jiàn)到的fild域。舉個(gè)例子,比如性別它是一個(gè)性別域記為fild1,它的取值有男,女,未知,未知域fild2,它的取值有北京,上海等。實(shí)際上每個(gè)域經(jīng)過(guò)one-hot/multi-hot后都有一個(gè)稀疏表示,這里大家就會(huì)驚奇的發(fā)現(xiàn),若我們將所有的特征域歸為一個(gè)域fild1,就變成了FM模型,所以我們會(huì)發(fā)現(xiàn)FM模型實(shí)際上是FFM模型的一個(gè)特例。當(dāng)然每個(gè)域是不一樣的,如果將每個(gè)域看成無(wú)差異的,將其都映射到d維的低維空間是不對(duì)的。
??若將不同的fild降維到不同的維度,則第一個(gè)式子就變成了,我們重新定義x_{i, fild_{l,k}}表示第i個(gè)樣本的第l個(gè)域的第k個(gè)特征,若將該域降維到d維,。舉個(gè)例子,還是性別吧,假設(shè)性別是第l個(gè)域,男=1,女=2,未知=3,則k就取值1,2,3,若樣本i是男,則對(duì)應(yīng)的是
\left[ \begin{matrix} v_{fild_{l,1},fild_{l,1}} & v_{fild_{l,1}, fild_{l, 2}} & ... & v_{fild_{l,1},d}\\ v_{fild_{l, 2},fild_{l,1}} & v_{fild_{l, 2},fild_{l, 2}} &...& v_{fild_{l, 2},d}\\ ...& ...&...&...\\ v_{fild_{l,N} ,fild_{l,1}} &v_{fild_{l,N} ,fild_{l, 2}}&... & v_{fild_{l,N} ,d} \end{matrix} \right] \left[ \begin{matrix} x_{i,fild_{l,1}}\\ x_{i,fild_{l, 2}} \\ ... \\ x_{i,fild_{l,N} } \end{matrix} \right]
然后將所有embedding后的結(jié)果拼接成一列,得到的embedding后的向量[x_{i,fild_{1,1}}, x_{i,fild_{1,d_1}},...,x_{i,fild_{L,d_L}}]^T,再做內(nèi)積即可。
??在代碼實(shí)現(xiàn)之前,先拋出一個(gè)問(wèn)題,一直也困擾我很久但尚未解決的。對(duì)于embedding的維度,是如何確定的?之前看過(guò)一段代碼的是這樣得到embedding的維度的 embedding_dim = 6 * int(pow(vocabulary_size, 0.25)),其中vocabulary_size表示的是詞典的大小。舉個(gè)例子,比如性別,它的取值只有男、女、未知三種,則vocabulary_size=3。說(shuō)明embedding的維度與fild的取值個(gè)數(shù)有關(guān)系。一般大家用的時(shí)候默認(rèn)的大小是4,這個(gè)4又是怎么得到的?跪求大佬解答。
??接下來(lái)講一下,如何將FM模型的代碼快速的修改成FFM模型的實(shí)現(xiàn)代碼。我們觀察發(fā)現(xiàn)求和后面部分的實(shí)現(xiàn)邏輯和FM一致,我們要做的是將每個(gè)特征分到特定的fild里,然后復(fù)用FM的框架。首先我們得知道每個(gè)fild的其實(shí)x_index是多少(翻看上一節(jié)的代碼)。
??首先我們要將每個(gè)fild的特征進(jìn)行降維,然后拼接成一個(gè)1\times t的向量,其中t為每個(gè)fild降維后的維度的總和。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容