0

我的要求是在模糊短语搜索中生成匹配分数。例子

1) 输入数据 - 你好 Sam,你好吗?谢谢,史密斯。

  • 索引文档 - Sam Smith(文档始终是个人/组织名称,输入数据将是自由文本数据)

在上述情况下,在我的输入数据中发现的 Sam 和 Smith 都是不同的人。如果我的输入数据是“Hello Sam Smith”,那么我应该得到更高分数的相关命中(我也期待“Hello Sam John Smith”等的好分数)。

我在这里使用 Lucene 进行初级过滤,稍后将使用输入数据对匹配的文档进行后处理并定义匹配分数(使用 levenshtein),它也应该适用于模糊。

准确的方法,

1) 将文档索引为 Tri-Grams

2) 使用 Tri-Gram 索引搜索输入的自由文本数据

3)收集所有匹配的文档(这将有很多嘈杂的数据)

4) 后处理每个匹配的文档并定义每个匹配的三元组标记在输入自由文本数据中的位置,并计算可能位置标记和整个文档之间的 levenshtein 分数。

例如 - 你好,山姆,你好吗?谢谢,史密斯。

在这里,我的文档匹配将是“Sam Smith”,我想查看每个三元索引及其在输入自由文本数据中的位置匹配,例如

1) 标记“sam”与输入数据中的第二个位置词“Sam”匹配

2) 标记“smi”与输入数据中的第 8 位单词“Smith”匹配

稍后我将编写逻辑来计算令牌 2、8 与实际匹配的文档的 levenshtein 分数(考虑到位置 2 和 8 之间的接近度,分数会非常低),但如果令牌的位置是 2,3(或 2,4)我会给很好的分数。

希望得到专家对此方法的反馈,或一些更好的建议,谢谢。

4

1 回答 1

0

我正在使用标记化序列在 Lucene 中进行类似的模糊短语匹配。使用 Levenshtein 或 JaroWinkler 计算标记距离,然后使用 Smith-Waterman 找到最佳序列比对。如果我要使这种方法适应您的情况,问题将是对齐评分无法(直接)支持令牌交换(置换令牌替换)。我唯一能做的就是降低源代码中出现的令牌与没有出现的令牌的插入成本。

所以我喜欢 n-gram 方法来获得对非本地重新排序不太敏感的评分。我建议检查 BLEU、METEOR 和 ROUGE,它们是用于句子相似度的标准 n-gram 度量,以及处理顺序敏感性的各种方法。它们可以与您提案中的字符级 n-gram 一起使用,也可以与我正在做的令牌级 n-gram 一起使用。

于 2013-09-28T18:00:45.803 回答