我如何估算"你的意思是?" 没有使用谷歌?

Leg*_*end 23 language-agnostic algorithm nlp machine-learning

我知道这个问题的重复:

这些问题对算法实际如何工作感兴趣.我的问题更像是:让我们假设谷歌不存在或者这个功能可能不存在而且我们没有用户输入.如何实现此算法的近似版本?

为什么这很有趣?

好.尝试在Google中键入" qualfy ",它会告诉您:

你的意思是: 资格

很公平.它使用统计机器学习对从数十亿用户收集的数据进行此操作.但是现在尝试输入这个:" Trytoreconnectyou "到谷歌,它告诉你:

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

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

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

Jus*_*ave 9

假设您有一个单词词典(在最坏的情况下出现在词典中的所有单词,在最佳情况下出现在系统中的数据中的所有短语)并且您知道各个单词的相对频率,应该能够通过相似性和相似词的命中数的某种组合来合理地猜测用户的意思.权重显然需要一些试验和错误,但一般来说,用户会对一个流行的结果更感兴趣,这个结果在语言上远离他们输入的字符串,而不是在语言上更接近但只有一个或两个的有效单词点击你的系统.

第二种情况应该更简单一些.你找到所有开始字符串的有效单词("T"无效,"Tr"无效,"Try"是单词,"Tryt"不是单词等),对于每个有效单词,你重复剩余字符串的算法.假设您的字典已编入索引,这应该很快.如果您找到一个结果,您可以将长字符串分解为一组没有剩余字符的有效字,那么这就是您的建议.当然,如果您是Google,您可能会修改算法以查找与实际单词相当接近的字符串的子字符串,并且您有一些逻辑来处理字符串可以通过多种方式读取而且语法检查松散的情况(可能使用打破平局的结果数量).


Adr*_*thy 7

从马的嘴里: 如何写一个拼写校正器

这里有趣的是你如何不需要一堆查询日志来近似算法.您可以使用大多数正确文本的语料库(就像Project Gutenberg的一堆书).