我们生活在一个数据驱动的社会,随着我们收集越来越多的数据,对事物进行分类变得越来越关键。因此,在这篇文章中,我们将根据新闻的类型对新闻头条进行分类。例如,体育新闻、科技新闻等等。
在本教程中,我们将处理包含新闻头条及其类别的数据。我们的目标是利用Python编程语言中的机器学习概念对新闻头条进行分类。
数据集的介绍
我们将使用一个包括新闻头条及其类别的数据集。在本教程中,我们将不深入讨论诸如如何进行网络刮削的细节。你可以从以下网站下载数据集这里然后把它放在你的工作目录中。
让我们进入我们将采取的步骤,用Python对新闻头条进行分类。请跟随本教程,了解整个过程。
1.导入模块/库
我们首先要导入我们要使用的不同模块。复制粘贴下面的代码片断,然后继续前进。
import tensorflow as tf
from tensorflow.keras import layers
from tensorflow.keras.models import Sequential
from tensorflow.keras.preprocessing.text import Tokenizer
from tensorflow.keras.preprocessing.sequence import pad_sequences
from sklearn.model_selection import train_test_split
import numpy as np
import pandas as pd
2.加载数据集
df = pd.read_csv('news_headlines.csv')
df.head(n=10)

前10行新闻头条
3.训练-测试分离
现在我们将使用80:20规则进行训练-测试分割,其中80%的数据用于训练,其余20%用于测试。
training_data,testing_data = train_test_split(df.iloc[:5000,:],test_size=0.2)
# 80% training data
为了使事情直观化,我们可以在下面提到的代码的帮助下,分别绘制训练和测试图。
import matplotlib.pyplot as plt
# plotting distribution of each news_category in training& testing data
plt.plot(training_data['news_category'].value_counts())
plt.plot(testing_data['news_category'].value_counts())
plt.title('Train-Test Split Visualization')
plt.show()

训练 测试 分割 新闻头条
4.符号化功能
这个函数非常简单,它发生在新闻标题数据的训练和测试过程中,并返回与它们相关的序列。
你可以参考这个教程来了解更多关于标记化过程的信息。
def tokenization_(training_headings, testing_headings, max_length=20,vocab_size = 5000):
tokenizer = Tokenizer(num_words = vocab_size, oov_token= '<oov>')
#Tokenization and padding
tokenizer.fit_on_texts(training_headings)
word_index = tokenizer.word_index
training_sequences = tokenizer.texts_to_sequences(training_headings)
training_padded = pad_sequences(training_sequences,padding= 'post',maxlen = max_length, truncating='post')
testing_sequences = tokenizer.texts_to_sequences(testing_headings)
testing_padded = pad_sequences(testing_sequences,padding= 'post',maxlen = max_length, truncating='post')
return tokenizer,training_padded,testing_padded
为了对训练和测试数据集应用标记化功能,我们需要运行下面提到的代码片段:
tokenizer,X_train,X_test = tokenization_(training_data['news_headline'],
testing_data['news_headline'])
labels = {'sports':[0,1,0],'tech':[1,0,0],'world':[0,0,1],}
Y_train = np.array([labels[y] for y in training_data['news_category']])
Y_test = np.array([labels[y] for y in testing_data['news_category'] ])
我们还将把news_headline和它们的标签分成不同的列表,因为它们将在模型中分别用于训练和测试目的。
5.构建神经网络
def build_model( n, vocab_size, embedding_size):
model = tf.keras.models.Sequential()
model.add(tf.keras.layers.Embedding(vocab_size,
embedding_size,input_length=n))
model.add(tf.keras.layers.GlobalAveragePooling1D())
model.add(tf.keras.layers.Dense(3,activation = 'softmax'))
model.compile(loss='categorical_crossentropy',optimizer='adam',
metrics='accuracy')
print(model.summary())
return model
上面的代码做了以下工作:
- 创建一个连续的模型
- 为顺序模型添加输入层和输出层
- 编译模型并在训练后显示模型的摘要
- 最后,返回训练后的模型
在这个模型中,我们将利用两层,第一层是嵌入层,第二层是输出层。
6.训练神经模型
epochs = 25
history = model.fit(X_train,Y_train,
validation_data = (X_test,Y_test),
epochs = epochs)
最初,我们将设置一个epochs值。你可以把它设置为你喜欢的任何值,对于这个模型来说,有25个epochs就足够了。接下来,我们将把我们的训练和测试数据装入神经模型。
该模型在训练数据集上的准确率为97%,在验证/测试数据集上的准确率为94%,这是非常好的,因此该模型工作得非常好。
总结
祝贺你!你刚刚学会了如何建立一个分类神经模型,以预测新闻头条的类别。希望你喜欢它!😇
谢谢您抽出时间!希望你能学到新的东西!!😄