And*_*rry 426 algorithm nlp spell-checking machine-learning text-search
我一直在开发一个投资组合管理工具的内部网站.有很多文本数据,公司名称等.我对一些搜索引擎能够快速回复查询的印象非常深刻,"你的意思是:xxxx".
我需要能够智能地进行用户查询并不仅响应原始搜索结果,还要回答"你的意思是?" 当有极有可能的替代答案等时作出回应
[我正在开发ASP.NET(VB - 不要反对我!)]
更新:好的,如果没有数百万"无偿用户",我怎么能模仿这个?
Osc*_*Ryz 361
以下是来源(几乎)的解释
在22:03分钟
值得一看!
基本上根据Google前首席技术官Douglas Merrill的说法,它是这样的:
1)你在谷歌写了一个(拼写错误的)单词
2)你找不到你想要的东西(不要点击任何结果)
3)你意识到你拼错了这个词,所以你在搜索框中重写了这个词.
4)你找到你想要的东西(你点击第一个链接)
这种模式增加了数百万次,显示了最常见的拼写错误以及最常见的错误修正.
这样谷歌几乎可以瞬间完成各种语言的拼写纠正.
这也意味着,如果一夜之间每个人都开始拼写晚上,因为"nigth"谷歌会建议这个词.
编辑
@ThomasRutter:道格拉斯将其描述为"统计机器学习".
他们知道谁更正了查询,因为他们知道哪个查询来自哪个用户(使用cookie)
如果用户执行查询,并且只有10%的用户点击结果,90%返回并输入另一个查询(带有更正后的单词),这次90%点击结果,那么他们就知道他们找到了纠正.
他们还可以知道这些是否是两个不同的"相关"查询,因为它们具有所显示的所有链接的信息.
此外,他们现在将语境包含在拼写检查中,因此他们甚至可以根据上下文建议不同的单词.
请参阅google wave(@ 44m 06s)的演示,其中显示了如何将上下文考虑在内以自动更正拼写.
这里解释了自然语言处理的工作原理.
最后,这是一个很棒的演示,可以完成添加自动机器翻译(@ 1h 12m 47s)的组合.
我已经为视频添加了分钟和秒钟的锚点以直接跳到内容,如果它们不起作用,请尝试重新加载页面或手动滚动到标记.
Dav*_*ano 103
我前段时间发现了这篇文章:如何编写拼写校正器,由Peter Norvig(Google Inc.研究部主任)撰写.
这是关于"拼写纠正"主题的有趣读物.这些示例都是Python的,但它清晰易懂,我认为该算法可以很容易地翻译成其他语言.
下面是该算法的简短描述.该算法包括两个步骤,准备和单词检查.
第1步:准备 - 设置单词数据库
最好的是你可以使用实际的搜索词和它们的出现.如果您没有,可以使用大量文本.计算每个单词的出现次数(流行度).
步骤2.单词检查 - 查找与所选单词类似的单词
类似意味着编辑距离较低(通常为0-1或0-2).编辑距离是将一个单词转换为另一个单词所需的最小插入/删除/更改/交换次数.
选择上一步中最常用的单词并将其建议为更正(如果不是单词本身).
Cla*_*diu 10
嗯......我认为谷歌使用他们庞大的数据集(互联网)来做一些严肃的NLP(自然语言处理).
例如,它们具有从整个互联网这么多的数据,它们可以数的倍的三单词序列出现的数目(被称为三字母组).因此,如果他们看到一句话:"粉红色的frugr音乐会",他们可以看到它几乎没有点击,然后在他们的语料库中找到最可能的"粉红色*音乐会".
他们显然只是对Davide Gualano所说的做了一些变化,所以肯定会读到这个链接.谷歌当然会使用它所知道的所有网页作为语料库,因此这使得它的算法特别有效.
我的猜测是他们使用Levenshtein距离算法和他们收集的关于运行搜索的大量数据的组合.他们可以从输入的搜索字符串中拉出一组与Levenshtein距离最短的搜索,然后选择结果最多的搜索.
通常,生产拼写校正器使用几种方法来提供拼写建议.有些是:
决定确定是否需要拼写纠正的方法.这些可能包括结果不充分,结果不够具体或不够准确(根据某些措施)等.然后:
使用大量文本或字典,其中所有或大多数已知正确拼写.这些很容易在网上找到,比如LingPipe.然后,为了确定最佳建议,您需要根据多个度量查找最接近匹配的单词.最直观的是类似的角色.通过研究和实验证明,两个或三个字符的序列匹配效果更好.(双胞胎和三卦)为了进一步改善结果,在比赛的开头或结尾处加一个较高的分数.出于性能原因,将所有这些单词索引为三元组或双字母组,以便在执行查找时,转换为n-gram,并通过哈希表或trie进行查找.
使用与基于角色位置的潜在键盘错误相关的启发式方法.所以"hwllo"应该是"你好",因为'w'接近'e'.
使用语音键(Soundex,Metaphone)索引单词并查找可能的更正.在实践中,这通常比使用n-gram索引返回更差的结果,如上所述.
在每种情况下,您必须从列表中选择最佳校正.这可以是距离度量,例如levenshtein,键盘度量等.
对于多词短语,只有一个单词可能拼写错误,在这种情况下,您可以将剩余的单词用作确定最佳匹配的上下文.