美文网首页
rasa框架意图分类embedding算法

rasa框架意图分类embedding算法

作者: 233彭于晏 | 来源:发表于2019-05-20 11:05 被阅读0次

    算法模型
    intent_classifier_tensorflow_embedding
    点击此处获取算法代码


    算法框架

    算法框架

    算法思想
    把训练样本和意图编码到同一个向量空间,设计损失函数,使得样本与真实意图更相近,样本与其他意图更相反,意图之间编码更相反,达到意图分类的目的。
    举个例子说明,假设有两条训练样本“我要充话费”和“我要订机票”,有四个意图“订机票”、“查天气”,“充话费”,“查运势”,意图分类算法的目的就是把“我要充话费”分到“充话费”上,“我要订机票”分到“订机票”上。
    样本与真实意图更相近就对应“我要充话费”和“充话费”向量相似度更高,同理,“我要订机票”和“订机票”向量相似度更高;
    样本与其他意图更相反就对应“我要充话费”和“订机票”、“查天气”、“查运势”向量相似度更小;
    意图之间编码相反就对应“订机票”、“查天气”,“充话费”,“查运势”向量相似度更小。


    网络结构
    1、样本输入x
    输入层采用bag-of-word方式,只考虑词频,n_words是词汇表词语总数
    MLP有两个隐含层,采用relu激活函数,并配置 dropout和L2正则
    2、意图输入y
    输入层是意图数*意图数的方阵,对角线元素为1,其余为0,方阵的第一行是样本的真实意图,剩下行数是其他意图(负样本)
    3、embedding层
    样本输入和意图输入的embedding层维度均为20


    相似度计算
    向量相似度计算采用常见的余弦相似度。但是本算法计算两个相似度,一个是sim,即样本与意图之间的相似度;另一个是sim_emb,即意图之间的相似度。


    损失函数

    max_sim_neg = tf.reduce_max(sim[:, 1:], -1)
    max_sim_emb = tf.maximum(0., tf.reduce_max(sim_emb, -1))
    loss1 = tf.reduce_mean(tf.maximum(0., self.mu_pos - sim[:, 0]) +
                                      tf.maximum(0., self.mu_neg + max_sim_neg))
    loss = (loss1 +
                 # penalize max similarity between intent embeddings
                 tf.reduce_mean(max_sim_emb) * self.C_emb +
                 # add regularization losses
                 tf.losses.get_regularization_loss())
    

    损失函数定性理解,损失=样本与真实意图的相似度取反+样本与最相近的其他意图的相似度取正+真实意图与最相近的其他意图的相似度取正
    最小化损失相当于,训练过程中逐渐让样本的编码向量与真实意图的编码向量更相近,样本的编码向量与其他意图的编码向量更相反,不同意图之间的编码向量更相反。

    相关文章

      网友评论

          本文标题:rasa框架意图分类embedding算法

          本文链接:https://www.haomeiwen.com/subject/lnyhzqtx.html