行业报告 AI展会 数据标注 标注供求
数据标注数据集
主页 > 机器学习 正文

用神经网络训练一个文本分类器

理解聊天机器人的工作原理是非常重要的。聊天机器人内部一个非常重要的组件就是文本分类器。我们看一下文本分类器的神经网络(ANN)的内部工作原理。

 

多层神经网络

我们将会使用2层网络(1个隐层)和一个“词包”的方法来组织我们的训练数据。文本分类有3个特点:模式匹配、算法、神经网络。虽然使用多项朴素贝叶斯算法的方法非常有效,但是它有3个致命的缺陷:

  • 这个算法输出一个分数而不是一个概率。我们可以使用概率来忽略特定阈值以下的预测结果。这类似于忽略收音机中的噪声。
  • 这个算法从一个样本中学习一个分类中包含什么,而不是一个分类中不包含什么。一个分类中不包含什么的的学习模式往往也很重要。
  • 不成比例的大训练集的分类将会导致扭曲的分类分数,迫使算法相对于分类规模来调整输出分数,这并不理想。

和它“天真”的对手一样,这种分类器并不试图去理解句子的含义,而仅仅对它进行分类。事实上,所谓的“人工智能聊天机器人”并不理解语言,但那是。

如果你刚接触人工神经网络,这是它的。

理解分类算法,请看。

我们来逐个分析文本分类器的每个部分。我们将按照以下顺序:

  1. 引用需要的库
  2. 提供训练集
  3. 整理数据
  4. 迭代:编写代码+测试预测结果+调整模型
  5. 抽象

代码在这里,我们使用ipython notebook这个在数据科学项目上非常高效的工具。代码语法是python。

我们首先导入自然语言工具包。我们需要一个可靠的方法将句子切分成词并且将单词词干化处理。

下面是我们的训练集,12个句子属于3个类别(“意图”)。

 

现在我们可以将数据结构组织为:documentsclasses 和words.

 

注意每个单词都是词根并且小写。词根有助于机器将“have”和“having”等同起来。同时我们也不关心大小写。

我们将训练集中的每个句子转换为词包。

 

 

 

上面的步骤是文本分类中的一个经典步骤:每个训练句子被转化为一个包含0和1的数组,而不是语料库中包含独特单词的数组。

被词干化为:

然后转换为输入词包的形式:1代表单词存在于词包中(忽略问号?)

输出:第一类

 

注意:一个句子可以有多个分类,也可以没有。确保理解上面的内容,仔细阅读代码直到你理解它。

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

 

 

接下来我们的学习2层神经网络的核心功能。

如果你是人工神经网络新手,这里是它的工作原理

我们使用,原因是它可以提供快速的矩阵乘法运算。

 

 

我们使用sigmoid函数对值进行归一化,用其导数来衡量错误率。通过不断迭代和调整,直到错误率低到一个可以接受的值。

下面我们也实现了bag-of-words函数,将输入的一个句子转化为一个包含0和1的数组。这就是转换训练数据,得到正确的转换数据至关重要。

现在我们对神经网络训练函数进行编码,创造连接权重。别太激动,这主要是矩阵乘法——来自中学数学课堂。

 

我们现在准备去构建我们的神经网络模型,我们将连接权重保存为json文件。

你应该尝试不同的“α”(梯度下降参数),看看它是如何影响错误率。此参数有助于错误调整,并找到最低错误率:

synapse_0 += alpha * synapse_0_weight_update

 

我们在隐藏层使用了20个神经元,你可以很容易地调整。这些参数将随着于您的训练数据规模的不同而不同,将错误率调整到低于10 ^ – 3是比较合理的。

 

synapse.json文件中包含了全部的连接权重,这就是我们的模型

 

一旦连接权重已经计算完成,对于分类来说只需要classify()函数了:大约15行代码

备注:如果训练集有变化,我们的模型需要重新计算。对于非常大的数据集,这需要较长的时间。

现在我们可以生成一个句子属于一个或者多个分类的概率了。它的速度非常快,这是因为我们之前定义的think()函数中的点积运算。

 

你可以用其它语句、不同概率来试验几次,也可以添加训练数据来改进/扩展当前的模型。尤其注意用很少的训练数据就得到稳定的预测结果。

有一些句子将会产生多个预测结果(高于阈值)。你需要给你的程序设定一个合适的阈值。并非所有的文本分类方案都是相同的:一些预测情况比其他预测需要更高的置信水平

最后这个分类结果展示了一些内部的细节:

从这个句子的词包中可以看到,有两个单词和我们的词库是匹配的。同时我们的神经网络从这些 0 代表的非匹配词语中学习了。

如果提供一个仅仅有一个常用单词 ‘a’ 被匹配的句子,那我们会得到一个低概率的分类结果A:

现在你已经掌握了构建聊天机器人的一些基础知识结构,它能处理大量不同的意图,并且对于有限或者海量的训练数据都能很好的适配。想要为某个意图添加一个或者多个响应实在轻而易举,就不必多讲了。


微信公众号

声明:本站部分作品是由网友自主投稿和发布、编辑整理上传,对此类作品本站仅提供交流平台,转载的目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,不为其版权负责。如果您发现网站上有侵犯您的知识产权的作品,请与我们取得联系,我们会及时修改或删除。

网友评论:

发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
SEM推广服务

Copyright©2005-2028 Sykv.com 可思数据 版权所有    京ICP备14056871号

关于我们   免责声明   广告合作   版权声明   联系我们   原创投稿   网站地图  

可思数据 数据标注

扫码入群
扫码关注

微信公众号

返回顶部