聊天机器人的意图识别

时间:2024-04-02 10:39:48

标题意图识别

目前聊天机器人的重要一部分就是识别用户的意图。
比如,

  1. 帮我预定晚上的餐馆 -> 餐馆预定
  2. 明天天气如何 -> 天气查询

但由于语言的复杂性,用户通常会使用各式各样的表达方式,比如

  • 明天天气如何? = 明天会晴天还是阴天?

上边两种表述其实都是对天气状况的查询。 Chatbot需要识别出这类近似表达,从而准确的判断出用户的实际意图,为后续的处理(NER, 对话管理)奠定基础。

常见的意图识别方法

在神经网络的兴起前,BOW(Bag-of-words), N-Gram, TFIDF等基于词频统计的手段,通常用于句子的向量表示。再通过某些分类算法(SVM, Adaboost, Random Forest)对句子进行分类。
这种手段最大的问题是忽视了词语间的关联和词语本身的理解。

2013年,Google的Mikolov, Tomas发布了Word2Vec算法(Efficient Estimation of Word Representations in Vector Space),用于对词进行Word Embeding. 将训练集中的词语映射到一个高维空间里。在这个空间里,词语的距离远近能反应出词语本身的相似程度。更神奇的是,词向量本身的加减可以进行含义的转换。

聊天机器人的意图识别

聊天机器人的意图识别

当然它本身还存在一些缺点,比如无法处理异义词。但Word2Vec以及后续的GloVe, FastText极大的推动了NLP的发展。

意图识别准确性比较

目前我比较了4个常见的方法。

  1. Simple sum of wordembeding, 基于GloVe的词向量进行简单求和得到句子向量
  2. Facebook InferSent. Facebook出的句向量表示。
  3. TF-IDF. 基于传统的TF-IDF
  4. Semhash, Subword Semantic Hashing for Intent Classification on Small Datasets

聊天机器人的意图识别

准确性统计

聊天机器人的意图识别

你可以获取所有的测试代码从github

结论

简单对词向量进行累加,能很好的反应句子本身的意义,至少从分类角度。但这个仍然是个黑盒,欠缺理论解释。