作者:魍魉之波_414 | 来源:互联网 | 2023-01-30 10:26
正如您所注意到的,infer_vector()
要求其doc_words
参数是一个标记列表 - 匹配用于训练模型的相同类型的标记化.(传递一个字符串会导致它只是将每个字符看作标记列表中的一个项目,即使一些标记是已知的词汇标记 - 就像英语中的'a'和'I'一样 - 你不太可能取得好成绩.)
另外,infer_vector()
对于许多模型,默认参数可能远非最佳.特别是,更大steps
(至少与模型训练迭代次数一样大,但可能甚至大很多倍)通常是有帮助的.此外,较小的起点alpha
,也许只是0.025批量训练的常见默认值,可能会产生更好的结果.
你是否推理的测试得到了向量接近从批量训练相同的向量是一个合理的完整性检查,在双方你的推论参数和早期训练-是模型作为一个整体的学习普及模式中的数据?但是因为Doc2Vec的大多数模式固有地使用随机性,或者(在批量训练期间)可能受到多线程调度抖动引入的随机性的影响,所以不应期望相同的结果.他们通常会越来越接近,你做的训练迭代/步骤越多.
最后,需要注意的是,most_similar()
在方法Doc2Vec
的docvecs
组件也可以采取原始载体,给回最相似已经知道向量的列表.所以你可以试试以下......
ivec = model.infer_vector(doc_words=tokens_list, steps=20, alpha=0.025)
print(model.most_similar(positive=[ivec], topn=10))
...并获得排名前十的最相似(doctag, similarity_score)
对的排名列表.
1> gojomo..:
正如您所注意到的,infer_vector()
要求其doc_words
参数是一个标记列表 - 匹配用于训练模型的相同类型的标记化.(传递一个字符串会导致它只是将每个字符看作标记列表中的一个项目,即使一些标记是已知的词汇标记 - 就像英语中的'a'和'I'一样 - 你不太可能取得好成绩.)
另外,infer_vector()
对于许多模型,默认参数可能远非最佳.特别是,更大steps
(至少与模型训练迭代次数一样大,但可能甚至大很多倍)通常是有帮助的.此外,较小的起点alpha
,也许只是0.025批量训练的常见默认值,可能会产生更好的结果.
你是否推理的测试得到了向量接近从批量训练相同的向量是一个合理的完整性检查,在双方你的推论参数和早期训练-是模型作为一个整体的学习普及模式中的数据?但是因为Doc2Vec的大多数模式固有地使用随机性,或者(在批量训练期间)可能受到多线程调度抖动引入的随机性的影响,所以不应期望相同的结果.他们通常会越来越接近,你做的训练迭代/步骤越多.
最后,需要注意的是,most_similar()
在方法Doc2Vec
的docvecs
组件也可以采取原始载体,给回最相似已经知道向量的列表.所以你可以试试以下......
ivec = model.infer_vector(doc_words=tokens_list, steps=20, alpha=0.025)
print(model.most_similar(positive=[ivec], topn=10))
...并获得排名前十的最相似(doctag, similarity_score)
对的排名列表.