【问题标题】:Measure similarity between 2 vectors测量 2 个向量之间的相似度
【发布时间】:2016-12-29 05:19:55
【问题描述】:

我正在尝试计算 2 个句子之间的相似度,所以我有 2 组单词,每个单词代表一个句子,以及一个函数 (F),它接收两个单词并以某种方式返回它们之间的相似度..

在图1中,黑色圆圈是句子A的单词,红色方块代表句子B。 对于每个时间函数(F)接收到 2 个词,它返回一个介于 0.0 和 1.0 之间的值,例如:A 中的第一个词和 B 中的第三个词有 0.3 的相似度分数。 我使用了 M x N 比较,因为两个句子的顺序经常不一样,而且单词的数量也不同。

我的问题是:

  1. 在获得所有 M x N 比较分数后,我如何才能获得决赛 分数在 0.0 和 1.0 之间,表示两者的相似性 句子或列表? "因为两个句子的长度并不总是 相等"。

  2. 如果这种方法不正确,还有什么替代方法?

【问题讨论】:

  • 有趣。你是如何定义相似的?
  • 我不认为你想做什么很清楚。你有相似度分数的矩阵吗?我不确定 M x N 比较应该是什么意思。问题是否与某些“相似性”主题或数学有关?也许缺乏“相似性”经验的人仍然可以提供帮助。
  • 仅对 8 个数字求平均有什么问题?
  • “我喜欢烹饪我的家人和我的宠物”和“我喜欢烹饪,我的家人和我的宠物”非常相似。他们使用相同的词,以相同的顺序。但它们的含义非常不同。
  • 有趣。如果你在解析语法,你的句子可能有主语、动词和宾语。主语有名词或代词(或两者都有连词),其中可能有形容词。动词可以有副词。宾语类似于主语(名词、形容词等)。我认为您想要一棵单词树,而不是向量!基于树结构的相似性,因此不会比较使用不同的相同单词。

标签: java math vector similarity


【解决方案1】:

我通过以下方式获得了上述图表的分数:

1- 当我得到 2 个列表时,较短的将在左侧。

2- 对于左侧的每个单词,我提取了最大值(在我们的示例中为 1.0),然后将其除以右侧的单词数以获得该单词的分数。

3- 最后,我将单词的分数相加得到最终分数,然后将其除以左侧单词的数量。 (1 + 0.8)/2 = 0.4

这种类型的计算取决于关系的性质,因为每个单词的关系都可能高于零,但如果每个单词只有一个高于零的关系与其他关系,我们不应该将最终分数除以数字最后一步的单词。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-22
    • 1970-01-01
    • 2017-04-09
    • 1970-01-01
    • 2023-03-12
    • 2018-07-15
    • 2016-05-29
    相关资源
    最近更新 更多