介绍
在大型语言模型时代,有毒提示的存在是一个令人担忧的问题。有毒内容会对用户的心理健康产生不利影响并破坏健康的讨论。要在互联网上创建一个安全和包容的环境,有效识别和缓解此类环境至关重要。
该项目旨在开发一个多标签恶意评论分类模型,该模型可以将文本分类为不同级别的恶意评论,例如“有毒”、“严重有毒”、“淫秽”、“威胁”、“侮辱”和“身份仇恨”。我利用一个公开可用的数据集,它提供了大量的维基百科评论,这些评论被人类评分者标记为有毒行为,提供了各种文本数据来训练模型。
从商业角度来看,该项目为在线平台、社交媒体网站和聊天机器人提供了一个有价值的解决方案,这些解决方案致力于培养健康的社区并为用户维护积极的环境。一个可靠的有毒文本分类模型可以帮助调节用户生成的内容,过滤掉攻击性评论,并及时对参与滥用行为的用户采取行动。通过解决在线对话中的有害问题,公司可以提高用户满意度、减少流失并建立值得信赖的品牌形象。
该项目旨在建立一个多标签分类模型,该模型可以作为分析在线毒性和培育健康在线社区的基础,这是一种现实世界的影响。
分析
在深入模型构建过程之前,探索和理解我们正在使用的数据至关重要。在本节中,我将分析数据集的字数和标签分布,这将提供对内容性质的理解,并帮助我们在设计模型时做出更好的决策。
为了了解数据集中评论的长度,我首先在清理和预处理文本后计算每条评论的字数。然后绘制直方图以可视化训练和测试数据集的字数分布。
字数分布——训练数据集
在训练数据集中,发现 96.4% 的评论少于 170 个单词。在测试数据集中观察到类似的模式。
字数分布——测试数据集
这些图显示大多数评论都比较短,只有极少数评论包含过多的单词。在为模型设置序列长度时,此观察可以指导决策。
接下来,我检查了训练数据集中现有标签的分布:toxic、severe_toxic、obscene、threat、insult 和 identity_hate。然后绘制条形图以可视化每个标签的计数。
列车标签分配
标签分布图显示数据集是不平衡的,某些标签(例如“有毒”、“淫秽”和“侮辱”)比其他标签(例如“威胁”和“身份仇恨”)出现得更频繁。这种不平衡可能会在训练模型时带来挑战,因为模型可能难以学习与代表性不足的标签相关的模式。在改进部分,我将指出解决此问题和提高模型性能的关键策略。
方法
在这个项目中,我采用了一些技术来处理文本数据、创建合适的模型架构并训练模型。以下是所涉及的主要步骤的概述:
- 文本预处理: 使用一系列步骤对原始文本数据进行预处理,以清理文本并将其转换为适合神经网络模型的格式。这些步骤包括:
- 过滤掉 URL 并将其替换为占位符。
- 将文本转换为小写。
- 将文本标记为单词。
- 删除停用词、标点符号和数字。
- 根据词性 (POS) 标签对单词进行词形还原。
- GloVe Embeddings: 使用预训练的GloVe嵌入将文本数据中的词转换为词向量。GloVe 嵌入捕获词之间的语义含义和关系,这有助于提高模型的性能。嵌入矩阵是使用 100 维 GloVe 嵌入文件创建的,生成的矩阵用作模型嵌入层的输入权重。
- 神经网络架构: 模型架构使用了基于长短期记忆 (LSTM)的神经网络。LSTM 是一种循环神经网络 (RNN),可以有效地捕获文本数据中存在的顺序信息和长期依赖关系。
该模型由以下层组成:- 一个输入层,它采用标记化和填充的文本序列。
-使用预训练的 GloVe 嵌入的嵌入层。 - 一个具有 128 个单元的LSTM层来处理顺序信息。
-具有6 个神经元和一个sigmoid 的密集输出层 ****多标签分类的激活函数。
- 一个输入层,它采用标记化和填充的文本序列。
结果
在本节中,我介绍了神经网络模型在多标签恶意评论分类任务上的表现。该模型训练了 5 个 epoch,批量大小为 128。训练和验证损失和准确度曲线如下图所示。
模型损失曲线
模型精度曲线
从图中,我们可以观察到模型的训练损失随时间减少,而验证损失保持相对稳定。训练和验证的准确性首先增加,但随后几乎保持不变。
最终的epoch结果如下:
- Loss: 0.052915
- Accuracy: 0.993999
- Validation Loss: 0.058797
- Validation Accuracy: 0.993859
尽管该模型达到了相对较高的准确度,但需要注意的是,数据集的标签不平衡,这可能会导致有偏差的结果。高精度可能是由于模型学习可以很好地预测多数类,但很难预测少数类。这将我们带到下一节。
改进
在本节中,讨论模型和整体方法的潜在改进。一些需要考虑的想法包括:
- 处理不平衡的数据集: 为了解决类不平衡问题,可以采用各种技术,例如过采样、欠采样或两者的组合(例如,SMOTE)。我们建议使用不平衡学习库来实现这些技术。
- 在训练期间使用类别权重: Ware 可以在训练期间使用类别权重来帮助模型更加关注代表性不足的类别。目前,scikit-learn 中的 compute_class_weight 函数已导入但未使用。我们建议使用此函数计算类权重,并使用 class_weight 参数将它们传递给 fit 方法。
- 试验不同的神经网络架构: 可以探索使用不同的神经网络架构,例如双向 LSTM、GRU(门控循环单元),或向模型添加更多层。此外,合并 dropout 层可以帮助减少过度拟合。
- 调整超参数: 可以使用不同的超参数进行实验,例如学习率、批量大小和时期数,使用网格搜索或随机搜索等技术来找到最佳值集。
- 探索替代的预训练嵌入: 研究替代的预训练嵌入,例如 fastText 或 BERT,可能会提高模型对文本的理解。
结论
该项目使用具有 LSTM 层和 GloVe 嵌入的神经网络解决了多标签恶意评论分类问题。在达到合理的准确性的同时,数据集的不平衡性质为进一步改进留下了很大的空间。我可能会写第二篇文章来探索改进,例如处理不平衡数据集、试验神经网络架构和调整超参数,使用相同的数据集。