如何快速实现浅层语义解析

来源:互联网 发布:淘宝退货业务流程图 编辑:程序博客网 时间:2024/05/29 03:45

如何快速实现浅层语义解析

写在前边

实现简单的语义解析,并没有想象的那么难,其实简单的语义模版匹配比深度学习算法还要有效。自从今年4月,实习公司的新版产品加入了AI功能,需要解析自然语言的意图,实现垂类搜索,为了满足新产品需求,我开始接触人工智能和自然语言处理的相关内容。之前在学校学过很多机器学习的知识,传统的SVM,logistis,naive bayes等算法以及最近比较火的CNN,RNN等深度学习算法都有一些了解。但是感觉比不是能很好的完成产品需求。

问题分析

产品的需求是,用户会输入一句话,因为是输入时用户的对话,一句不会太长,包含的关键信息不会太多,我们要解析用户当前对话是什么意图,这里是产品定义的我们业务领域内的几个意图。我认为意图区分主要是根据当前对话,当然也要考虑上下文关系。

机器学习应用设想

经过问题分析我们感觉到,所谓意图分析就是一个短文本多分类问题,根据当前对话语句,确定用户的意图,如果应用机器学习算法,首先的问题是对文本的特征提取,因为是短文本,经过去停用词等处理后,剩下的就是10个词左右,所以很适合用word2vec进行特征提取,这里说明一下,因为我们是一个垂直领域的语义解析和搜索,所以对word2vec 的训练可以采用我们领域的训练集,这样首相保证了我们用到的词可能会全部覆盖到,其次也会对本领域内的词特征更有指向性。把句子中每个词向量进行联接就得到了这个句子的特征矩阵。得到文本特征,下面就可以应用各种分类算法了。但是我们会发现,其实每句文本的指向性本身就不强,每个人的表达又是各具特点,很多个人特色的语言风格对于学习算法来说都是很大噪声,另外一个很大的问题是,很多的词语都不能找到大量文本训练集来通过word2vec 提取词向量,比如,我们需要全北京的小区名称等这类的专有名词,这就很麻烦,很难有文本训练集包含所用小区名,所以很多小区名根本就没有得到词向量,所以算法准确度很难保证。在工程中使用价值并不是很好。

我们的解决办法

经过机器学习算法的探索,我们并不满意算法效果,于是乎想到了通过定义模版的方法来解决问题,每个意图的区分只需要检测一些关键词的固定搭配即可实现。当然对于有些词的搭配也会存在意图模糊的情况,这样的情况我们可以给不同的意图打个分。可以根据上下文进行优选。
对于匹配模版的设置,重点就是这只优先级和存储结构了,优先级肯定是根据业务逻辑定的,存储结构可以制定模版树,这些逻辑就完全得看具体业务了。

结果总结

根据模版匹配的得到的分类结果,效果是很好的,问题是模版不一定很严谨,会有很多情况没考虑到,所以需要不断测试不断补充,使效果不断提高。相比于机器学习算法,这种模板匹配的效率也很高,而且不需要前期的学习。总体来说,得到的效果还是很喜人的,虽然理论依据不够充分,但真的是不错的工程实践方法。

源码地址:https://github.com/ZuochaoLee/houseAiApi.git

0 0
原创粉丝点击