Gensim Doc2Vec:关联原始DataFrame与文档向量及按作者查询方法
嘿,这个需求其实很好实现,咱们一步步来拆解操作:
步骤1:将DataFrame转换为TaggedDocuments语料库
首先得把你的DataFrame转换成gensim库要求的TaggedDocuments格式,这里用DataFrame的行索引作为无语义的整数标签就非常合适——毕竟索引本身就是无意义的序号,完全符合行业通用的要求。
假设你的DataFrame结构是这样的:有text列存储文档内容,author列存储作者信息,示例代码如下:
import pandas as pd from gensim.models.doc2vec import TaggedDocument # 模拟你的DataFrame(实际替换成你自己的数据即可) df = pd.DataFrame({ 'text': [ "这是第一篇文档的内容...", "这是第二篇文档的内容...", "这是第三篇文档的内容..." ], 'author': ['张三', '李四', '张三'] }) # 转换为TaggedDocuments:标签用行索引(整数),内容用文档分词后的列表 # 注意:Doc2Vec要求输入是分词后的文本,实际场景建议用专业分词工具(比如jieba)替代split() tagged_corpus = [ TaggedDocument(words=text.split(), tags=[i]) # 直接用整数作为标签,无需转字符串 for i, text in enumerate(df['text']) ]
步骤2:训练Doc2Vec模型
接下来用生成的语料库训练Doc2Vec模型,参数可以根据你的需求调整,这里用常规的通用参数:
from gensim.models.doc2vec import Doc2Vec # 初始化并训练模型 model = Doc2Vec( vector_size=100, # 向量维度,可根据需求调整 window=5, # 上下文窗口大小 min_count=1, # 忽略出现次数少于该值的词 workers=4, # 并行训练的线程数 epochs=20 # 训练轮次 ) model.build_vocab(tagged_corpus) model.train(tagged_corpus, total_examples=model.corpus_count, epochs=model.epochs)
步骤3:关联原始DataFrame与文档向量
训练完成后,我们可以直接把每篇文档的向量映射回原DataFrame,新增一列存储向量即可:
# 给DataFrame新增'doc_vector'列,存储对应文档的向量 df['doc_vector'] = [model.dv[i] for i in df.index]
这样一来,原DataFrame的每一行就都和它对应的Doc2Vec向量绑定在一起了,后续操作会非常方便。
步骤4:按作者查询文档向量集合
现在要查询指定作者的所有文档向量,直接用DataFrame的布尔索引就能轻松实现:
# 查询作者为"张三"的所有文档向量 target_author = "张三" author_vectors = df[df['author'] == target_author]['doc_vector'].tolist() # 如果需要把向量转换成numpy数组方便后续计算(比如聚类、相似度对比): import numpy as np author_vectors_np = np.array(author_vectors)
author_vectors里就存储了该作者对应的所有文档向量,你可以直接拿来做后续的各种分析操作。
内容的提问来源于stack exchange,提问作者OverflowingTheGlass
相关产品推荐
相关产品推荐

