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

内容发布更新时间 : 2024/5/3 20:06:30星期一 下面是文章的全部内容请认真阅读。

北大青鸟中关村

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

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

多层神经网络

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

?

这个算法输出一个分数而不是一个概率。我们可以使用概率来忽略特定阈值以下的预测结果。这类似于忽略收音机中的噪声。

? 这个算法从一个样本中学习一个分类中包含什么,而不是一个分类中不包含什么。一个分类中不包含什么的的学习模式往往也很重要。

北大青鸟中关村

? 不成比例的大训练集的分类将会导致扭曲的分类分数,迫使算法相对于分类规模来调整输出分数,这并不理想。

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

如果你刚接触人工神经网络,这是它的工作原理。 理解分类算法,请看这里。

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

1. 引用需要的库 2. 提供训练集 3. 整理数据

4. 迭代:编写代码+测试预测结果+调整模型 5. 抽象

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

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

# use natural language toolkitimport nltkfrom nltk.stem.lancaster importimport osimport json 1 # use natural language toolkit 2 import nltk

3 from nltk.stem.lancaster import LancasterStemmer 4 import os

北大青鸟中关村

5 import json 6 import datetime

7 stemmer=LancasterStemmer()

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

# 3 classes of training datatraining_data = []training_data.append({\training_data.append({\training_data.append({\ 1 # 3 classes of training data 2 training_data=[]

3 training_data.append({\4 training_data.append({\5 training_data.append({\

6 training_data.append({\7

8 training_data.append({\9 training_data.append({\10 training_data.append({\11 training_data.append({\12

13 training_data.append({\14 training_data.append({\15 training_data.append({\