keras深度学习实战——新闻文本分类(代码片段)

盼小辉丶 盼小辉丶     2022-12-04     804

关键词:

Keras深度学习实战(9)——新闻文本分类

0. 前言

在先前的应用实战中,我们分析了结构化的数据集,即数据集中包含变量及其对应实际输出值。但是现实式结构更多的数据是非结构化的,并没有预定义的数据模型,文本、图像和音频等均属于非结构化数据。在本项目实战中,我们将处理一个以文本作为输入的非结构化数据集,预期的输出是文本相关的分类主题。

1. 新闻文本分类任务与神经网络模型分析

1.1 数据集

Reuters (路透社)数据集是由路透社于 1986 年创建发布的文本分类数据集,其中包括了 46 种不同主题(即有 46 个分类类别)多个短新闻文本,已经成为许多文本分类算法的测试基准数据集。数据集中包含 8982 个训练样本和 2246 个测试样本。
本项目种使用 Keras 中内置的 Reuters 数据集,Keras 内置的数据集包含一些内置方法,包括识别前 n n n 个常用词以及将该数据集分为训练和测试数据集。

1.2 神经网络模型

本节的主要任务是使用 Reuters 数据集进行非结构化文本分析,将每则新闻文章都被分类为 46 种可能的主题之一,我们采用以下策略构建神经网络模型:

  • Reuters 数据集包含数千个不同的单词,我们需要考虑给定数量的单词来构造输入,即候选词;这样做的原因无需考虑所有单词,减少输入向量的长度:
    • 对于此实战任务,我们使用最常用的 10000 个单词;
    • 另一种常见的方法是考虑累积构成数据集中 80% 内容的单词,此方法可以确保排除数据集中数量较少的词;
  • 获取候选单词后,根据这些单词对输入文章进行独热编码;
  • 构造输入后,对输出标签同样进行独热编码;
  • 经过独热编码后,每个输入都是 10000 维向量,而输出是 46 维向量:
    • 将数据集分为训练和测试数据集;
    • 由于数据集较为复杂,为了更好的拟合数据,神经网络中包括多个隐藏层;
  • 在输出层使用 softmax 函数,以获得输入数据的类别概率;
  • 由于有多个可能的类别输出,因此使用多分类交叉熵损失函数;
  • 最后,编译并拟合该模型,在测试数据集上测量其准确率。

2. 使用神经网络进行新闻文本分类

接下来,我们将实现上述策略定义的神经网络模型。

  1. 首先,导入 Reuters 数据集:
from keras.datasets import reuters
(train_data, train_labels), (test_data, test_labels) = reuters.load_data(num_words=10000)

在前面的代码片段中,我们从 Keras 中可用的 reuters 数据集中加载了数据,我们仅考虑数据集中的前 10000 个最常见单词。

  1. 加载数据集后,我们来打印训练数据,检查数据集:
print(train_data[0])

加载的训练数据集的示例如下:

[1, 2, 2, 8, ... , 17, 12]

可以看到,先前输出中的数字表示输入文章中的单词索引,也可以调用 get_word_index() 方法获取 单词:索引 对字典:

word_index = reuters.get_word_index()
print(word_index)

以上代码,输出结果如下:

'mdbl': 10996,
 'fawc': 16260,
 'degussa': 12089,
 'woods': 8803,
 'hanging': 13796,
 'localized': 20672,
 'sation': 20673,
...

可以看到每个单词在数据集中对应的索引。我们可以反转键值对得到 索引:单词 对,然后使用此字典可以打印句子中包含的单词:

reverse_word_index = dict([(value, key) for (key, value) in word_index.items()])
print(reverse_word_index)
#30933: 'enahnce', 752: 'agreements', 20649: 'monoclonal', 9379: 'grieveson', 10063: 'emirate',... 
decoded_newswire = ' '.join([reverse_word_index.get(i - 3, '?') for i in train_data[0]])
print(decoded_newswire)

输出结果如下:

#? ? ? said as a result of its december acquisition of space co it expects earnings per share in 1987 of 1 15 to 1 30 dlrs per share up from 70 cts in 1986 the company said pretax net should rise to nine to 10 mln dlrs from six mln dlrs in 1986 and rental operation revenues to 19 to 22 mln dlrs from 12 5 mln dlrs it said cash flow per share this year should be 2 50 to three dlrs reuter 3
  1. 接下来构建向量化输入,通过以下方式将文本转换为向量:
  • 对输入的单词进行独热编码——在输入数据集中总共包含 10000 列,每个文章是一个长度为 10000 的数据;
  • 如果给定文本中的一个单词,则将对应于单词 索引 列的值设为 1,而其他列的值为 0,例如,文本中包含 woods,从第 2 步的输出可以看到 woods 对应的索引为 8803,因此该文本的第 8803 列为 1
  • 对文本中的所有单词重复上述步骤

例如,一个文本有两个不重复的单词,那么该文本对应的向量总共有两列的值为 1,而其余列的值为 0。

def vectorize_sequences(sequences, dimension=10000):
    results = np.zeros((len(sequences), dimension))
    for i, sequence in enumerate(sequences):
        results[i, sequence] = 1.
    return results

在前面的函数中,我们基于输入序列中存在的索引值初始化了一个零矩阵变量,并将单词相应索引处的值设为1。

  1. 接下来,使用上述函数将文本向量化。
x_train = vectorize_sequences(train_data)
x_test = vectorize_sequences(test_data)
  1. 将输出值进行独热编码:
from keras.utils.np_utils import to_categorical
one_hot_train_labels = to_categorical(train_labels)
one_hot_test_labels = to_categorical(test_labels)

以上代码将每个输出标签转换为长度为 46 的独热向量,其中 46 个值中只有一个为 1,其余为零,具体取决于标签的索引值。

  1. 定义模型并进行编译,在编译时,由于本项目种的输出中包含多个类别,因此将损失定义为 categorical_crossentropy
from keras.models import Sequential
from keras.layers import Dense

model = Sequential()
model.add(Dense(128, activation='relu', input_shape=(10000, )))
model.add(Dense(64, activation='relu'))
model.add(Dense(46, activation='softmax'))
model.summary()
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['acc'])

查看模型简要信息,输入结果如下,可以看到模型中包含 2 个隐藏层,分别具有 12864 个隐藏单元:

Model: "sequential"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
dense (Dense)                (None, 128)               1280128   
_________________________________________________________________
dense_1 (Dense)              (None, 64)                8256      
_________________________________________________________________
dense_2 (Dense)              (None, 46)                2990      
=================================================================
Total params: 1,291,374
Trainable params: 1,291,374
Non-trainable params: 0
_________________________________________________________________
  1. 拟合模型:
history = model.fit(x_train, one_hot_train_labels,
                    epochs=20,
                    batch_size=512,
                    validation_data=(x_test, one_hot_test_labels),
                    verbose=1)

训练后的模型,能够以近 80% 的准确率将输入文本分类为正确的主题,模型训练过程的损失和准确率变化情况如下所示:

小结

在本节中,我们学习了使用神经网络对非结构化数据进行处理,其中的关键步骤是将非结构化数据进行预处理,转化成神经网络可以接受的输入类型,在本任务中,我们将输入数据和输出数据都进行了独热编码,然后构建神经网络模型进行拟合。

系列链接

Keras深度学习实战(1)——神经网络基础与模型训练过程详解
Keras深度学习实战(2)——使用Keras构建神经网络
Keras深度学习实战(3)——神经网络性能优化技术
Keras深度学习实战(4)——深度学习中常用激活函数和损失函数详解
Keras深度学习实战(5)——批归一化详解
Keras深度学习实战(6)——深度学习过拟合问题及解决方法
Keras深度学习实战(7)——信用预测
Keras深度学习实战(8)——房价预测

深度学习实战案例:新闻文本分类(代码片段)

深度学习多分类案例:新闻文本分类公众号:机器学习杂货店作者:Peter编辑:Peter大家好,我是Peter~这里是机器学习杂货店MachineLearningGrocery~之前介绍过一个单分类的问题。当每个数据点可以划分到多个类别... 查看详情

深度学习100例|第43天:文本卷积神经网络(textcnn)新闻文本分类实战(代码片段)

...9;本文作者:微学AI、K同学啊🥇精选专栏:《深度学习100例》🔥推荐专栏:《新手入门深度学习》📚选自专栏:《Matplotlib教程》🧿优秀专栏:《Python入门100题》大家好,我是K同学啊!... 查看详情

keras深度学习实战(30)——使用文本生成模型进行文学创作(代码片段)

Keras深度学习实战(30)——使用文本生成模型进行文学创作0.前言1.文本生成模型与数据集分析1.1数据集分析1.2模型分析2.构建文本生成模型2.1数据预处理2.2模型构建与训练小结系列链接0.前言在情感分类任务中,神经... 查看详情

keras深度学习实战(39)——音乐音频分类(代码片段)

Keras深度学习实战(39)——音乐音频分类0.前言1.数据集与模型分析1.1数据集分析1.2模型分析2.歌曲流派分类模型2.1数据加载与预处理2.2模型构建与训练3.聚类分析小结系列链接0.前言音乐音频分类技术能够基于音乐内容为... 查看详情

keras深度学习实战——基于vgg19模型实现性别分类(代码片段)

Keras深度学习实战——基于VGG19模型实现性别分类0.前言1.VGG19架构简介2.使用预训练VGG19模型进行性别分类2.1构建输入与输出数据2.2模型构建与训练2.3模型错误分类示例相关链接0.前言在《迁移学习》中,我们了解了利用迁移学... 查看详情

keras深度学习实战——基于inceptionv3实现性别分类(代码片段)

Keras深度学习实战——基于Inceptionv3实现性别分类0.前言1.Inception结构1.1Inceptionv1损失函数1.2Inceptionv2和Inceptionv32.使用预训练的Inceptionv3模型实现性别分类2.1模型实现2.2错误分类的图片示例相关链接0.前言我们已经学习了基于VGG16和VG... 查看详情

keras深度学习实战(10)——迁移学习(代码片段)

Keras深度学习实战(10)——迁移学习0.前言1.迁移学习1.1迁移学习原理1.2ImageNet数据集介绍2.利用预训练VGG16模型进行性别分类2.1VGG16架构2.2微调模型2.3错误分类的图片示例小结系列链接0.前言在《卷积神经网络的局限性》... 查看详情

keras深度学习实战——基于resnet模型实现性别分类(代码片段)

Keras深度学习实战——基于ResNet模型实现性别分类0.前言1.ResNet架构简介2.基于预训练的ResNet50模型实现性别分类2.1训练性别分类模型2.2错误分类图像示例相关链接0.前言从VGG16到VGG19,最显著的变化在于网络层数的增加,通... 查看详情

keras深度学习实战(28)——利用单词向量构建情感分析模型(代码片段)

Keras深度学习实战(28)——利用单词向量构建情感分析模型0.前言1.模型与数据集分析1.1模型分析1.2数据集分析2.情感分析模型2.1使用CBOW模型获取单词向量2.2构建并训练情感分析模型小结系列链接0.前言在获取单词向量的相关博... 查看详情

keras深度学习实战——使用长短时记忆网络构建情感分析模型(代码片段)

Keras深度学习实战——使用长短时记忆网络构建情感分析模型0.前言1.构建LSTM模型进行情感分类1.1数据集分析1.2模型构建2.构建多层LSTM进行情感分类相关链接0.前言我们已经学习了如何使用循环神经网络(Recurrentneuralnetworks,RNN)构建... 查看详情

深度学习实战keras构建cnn神经网络完成cifar100类别分类(代码片段)

Keras构建CNN神经网络完成CIFAR100类别分类1.CIFAR100数据集介绍2.API使用3.步骤分析以及代码实现(缩减版LeNet5)4.完整代码1.CIFAR100数据集介绍这个数据集就像CIFAR-10,除了它有100个类,每个类包含600个图像。,每类各有500个... 查看详情

keras深度学习实战(38)——图像字幕生成(代码片段)

Keras深度学习实战(38)——图像字幕生成0.前言1.模型与数据集分析1.1数据集分析1.2模型分析2.实现图像字幕生成模型2.1数据集加载与预处理2.2模型构建与训练3.使用束搜索生成字幕3.1束搜索原理3.2利用束搜索改进预测结... 查看详情

keras深度学习实战(41)——语音识别(代码片段)

Keras深度学习实战(41)——语音识别0.前言1.模型与数据集分析1.1数据集分析1.2模型分析2.语音识别模型2.1数据加载与预处理2.2模型构建与训练小结系列链接0.前言语音识别(AutomaticSpeechRecognition,ASR,或称语音转录文本)... 查看详情

keras深度学习实战(32)——基于lstm预测股价(代码片段)

Keras深度学习实战(32)——基于LSTM预测股价0.前言1.模型与数据集分析1.1数据集分析1.2模型分析2.基于长短时记忆网络LSTM预测股价2.1根据最近五天的股价预测股价2.2考虑最近五天的股价和新闻数据小结系列链接0.前言股价... 查看详情

nlp——天池新闻文本分类task4:fasttext深度学习(代码片段)

NLP——新闻文本分类:TASK3深度学习FasttextFasttext是一种深度学习词向量的表示方法,它是一种三层神经网络,包含输入层,隐含层和输出层。模型架构:fastText模型输入一个词的序列(一段文本或者一句话),输出这个词序列属于... 查看详情

datawhale-新闻文本分类-task4-基于深度学习的文本分类1-fasttext(代码片段)

1.fasttext参数含义-input#trainingfilepath(required)训练文件路径(必须)<br>-lr#learningrate[0.1]学习率default0.1<br>-dim#sizeofwordvectors[100]词向量维度default100<br>-ws#sizeofthecontextwindow[5]上下文窗口大小d 查看详情

keras深度学习实战——使用循环神经网络构建情感分析模型(代码片段)

Keras深度学习实战——使用循环神经网络构建情感分析模型0.前言1.使用循环神经网络构建情感分析模型1.1数据集分析1.2构建RNN模型进行情感分析相关链接0.前言在《循环神经详解与实现》一节中,我们已经了解循环神经网络(Recurr... 查看详情

keras深度学习实战(19)——使用对抗攻击生成可欺骗神经网络的图像(代码片段)

Keras深度学习实战(19)——使用对抗攻击生成可欺骗神经网络的图像0.前言1.对抗攻击简介2.对抗攻击模型分析2.1模型识别图像流程2.2对抗攻击流程3.使用Keras实现对抗攻击小结系列链接0.前言近年来,深度学习在图像... 查看详情