我一直在为一个投资组合管理工具开发一个内部网站。有很多文本数据,公司名称等。我对一些搜索引擎的能力印象深刻,它们可以非常快速地回答“你的意思是:xxxx”。

我需要能够智能地接受用户的查询,并不仅响应原始搜索结果,而且还响应“您的意思是?”当有一个极有可能的替代答案等

我正在开发ASP。NET (VB -别跟我过不去!)]

更新: 好吧,在没有数百万“付费用户”的情况下,我该如何模仿这种模式?

为每个“已知”或“正确”的术语生成拼写错误并执行查找? 还有其他更优雅的方法吗?


当前回答

简单。他们有大量的数据。他们有每一个可能的术语的统计数据,基于它被查询的频率,以及它的什么变化通常会产生用户点击的结果……因此,当他们看到你在搜索词中经常拼写错误时,他们会提出更常见的答案。

实际上,如果拼写错误实际上是搜索频率最高的词,算法就会把它当成正确的词。

其他回答

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

前段时间我发现了一篇文章:《如何编写拼写更正》,作者是Peter Norvig(谷歌公司的研究总监)。

这是一本关于“拼写纠正”主题的有趣读物。例子是用Python写的,但是很清楚,很容易理解,而且我认为算法可以很容易 翻译成其他语言。

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

步骤1:准备-设置word数据库

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

步骤2。单词检查-找到与被检查的单词相似的单词

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

从上一步中选择一个最流行的词,并建议它作为更正(如果不是这个词本身的话)。

简单。他们有大量的数据。他们有每一个可能的术语的统计数据,基于它被查询的频率,以及它的什么变化通常会产生用户点击的结果……因此,当他们看到你在搜索词中经常拼写错误时,他们会提出更常见的答案。

实际上,如果拼写错误实际上是搜索频率最高的词,算法就会把它当成正确的词。

几年前我在这方面看到过一些东西,所以可能已经改变了,但显然他们是通过分析相同用户在短时间内提交非常相似的查询的日志开始的,并根据用户如何纠正自己使用机器学习。

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

搜索101 !

在分钟 22:03

值得一看!

基本上,根据谷歌前CTO Douglas Merrill的说法,它是这样的:

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

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

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

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

这个模式乘以数百万次,显示了什么是最常见的拼写错误,什么是最“常见”的更正。

这样谷歌几乎可以立即提供每种语言的拼写纠正。

这也意味着如果一夜之间每个人都开始把night拼成“nigth”,谷歌会建议用这个词来代替。

EDIT

道格拉斯将其描述为“统计机器学习”。

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

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

它们还可以知道这些是否是两个不同的“相关”查询,因为它们拥有它们所显示的所有链接的信息。

此外,他们现在将上下文纳入拼写检查,因此他们甚至可以根据上下文建议不同的单词。

请看谷歌wave (@ 44m06 s)的演示,它展示了如何考虑上下文来自动纠正拼写。

这里将解释自然语言处理是如何工作的。

最后,这里有一个很棒的演示,可以添加自动机器翻译(@ 1h 12m 47s)到混合。

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