我已阅读过章节"从点击中学习"在书Programming Collective Intelligence中并且喜欢这个想法:搜索引擎在那里了解用户点击了哪些结果并使用此信息来改进结果的排名。
如果我可以从用户点击中学习,我认为它会在我的Java / Elasticsearch应用程序中大大提高搜索排名的质量。
在本书中,他们构建了一个multiplayer perceptron (MLP) network来使用学到的信息,甚至用于新的搜索短语。他们使用Python和SQL数据库来计算搜索排名。
是否有人已经使用Elasticsearch实现了类似的功能或知道示例项目? 如果我能直接在Elasticsearch中管理点击信息而不需要额外的SQL数据库,那就太棒了。
答案 0 :(得分:5)
在信息检索领域(搜索和推荐的一般学术领域),这通常被称为Learning to Rank。无论是点击次数,转化次数还是其他形式,都可以找出“好”和“好”的内容。或者"坏"关键字搜索的结果,学习排名使用分类器或回归过程来了解查询和文档的哪些特征与相关性相关。
对于具体的点击,有理由怀疑优化点击是理想的。微软研究院发表了一篇论文,我试图挖掘出在他们的案例中,点击率与相关性只有45%的相关性。 Click + dwell通常是一个更有用的通用指标。
在我谈到in this blog article时,搜索中存在自我强化偏见的风险。如果您已经显示用户平庸的结果,并且他们不断点击那些平庸的结果,那么您最终可能会加强搜索以继续向用户显示平庸的结果。
除了点击之外,您还应该针对应该衡量的内容进行针对特定领域的考虑。例如,在电子商务中,转换很重要。也许导致这种购买的搜索结果点击应该更多。当你观看5分钟的电影并回到菜单30分钟后退出时,Netflix就会试图说出它意味着什么。有些搜索用例是信息性的:当您进行研究和点击许多搜索结果时,与您购买单个商品时相比,点击可能意味着不同。
很遗憾地说这不是一颗银弹。我听说过许多成功和不成功的学习排名的尝试,它主要归结为你在衡量用户认为相关的方面取得的成功。这个问题的难度让很多人感到惊讶
对于Elasticsearch,具体为this plugin(免责声明我是作者)。这是documented here。一旦你弄清楚如何评分"等级"一个特定查询的文档(无论是点击还是更多)你可以训练一个模型,然后通过这个插件将其输入Elasticsearch进行排名。
答案 1 :(得分:2)
您需要做的是在Elasticsearch索引中存储有关点击的信息。每次点击都会导致文档更新。由于更新操作实际上是删除并插入Update API,因此您需要确保文档文本存储,而不仅仅是已编入索引。然后,您可以使用Function Score Query构建一个反映存储在索引中的值的分数函数。
或者,您可以将信息存储在单独的数据库中,并使用score功能中的脚本功能来访问数据库。由于性能问题,我不会建议这个解决方案。
答案 2 :(得分:-1)
我明白了你的问题。您希望构建学习以在Elasticsearch框架内对模型进行排名。每个文档与查询的相关性在线计算。您希望将查询和doc组合起来计算得分,因此需要一个自定义函数来计算_score。我是弹性搜索的新手,我找到了解决问题的方法。
Lucene是一个更通用的搜索引擎,可以定义自己的得分手来计算相关性,之前我已经开发了几个应用程序。
这article描述了定制记分员的信念理解。但是,关于elasticsearch,我还没有找到相关的文章。欢迎与我讨论您在弹性搜索方面的进展。