2016-08-31 8 views
0

gensimで平均化したPV-DMの実装を理解しようとしています。 train_document_dmdoc2vec.pyの場合、train_cbow_pairの戻り値( "errors")は、平均化の場合(cbow_mean=1)は入力ベクトルの数(count)で除算されません。 この説明によれば、入力ベクトルを平均化する場合の文書数で除算する必要があります:word2vec Parameter Learning Explained, equation (23)gensimのdoc2vec(PV-DM)のドキュメント・ベクトルの更新

l1 = np_sum(word_vectors[word2_indexes], axis=0)+np_sum(doctag_vectors[doctag_indexes], axis=0) 
count = len(word2_indexes) + len(doctag_indexes) 
if model.cbow_mean and count > 1: 
    l1 /= count 
neu1e = train_cbow_pair(model, word, word2_indexes, l1, alpha, 
           learn_vectors=False, learn_hidden=learn_hidden) 
if not model.cbow_mean and count > 1: 
    neu1e /= count 
if learn_doctags: 
    for i in doctag_indexes: 
     doctag_vectors[i] += neu1e * doctag_locks[i] 
if learn_words: 
    for i in word2_indexes: 
     word_vectors[i] += neu1e * word_locks[i] 

答えて

0

だがVはABの平均値として定義されているとしましょう、とC:ここ はtrain_document_dmからコードで

V =(A + B + C)/ 3

A = 5,B = 6C = 10と設定しましょう。 Vが10と等しいとしましょう。

計算を実行して、3つの数値の平均であるVの値は7です。したがって、Vに必要な補正は+3です。

この修正をA、B、およびCに適用するには、を3で補正してそれぞれに対して+1を得ますか?その場合、A = 6,B = 7、およびC = 11 - 今ではVはわずか8です。ターゲットに合わせるにはさらに+2が必要です。

Vのすべてのコンポーネントに対する適切な訂正は、Vが平均である場合、V - この場合は+3に訂正されたものと同じです。我々はそれを適用した場合、我々は10の私達の適切な目標値に到達したい:

A = 8, B = 9, C = 13 
V = (8 + 9 + 13)/3 = 10 

同じことがgensimバックプロパゲーションが起こっています。平均化の場合、構成ベクトルの各々に完全な補正値(学習率alphaを乗じたもの)が適用される。

(Vを作成するためにベクトルの和を使用する場合、からまでの誤差は、構成ベクトルの数で除算する必要があります - エラーをすべてに分割し、冗長に適用しないでください)。

関連する問題