簡體   English   中英

用於網絡嵌入的 Word2Vec 忽略語料庫中的單詞(節點)(walks)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM