Machine learning 用doc2vec查询文档相似度

Machine learning 用doc2vec查询文档相似度,machine-learning,gensim,word2vec,information-retrieval,doc2vec,Machine Learning,Gensim,Word2vec,Information Retrieval,Doc2vec,给定一个查询和一个文档,我想使用Gensim doc2vec计算相似性分数。 每个文档由多个字段组成(例如,主标题、作者、出版商等) 对于培训,连接文档字段并将每一行视为一个唯一的文档更好,还是应该拆分字段并将其用作不同的培训示例 作为推论,我应该像对待文档一样对待查询吗?也就是说,我是否应该调用查询中的模型(经过文档培训)?正确的答案取决于您的数据和用户行为,因此您需要尝试几种变体 为了获得一些初步结果,我建议将所有字段合并为一个“文档”,针对每个潜在的查询结果,并使用(快速训练)PV-DBO

给定一个查询和一个文档,我想使用Gensim doc2vec计算相似性分数。 每个文档由多个字段组成(例如,主标题、作者、出版商等)

对于培训,连接文档字段并将每一行视为一个唯一的文档更好,还是应该拆分字段并将其用作不同的培训示例


作为推论,我应该像对待文档一样对待查询吗?也就是说,我是否应该调用查询中的模型(经过文档培训)?

正确的答案取决于您的数据和用户行为,因此您需要尝试几种变体

为了获得一些初步结果,我建议将所有字段合并为一个“文档”,针对每个潜在的查询结果,并使用(快速训练)PV-DBOW模式(
dm=0
)。这将让你开始看到结果,或者做一些非正式的评估,或者开始编译一些自动评估数据(比如他们“应该”排名很高的探测查询和文档列表)

然后,您可以尝试测试将字段分隔为单独的文档的想法——或者替代单文档方法,或者作为单文档方法的补充

另一个选项可能是为每个字段创建专门的单词标记。也就是说,当“John”出现在标题中时,您实际上会将其预处理为“title:John”,而在author中则为“author:John”等(这可能代替或补充了裸露的原始标记)。这可以增强模型,使其也能够理解每个标记的变化意义,具体取决于字段

然后,如果您有足够的训练数据,并且选择好其他模型参数,那么当用户指示某个字段时,您的搜索界面也可能会对查询进行类似的预处理,并获得更好的结果。(或许不是:这只是一个值得尝试的想法。)


在所有情况下,如果您需要精确的结果–精确匹配指定的用户查询–更传统的搜索,如精确DB匹配/greps或全文反向索引,将优于
Doc2Vec
。但是,当查询更近似时,结果需要填写近似意义,即使不是文字标记结果,模糊的矢量文档表示可能会有所帮助。

正确的答案将取决于您的数据和用户行为,因此您需要尝试几种变体

为了获得一些初步结果,我建议将所有字段合并为一个“文档”,针对每个潜在的查询结果,并使用(快速训练)PV-DBOW模式(
dm=0
)。这将让你开始看到结果,或者做一些非正式的评估,或者开始编译一些自动评估数据(比如他们“应该”排名很高的探测查询和文档列表)

然后,您可以尝试测试将字段分隔为单独的文档的想法——或者替代单文档方法,或者作为单文档方法的补充

另一个选项可能是为每个字段创建专门的单词标记。也就是说,当“John”出现在标题中时,您实际上会将其预处理为“title:John”,而在author中则为“author:John”等(这可能代替或补充了裸露的原始标记)。这可以增强模型,使其也能够理解每个标记的变化意义,具体取决于字段

然后,如果您有足够的训练数据,并且选择好其他模型参数,那么当用户指示某个字段时,您的搜索界面也可能会对查询进行类似的预处理,并获得更好的结果。(或许不是:这只是一个值得尝试的想法。)


在所有情况下,如果您需要精确的结果–精确匹配指定的用户查询–更传统的搜索,如精确DB匹配/greps或全文反向索引,将优于
Doc2Vec
。但是,当查询更接近时,结果需要填写接近的含义,即使不是文字标记结果,模糊的矢量文档表示可能会有所帮助。

您的查询总是文档还是其他关键字?我的查询只是可能引用某些(或其组合)的关键字文档字段。您的查询总是文档还是其他关键字?我的查询只是可能引用某些(或组合)文档字段的关键字。