gpt4 book ai didi

python - Doc2Vec:将训练文档重新投影到模型空间中

转载 作者:太空宇宙 更新时间:2023-11-03 15:41:10 24 4
gpt4 key购买 nike

我对 Doc2Vec 的某个方面有点困惑。基本上,我不确定我所做的是否有意义。我有以下数据集:

train_doc_0      --> label_0
... ...
train_doc_99 --> label_0
train_doc_100 --> label_1
... ...
train_doc_199 --> label_1
... ...
... ...
train_doc_239999 --> label_2399

eval_doc_0
...
eval_doc_29

其中train_doc_n是一个简短的文档,属于某个标签。有 2400 个标签,每个标签有 100 个训练文档。 eval_doc_0 是评估文档,我想最终预测它们的标签(使用分类器)。

我使用这些训练文档和标签训练 Doc2Vec 模型。模型训练完成后,我使用 infer_vector 将每个原始训练文档以及我的评估文档(我最终想要分类的文档)重新投影到模型的空间中。

结果是一个矩阵:

X_train (240000,300) # doc2vec vectors for training documents
y_train (240000,) # corresponding labels
y_eval (30, 300) # doc2vec vectors for evaluation documents

我的问题如下:如果我在 X_trainy_train 上运行简单的交叉验证,我会获得不错的准确性。一旦我尝试对我的评估文档进行分类(甚至只使用 50 个随机采样的标签),我的准确率就非常差,这让我质疑我解决这个问题的方法。

我关注了这个tutorial用于文档培训。

我的方法有意义吗,特别是使用 infer_vector 重新投影所有训练文档?

最佳答案

我没有发现任何明显的错误。

评估文档在长度、词汇等方面与培训文档相似吗?理想情况下,它们是所有可用标记示例的随机选择的子集。 (如果差异很大,这可能就是交叉验证与保留评估准确性不同的原因。)

在训练 Doc2Vec 模型时,您是否为每个文档提供一个唯一的 ID 作为其标签的唯一条目?或者您是否使用 label_n 标签作为训练示例的 tags ?或者也许两者兼而有之? (任何这些都是合理的选择,尽管我发现将已知标签混合到通常“无监督”的 Doc2Vec 训练中,使其成为半监督的,通常有助于 mdoels 的向量作为后来的显式监督分类器的输入变得更有用。 )

当我在一个意想不到的步骤中获得前所未有的“ super 糟糕”准确度时,通常是因为测试示例发生了一些错误的洗牌或重新排序——随机化了真实的关系。因此,值得在代码中并通过详细查看一些示例来仔细检查这一点。

重新推断训练中使用的示例的向量,而不是简单地询问模型中保留的经过训练的向量,有时会产生更好的向量。然而,许多人发现 infer_vector() 的参数与默认参数不同,尤其是更多的 steps 以及可能更接近的起始 alpha在训练期间使用的可能会改善结果。 (此外,在更简单的 PV-DBOW、dm=0 模式中,推理似乎可以通过更少的步骤更好地工作。PV-DM、dm=1 可能特别需要更多步骤。)

您链接的教程显示了一种做法,在自己调整 alpha 的同时多次调用 train() ,这通常是不必要的且容易出错 - 特别是不太可能在最新的 gensim 版本中做正确的事情。您可以保留默认的 alpha/min_alpha 不变,并在 Doc2Vec 初始化期间提供首选的 iter 值 - 并且然后一次调用 train() 将自动执行这么多遍,并适当降低学习率。由于默认的 iter 是 5,如果您设置它,每次调用 train() 都会执行 5 次 - 所以这样做你自己的外部循环 10 意味着 50 次通过,而该教程中的代码,由于某些奇怪的原因,每个循环两次调用 train(),意味着 100 次通过。

关于python - Doc2Vec:将训练文档重新投影到模型空间中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42109463/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com