[微信机器人_04]自然语言处理简单实现

标签: 微信 机器人 自然语言 | 发表时间:2014-01-20 08:22 | 作者:elcarim
出处:http://blog.csdn.net

这篇博文中将介绍奇迹蛋自然语言处理模块的实现,自然语言处理的三个关键词:分词、建库、匹配。

 

建库:

先来看两个对话:

问:今天吃什么答:面条

问:今天吃面条答:太好了

 

机器人要如何来记忆这两组对话呢?

1、直接存储

问题

答案

今天吃什么

火锅

今天吃面条

不好吃

 

这样存储当然没有问题,但是显然太土了,有没有其它的办法呢?

 

2、树

在存储过程中,总是希望能够去除冗余,即相同的词语能够只存储一次。很容易想到,把句子拆分成词来存储。


如图所示,每个问题都拆分成词,并以词为节点建立树。每个几点可以与一个答案(或者多个答案)关联。这样的存储方式比 直接存储要精细很多,存储空间小、查找效率高。

实际建立的树结构如下:


树存储特点介绍

Ø  根节点不存储任何信息;

Ø  内部节点和叶子节点都可以与答案关联;

Ø  这棵树类似于B树的结构,即一个节点可以有N个子节点;

Ø  树的高度与一个句子中包含的词语个数有关。

 

分词

注意到以树来记忆对话,需要把问题进行拆分,即 分词

分词是自然语言处理里非常关键的一部分,用于把句子拆分成词,进行存储、匹配。分词的实现包含两个部分:

Ø  分词算法

即按照什么样的规则来切割句子,比如从头开始切还是从结尾开始切,有多种切割选择时如何决策等等。

Ø  知识库

知识库即一些常用的词语,分词算法依赖知识库来识别 元词(即由多个汉字组成的有意义的词)。知识库是否丰富,对算法的精确度有很大的影响。

分词算法我是不太懂,这里也不做过多的描述,有兴趣可以去研究下比较有名的开源分词软件如: IK分词器等。

不懂分词算法没关系,我的目的只是得到分词的结果,“拿来主义”是程序员的优良传统,可以使用开放的API来帮咱完成分词的工作,在前面的博文提到过,我这里使用的是sina的api: http://5.tbip.sinaapp.com/api.php?str=[sentence]&type=[json]

比如在浏览器中输入

http://5.tbip.sinaapp.com/api.php?str=今天吃什么&type=json

返回json格式的结果:

[

{

"word":"\u4eca\u5929",

"word_tag":"132",

"index":"0"

},

{

"word":"\u5403",

"word_tag":"170",

"index":"1"

},

{

"word":"\u4ec0\u4e48",

"word_tag":"123",

"index":"2"

}

]

 

匹配

匹配算法也很简单,关键是几个模糊匹配的规则。

假设数据库中记录了这样一个问题: ABCD,其中,A、B、C、D分别代表一个词语。

而可能遇到的问题有如下几种:

1. ABC

由于数据库中没有ABC对应的答案,而前几个词完全匹配,那么继续搜寻C的子节点,知道找到有答案的节点,将该答案作为ABC的答案返回。比如,记录的对话为:

问题你 在 干嘛 呢

答案:发呆

此时如果用户提问: 你 在 干嘛,会匹配到 “你在干嘛呢”这个问题,并获得答案“发呆”。

2. ABCD

完全匹配,不多说。

3. ABCDE

虽然前四个词完全匹配,但是多了一个E,则认为是一个新问题,不能匹配,没有答案。

4. XABC

5. XABCD

6. XABCDE

4、5、6这三种情况可分别转换为1、2、3三种情况。当发现问题的首字不匹配时,则去掉首字,重新匹配。比如,记录的对话为:

问题今天 还有 火车票 吗

答案:卖完了

此时如果用户提问: 请问 今天 还有 火车票 吗,首词 “请问”无法匹配,则去掉首词,得到新的问题 今天 还有 火车票 吗,与原问题匹配,得到答案“卖完了”。

7. CD

也遵循上面的处理原则,去掉不匹配的首词,但C、D作为首词均不能匹配到ABCD,故该问题没有答案。

 

以上即使奇迹蛋的自然语言模块的设计,很简单吧^_^

关于代码及数据库实现会在后面以整个工程上传,其实并不复杂,相信各位有更精妙的实现方法。

这里的自然语言处理只是一个简化的实现,后面如果有时间,会去研究相关的资料,这里也放出一些相关的信息,各位感兴趣的话可以去研究下,期待你的分享。

Ø Aiml (Artificial Intelligence Markup Language)

国外一个很优秀的开源人工智能项目,有丰富的语料库,很多聊天机器人都用它来实现。不过原版堆对中文的支持不好,需要修改下源码。

Ø Lucence

Ø IK分词

这两个我也只是扫了一眼,有兴趣直接google吧。


谢谢关注奇迹蛋~扫一下&调戏之


作者:elcarim 发表于2014-1-20 0:22:45 原文链接
阅读:172 评论:0 查看评论

相关 [微信 机器人 自然语言] 推荐:

[微信机器人_04]自然语言处理简单实现

- - CSDN博客互联网推荐文章
这篇博文中将介绍奇迹蛋自然语言处理模块的实现,自然语言处理的三个关键词:分词、建库、匹配. 机器人要如何来记忆这两组对话呢?. 这样存储当然没有问题,但是显然太土了,有没有其它的办法呢. 在存储过程中,总是希望能够去除冗余,即相同的词语能够只存储一次. 很容易想到,把句子拆分成词来存储. 如图所示,每个问题都拆分成词,并以词为节点建立树.

自然语言处理概览

- - 互联网 - ITeye博客
自然语言处理研究的是词、句、文档等几个层次的内容. 一、发展历史(前两个是理论、后一个是经验). 1、形式语法(复杂特征集). 2、词汇主义方法(WordNet、ConceptNet、FrameNet), 人工总结和整理概念、层次、结构等 . 3、统计语言模型(语言有统计规律性,让机器去自己学习规律).

自然语言处理某个pipeline

- - 互联网 - ITeye博客
1、数据源:包括文本、pdf、数据库等不同来源. 2、使用到的库:jieba gensim sklearn keras . 3、可以实现的服务:找出相关和相近词(以分词为准)、比较2个分词的相似度、和哪些相关同时和别的不相关(语义上的模糊查找). 数据源的load->gensim->classifier(传统基于词频的/深度学习的 keras).

微信自定义机器人的最初需求样本

- - 白鸦,Blog
前不久给微信提了几个未来可以通用的接口需求,我认为可以作为很多企业的智能客服去使用,也可以配套上他们的CRM. 虽然到目前为止 Guang.com的一个兼职工程师还没有完全实现这些设计,但依然还是挺好玩的~. 最近有不少新的微信账户在使用这些接口(可以添加如下好友来测试:订酒店、下厨房、逛),也有人在讨论这些接口可以怎么用.

统计自然语言处理的基础学习之一

- - CSDN博客互联网推荐文章
理性主义:其实就是纯粹使用规则的方法处理自然语言,并认为这些语言规则天生就存在人的基因中. 在计算机中重现这些规则,就能学会人的语言处理能力. 经验主义:认为人有感知和学习能力,通过概括、模式识别、联想等能力,来学习到自然语言的结构. 哲学上的问题,类似于起源之类,就先别考虑的. 统计方法在NLP中的地位是什么.

Quora在自然语言处理上的所做的工作

- - 标点符
问答网站最核心的内容是提供给优质的内容,如何让内容更加优质,处理分析大量的文本数据也是必不可少的工作. Quora有大量的文本数据,分布在Quora的数百万个问题、答案和评论中. 不仅如此,还有大量的元数据来补充我问答,包括”赞”和”踩”,用户对话题的兴趣或擅长与否,问题和话题的关系,话题去重合并,用户的社交和关系和影响力幅射,以及用户在Quora的每一个操作历史.

自然语言处理词向量化总结

- - 冰火岛
distributed representation 分布式表达(一类表示方法,基于统计含义),分散式表达(从一个高维空间X映射到一个低维空间Y) 分布假说(distributional hypothesis)为这一设想提供了 理论基础:上下文相似的词,其语义也相似.. 自然语言处理的基础是词向量化,即文本数值化,后面进行数据挖掘工作就和常见的任务类似,即分类,聚类等等.

自然语言处理之词性标注集

- - 标点符
词性标注(Part-of-Speech tagging 或POS tagging),又称词类标注或者简称标注,是指为 分词结果中的每个单词标注一个正确的词性的程序,也即确定每个词是名词、动词、形容词或其他词性的过程. 实词:名词、动词、形容词、状态词、区别词、数词、量词、代词. 虚词:副词、介词、连词、助词、拟声词、叹词.

自然语言处理第一番之文本分类器

- - 小石头的码疯窝
文本分类应该是自然语言处理中最普遍的一个应用,例如文章自动分类、邮件自动分类、垃圾邮件识别、用户情感分类等等,在生活中有很多例子,这篇文章主要从传统和深度学习两块来解释下我们如何做一个文本分类器. 传统的文本方法的主要流程是人工设计一些特征,从原始文档中提取特征,然后指定分类器如LR、SVM,训练模型对文章进行分类,比较经典的特征提取方法如频次法、tf-idf、互信息方法、N-Gram.

微信公众平台开发(二)--简单的聊天机器人

- - BlogJava-首页技术区
1.设置成为开发者模式 登录微信工作平台,选择高级功能-进入开发模式,成为开发者. URL配置的信息是指,微信的后台服务器把您的用户消息发送到该URL处理. Token是你和微信之间的一个密码,用来验证消息是否是从微信的服务发送而来,而不是其他来攻击你的系统. 现在你还不能设置,在设置时微信会GET请求你设置的URL,已检测接口是否可以使用.