考虑一个搜索系统,在该系统中,用户提交查询"query",并根据某种排名算法检索产品。假设这些产品是根据它们的质量订购的,使得p_0、p_1、…、p_10等等
我想生成模仿这种排名算法的向量嵌入。理想情况下,与查询向量最接近的乘积向量应该是p_0,下一个应该是p_1,依此类推
我试图通过将出现在同一搜索会话中的产品作为句子来构建产品的word2vec嵌入。然后,我计算了乘积向量的加权平均值,以找到查询向量,使查询向量更接近顶部结果。尽管最接近的结果通常是给定查询的最佳结果,但后续结果中包含一些永远不会显示为顶部结果的结果。
有没有一个技巧可以让word2vec学习排名算法或我可以尝试的任何其他技术?我研究了具有非度量距离的多维矢量缩放,但对于超过100K的产品来说,它似乎是不可缩放的。
没有一个技巧——只是迭代地改进您的表示,&训练集,&排名方法,以更好地实现您的目标。
基于Word2vec的表示通常会有所帮助,但仍然相当简单&以单个单词为中心,其意义可能会因上下文而异;以代币的简单加权平均数无法捕获的方式定位。
您可能希望用不仅仅是一串单词标记来表示"产品",还包括其他属性。这些可以是标量值,如价格或各种其他类型的评级/属性,或额外的合成标签,如其他显著分组的结果(无论是手工编辑还是学习(。
即使只是使用自然语言的产品描述——比如产品名称、描述或评论——也有其他更复杂的文本表示可以训练或使用——比如使用比普通单词2vec更深的网络的句子/文档嵌入。
一般来说,如果你有一堆候选结果的量化表示和一个查询,并且想使用一些";"好";结果来引导更通用的规则来获得最高结果;学习排名;过程:
https://en.wikipedia.org/wiki/Learning_to_rank
建议更具体的步骤将需要对输入/输出/目标进行更具体的描述;尝试了什么,尝试了什么却失败了。
例如,您的查询总是只是文本产品名称吗?在这种情况下,也许简单的关键词搜索是所需的核心技术——像词向量建模这样的东西只是处理一些棘手情况的一个调整,比如当结果太少或太多时,扩大结果,或增加排名的对比度。
或者,你能检测到建模中的关键差距吗;结果包括一些[理想情况下]永远不会作为顶级结果出现的结果";?如果某些事情,如罕见的(建模不好的(单词,或模型中尚未捕捉到的重要品质,似乎是此类情况的罪魁祸首,那么这将指导潜在的一系列纠正性更改。