[英]Word2Vec for network embedding ignores words (nodes) in corpus (walks)
我正在嘗試將 word2vec (Skipgram) 運行到一組用於訓練網絡嵌入模型的步行,在我的圖中我有 169343 個節點,即; word 在 Word2vec 的上下文中,對於每個節點,我運行長度為 80 的隨機游走。因此,我有 (169343,80) 次游走,即; Word2vec 中的句子。 在運行 SkipGram 3 個時期后,我只得到 28015 個向量而不是 169343。這是我的網絡嵌入的代碼。
def run_skipgram(walk_path):
walks = np.load(walk_path).tolist()
skipgram = Word2Vec(sentences=walks, vector_size=128, negative=5, window=8, sg=1, workers=6, epochs=3)
keys = list(map(int, skipgram.wv.index_to_key))
keys.sort()
vectors = [skipgram.wv[key] for key in keys]
return np.array(vectors)
您確定您的walks
語料庫是您所期望的,以及 Gensim Word2Vec
期望的嗎?
例如, len(walks)
等於 169343? len(walks[0])
等於 80 嗎? walks[0]
是 80 個字符串標記的列表嗎?
另請注意:默認情況下Word2Vec
使用min_count=5
- 因此在訓練期間將忽略出現次數少於 5 次的任何標記。 在大多數情況下,這個最小值——甚至更高! – 有道理,因為在通常的自然語言訓練數據中只有 1 個或幾個用法示例的標記無法獲得好的詞向量(但總的來說,可以作為損害其他向量的稀釋噪聲)。
根據您的圖表,每個節點的一次步行可能無法確保該節點在所有步行中至少出現 5 次。 因此,您可以嘗試min_count=1
- 但最好從每個起點進行5次步行,或者進行足夠的步行以確保所有節點至少出現 5 次。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.