有關(guān)word2vector的原理這里不贅述,本篇僅闡述怎么使用tensorflow來(lái)做一個(gè)實(shí)際操作案例。這里的一些說(shuō)明,均為實(shí)際操作總結(jié),或來(lái)自別人的總結(jié),經(jīng)個(gè)人對(duì)在實(shí)際操作或理論理解基礎(chǔ)上,比較贊同的觀(guān)點(diǎn),望對(duì)大家學(xué)習(xí)和實(shí)踐中有所幫助。
為什么要使用word2vector技術(shù)?因?yàn)槌窃谑褂脴?shù)模型,否則都需要將詞轉(zhuǎn)換為一些數(shù)值向量。一種直接的做法是使用one-hot,將其轉(zhuǎn)為稀疏表示,只有該詞向量為1,其余為0。如:

顯然這樣當(dāng)詞袋較大時(shí),任何神經(jīng)網(wǎng)絡(luò)的輸入將會(huì)很大,除此之外,one-hot的表達(dá)方式,并沒(méi)有考慮到該詞的上下文內(nèi)容,這是一個(gè)很大的弊端。針對(duì)以上這兩點(diǎn),word2vector旨于解決將一個(gè)詞的one-hot型的高維表達(dá)方式,轉(zhuǎn)為更低維度的向量,以及考慮詞的上下文內(nèi)容。

如上圖, word2vector僅為一個(gè)簡(jiǎn)單的網(wǎng)絡(luò),即一層輸入(input layer),一層隱層(hidden layer),這一層可以只是簡(jiǎn)單地權(quán)重相加,也可以是非線(xiàn)性的,如sigmoid何tanh,一層輸出(output layer),輸出層采用softmax。在訓(xùn)練過(guò)程中,我們想要訓(xùn)練得到的結(jié)果是在cat周?chē)脑~有更大的概率,而其他的詞的概率較小。如果詞袋大小為10000,我們想要減小為300為,那么首先需要的10000*300的權(quán)重矩陣(中間層),該矩陣的每一行代表詞袋中的每一個(gè)詞,這個(gè)矩陣也就成為了一個(gè)embeddding look-up table。
關(guān)于兩種word2vector模型,簡(jiǎn)單來(lái)說(shuō),skip gram模型,就是使用給定的詞,來(lái)預(yù)測(cè)其周?chē)脑~的概率。CBWM(continuous bag of words model)是使用中間詞的周邊詞,來(lái)預(yù)測(cè)該中間詞。除此之外,還有關(guān)于訓(xùn)練過(guò)程中的負(fù)采樣問(wèn)題。
其他說(shuō)明:
為了得到詞語(yǔ)的有意義的收斂的詞向量,需要較大的語(yǔ)料庫(kù),否則出來(lái)的詞向量偶然性較大。
參考來(lái)源:
[https://adventuresinmachinelearning.com/word2vec-tutorial-tensorflow/]
[https://towardsdatascience.com/learn-word2vec-by-implementing-it-in-tensorflow-45641adaf2ac]