You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:54:28