意图识别是搜索场景中必需的模块,它主要是针对用户的输入 Query 进行信息分类,进而针对输入的意图进行下一步的合理操作。意图识别的方法从基于规则模板到基于统计的方法,再到机器学习最后到当前的深度学习方法进化。
使用场景
意图识别除了是搜索引擎的标配,也是问答系统的必要环节。
搜索场景
在搜索系统中,搜索“如何做韭菜鸡蛋馅饺子”,主要意图是“做饺子”,而不是“做韭菜鸡蛋”,search 要以“做饺子”为核心。
问答系统场景
在问答系统中,用户问“我要买北京到首尔的机票”,意图是“买机票”,然后再在“买机票”这个领域继续去做语义识别。
方法进化史
意图识别是一个分类问题,其方法也都是围绕如何分类。
基于词典的规则模板分类
主要是通过分词、词性及正则表达式来构造模板。
但是,这种方法有很大的缺点:
- 人工工作量大,且比较难抽象;
- 通过规则覆盖率小,且易出现 bad case;
- 没有泛化能力,不适合通用领域,可以适用垂直领域。
基于统计的分类方法
通过相关的行为日志,根据相应的词频及后续行为进行分类,如搜索场景中,根据 query 对应的后续行为的统计进行分类。
该方法相比较基于规则的方式更具实战效果,但是也有很明显的缺点:
- 覆盖面比较广,但是对于长尾词容易出现识别错误;
- 对新的 query 无法正确识别,缺乏泛化能力。
基于机器学习的方法
传统机器学习方法,需要事先对数据进行人工标注,再进行分词,再结合如卡方检验等特征提取方法,然后再进行特征向量化,最后运用如 SVM、决策树等分类方法进行训练模型。
通过机器学习方法得到的模型,相比于传统的规则及统计的方式,更具代表性,泛化能力,但也存在着缺陷:
- 需要做一些特征提取等特征工作;
- 模型具有一定的泛化能力,但是鲁棒性有待挺高。
基于深度学习的方法
近年来随着深度学习的发展,文本分类问题也得到了很多解决方案,其中意图识别就可以理解成深度学习中的文本分类问题,其中比较代表性就是 2014 年发表的 TextCNN 算法,它将卷积神经网络算法应用在了文本处理上得到了比较好的效果。关于 TextCNN 的意图识别更多内容参照 TextCNN 原理及文本分类任务等详解,通俗易懂附源码。