最近刚刚把垃圾文本分类做完,接着又去研究意图识别,可以看做是分类完之后的后续处理,通过这篇文章记录下自己的学习经历。
1:意图识别要做啥?
最近在写文档的时候,写不出来的时候就回去看看需求,一定反复强调需求是什么,而技术也类似,我们一定要想明白技术要替我们解决什么。拿文本进行举例,我们看到有用户给我们一句话:“我想听德云社的相声”,那我们其实可以姑且将其意图归类于影音需求,别看将其归归类是个很简单活,但是这会对很多NLP应用带来很多的提升,比如在我们熟悉的搜索,我们搜索的时候如果涉及到一条信息对应多个分类的时候,这样搜索结果会比较差,但是如果我们通过意图识别发现用户是个游戏迷,我们就可以在用户搜索时将游戏的搜索结果优先返还给用户,这本身也是很有意义的一件事。
2:意图识别的方法
因为意图识别本身也是一个分类问题,其实方法和分类模型的方法大同小异。
常用的有:
1:基于词典模板的规则分类
2:基于过往日志匹配(适用于搜索引擎)
3:基于分类模型进行意图识别
这三种方式基本上是目前比较主流的方法,现在进行意图识别的难点主要是两点,一点是数据来源的匮乏,因为方法已经比较固定,基本都是有监督学习,需要很多的标记数据,现在我们常用的数据要么就是找专业标记团队去买(我们是自己标记的,很恶心。。),要么就是自己去爬,这方面还是很麻烦的。第二点是尽管是分类工作,但是意图识别分类种类很多,并且要求的准确性,拓展性都不是之前的分类可比的,这一点也是很困难的。
这次的思路是使用CNN+softmax进行分类,不同于传统的如SVM,决策树等传统的分类方法,
CNN对于长文本的分类效果还是不错的,但是在短文本上相较RNN还是有一些差距。
基本的思路与下图所述的论文相似:
既然CNN比不上RNN,为什么还是选取了CNN,我的想法是文本分词后一般会有粒度和语义的矛盾,粒度太大,分词效果不好,粒度太小,语义丢失,而CNN核心过程是卷积,我们可以通过CNN的卷积将分完词之后的词的语义结合在一起,从而获得更加准确的词向量。
现在说说这篇论文:
这篇论文的网络结构如下:
基本的结构为:输入层->第一层卷积层->池化层->全连接层+softmax层
现在也在进一步的尝试中,目前还有几个小trick:
1:是否可以使用字向量代替词向量?
2:输入的词向量是否可以多换几种表述方式?
这几个小trick等研究之后再来更新一下,我也是在学习中,大家如果有好的建议也请多多指教。
最后参考文献:
1:http://www.aclweb.org/anthology/D14-1181
2:https://arxiv.org/abs/1510.03820
第二篇文章是对第一篇文章的进一步研究以及调参建议,都挺有意思。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。