首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >实现用于意图识别的文本分类神经网络

实现用于意图识别的文本分类神经网络

作者头像
机器学习AI算法工程
发布2019-10-29 09:56:36
1.7K0
发布2019-10-29 09:56:36
举报
了解聊天机器人(chatbots)的工作原理很重要。 聊天机器人的一个基本机制是利用文本分类器进行意图识别 。 我们来看一下人工神经网络(ANN)的内部工作原理。

在这个教程中,我们将使用2层神经元(1个隐层)和词袋(bag of words)方法来组织我们的训练数据。 文本分类的方法有三种 : 模式匹配 , 传统算法和神经网络 。 虽然使用多项朴素贝叶斯(Multinomial Naive Bayes)的算法出乎意料地有效,但它有三个基本缺陷:

  • MNB算法的输出是一个分值(score)而不是概率(probability)。 我们更希望得到一个概率,以便忽略低于某个阈值的预测。 这类似于VHF无线电中的“噪音抑制”机制。
  • MNB算法只能从分类的正例样本中学习模式,然而从分类的负例样本中进行学习也是非常重要的。
  • 不平衡的训练数据会导致NMB分类器的分值扭曲,迫使算法按照不同分类的数据集的大小来调整分值 。 这不是理想的方案。

与朴素(naive)相对应,文本分类器并不是试图理解一个句子的意思 ,而只是进行分类。理解这一点很重要, 实际上所谓的智能聊天机器人并不能真的理解人类的语言,不过这是另一回事 了。

要理解用于分类的传统算法,请参见此处 。

https://chatbotslife.com/text-classification-using-algorithms-e4d50dcba45

现在,让我们按以下步骤实现一个用于意图识别的文本分类神经网络:

  1. 选择技术栈
  2. 准备训练数据
  3. 预处理数据
  4. 迭代 :代码实现 + 测试 + 模型调整
  5. 抽象思考

本文完整源码 获取方式:

关注微信公众号 datayx 然后回复 意图识别 即可获取。

我们使用iPython Notebook,对于数据科学项目而言,它是一种超高效的工作方式。 代码开发语言是Python

我们使用NTLK进行自然语言处理。 首先需要一种方法将句子可靠地切分为单词(tokenize)并进行词干提取(stem):

我们的训练数据中,12个句子分别属于3类意图(intent):greetinggoodbyesandwich

现在我们进行数据预处理:

运行上面的代码,输出结果如下:

请注意,每个单词都转换为小写并进行了词干提取。 词干提取可以帮助机器理解havehaving是一样的。 另外,我们也不关心单词的大小写。

我们将训练数据中的每个句子转化为词袋(bag of words)表示:

下面是转换代码:

代码运行的输出结果如下:

机器学习的第一步是要有干净的数据。

接下来,我们实现这个2层神经网络的核心功能:

我们使用numpy,因为它可以快速进行矩阵乘法计算。

我们使用一个sigmoid函数作为神经元的激活函数。 然后,不断迭代并进行参数调整,直到错误率低到可接受。

下面的代码,实现了词袋处理并将输入句子转换为0、1数组。 这和我们对训练数据的转换完全匹配,这一点对于获得正确的结果是至关重要的。

现在我们来实现神经网络的训练函数来调整突触的权重。 不要太紧张,主要用到的知识就是中学数学中的矩阵乘法:

现在准备建立神经网络模型 ,我们将把网络中的突触权重保存到一个json文件,也就是我们的模型文件。

你可以尝试不同的梯度下降参数(alpha),来看看它是如何影响错误率的变化。 这个参数帮助我们的模型达到最低的错误率:

synapse_0 += alpha * synapse_0_weight_update

我们在隐层中只使用了20个神经元,因此比较容易进行调节。 这些神经元的连接突触权重将根据训练数据的大小和数值而变化,一个合理的错误率目标是小于10 ^ -3。

上面代码的运行结果是:

现在,synapse.json文件包含了网络中所有的突触权重, 这就是我们的模型。

一旦计算出突触权重,下面的classify()函数就是进行分类的核心:

现在我们可以预测一个句子属于某个分类的概率。 预测速度很快,因为它就是think()函数中的点积计算:

运行结果如下:

你可以尝试一些其他的句子,也可以添加训练数据来改进和扩展模型。

有些句子会产生多个预测(都超过指定的阈值)。 你需要根据具体的应用来设置正确的阈值。 并非所有的文本分类场景都是相同的: 有些场景需要比其他方案更高的置信度。

上面代码中最后的那个分类调用使用show_details参数展示了一些内部的实现细节:

注意这个句子的词袋表示,其中有两个单词可以我们的词库相匹配。 神经网络也从0中得到了学习,即那些与词库不匹配的单词。

很容易通过一个示例句子来展示低概率的分类预测,其中’a’(常用词)是唯一的匹配,例如:

现在你有了一个构建聊天机器人的基本工具,它能够处理大量的类 (意图),并适用于对有限或大量的训练数据进行分类。 也很容易在模型中添加一个或多个新的意图。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-02-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 机器学习AI算法工程 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
NLP 服务
NLP 服务(Natural Language Process,NLP)深度整合了腾讯内部的 NLP 技术,提供多项智能文本处理和文本生成能力,包括词法分析、相似词召回、词相似度、句子相似度、文本润色、句子纠错、文本补全、句子生成等。满足各行业的文本智能需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档