如何实现"相关"度测量算法?

时间:2020-03-05 18:47:16  来源:igfitidea点击:

今天早些时候,当我向我展示Stackoverflow中令人惊讶的功能时,我打算问一个问题。当我写我的问题标题时,stackoverflow向我提出了几个相关的问题,我发现已经有两个类似的问题。太神奇了!

然后,我开始思考如何实现这种功能。我如何根据相关性排序问题:

  • 词数较多的问题与新问题匹配
  • 如果匹配数相同,则考虑单词顺序
  • 标题中出现的单词具有较高的相关性

那将是一个简单的工作流程还是一个复杂的评分算法?
某些是为了增加召回率,也许吗?
是否有一些实现该功能的库?
我们还会考虑其他哪些方面?
也许杰夫可以回答自己!我们是如何在Stackoverflow中实现此功能的? :)

解决方案

回答

StackOverflow在某个时候不是开源的吗?如果是这样,我们总是可以找到他们是如何做到的。

更新:看来他们说他们可能会开源。我希望他们能做到。

回答

一种实现这种算法的方式将涉及按照启发式功能对问题进行排名,该功能使用以下步骤分配"相关性"权重因子:

  • 对"新"问题应用噪声过滤器,以删除在众多对象(例如" the"," and"," or"等)中常见的单词。
  • 获取"新"问题中包含的单词数量,这些单词与网站上已发布的一组问题中的单词匹配。 [一种]
  • 获取"新"问题中的单词与可用单词之间的标签匹配数。 [B]
  • 将基于[A]和[B]的"相关权重"计算为" x [A] + y [B]",其中x和y是权重乘数(由于标记的相关性更高,请为[B]分配更高的权重乘数比简单的单词搜索)
  • 获得"相关权重"最高的前5个问题。

启发式方法可能需要进行调整以获得最佳结果,但是它应该可以工作。

回答

@marcio

抱歉,我不知道我在这里可以建议的任何直接API参考,并且我从未与Lucene合作。

但是,我知道Google桌面使用查询API来对相关搜索结果进行排名和建议。有关API的更多信息,请参见此处。

也许其他人可以发出声音并引导我们。

回答

问题似乎与此问题类似,它还有一些其他答案。