使用Keras进行文本分类:Tokenizer与模型构建实践

使用Keras进行文本分类:Tokenizer与模型构建实践

【免费下载链接】asl-ml-immersion This repos contains notebooks for the Advanced Solutions Lab: ML Immersion 【免费下载链接】asl-ml-immersion 项目地址: https://gitcode.com/gh_mirrors/as/asl-ml-immersion

概述

本文将通过一个实际案例,介绍如何使用Keras构建文本分类模型。我们将从Hacker News标题数据集中提取文本特征,并使用不同的神经网络架构进行分类任务。这个项目展示了从数据准备到模型构建的完整流程,特别适合想要学习文本分类实践的开发者。

数据准备

从BigQuery获取数据

我们首先从BigQuery公共数据集中获取Hacker News的标题数据。通过SQL查询,我们可以筛选出符合条件的数据:

SELECT
    LOWER(REGEXP_REPLACE(title, '[^a-zA-Z0-9 $.-]', ' ')) AS title,
    ARRAY_REVERSE(SPLIT(REGEXP_EXTRACT(url, '.*://(.[^/]+)/'), '.'))[SAFE_OFFSET(1)] AS source
FROM
    `bigquery-public-data.hacker_news.full`
WHERE
    REGEXP_CONTAINS(REGEXP_EXTRACT(url, '.*://(.[^/]+)/'), '.com$')
    AND LENGTH(title) > 10
    AND (source = 'github' OR source = 'nytimes' OR source = 'techcrunch')

这个查询做了以下几件事:

  1. 从URL中提取源网站信息(github、nytimes或techcrunch)
  2. 清理标题文本,移除特殊字符
  3. 筛选长度大于10个字符的标题
  4. 只保留来自三个目标网站的标题

数据预处理

获取数据后,我们需要进行以下预处理步骤:

  1. 数据均衡:确保每个类别(github、nytimes、techcrunch)的样本数量大致相同
  2. 数据分割:将数据分为训练集和测试集
  3. 数据保存:将处理后的数据保存为CSV文件
# 保存完整数据集
title_dataset.to_csv(FULL_DATASET_PATH, header=False, index=False, encoding="utf-8")

# 创建并保存样本数据集
sample_title_dataset = title_dataset.sample(n=1000)
sample_title_dataset.to_csv(SAMPLE_DATASET_PATH, header=False, index=False, encoding="utf-8")

文本序列化与编码

使用Tokenizer处理文本

Keras的Tokenizer类可以将文本转换为数值序列,这是神经网络处理文本数据的关键步骤:

tokenizer = Tokenizer()
tokenizer.fit_on_texts(titles_df.title)

# 将文本转换为整数序列
integerized_titles = tokenizer.texts_to_sequences(titles_df.title)

关键指标计算:

  • VOCAB_SIZE:词汇表大小(唯一单词数量)
  • DATASET_SIZE:数据集大小(标题数量)
  • MAX_LEN:最长标题的长度(单词数量)

序列填充

由于神经网络需要固定长度的输入,我们需要将所有序列填充到相同长度:

def create_sequences(texts, max_len=MAX_LEN):
    sequences = tokenizer.texts_to_sequences(texts)
    padded_sequences = pad_sequences(sequences, maxlen=max_len, padding='post')
    return padded_sequences

标签编码

文本分类标签需要转换为数值形式。我们使用one-hot编码将类别标签转换为向量:

CLASSES = {"github": 0, "nytimes": 1, "techcrunch": 2}

def encode_labels(sources):
    classes = [CLASSES[source] for source in sources]
    one_hots = to_categorical(classes, num_classes=len(CLASSES))
    return one_hots

模型构建

嵌入层(Embedding Layer)

文本分类模型通常以嵌入层开始,它将整数标记转换为密集向量:

model = Sequential()
model.add(Embedding(input_dim=VOCAB_SIZE+1, output_dim=EMBEDDING_DIM))

三种模型架构

我们将探索三种不同的模型架构:

  1. DNN模型(词袋模型)

    • 平均词向量,忽略词序
    • 适合作为基线模型
  2. RNN模型

    • 使用GRU层捕捉序列信息
    • 适合处理顺序重要的文本
  3. CNN模型

    • 使用1D卷积层捕捉局部特征
    • 能识别有意义的n-gram模式

模型训练

训练过程中,我们可以使用以下回调函数:

  • EarlyStopping:在验证损失不再改善时停止训练
  • TensorBoard:可视化训练过程
callbacks = [
    EarlyStopping(monitor='val_loss', patience=2),
    TensorBoard(LOGDIR)
]

model.fit(
    X_train, y_train,
    epochs=EPOCHS,
    batch_size=BATCH_SIZE,
    validation_split=0.1,
    callbacks=callbacks
)

关键学习点

  1. 文本预处理:理解如何从原始文本数据创建适合神经网络处理的数值表示
  2. 序列处理:掌握文本序列的填充和截断技术
  3. 嵌入层:学习如何使用嵌入层将离散标记映射到连续向量空间
  4. 模型架构比较:体验不同神经网络架构在文本分类任务上的表现差异
  5. 实践技巧:掌握使用回调函数优化训练过程的方法

总结

本文详细介绍了使用Keras进行文本分类的完整流程,从数据获取、预处理到模型构建。通过这个项目,开发者可以掌握处理文本数据的关键技术,并了解不同神经网络架构在文本分类任务中的应用。这些技能可以扩展到更复杂的自然语言处理任务中。

【免费下载链接】asl-ml-immersion This repos contains notebooks for the Advanced Solutions Lab: ML Immersion 【免费下载链接】asl-ml-immersion 项目地址: https://gitcode.com/gh_mirrors/as/asl-ml-immersion

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值