如何实现“相关”程度度量算法?

Mar*_*iar 8 algorithm indexing full-text-search

今天早些时候,当我看到 Stackoverflow 中的一个令人惊讶的功能时,我正打算问一个问题。当我写下我的问题标题时,stackoverflow 向我推荐了几个相关的问题,我发现已经有两个类似的问题了。太棒了!

然后我开始思考如何实现这样的功能。我如何按相关性对问题进行排序:

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

这是一个简单的工作流程还是一个复杂的评分算法?也许是为了增加召回率?有没有一些库可以实现这个功能?您还会考虑哪些其他方面?也许杰夫可以自己回答!你是如何在 Stackoverflow 中实现这一点的?:)

Pas*_*cal 3

实现这种算法的一种方法是根据启发式函数对问题进行排名,该函数使用以下步骤分配“相关性”权重因子:

  1. 对“新”问题应用噪声过滤器,以删除大量对象中常见的单词,例如:“the”、“and”、“or”等。
  2. 获取“新”问题中包含的与网站上已发布的问题集的单词相匹配的单词数。[A]
  3. 获取“新”问题中的单词与可用单词之间的标签匹配数。[乙]
  4. 根据 [A] 和 [B] 计算“相关权重”为“x[A] + y[B]”,其中 x 和 y 是权重乘数(为 [B] 分配更高的权重乘数,因为标记更相关比简单的单词搜索)
  5. 获取“相关权重”最高的前 5 个问题。

启发式方法可能需要进行调整才能获得最佳结果,但它应该有效。