【问题标题】:Computing the Dot Product for calculating proximity计算点积以计算接近度
【发布时间】:2013-10-02 18:39:50
【问题描述】:

我已经在Calculating Word Proximity in an inverted Index 提出了类似的问题。 但是我觉得这个问题太笼统了,不够精致。就这样吧。

我有一个列表,其中包含文档中标记的位置。对于每个令牌,它都是

public List<int> hitLocation;

假设文档是

Java programming language has a name similar to java island in Indonesia however
local language in java bears no resemblance to the programming language called java.

查询是

java island language

假设我锁定 Java HitList 并尝试直接计算 Java HisList、Island HitList 和 Language Hitlist 之间的距离。

现在第一个问题是句子中有 4 个 java 标记出现。我选择哪一个。假设我选择了第一个。

我进入 island 令牌列表,经过比较发现它与第二次出现的 java.lang.所以我改变了我的选择并锁定了 java 的第二次出现。

继续第三种标记语言,我发现它与我们的选择相距很远,但我发现它离第一个 java 出现很近。

因此,如果现在再次恢复到原始选择,即 java 的第一次出现,到第二个标记“岛”的距离增加,并且如果我坚持我当前的选择,那么你会在这里看到两难选择的第二次出现的绝对距离令牌“语言”将使相关性破坏。

以前有过点积的建议,但是我不知道如何继续使用该选项。

也欢迎任何其他解决方案。

我知道这个问题很详细。但是,我进行了长时间的艰苦搜索,并没有发现任何关于这个主题的问题。

我觉得如果这个问题得到解答,这将是对社区的一个很好的补充,并且会让任何设计与相关性相关的东西的人都非常高兴。

谢谢。

【问题讨论】:

  • 好吧,伙计们,我意识到我正在回答我自己的问题,而且有点晚了。所以对于那些试图从倒排索引开始计算单词接近度的人应该看看这个链接ardendertat.com/2011/05/31/…

标签: algorithm indexing search-engine information-retrieval relevance


【解决方案1】:

您使用命中列表的方式似乎与它们的预期使用方式略有不同(至少根据我的理解)。

通常人们比较不同文档返回的命中列表。这就是他们如何将一个文档列为比另一个文档“更相关”的方式。

也就是说,如果您想在给定单词“java”和“island”的位置的情况下找到某个多词短语(例如“java island”)的所有位置...

  • 获取“java”的位置列表
  • 获取“岛屿”的位置列表
  • 对两个列表进行排序
  • 同时遍历两个列表。您开始获得两个列表的第一个条目。现在测试这对条目。即,如果这些条目“差一”,则您找到了一个“java island”(或者可能是“island java”)的实例。获取列表中当前显示最小值的下一个条目。测试这对新条目。重复。

顺便说一句——点积在比较 2 个不同的文档时更有用。

【讨论】:

    【解决方案2】:

    好吧,既然您明确询问了点积建议,我将尝试更正式地解释一下我的想法。请记住,它不是很有效,因为它可能会将复杂性从基于命中列表的长度转换为基于文本长度的复杂性(除非有一些技巧可以减少它)。

    我最初的想法是将每个命中列表转换为文本长度的一系列二进制值,有命中的高,否则低。

    例如java会看起来

    1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 
    

    但是由于您想要接近,因此将每个事件转换为金字塔,例如-

    3 2 1 0 0 0 1 2 3 2 1 0 0 0 1 2 3 2 0 0 0 0 0 1 2 3 
    

    岛屿也一样 -

    0 0 0 0 0 0 0 1 2 3 2 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
    

    现在,点积会为您提供两个向量之间的某种接近度“分数”,因为它会累积两个单词接近的所有位置(越接近越好)。 Java 和 island 可以说是互为 16 分。对于更高的阈值,您可以进一步拉伸金字塔,或者玩弄形状。

    现在,在这里您添加另一个建议,该方法不太适合,您还想捕捉最接近的确切位置,恕我直言,这不是很好的定义,如果 word1 匹配 word2 怎么办(在某种程度上) 在 position1,但 word2 在 position2 的同一级别匹配 word3 - 你想要什么位置?

    另外,请记住,这种方法是 O(text_length * words^2),在某些情况下可能很好,但对其他情况则非常不利(例如,如果您正在圣经中搜索)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-07
      • 2011-06-07
      • 1970-01-01
      • 1970-01-01
      • 2011-01-06
      • 2013-08-01
      • 2022-01-13
      • 1970-01-01
      相关资源
      最近更新 更多