使用Word2vec实现文本分类
Word2Vec的主要思想是通过训练,使得具有相似语境的词在向量空间中彼此接近。例如,具有相似含义的词在词向量空间中距离较近,如 "king" 和 "queen"。>- **🍨 本文为[🔗365天深度学习训练营](https://mp.weixin.qq.com/s/AtyZUu_j2k_ScNH6e732ow) 中的学习记录博客**这个神经网络通常是一个浅层的前馈神经网络,其中隐藏层的权重矩
>- **🍨 本文为[🔗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 函数,开始一个循环,依次迭代 texts 和 labels 中的元素对。x 将取自 texts,而 y 将取自 labels。
yield x, y:yield 关键字用于将函数转变为生成器。在循环的每次迭代中,它生成一个包含当前来自 texts 和 labels 的值的元组 (x, y)。这样可以逐一处理数据,而不必将整个数据集加载到内存中。
构建词典:

vector_size 是特征向量的维度 默认100
min_count 忽略少于min_count的词
文本向量化:

-
average_vec函数:这个函数接收一个文本text,然后遍历其中的每个单词,尝试从 Word2Vec 模型w2v中获取对应的词向量,将这些词向量相加以计算平均向量。如果单词不在模型中,会跳过(通过捕获KeyError异常)。 -
x_vec = np.concatenate([average_vec(z) for z in x]):这一行代码使用列表解析,对输入的文本列表x中的每个文本应用average_vec函数,然后使用np.concatenate将这些平均向量连接成一个大的特征矩阵x_vec。 -
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 模型
模型初始化:

训练,损失函数:

-
model.train(): 这个方法将模型切换到训练模式。在训练模式下,启用了一些特性,比如 dropout 和 batch normalization。在模型中的训练和评估时,使用model.train()和model.eval()可以确保正确的模式切换。 -
optimizer.zero_grad(): 在每个训练步骤开始时,这个方法用于将模型参数的梯度清零。在 PyTorch 中,梯度在反向传播过程中会被累积,因此需要在每个步骤开始时清零以避免重复计算。 -
loss.backward(): 这个方法执行反向传播,计算模型参数相对于损失的梯度。梯度计算后,可以通过优化器进行参数更新。 -
torch.nn.utils.clip_grad_norm_(): 这个方法用于梯度裁剪,防止梯度爆炸的问题。通过限制梯度的范数,可以稳定训练过程。
训练模型:

测试数据:

总结:
-
数据加载和处理:使用 Pandas 加载和处理数据,使用自定义的数据迭代器,
-
词嵌入: 实现了 Word2Vec 词嵌入,
-
神经网络模型: 创建了一个简单的神经网络模型,用于文本分类任务
-
训练循环: 实现了训练循环,包括计算损失、反向传播、梯度裁剪以及优化器的更新。
-
学习率调度器: 使用了学习率调度器,有助于优化训练过程中的学习率。调整学习率对训练的收敛和性能有重要影响。
-
评估和测试: 实现了模型在验证集上的评估,并在训练完成后进行了测试。
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐

所有评论(0)