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

5
考虑一个任意的文本框,记录回答问题“你死前想做什么”的答案。
使用一组响应字符串(最大长度为240),我希望以某种方式将它们进行排序、分组并按想法进行计数(可以像此问题中描述的那样只是字符串相似性)。
1.是否有其他或更好的方法来完成这样的事情? 2.这与字符串相似性有何不同? 3.这是否是正确的问题?
这里的想法是让人们一遍又一遍地在文本框中写入内容,然后我提供一个数字,通常说明大约有802人写了类似的事情

802人?你需要一个单独的数字吗?还是一个分区?或者是一种有点重叠的分区? - ninjagecko
@ninjagecko 这是一个很好的问题。你会选择分区还是单个数字?如果是这样,为什么? - Kristian
1
它可以保留更多的信息,但这取决于你真正想做什么。 - ninjagecko
2
这个问题可以深入到文本蕴含层面(http://aclweb.org/aclwiki/index.php?title=Textual_Entailment_Portal)(http://www.nist.gov/tac/2011/RTE/)。 - Kenston Choi
我在这个答案中描述了一种基本但稳健的字符串分组方式:https://dev59.com/917Va4cB1Zd3GeqPLqIh#8636993 - John Lehmann
3个回答

8
这比字符串相似度要困难得多。以下是最少需要做的事情:
  • 执行一些文本格式化/清理任务,例如删除标点符号和常见的“停用词”
  • 从出现在答案中的术语中构建一个语料库(包括它们的使用统计信息)。
  • 为每个术语计算权重。
  • 从每个答案构建一个文档向量(每个术语对应于高维欧几里得空间中的一个维度)。
  • 对文档向量运行聚类算法。
阅读好的统计自然语言处理书籍,或搜索 Google 以获得良好的介绍/教程(可能的术语:统计 NLP、文本分类、聚类)。你可能会找到一些库(例如 weka 或 nltk),但无论如何都需要理解概念才能使用库。

2
潜在语义分析(LSA)可能会引起你的兴趣。这里有一篇好的介绍文章

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


2
LSA是一种通过某些严谨的数学技巧将相似术语合并以减少维度的技术。我认为他还有很长的路要走(首先正确构建文档向量,然后进行聚类),甚至在考虑在中间应用LSA之前。 - Ali Ferhat

1

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接