Google如何"你的意思是?" 算法工作?

And*_*rry 426 algorithm nlp spell-checking machine-learning text-search

我一直在开发一个投资组合管理工具的内部网站.有很多文本数据,公司名称等.我对一些搜索引擎能够快速回复查询的印象非常深刻,"你的意思是:xxxx".

我需要能够智能地进行用户查询并不仅响应原始搜索结果,还要回答"你的意思是?" 当有极有可能的替代答案等时作出回应

[我正在开发ASP.NET(VB - 不要反对我!)]

更新:好的,如果没有数百万"无偿用户",我怎么能模仿这个?

  • 为每个"已知"或"正确"术语生成拼写错误并执行查找?
  • 其他一些更优雅的方法?

Osc*_*Ryz 361

以下是来源(几乎)的解释

搜索101!

在22:03分钟

值得一看!

基本上根据Google前首席技术官Douglas Merrill的说法,它是这样的:

1)你在谷歌写了一个(拼写错误的)单词

2)你找不到你想要的东西(不要点击任何结果)

3)你意识到你拼错了这个词,所以你在搜索框中重写了这个词.

4)你找到你想要的东西(你点击第一个链接)

这种模式增加了数百万次,显示了最常见的拼写错误以及最常见的错误修正.

这样谷歌几乎可以瞬间完成各种语言的拼写纠正.

这也意味着,如果一夜之间每个人都开始拼写晚上,因为"nigth"谷歌会建议这个词.

编辑

@ThomasRutter:道格拉斯将其描述为"统计机器学习".

他们知道谁更正了查询,因为他们知道哪个查询来自哪个用户(使用cookie)

如果用户执行查询,并且只有10%的用户点击结果,90%返回并输入另一个查询(带有更正后的单词),这次90%点击结果,那么他们就知道他们找到了纠正.

他们还可以知道这些是否是两个不同的"相关"查询,因为它们具有所显示的所有链接的信息.

此外,他们现在将语境包含在拼写检查中,因此他们甚至可以根据上下文建议不同的单词.

请参阅google wave(@ 44m 06s)的演示,其中显示了如何将上下文考虑在内以自动更正拼写.

这里解释了自然语言处理的工作原理.

最后,这是一个很棒的演示,可以完成添加自动机器翻译(@ 1h 12m 47s)的组合.

我已经为视频添加了分钟和秒钟的锚点以直接跳到内容,如果它们不起作用,请尝试重新加载页面或手动滚动到标记.

  • 如果每个人都开始拼错"夜晚"...我相信他们已经遇到了搜索"Flickr"的人. (50认同)
  • 每个人拼写错误的问题已经发生在更严重的意义上:尝试在Google中键入"fuscia".谷歌说"你的意思是fuschia?" 事实上,正确的拼写是"紫红色",但没有人可以出于某种原因拼写正确.Dictionary.com上的问题更严重; 如果你在他们的搜索中输入"fuschia",它会给你"没有fuschia的结果.你的意思是'fuschia'?" (也就是说,你的意思是你刚输入的内容?) (41认同)
  • 我不相信他们只使用拼写错误的数据 - 肯定有一些Levenshtein距离或类似的东西 - 搜索'Plack'(以及一个或多个其他单词)并且它总是被纠正为'black',这是一个非常不可能的拼写错误/错字 (8认同)
  • @Jakub我认为他们已经解决了这个问题,因为我在4年多前发表了这个评论.的确,谷歌也解决了这个问题.搜索fuschia包括自动生成紫红色的结果. (4认同)

Dav*_*ano 103

我前段时间发现了这篇文章:如何编写拼写校正器,由Peter Norvig(Google Inc.研究部主任)撰写.

这是关于"拼写纠正"主题的有趣读物.这些示例都是Python的,但它清晰易懂,我认为该算法可以很容易地翻译成其他语言.

下面是该算法的简短描述.该算法包括两个步骤,准备和单词检查.

第1步:准备 - 设置单词数据库

最好的是你可以使用实际的搜索词和它们的出现.如果您没有,可以使用大量文本.计算每个单词的出现次数(流行度).

步骤2.单词检查 - 查找与所选单词类似的单词

类似意味着编辑距离较低(通常为0-1或0-2).编辑距离是将一个单词转换为另一个单词所需的最小插入/删除/更改/交换次数.

选择上一步中最常用的单词并将其建议为更正(如果不是单词本身).

  • "但是"就在那里,因为Harry在他的问题中说他是一名VB.NET开发人员,所以我认为他对python语言没有信心. (20认同)
  • @Davide:"""这些例子都在python中,但它清晰易懂""":我不明白你对"但是"的使用......我会说Python + Norvig的写作风格,"清楚和简单易懂"是预期的结果. (6认同)

Sze*_*eri 56

对于"你是说"算法的理论,你可以参考信息检索简介的第3章.它可以在线免费获得.第3.3节(第52页)准确回答了您的问题.并且要专门回答您的更新,您只需要一个单词词典而不需要其他内容(包括数百万用户).


Cla*_*diu 10

嗯......我认为谷歌使用他们庞大的数据集(互联网)来做一些严肃的NLP(自然语言处理).

例如,它们具有从整个互联网这么多的数据,它们可以数的倍的三单词序列出现的数目(被称为三字母组).因此,如果他们看到一句话:"粉红色的frugr音乐会",他们可以看到它几乎没有点击,然后在他们的语料库中找到最可能的"粉红色*音乐会".

他们显然只是对Davide Gualano所说的做了一些变化,所以肯定会读到这个链接.谷歌当然会使用它所知道的所有网页作为语料库,因此这使得它的算法特别有效.


Jim*_*ger 7

我的猜测是他们使用Levenshtein距离算法和他们收集的关于运行搜索的大量数据的组合.他们可以从输入的搜索字符串中拉出一组与Levenshtein距离最短的搜索,然后选择结果最多的搜索.

  • 假设您总共存储了数十亿个网页的单词.没有简单的方法来索引Levenshtein距离以快速检索近似匹配,而不是为每个被查询的单词计算Levenshtein距离数十亿次.因此,Levenshtein距离在这种情况下并没有多大用处,至少在第一阶段,Google需要将数十亿现有单词缩小到可能是当前单词拼写错误的单词.一旦它已经取得了可能的比赛,它肯定可以作为后来的一步应用Levenshtein. (6认同)

eul*_*rfx 6

通常,生产拼写校正器使用几种方法来提供拼写建议.有些是:

  • 决定确定是否需要拼写纠正的方法.这些可能包括结果不充分,结果不够具体或不够准确(根据某些措施)等.然后:

  • 使用大量文本或字典,其中所有或大多数已知正确拼写.这些很容易在网上找到,比如LingPipe.然后,为了确定最佳建议,您需要根据多个度量查找最接近匹配的单词.最直观的是类似的角色.通过研究和实验证明,两个或三个字符的序列匹配效果更好.(双胞胎和三卦)为了进一步改善结果,在比赛的开头或结尾处加一个较高的分数.出于性能原因,将所有这些单词索引为三元组或双字母组,以便在执行查找时,转换为n-gram,并通过哈希表或trie进行查找.

  • 使用与基于角色位置的潜在键盘错误相关的启发式方法.所以"hwllo"应该是"你好",因为'w'接近'e'.

  • 使用语音键(Soundex,Metaphone)索引单词并查找可能的更正.在实践中,这通常比使用n-gram索引返回更差的结果,如上所述.

  • 在每种情况下,您必须从列表中选择最佳校正.这可以是距离度量,例如levenshtein,键盘度量等.

  • 对于多词短语,只有一个单词可能拼写错误,在这种情况下,您可以将剩余的单词用作确定最佳匹配的上下文.


Nic*_*ier 6

使用Levenshtein距离,然后创建度量树(或修剪树)来索引单词.然后运行1-Nearest Neighbor查询,得到结果.