当前位置:   article > 正文

入门人工智能 ——使用 tensorflow 训练一个新闻分类模型(6)_tensorflow实现智能新闻推荐

tensorflow实现智能新闻推荐

入门人工智能 ——使用 tensorflow 训练一个新闻分类模型

人工智能(AI)和机器学习(ML)是密切相关但又有着明显区别的概念。人工智能旨在使机器或计算机表现出智能行为的能力,通常通过模拟人类的思维和行为方式来实现。与此不同,机器学习是使用算法和技术来训练机器或计算机,使其能够自动从数据中学习和改进自身的行为。

在构建一个新闻分类模型时,TensorFlow是一个常用的工具,用于开发和训练机器学习模型。TensorFlow是一个广泛使用的开源机器学习框架,可用于构建各种类型的模型,包括神经网络、决策树和深度学习模型等。通过使用TensorFlow,我们可以将收集到的新闻数据转化为一个预测模型,以协助自动识别新闻类别。

在构建新闻分类模型时,使用TensorFlow来开发和训练神经网络模型是非常常见的方法。神经网络模型类似于人类大脑的神经元,因此在进行新闻分类时,我们可以将新闻数据输入神经网络中,然后通过计算得到分类预测结果。

本文将介绍如何使用TensorFlow来训练一个新闻分类模型。我们将从数据准备开始,逐步构建模型,最后进行模型的训练和评估。

使用 tensorflow 训练一个新闻分类模型

由于新闻分类太多了,我这里用证券和非证券两种形式来训练

在这里插入图片描述

1. 安装TensorFlow和所需的依赖项。

pip install tensorflow
  • 1

2. 打开收集的新闻数据集

收集数据也要注意法律问题,不建议去使用爬虫爬取一些非法的数据。


# 第一部分:准备数据和环境
print("打开收集的新闻数据集")
# 打开一个存有数据的文件,里面是尽可能的去收集多一些的新闻数据
file = open("news.txt", "r", encoding="utf-8")  # "r" 表示只读模式
# 读取整个文件内容
content = file.read()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  1. 数据预处理

数据预处理(Data preprocessing)的目的是为了使原始数据经过一系列的转换和处理后,能够更加方便地被存储、分析和应用。在机器学习和深度学习领域,数据预处理是非常重要的一环。

通常包括以下几个方面:

  1. 文本清洗:对原始数据中的文本进行去除无关信息、去除停用词、去除标点符号、去除数字和特殊字符等操作,以提高后续处理的效果。
  2. 标记化:将原始数据中的类别信息转换为二进制编码,例如使用 one-hot 编码,使得类别信息能够被存储为数值型数据。
  3. 分词:将文本数据按照一定规则进行划分,将文本切分成一个个单独的词汇,以便后续的文本分析和处理。
  4. 词嵌入:将词汇转换为数值型数据,使得不同词汇之间能够进行加权比较。常用的词嵌入方法有 Word2Vec、GloVe 等。
  5. 数据增强:通过对原始数据进行一定程度的变换,使得模型在训练过程中能够从不同角度和形式的数据中学习到知识,提高模型的泛化能力。
  6. 数据合并:将多个数据集合并为一个数据集,使得模型在训练过程中能够从不同数据集的联合训练中学习到知识。
  7. 数据规范化:将数据缩放、归一化等操作,使得不同特征之间具有相似的尺度和范围,提高模型训练效果。
  8. 数据融合:将不同类型的数据进行融合,例如文本数据、图像数据、音频数据等,使得模型能够从不同领域和角度学习到知识。

本次重在基础学习,就没有做那么多,就是做一个数据的分割


print("数据预处理")

labels = []
texts =[]
datas = content.split("\n")

for data in datas:
    data = data.split("[fenge内容fenge]")
    labels.append(data[0])
    texts.append(data[1])


tokenizer = Tokenizer()
tokenizer.fit_on_texts(texts)
sequences = tokenizer.texts_to_sequences(texts)
word_index = tokenizer.word_index

X = pad_sequences(sequences)
y = tf.keras.utils.to_categorical(labels)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

构建模型

  1. 选择适当的神经网络架构。

Sequential()是Keras中的一个API,它用于创建一个神经网络模型,它将一个或多多个神经元连接到一起,然后将这些神经元连接到一起形成一个神经网络。Sequential()的API提供了多种不同的神经网络架构,包括简单的线性神经网络、多层感知器、自定义层等。

model = Sequential()
  • 1
  1. 构建文本分类模型的输入层和隐藏层。
model.add(Embedding(input_dim=len(word_index) + 1, output_dim=100, input_length=X.shape[1]))
model.add(LSTM(128))
  • 1
  • 2
  1. 添加输出层,选择适当的激活函数。
model.add(Dense(len(y[0]), activation='softmax'))
  • 1
  1. 编译模型:选择损失函数、优化器和性能指标。
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
  • 1

模型训练

  1. 划分数据集为训练集、验证集和测试集。

X_train, X_temp, y_train, y_temp = train_test_split(X, y, test_size=0.3, random_state=42)
X_val, X_test, y_val, y_test = train_test_split(X_temp, y_temp, test_size=0.5, random_state=42)
  • 1
  • 2
  • 3
  1. 使用TensorFlow的数据管道来加载和预处理数据。


train_dataset = tf.data.Dataset.from_tensor_slices((X_train, y_train)).batch(64)
val_dataset = tf.data.Dataset.from_tensor_slices((X_val, y_val)).batch(64)

  • 1
  • 2
  • 3
  • 4
  • 5
  1. 定义训练循环,包括批量训练和模型保存。

epochs = 10

for epoch in range(epochs):
    for batch_data, batch_labels in train_dataset:
        history = model.train_on_batch(batch_data, batch_labels)
    # 保存模型
    model.save('my_news_classification_model_tf.h5')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

模型评估

  1. 使用验证集评估模型性能,包括准确度、精确度、召回率等指标。
val_loss, val_accuracy = model.evaluate(val_dataset)
print(f'Validation loss: {val_loss}, Validation accuracy: {val_accuracy}')
  • 1
  • 2

保存模型

  1. 将模型保存为可部署的格式。
model.save('my_news_classification_model_tf.h5')
  • 1

完整构建训练模型的代码

# -*- coding: utf-8 -*-

import tensorflow as tf
from tensorflow.keras.preprocessing.text import Tokenizer
from tensorflow.keras.preprocessing.sequence import pad_sequences

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Embedding, LSTM, Dense

from sklearn.model_selection import train_test_split

# 第一部分:准备数据和环境
print("打开收集的新闻数据集")
# 打开一个存有数据的文件,里面是尽可能的去收集多一些的新闻数据
file = open("news.txt", "r", encoding="utf-8")  # "r" 表示只读模式
# 读取整个文件内容
content = file.read()


print("数据预处理:文本清洗、标记化、分词等。")

labels = []
texts =[]
datas = content.split("\n")

for data in datas:
    data = data.split("[fenge内容fenge]")
    labels.append(data[0])
    texts.append(data[1])


tokenizer = Tokenizer()
tokenizer.fit_on_texts(texts)
sequences = tokenizer.texts_to_sequences(texts)
word_index = tokenizer.word_index

X = pad_sequences(sequences)
y = tf.keras.utils.to_categorical(labels)

print("构建模型")

model = Sequential()
model.add(Embedding(input_dim=len(word_index) + 1, output_dim=100, input_length=X.shape[1]))
model.add(LSTM(128))
model.add(Dense(len(y[0]), activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])


print("构建训练")

X_train, X_temp, y_train, y_temp = train_test_split(X, y, test_size=0.3, random_state=42)
X_val, X_test, y_val, y_test = train_test_split(X_temp, y_temp, test_size=0.5, random_state=42)

train_dataset = tf.data.Dataset.from_tensor_slices((X_train, y_train)).batch(64)
val_dataset = tf.data.Dataset.from_tensor_slices((X_val, y_val)).batch(64)

epochs = 10

for epoch in range(epochs):
    for batch_data, batch_labels in train_dataset:
        history = model.train_on_batch(batch_data, batch_labels)
    # 保存模型
    model.save('my_news_classification_model_tf.h5')
 
print("模型评估")

val_loss, val_accuracy = model.evaluate(val_dataset)
print(f'Validation loss: {val_loss}, Validation accuracy: {val_accuracy}')

print("保存模型")

# 保存模型
model.save('news_classification_model_tf.h5')

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74

在这里插入图片描述

如果遇到需要安装的包就安装就行了。

训练结束后我们使用一下

使用模型输出结果

  1. 导入必要的库:

    • tensorflow:用于创建和训练深度学习模型。
    • load_model:从磁盘加载已保存的Keras模型。
    • Tokenizer:用于将文本数据转化为序列化的工具。
    • pad_sequences:用于将不同长度的文本序列填充到相同的长度。
  2. 加载预训练模型:使用load_model函数加载事先训练好的文本分类模型(假设已保存为’news_classification_model_tf.h5’文件)。

  3. 创建 Tokenizer 对象:创建一个Tokenizer对象,用于将文本数据转化为序列化的格式,以便输入模型。

  4. 准备新闻文本数据:定义了一个新的文本数据 new_text,这是您希望进行分类的文本。

  5. 对新文本进行预处理:首先,使用Tokenizer对象将新闻文本转化为整数序列(tokenization)。然后,使用pad_sequences函数将序列填充为模型所需的固定长度。

  6. 进行分类预测:使用加载的模型对新文本数据进行分类预测。model.predict 返回一个概率分布,其中每个类别对应一个概率。

  7. 处理预测结果:在多类别分类问题中,通常会选择具有最高概率的类别作为预测类别。在这里,使用np.argmax找到具有最高概率的类别的索引。

  8. 输出预测结果:打印出预测的类别编号。

import tensorflow as tf
from tensorflow.keras.models import load_model
from tensorflow.keras.preprocessing.text import Tokenizer
from tensorflow.keras.preprocessing.sequence import pad_sequences
import numpy as np

# 加载已保存的模型
model = load_model('news_classification_model_tf.h5')

# 创建 Tokenizer 对象并进行文本序列化
tokenizer = Tokenizer()

# 准备需要进行分类的新闻文本数据
new_text = "近日,摩根大通提高了对减肥药的销售额预期,预计到2030年,在诺和诺德和礼来制药的“双寡头”控制下,GLP-1受体激动剂相关药物的年销售额将超过1000亿美元。同时,摩根大通还预测,中国减重药物市场规模有望于2030年达到149亿美元。肥胖问题越来越受到人们的关注。根据《中国肥胖患病率及相关并发症:1580万成年人的横断面真实世界研究》报告指出,按照我国超重和肥胖的BMI分类标准,1580万成年受试者中超重人群占比34.8%,肥胖人群占比14.1%。假设按照目前中国14.2亿人口估算,约有4.94亿人超重,2亿人属于肥胖。而肥胖会引发高血压、高血脂等一系列疾病。国联证券表示,肥胖问题已经成为世界范围内的健康挑战,根据弗若斯特沙利文的统计数据显示,中国乃至全球的肥胖人数呈现持续增长的趋势。近年来全球减肥药市场规模年复合增长率达到10.7%,随着肥胖人数的增多以及居民的体重管理的意识的增强,减肥药市场潜在发展空间广阔。"

# 对新文本进行预处理,以使其与模型输入格式匹配
new_sequences = tokenizer.texts_to_sequences([new_text])
new_padded = pad_sequences(new_sequences, maxlen=len(new_sequences))

# 进行分类预测
predicted_probabilities = model.predict(new_padded)

# 对于多类别分类,您可能需要进一步处理输出
# 例如,取概率最高的类别作为预测类别
predicted_class = np.argmax(predicted_probabilities)

# 根据需要处理预测结果
print(f"预测类别编号:{predicted_class}")

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

在这里插入图片描述

**如果结果预测不准确,就需要扩大数据,训练更强的模型**

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/365598
推荐阅读
相关标签
  

闽ICP备14008679号