北大青鸟中关村
用神经网络训练一个文本分类器
理解聊天机器人的工作原理是非常重要的。聊天机器人内部一个非常重要的组件就是文本分类器。我们看一下文本分类器的神经网络(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({\