比较想法相似性的算法(作为字符串)

Posted

技术标签:

【中文标题】比较想法相似性的算法(作为字符串)【英文标题】:Algorithm to compare similarity of ideas (as strings) 【发布时间】:2012-04-16 13:29:00 【问题描述】:

考虑一个记录问题答案的任意文本框,你想在死之前做什么?

使用响应字符串的集合(最大长度 240),我想以某种方式对它们进行排序和分组,并按想法计算它们(这可能只是字符串相似性,如 this question 中所述)。

    有没有其他或更好的方法来做这样的事情? 这与字符串相似度有什么不同吗? 这是正确的问题吗?

这里的想法是让人们在一个文本框中一遍又一遍地写,我提供一个数字来描述,一般来说,802 人写了大致相同的东西

【问题讨论】:

802 人?你想要一个号码?还是分区?还是那种重叠的分区? @ninjagecko 这是一个很好的问题。你会选择分区而不是单个数字吗?如果是,为什么? 它保留了更多信息,但这取决于你真正想要做什么。 这个问题可以深入到文本蕴涵 (aclweb.org/aclwiki/index.php?title=Textual_Entailment_Portal) (nist.gov/tac/2011/RTE) 我在这个答案中描述了一种基本但强大的字符串分组方式:***.com/a/8636993/317110 【参考方案1】:

这比字符串相似性要困难得多。这是您至少需要做的:

执行一些文本格式化/清理任务,例如删除标点符号和常见的“停用词” 根据出现答案的术语构建语料库(单词及其使用统计数据的集合)。 计算每个术语的权重。 根据每个答案构造一个文档向量(每个术语对应于非常高维欧几里得空间中的一个维度) 对文档向量运行聚类算法。

阅读一本好的统计自然语言处理书籍,或在 google 上搜索好的介绍/教程(可能的术语:statistical nlptext categorizationclustering) 您可能会根据您选择的语言找到一些库(wekanltk),但无论如何您都需要了解使用该库的概念.

【讨论】:

【参考方案2】:

Latent Semantic Analysis (LSA) 可能会让您感兴趣。这是a nice introduction。

潜在语义分析 (LSA) 是自然语言处理(尤其是矢量语义)中的一种技术,通过生成与文档和术语相关的一组概念来分析一组文档与其包含的术语之间的关系。 [...]

【讨论】:

LSA 是一种通过将相似项与一些严肃的数学魔法合并来减少维度的技术。我认为他还有很长的路要走(首先正确构建文档向量,然后进行聚类),甚至在考虑在中间应用 LSA 之前。【参考方案3】:

你想要的是 NLP 中的一个非常开放的问题。 @Ali 的回答从高层次上描述了这个想法,但是“为每个答案构建一个文档向量”部分真的很难。有一些明显的方法可以从它包含的单词的向量中构建文档向量。加法、乘法和平均速度很快,但它们会有效地忽略语法。 Man bites dogDog bites man 将具有相同的表示,但显然不同的含义。 Google compositional distributional semantics- 据我所知,德克萨斯大学、特伦托大学、牛津大学、苏塞克斯大学和 Google 大学都有人在该地区工作。

【讨论】:

以上是关于比较想法相似性的算法(作为字符串)的主要内容,如果未能解决你的问题,请参考以下文章

比较相似性算法

比较两个字符串的相似度算法

关于文本相似度-LD算法和余弦算法的比较

这已经是字符串相似度算法了吗?

使用 TF-IDF 加权的空间向量模型实现句子相似度计算

图片相似度——hash算法简介