聊天机器人的意图分类
Intent classification for Chatbot
我正在尝试制作一个聊天机器人,为此我必须执行两项主要任务
第一个是意图分类,另一个是实体识别,但我停留在意图分类上。基本上我正在为电子商务网站开发一个聊天机器人,我的聊天机器人有非常具体的用例,我的聊天机器人必须与客户就产品价格进行谈判,仅此而已。为了简单起见,我只考虑了 5 个意图。
- 询价
- 还价
- 谈判
- 成功
- 购买产品
为了根据这些意图训练分类器,我在我的小手写数据语料库上训练了一个朴素贝叶斯分类器,但是这些数据太多太少,无法训练一个好的分类器。我在互联网上搜索了很多,并查看了每个机器学习数据存储库(kaggle、uci 等),但找不到适合我这种特定用例的任何数据。你们能指导我在那种情况下我应该怎么做吗?如果我得到了我想要的大数据,那么我会尝试深度学习分类器,这对我来说会更好。
任何帮助将不胜感激。
from textblob.classifiers import NaiveBayesClassifier
import joblib # This is used to save the trained classifier in pickle format
training_data = [
('i want to buy a jeans pent', 'Buy_a_product'),
('i want to purchase a pair of shoes', 'Buy_a_product'),
('are you selling laptops', 'Buy_a_product'),
('i need an apple jam', 'Buy_a_product'),
('can you please tell me the price of this product', 'Buy_a_product'),
('please give me some discount.', 'negotition'),
("i cannot afford such price", 'negotition'),
("could you negotiate", "negotition"),
("i agree on your offer", "success"),
("yes i accepcted your offer", "success"),
("offer accepted", "success"),
("agreed", "success"),
("what is the price of this watch", "ask_for_price"),
("How much it's cost", "ask_for_price"),
("i will only give you 3000 for this product", "counter_offer"),
("Its too costly i can only pay 1500 for it", "counter_offer"),
]
clf = NaiveBayesClassifier(training_data)
joblib.dump(clf, 'intentClassifier.pkl')
这其实是一个很好的尝试深度学习的问题。您可能已经知道:语言模型是少数学习者 (https://arxiv.org/abs/2005.14165)
如果你对语言模型不熟悉,我可以在这里稍微解释一下。否则,您可以跳过此部分。
基本上,通过对未标记数据进行生成式预训练,NLP 领域取得了很大进展。一个流行的例子是 BERT。这个想法是,您可以在语言建模任务(例如下一个单词预测)上训练模型。通过在此类任务上进行训练,该模型将能够很好地学习“世界知识”。然后,当你想将该模型用于其他任务时,你不需要那么多带标签的训练数据。如果您有兴趣了解更多,可以看看这个视频 (https://www.youtube.com/watch?v=SY5PvZrJhLE)。
针对您的具体问题,我为您的应用程序改编了一个 colab(我为我的 UC class 准备的):
https://colab.research.google.com/drive/1dKCqwNwPCsLfLHw9KkScghBJkOrU9PAs?usp=sharing
在此 colab 中,我们使用 Google Research 提供的预训练 BERT,并对您标记的数据进行微调。微调过程非常快,大约需要 1 分钟。 colab 应该开箱即用,因为 colab 提供 GPU 支持来训练模型。实际上,我认为你们很多人需要手动生成更多样化的训练数据集,但我认为你们不需要拥有庞大的数据集。
我正在尝试制作一个聊天机器人,为此我必须执行两项主要任务 第一个是意图分类,另一个是实体识别,但我停留在意图分类上。基本上我正在为电子商务网站开发一个聊天机器人,我的聊天机器人有非常具体的用例,我的聊天机器人必须与客户就产品价格进行谈判,仅此而已。为了简单起见,我只考虑了 5 个意图。
- 询价
- 还价
- 谈判
- 成功
- 购买产品
为了根据这些意图训练分类器,我在我的小手写数据语料库上训练了一个朴素贝叶斯分类器,但是这些数据太多太少,无法训练一个好的分类器。我在互联网上搜索了很多,并查看了每个机器学习数据存储库(kaggle、uci 等),但找不到适合我这种特定用例的任何数据。你们能指导我在那种情况下我应该怎么做吗?如果我得到了我想要的大数据,那么我会尝试深度学习分类器,这对我来说会更好。 任何帮助将不胜感激。
from textblob.classifiers import NaiveBayesClassifier
import joblib # This is used to save the trained classifier in pickle format
training_data = [
('i want to buy a jeans pent', 'Buy_a_product'),
('i want to purchase a pair of shoes', 'Buy_a_product'),
('are you selling laptops', 'Buy_a_product'),
('i need an apple jam', 'Buy_a_product'),
('can you please tell me the price of this product', 'Buy_a_product'),
('please give me some discount.', 'negotition'),
("i cannot afford such price", 'negotition'),
("could you negotiate", "negotition"),
("i agree on your offer", "success"),
("yes i accepcted your offer", "success"),
("offer accepted", "success"),
("agreed", "success"),
("what is the price of this watch", "ask_for_price"),
("How much it's cost", "ask_for_price"),
("i will only give you 3000 for this product", "counter_offer"),
("Its too costly i can only pay 1500 for it", "counter_offer"),
]
clf = NaiveBayesClassifier(training_data)
joblib.dump(clf, 'intentClassifier.pkl')
这其实是一个很好的尝试深度学习的问题。您可能已经知道:语言模型是少数学习者 (https://arxiv.org/abs/2005.14165)
如果你对语言模型不熟悉,我可以在这里稍微解释一下。否则,您可以跳过此部分。 基本上,通过对未标记数据进行生成式预训练,NLP 领域取得了很大进展。一个流行的例子是 BERT。这个想法是,您可以在语言建模任务(例如下一个单词预测)上训练模型。通过在此类任务上进行训练,该模型将能够很好地学习“世界知识”。然后,当你想将该模型用于其他任务时,你不需要那么多带标签的训练数据。如果您有兴趣了解更多,可以看看这个视频 (https://www.youtube.com/watch?v=SY5PvZrJhLE)。
针对您的具体问题,我为您的应用程序改编了一个 colab(我为我的 UC class 准备的): https://colab.research.google.com/drive/1dKCqwNwPCsLfLHw9KkScghBJkOrU9PAs?usp=sharing 在此 colab 中,我们使用 Google Research 提供的预训练 BERT,并对您标记的数据进行微调。微调过程非常快,大约需要 1 分钟。 colab 应该开箱即用,因为 colab 提供 GPU 支持来训练模型。实际上,我认为你们很多人需要手动生成更多样化的训练数据集,但我认为你们不需要拥有庞大的数据集。