Gensim Doc2Vec异常:完全相同文档生成不同向量求助
我来帮你揪出这个问题的根源——完全相同的文档输出向量不一致,大概率是因为你用了不合适的向量保存/获取方式,或者忽略了Doc2Vec里的随机性细节。下面一步步给你分析和解决:
1. 别用save_word2vec_format保存Doc2Vec文档向量
save_word2vec_format本质是为Word2Vec的词向量设计的格式,虽然它支持保存文档标签向量,但会丢失Doc2Vec模型的核心信息(比如词汇表、训练参数、内部状态等)。用它保存后,不仅后续加载麻烦,还可能导致向量读取异常。
正确的做法是用模型自带的save()方法保存完整模型:
# 替换你代码里的save_word2vec_format这一行 model.save(outputName)
后续加载模型并获取训练过的文档向量时:
loaded_model = models.doc2vec.Doc2Vec.load(outputName) # Gensim 4.x用dv属性,Gensim 3.x用docvecs属性 doc_vector = loaded_model.dv["你的文档标签(比如文件名)"]
2. 推断向量时的随机性是常见坑
如果你的场景是对未见过的相同文档调用infer_vector生成向量,默认情况下这个过程是带随机性的——比如随机初始化向量、负采样的随机选择,导致相同文档每次推断出的向量不一样。
解决方法很简单:固定随机种子:
# 给infer_vector设置seed参数,确保每次结果一致 vec1 = model.infer_vector(your_words_list, seed=42) vec2 = model.infer_vector(your_words_list, seed=42) # 此时vec1和vec2会完全相同
另外,你还可以增加steps参数(默认是5),让推断过程更稳定:
vec = model.infer_vector(your_words_list, steps=20, seed=42)
3. 检查你的getWords函数是否有随机性
如果getWords在处理同一个文件时,返回的词序列是随机的(比如打乱了词序),那生成的TaggedDocument就会不一样,训练出的向量自然也会有差异。一定要确保getWords对相同文件返回完全一致的词列表。
修正后的完整代码示例
我把你的代码调整成更规范的版本,加入了固定随机种子、正确保存模型的逻辑:
import glob import os import multiprocessing from gensim import models from gensim.models.doc2vec import TaggedDocument def getDocs(corpusPath): """Function for processings documents as TaggedDocument""" # 把生成器转成列表,避免重复遍历文件(生成器只能遍历一次) docs = [] for file in glob.glob(os.path.join(corpusPath, '*.csv')): docs.append(TaggedDocument(words=getWords(file), tags=[os.path.basename(file)])) return docs def getModel(corpusPath, outputName): # Get documents words from path documents = getDocs(corpusPath) cores = multiprocessing.cpu_count() # Initialize the model,固定seed确保训练可复现 model = models.doc2vec.Doc2Vec( vector_size=100, epochs=10, min_count=1, max_vocab_size=None, alpha=0.025, min_alpha=0.01, workers=cores, seed=42 ) # Build Vocabulary model.build_vocab(documents) # Train the model model.train(documents, total_examples=model.corpus_count, epochs=model.epochs) # 保存完整模型 model.save(outputName)
这样调整后,无论是训练过的文档向量,还是对相同新文档的推断向量,都能保持一致性了。
内容的提问来源于stack exchange,提问作者Mikel Laburu
相关产品推荐
相关产品推荐

