pipeline_tag: 文本分类
license: apache-2.0
⚠️ 免责声明:
当前HuggingFace模型与detoxify库输出结果存在差异(详见此问题)。如需使用最新模型,建议从https://github.com/unitaryai/detoxify获取
🙊 Detoxify
基于⚡ Pytorch Lightning与🤗 Transformers的毒性评论分类系统


项目描述
本仓库提供训练好的模型及代码,用于预测以下3个Jigsaw竞赛中的毒性评论:毒性评论分类、毒性评论中的意外偏见、多语言毒性评论分类。
由Unitary公司的Laura Hanu开发,我们致力于通过上下文理解视觉内容来阻止网络有害内容传播。
依赖项:
- 推理需求:
- 🤗 Transformers
- ⚡ Pytorch lightning
- 训练额外需求:
竞赛名称 |
年份 |
目标 |
原始数据来源 |
Detoxify模型名称 |
Kaggle最高分 |
Detoxify得分 |
毒性评论分类挑战赛 |
2018 |
构建多输出头模型,检测威胁、淫秽、侮辱和基于身份的仇恨等不同类型的毒性 |
维基百科评论 |
original |
0.98856 |
0.98636 |
Jigsaw毒性分类中的意外偏见 |
2019 |
构建能识别毒性并最小化身份提及相关偏见的模型 |
Civil评论 |
unbiased |
0.94734 |
0.93639 |
Jigsaw多语言毒性评论分类 |
2020 |
构建有效的多语言模型 |
维基百科评论+Civil评论 |
multilingual |
0.9536 |
0.91655* |
*得分基于验证集而非测试集,不完全可比。待测试集标签公布后将更新。
需注意的是,排行榜顶尖成绩多通过模型集成获得。本库旨在提供用户友好、简单易用的解决方案。
局限性与伦理考量
若评论包含与脏话、侮辱或亵渎相关的词汇,无论作者意图是幽默或自嘲,都可能被判定为有毒内容。这可能对弱势群体产生偏见。
本库建议用途:学术研究、基于真实世界人口结构精心构建数据集的微调、辅助内容审核员快速标记有害内容。
关于毒性/仇恨言论检测偏见的参考资料:
快速预测
multilingual
模型支持7种语言测试:英语
、法语
、西班牙语
、意大利语
、葡萄牙语
、土耳其语
和俄语
。
pip install detoxify
from detoxify import Detoxify
results = Detoxify('original').predict('示例文本')
results = Detoxify('unbiased').predict(['示例文本1','示例文本2'])
results = Detoxify('multilingual').predict(['示例文本','exemple de texte','texto de ejemplo','testo di esempio','texto de exemplo','örnek metin','пример текста'])
import pandas as pd
print(pd.DataFrame(results, index=input_text).round(5))
更多细节请查看预测章节。
标签说明
所有竞赛均包含毒性标签。毒性标签代表最多10位标注者的综合评分,标准如下:
- 极度有毒(充满仇恨、攻击性或侮辱性,极可能导致讨论终止或放弃表达)
- 有毒(粗鲁、不尊重或不合理,较可能导致讨论终止或放弃表达)
- 难以判断
- 无毒
完整标注标准参见此处。
毒性评论分类挑战赛
包含以下标签:
toxic
severe_toxic
obscene
threat
insult
identity_hate
Jigsaw毒性分类中的意外偏见
包含两类标签:主要毒性标签和评论中提及的身份标签。仅测试集(公开+私有)中出现超过500次的身份标签被纳入训练和评估。
toxicity
severe_toxicity
obscene
threat
insult
identity_attack
sexual_explicit
使用的身份标签:
male
female
homosexual_gay_or_lesbian
christian
jewish
muslim
black
white
psychiatric_or_mental_illness
完整身份标签列表参见此处。
Jigsaw多语言毒性评论分类
因合并前两届竞赛数据,包含全部上述标签,但最终评估仅基于:
运行指南
首先安装依赖
git clone https://github.com/unitaryai/detoxify
python3 -m venv toxic-env
source toxic-env/bin/activate
pip install -e detoxify
cd detoxify
pip install -r requirements.txt
预测
训练模型概览:
模型名称 |
Transformer类型 |
数据来源 |
original |
bert-base-uncased |
毒性评论分类挑战赛 |
unbiased |
roberta-base |
毒性分类中的意外偏见 |
multilingual |
xlm-roberta-base |
多语言毒性评论分类 |
快速预测可通过示例脚本直接处理评论或包含评论列表的txt文件。
python run_prediction.py --input '示例' --model_name original
python run_prediction.py --input '示例' --from_ckpt_path 模型路径
python run_prediction.py --input 测试集.txt --model_name original --save_to 结果.csv
python run_prediction.py --help
检查点可从最新版本或通过Pytorch hub API下载,对应名称:
toxic_bert
unbiased_toxic_roberta
multilingual_toxic_xlm_r
model = torch.hub.load('unitaryai/detoxify','toxic_bert')
Python调用方式:
from detoxify import Detoxify
results = Detoxify('original').predict('示例文本')
results = Detoxify('unbiased').predict(['示例文本1','示例文本2'])
results = Detoxify('multilingual').predict(['示例文本','exemple de texte','texto de ejemplo','testo di esempio','texto de exemplo','örnek metin','пример текста'])
import pandas as pd
print(pd.DataFrame(results,index=input_text).round(5))
训练流程
若无Kaggle账号:
mkdir jigsaw_data
cd jigsaw_data
kaggle competitions download -c jigsaw-toxic-comment-classification-challenge
kaggle competitions download -c jigsaw-unintended-bias-in-toxicity-classification
kaggle competitions download -c jigsaw-multilingual-toxic-comment-classification
开始训练
毒性评论分类挑战赛
python create_val_set.py
python train.py --config configs/Toxic_comment_classification_BERT.json
毒性分类中的意外偏见
python train.py --config configs/Unintended_bias_toxic_comment_classification_RoBERTa.json
多语言毒性评论分类
分两阶段训练:首先在所有可用数据上训练,其次仅在首届竞赛翻译版本上训练。
翻译数据(法语、西班牙语、意大利语、葡萄牙语、土耳其语和俄语)可从Kaggle下载此处。
python train.py --config configs/Multilingual_toxic_comment_classification_XLMR.json
python train.py --config configs/Multilingual_toxic_comment_classification_XLMR_stage2.json
使用tensorboard监控进度
tensorboard --logdir=./saved
模型评估
毒性评论分类挑战赛
评估指标:所有标签的AUC均值。
python evaluate.py --checkpoint saved/lightning_logs/checkpoints/示例检查点.pth --test_csv 测试集.csv
毒性分类中的意外偏见
评估指标:结合不同AUC分数的创新偏见指标,详见评估说明。
python evaluate.py --checkpoint saved/lightning_logs/checkpoints/示例检查点.pth --test_csv 测试集.csv
python model_eval/compute_bias_metric.py
多语言毒性评论分类
评估指标:主要毒性标签的AUC分数。
python evaluate.py --checkpoint saved/lightning_logs/checkpoints/示例检查点.pth --test_csv 测试集.csv
引用
@misc{Detoxify,
title={Detoxify},
author={Hanu, Laura and {Unitary team}},
howpublished={Github. https://github.com/unitaryai/detoxify},
year={2020}
}