文档章节

正确地猜测用户的意图

杨尚川
 杨尚川
发布于 2015/06/03 19:13
字数 611
阅读 378
收藏 4

当我们在Collins词典中输入“voilent”的时候,会有如下提示:

当我们在Google中搜索“voilent”的时候,也会有如下提示:

Collins和Google是如何做到的呢?它是怎么知道我们把i和o的位置弄反了呢?

当我们输入一个词,而这个词不存在于Google的倒排索引或者Collins的词典中时,我们就可以假设用户输入可能有误,接着我们通过算法找出一个和用户的输入最相似的词推荐给用户,这个找出和用户输入最相似的词的算法有很多种,最常用的有编辑距离算法(Edit Distance),因为这个算法是俄罗斯科学家Vladimir Levenshtein在1965年提出的,所以编辑距离(Edit Distance)又叫做Levenshtein距离。

编辑距离算法是指两个字串之间,由一个转成另一个所需的最少编辑操作次数,允许的编辑操作包括将一个字符替换成另一个字符,增加一个字符,删除一个字符。

例如将kitten转成sitting: 

sitten (k→s)将一个字符k替换成另一个字符s

sittin  (e→i) 将一个字符e替换成另一个字符i

sitting (→g) 增加一个字符g

所以编辑距离为3,word分词提供了编辑距离算法的Java代码实现,同时superword项目也演示了编辑距离算法对于单词记忆的辅助作用


下面我们看看中文的情况,当我们在Google搜索“热挨”的时候,Google在倒排索引中找不到“热挨”这个词,于是它猜测我们真正想搜索的是“热爱”,那么Google是怎么猜测到我们的意图的呢?

工作原理和上面介绍的英文词比较相似,只是算法不一样,如果把编辑距离算法应用到这里,效果会很差,那么怎么办呢?

解决方法是利用汉语的同音词原理,先把“热挨”转换为拼音“reai”,然后找出所有拼音为“reai”的双字词,在按照词的出现频率取频率最大者“热爱”。


更多资料:

How to Write a Spelling Corrector

Using the Web for Language Independent Spellchecking and Autocorrection

How Difficult is it to Develop a Perfect Spell-checker A Cross-linguistic Analysis through Complex Network Approach




© 著作权归作者所有

杨尚川

杨尚川

粉丝 1101
博文 220
码字总数 1624053
作品 12
东城
架构师
私信 提问
加载中

评论(1)

依姆哣特
依姆哣特
"一架飞机会飞" [一架,飞机,会飞]
"一架机飞会飞" [一架, 机, 飞, 会飞] 我想判断会不会构成一句合理合理的话,应该怎么做呢?
构建一个简单的 Google Dialogflow 聊天机器人【下】

使用实体提取数据 此页面描述了如何从用户的查询中提取参数值(实体数据)。 添加参数到您的意图 参数是用户查询中提取的重要且相关的单词或短语,因此您的聊天机器人可以提供适当的响应。 ...

磐创AI_聊天机器人
07/02
0
0
AI语音二三事:你需要了解这些AI 语音对话技术

  机器学习以及自然语言处理技术的进步,开启了人与人工智能进行语音交互的可能,人们透过对话的方式获取信息、与机器进行交互,将不再只是存在科幻情结当中。语音交互是未来的方向,而智能...

深度学习
2018/01/12
0
0
GitLab 9.0.2 发布,修复重要安全漏洞

GitLab 社区版(CE)和企业版(EE)发布 9.0.2 版本了。 该版本包含了两个重要的安全修复程序:主要是针对 GitLab 9.0 最近推出的嵌套群组功能。建议运行 GitLab 9.0 版本的用户尽快升级。 ...

局长
2017/03/31
1K
8
写好注释的方法小结

关于如何写好代码注释: 注释的恰当用法是弥补我们在用代码表达意图时遭遇的失败。 程序中,真实只存在一处地方:代码。应该尽量使用代码表达,而尽量减少注释。 什么样的注释才是好的注释:...

Freewheel
2015/11/28
118
0
在宏中使得字段只能读取 (几何画板开发笔记 三)

问题提出: 在研究 emacs lisp 的时候, 文件 lisp.h 里面有一个宏的写法有点特殊, 引起了我的奇怪. #define XFLOAT_DATA(f) (0 ? XFLOAT (f)->u.data : XFLOAT (f)->u.data) 其中为了简化问题...

刘军兴
2014/05/04
67
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周六乱弹 —— 早上儿子问我他是怎么来的

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @凉小生 :#今日歌曲推荐# 少点戾气,愿你和这个世界温柔以待。中岛美嘉的单曲《僕が死のうと思ったのは (曾经我也想过一了百了)》 《僕が死の...

小小编辑
今天
1K
12
Excption与Error包结构,OOM 你遇到过哪些情况,SOF 你遇到过哪些情况

Throwable 是 Java 中所有错误与异常的超类,Throwable 包含两个子类,Error 与 Exception 。用于指示发生了异常情况。 Java 抛出的 Throwable 可以分成三种类型。 被检查异常(checked Exc...

Garphy
今天
22
0
计算机实现原理专题--二进制减法器(二)

在计算机实现原理专题--二进制减法器(一)中说明了基本原理,现准备说明如何来实现。 首先第一步255-b运算相当于对b进行按位取反,因此可将8个非门组成如下图的形式: 由于每次做减法时,我...

FAT_mt
昨天
16
0
好程序员大数据学习路线分享函数+map映射+元祖

好程序员大数据学习路线分享函数+map映射+元祖,大数据各个平台上的语言实现 hadoop 由java实现,2003年至今,三大块:数据处理,数据存储,数据计算 存储: hbase --> 数据成表 处理: hive --> 数...

好程序员官方
昨天
25
0
tabel 中含有复选框的列 数据理解

1、el-ui中实现某一列为复选框 实现多选非常简单: 手动添加一个el-table-column,设type属性为selction即可; 2、@selection-change事件:选项发生勾选状态变化时触发该事件 <el-table @sel...

everthing
昨天
11
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部