我阅读了《编程集体智慧》一书中的“从点击中学习”这一章,觉得这个想法很好:那里的搜索引擎会学习用户点击了哪些结果,并利用这些信息来改进结果的排名。
我认为,如果我能从用户的点击中学习,这将大大提高我的Java/Elasticsearch应用程序的搜索排名质量。
在书中,他们构建了一个多层感知器(MLP)网络,即使对于新的搜索短语也能利用所学到的信息。他们使用Python和SQL数据库来计算搜索排名。
有没有人已经在Elasticsearch中实现了类似的东西,或者知道一个示例项目?如果我能直接在Elasticsearch中管理点击信息,而不需要额外的SQL数据库,那就太好了。
回答:
在信息检索领域(搜索和推荐的总体学术领域),这更普遍地被称为学习排名。无论是点击、转化,还是其他形式的判断关键词搜索的“好”或“坏”结果,学习排名使用分类器或回归过程来学习查询和文档的哪些特征与相关性相关。
点击?
对于点击来说,有理由怀疑优化点击是否理想。我正在寻找一篇微软研究的论文,声称在他们的案例中,点击与相关性的相关性只有45%。点击+停留时间通常是更有用的通用相关性指标。
还有搜索中自我强化偏见的风险,正如我在这篇博客文章中所讨论的。如果你已经向用户展示了平庸的结果,而他们继续点击这些平庸的结果,你可能会强化搜索以继续向用户展示平庸的结果。
除了点击之外,通常还有特定领域的考虑因素来决定你应该测量什么。例如,在电子商务中,经典地,转化率很重要。或许导致购买的搜索结果点击应该计入更多。Netflix 著名的尝试理解当你观看一部电影5分钟后返回菜单与观看30分钟后退出意味着什么。有些搜索用例是信息性的:当你在研究并点击多个搜索结果时,点击可能意味着与你在购买单个物品时不同。
很遗憾地说,这不是一个灵丹妙药。我听说过许多成功和不成功的学习排名尝试,这主要取决于你测量用户认为相关的内容的成功程度。这个问题的难度让很多人感到惊讶。
对于Elasticsearch…
对于Elasticsearch来说,有这个插件(免责声明:我是作者)。它在这里有文档。一旦你弄清楚如何为特定查询“评分”文档(无论是点击还是其他),你就可以训练一个模型,然后通过这个插件将其输入Elasticsearch以进行排名。