深度学习固然热络,但在垂直领域,我还是推崇规则匹配,垂直领域的正常问答中,不会超过10000条语句,那么规则其实能很好cover,准确率甚至能高达90%,累积了大数据,深度学习在这个时候就能很好提升模型精度,下面是对智能交互的总结。
智能交互总体框架
下面着重总结下自然语言理解(NLU)部分:
1. NLU分为两个部分:用户意图判定,属性结构化抽取
utterance 我想看刘德华的天下无贼
领域/意图判断 intent:video
属性抽取 明星:刘德华
电影名:天下无贼
NLU流程
2. 面临问题
a) 多样性,一句话表述方式多种多样,比如:刘德华的天下无贼,刘德华天下无贼,天下无贼刘德华
b) 鲁棒性,ASR导致错字,多字用户输入过程中,带犹豫性质的字词,“嗯”等;
c) 语言多义性,举例:“你好周杰伦”,是一首歌。
d) 上下文。
e) 语言知识的依赖。
3. 意图判断
a) 抽象成一个分类问题,那么就对应很多分类模型,比如SVM,CNN等,对于多样本量,建议采用CNN方法,垂直领域同时匹配规则算法。
b) 举例,天下无贼,一句话并不能简单判定这句话的领域,但依赖知识,知道这是一部电影,那么可以将它改写成,movie name,这样结合符号的embedding,与word2vector作为分类特征,效果会有所提升。可能会有疑问,如果通过知识已经知道这句话中包含的符号,是不是就可以判断这句话的领域了呢?如果输入是:你觉得孙俪漂不漂亮,应该是什么领域呢?
c) 以词作为输入,往往会出现,词表之外的词,所谓的Out of Vocabulary首先会想到使用固定向量或随机向量替代,最好的方式,同步更新词向量。参考FastText
d) 数据增强,缓解鲁棒问题,比如,在数据中自动加入写噪音。
4. 属性提取
方式一:
我 想 看 刘 德 华 的 天 下 无 贼
O O O B-actor B-actor I-actor O B-name I-name I-name I-name
方式二:
刘德华 的
O B-actor O B-name
问题本质是,序列标注问题,算法模型比较成熟的有:CRF、CNN、RNN、LSTM等,目前用的比较号的是:bilstm+crf,通过crf解码,解决了softmax局部最优的问题。
对方式一、二,的区别在于,是否分词,方式二依赖未登录词的分词结果。垂直领域建议训练自己的分词工具,而不是采用通用分词工具,其精度会大幅度提升,而方式一带来更多类别问题,从而对模型训练、数据有更高要求。
5. 上下文
a) 举例:“刘德华的”,既可以理解成刘德华的电影,也可以理解成刘德华的歌,它的理解需要基于上一句或上几句
每个领域对应一个属性模板,电影对应一个模板,音乐对应一个模板,每一个模板包括该领域事先设置的Slot,以及对应的Slot Value,电影模板如下:
b)方法:
1.上下文判断,抽象成是否属于上文领域的二分类模型,utterance输入之后,通过分类模型得到其领域意图;同时直接继承上文意图,做属性提取。抽取两种方式结果,训练分类模型,根据模型输出对应结果的置信度排序、选择。
2.根据意图完整型,通过属性提取后,填写领域属性模板,通过模板完整性(事先定义,比如电影领域只要个别领域非None,则完整)判断是否属于上一个意图领域。每一次并不需要全部填充模板,只满足完整性