2017-08-12 62 views
0

初學者的問題,但我有點困惑。希望這個問題的答案也可以讓NLP中的其他初學者受益。使用平均方法從word2vec單詞向量計算句子向量的具體步驟是什麼?

這裏有一些更多的細節:

我知道你可以從word2vec生成的單詞矢量計算句子載體。但是,制定這些句子向量所涉及的實際步驟是什麼?任何人都可以提供一個直觀的例子,然後一些計算來解釋這個過程?

eg:假設我有一個三個字的句子:今天很熱。假設這些詞具有假設的矢量值:(1,2,3)(4,5,6)(7,8,9)。通過對這些單詞向量進行分量平均來獲得句子向量嗎?如果向量的長度不同,例如:(1,2)(4,5,6)(7,8,9,23,76)這些情況下的平均過程是什麼樣的?

回答

0

對於您的示例,3個單詞向量(每個3維)的平均值將產生一個3維單向量。

質心的VEC = 1/3 *(1 + 4 + 7,2 + 5 + 8,3 + 6 + 9)=(4,5,6)

一種更好的方式來獲得一個單文檔的矢量是使用通常稱爲doc2vec的段落矢量。

1

通過平均單詞向量來創建長度爲文本(句子/段落/文檔)的向量是一種簡單的方法。 (這不是很大的捕捉陰影-的善意,但它很容易做到。)

使用gensim庫,它可以是簡單的:

import numpy as np 
from gensim.models.keyedvectors import KeyedVectors 

wv = KeyedVectors.load_word2vec_format('GoogleNews-vectors-negative300.bin.gz', binary=True) 
text = "the quick brown fox jumped over the lazy dog" 
text_vector = np.mean([wv[word] for word in text.split()], axis=0) 

是否使用原始字矢量,或者單位歸一化的單詞向量或者通過一些單詞重要性度量加權的單詞向量是可以考慮的替代方法。

彼此兼容的單詞向量將具有相同的維數,所以從來沒有嘗試平均不同大小的向量的問題。

其他技術如'Paragraph Vectors'(gensim中的Doc2Vec)可能會在某些語料庫中爲某些目的提供更好的文本向量。

其他用於比較利用單詞向量的文本的相似性的技術,比如「Word Mover's Distance」(WMD),與比較單個彙總向量相比,可能會產生更好的成對文本相似度分數。 (大規模殺傷性武器不會將文本縮減爲單個矢量,並且計算起來可能很昂貴。)

相關問題