使用Word2vec实现文本分类

>- **🍨 本文为[🔗365天深度学习训练营](https://mp.weixin.qq.com/s/AtyZUu_j2k_ScNH6e732ow) 中的学习记录博客**
>- **🍖 原作者:[K同学啊 | 接辅导、项目定制](https://mtyjkh.blog.csdn.net/)**
>- **🚀 文章来源:[K同学的学习圈子](https://www.yuque.com/mingtian-fkmxf/zxwb45)**

Word2Vec使用神经网络来学习词向量。这个神经网络通常是一个浅层的前馈神经网络,其中隐藏层的权重矩阵就是学到的词向量。

Word2Vec的主要思想是通过训练,使得具有相似语境的词在向量空间中彼此接近。这样,我们可以通过比较词向量之间的距离来衡量它们之间的语义相似性。例如,具有相似含义的词在词向量空间中距离较近,如 "king" 和 "queen"。

浅看一下数据集:

导入库 构造迭代器:

def custom_data_iter(texts, labels)::这行代码定义了一个名为 custom_data_iter 的函数,它接受两个参数,即输入文本(texts)和标签(labels)。

for x, y in zip(texts, labels)::这行代码通过使用 zip 函数,开始一个循环,依次迭代 textslabels 中的元素对。x 将取自 texts,而 y 将取自 labels

yield x, yyield 关键字用于将函数转变为生成器。在循环的每次迭代中,它生成一个包含当前来自 textslabels 的值的元组 (x, y)。这样可以逐一处理数据,而不必将整个数据集加载到内存中。

构建词典:

vector_size 是特征向量的维度 默认100

min_count 忽略少于min_count的词

文本向量化:

  1. average_vec 函数:这个函数接收一个文本 text,然后遍历其中的每个单词,尝试从 Word2Vec 模型 w2v 中获取对应的词向量,将这些词向量相加以计算平均向量。如果单词不在模型中,会跳过(通过捕获 KeyError 异常)。

  2. x_vec = np.concatenate([average_vec(z) for z in x]):这一行代码使用列表解析,对输入的文本列表 x 中的每个文本应用 average_vec 函数,然后使用 np.concatenate 将这些平均向量连接成一个大的特征矩阵 x_vec

  3. w2v.save('data/w2v_model.pkl'):最后保存了 Word2Vec 模型为一个文件 'data/w2v_model.pkl'。

转换格式:

使用之前定义的自定义数据迭代器 coustom_data_iter,将特征矩阵 x_vec 和标签 y 组成一个迭代器 train_iter,用于训练模型。

创建了一个包含标签名称的列表 label_name,通过将 train_data[1] 的唯一值转换为集合,然后再转换为列表,目的是为了创建一个标签的索引。

数据加载器:

使用 PyTorch 的 DataLoader 创建一个数据加载器 dataloader,用于加载数据批次。参数包括:

  • train_iter: 你之前定义的自定义数据迭代器。
  • batch_size=8: 每个批次包含的样本数为 8。
  • shuffle=False: 不进行数据洗牌,保持输入数据的顺序。
  • collate_fn=collate_batch: 使用之前定义的 collate_batch 函数来对批次进行处理。

构建模型:

尝试了一个RNN 模型

模型初始化:

训练,损失函数:

  1. model.train() 这个方法将模型切换到训练模式。在训练模式下,启用了一些特性,比如 dropout 和 batch normalization。在模型中的训练和评估时,使用 model.train()model.eval() 可以确保正确的模式切换。

  2. optimizer.zero_grad() 在每个训练步骤开始时,这个方法用于将模型参数的梯度清零。在 PyTorch 中,梯度在反向传播过程中会被累积,因此需要在每个步骤开始时清零以避免重复计算。

  3. loss.backward() 这个方法执行反向传播,计算模型参数相对于损失的梯度。梯度计算后,可以通过优化器进行参数更新。

  4. torch.nn.utils.clip_grad_norm_() 这个方法用于梯度裁剪,防止梯度爆炸的问题。通过限制梯度的范数,可以稳定训练过程。

训练模型:

测试数据:

总结:

  1. 数据加载和处理:使用 Pandas 加载和处理数据,使用自定义的数据迭代器,

  2. 词嵌入: 实现了 Word2Vec 词嵌入,

  3. 神经网络模型: 创建了一个简单的神经网络模型,用于文本分类任务

  4. 训练循环: 实现了训练循环,包括计算损失、反向传播、梯度裁剪以及优化器的更新。

  5. 学习率调度器: 使用了学习率调度器,有助于优化训练过程中的学习率。调整学习率对训练的收敛和性能有重要影响。

  6. 评估和测试: 实现了模型在验证集上的评估,并在训练完成后进行了测试。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值