我怎么近似“你是什么意思?”不使用Google?
language-agnostic
machine-learning
nlp
5
0

我知道这个问题的重复之处:

这些问题与算法的实际工作方式有关。我的问题更像是:假设Google不存在,或者此功能可能不存在,并且我们没有用户输入。如何实现这种算法的近似版本?

为什么这很有趣?

好。尝试在Google中输入“ qualfy ”,它会告诉您:

您的意思是: 合格

很公平。它对从数十亿用户收集的数据使用统计机器学习来做到这一点。但是,现在尝试在Google中输入以下内容:“ Trytoreconnectyou ”,它告诉您:

您的意思是: 尝试重新连接您

现在,这是更有趣的部分。 Google如何确定呢?拥有一本方便的字典,并使用用户输入再次猜测最可能的单词吗?以及如何区分拼写错误的单词和句子?

现在考虑到大多数程序员无法访问数十亿用户的输入,我正在寻找实现该算法的最佳近似方法以及可用的资源(数据集,库等)。有什么建议么?

参考资料:
Stack Overflow
收藏
评论
共 5 个回答
高赞 时间 活跃

假设您有一个单词词典(最坏情况下出现在词典中的所有单词,最坏情况下出现在系统数据中的所有短语),并且知道各个单词的相对频率,应该能够通过单词相似度和相似单词的点击次数的某种组合合理地猜测用户的意思。权重显然需要反复试验,但通常来说,用户会比从语言上更接近但只有一个或两个有效单词的流行结果更感兴趣,因为流行结果在语言上与输入的字符串距离更远命中您的系统。

第二种情况应该更直接一些。您会找到以字符串开头的所有有效单词(“ T”无效,“ Tr”无效,“ Try”是一个单词,“ Tryt”不是一个单词,依此类推),对于每个有效单词,请重复剩余字符串的算法。假设您的字典已建立索引,这应该很快。如果找到可以将长字符串分解为一组有效单词而没有剩余字符的结果,则建议这样做。当然,如果您是Google,则可能会修改算法,以查找与实际单词基本错字的子字符串,并且您具有一些逻辑来处理可以通过足够宽松的拼写检查以多种方式读取字符串的情况(可能使用打破平局的结果数)。

收藏
评论

我认为可以使用N-gramsspellchecker来完成此操作。

对于Trytoreconnectyou ,我们首先检查所有1-gram(所有字典词),然后找到最糟糕的匹配。因此,我们尝试2克(可以通过从长度为2的短语中删除空格来构建),然后尝试3克,依此类推。当我们尝试一个4-gram时,我们发现有一个短语与我们的搜索词相距0距离。由于我们不能做得更好,因此我们将这个答案作为建议。

我知道这效率很低,但是Peter Norvig 在这里的帖子清楚地表明Google使用拼写校正器来生成建议。由于Google具有强大的并行化功能,因此他们可以很快完成此任务。

收藏
评论

可能有用的数据集/工具:

您可以将WordNet用作简单的术语词典,也可以通过从语料库中提取频繁的术语来增强这一功能。

您可以尝试使用前面提到的Peter Norvig链接,但是如果字典很大,这不是一个好的解决方案。

相反,我建议您使用诸如位置敏感哈希(LSH)之类的方法。这通常用于检测重复的文档,但是对于拼写更正同样有效。您将需要一个列表,这些列表和从您认为人们可能会搜索到的数据中提取的术语字符串-您必须为字符串选择截止长度。另外,如果您掌握了人们实际搜索内容的一些数据,则可以使用它。对于每个术语字符串,您都会生成一个向量(可能是字符二元组或三元组会解决问题)并将其存储在LSH中。

给定任何查询,您可以在Charikar描述的LSH上使用近似最近邻居搜索,以从可能的匹配集中找到最近邻居。

注意:由于我是新用户,因此删除了链接-抱歉。

收藏
评论

令人印象深刻的金刚鹦鹉其工作原理可在http://alias-i.com/lingpipe-3.9.3/demos/tutorial/querySpellChecker/read-me.html中找到。

简而言之,这是权衡查询修改(在字符或单词级别)以增加搜索文档的覆盖范围。例如,“ aple”导致2mln文档,而“ apple”导致60mln,而修饰仅是一个字符,因此很明显,您的意思是apple。

收藏
评论

从马口中: 如何编写拼写校正器

有趣的是,您不需要一堆查询日志即可近似算法。您可以使用大部分正确的文本语料库(例如古腾堡计划中的一堆书)。

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号