16

我目前正在开发一个程序,该程序能够将小文本(比如 250 个字符)与类似文本的集合(大约 1000-2000 个文本)进行比较。

目的是评估文本 A 是否与集合中的一个或多个文本相似,如果是,则集合中的文本必须可以通过 ID 检索。每个文本都有一个唯一的 ID。

我希望输出有两种方式:

选项 1: 文本 A 与文本 B 的相似度为 90%,文本 C 的相似度为 70%,依此类推。

选项 2: 文本 A 匹配具有最高相似性的文本 D

我在学校读过一些机器学习,但我不确定哪种算法最适合这个问题,或者我是否应该考虑使用 NLP(不熟悉该主题)。

有没有人建议使用什么算法或者我可以在哪里找到必要的文献来解决我的问题?

4

2 回答 2

28

这似乎不是机器学习问题,您只是在寻找一些文本相似性度量。选择一个后,您只需根据获得的“分数”对数据进行排序。

根据您的文本,您可以使用以下指标之一(来自 wiki 的列表)或定义您自己的指标:

  • 汉明距离
  • Levenshtein 距离和 Damerau-Levenshtein 距离
  • Needleman-Wunsch 距离或卖方算法
  • 史密斯-沃特曼距离
  • Gotoh 距离或 Smith-Waterman-Gotoh 距离
  • 蒙格埃尔坎距离
  • 街区距离或L1距离或城市街区距离
  • 雅罗-温克勒距离
  • Soundex 距离度量
  • 简单匹配系数 (SMC)
  • 骰子系数
  • Jaccard 相似度或 Jaccard 系数或 Tanimoto 系数
  • 特沃斯基指数
  • 重叠系数
  • 欧几里得距离或 L2 距离
  • 余弦相似度
  • 变分距离
  • 海灵格距离或巴塔查亚距离
  • 信息半径(Jensen-Shannon 散度)
  • 偏差散度
  • 混淆概率
  • Tau 度量,Kullback-Leibler 散度的近似值
  • Fellegi 和 Sunters 公制 (SFS)
  • 最大匹配
  • 李距离

上述一些(例如余弦相似度)需要将您的数据转换为矢量化格式。这个过程也可以通过多种方式实现,使用最简单的词袋/tfidf 技术。

List 本身远非完整,只是此类方法的草稿。特别是,有许多字符串内核,它们也适用于测量文本相似度。特别是 Wordnet Kernel 可以基于最完整的英语语义数据库之一来测量语义相似度。

于 2013-08-26T08:45:24.503 回答
1

我听说Golden 博士提供了三种方法

  • 余弦角分离

  • 汉明距离

  • 潜在语义分析 (LSA) 或潜在语义索引 (LSI)

这些方法基于语义相似性。

我还听说一些公司使用名为Spacy的工具来汇总文档以相互比较。

于 2020-05-15T06:24:32.907 回答