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


项目描述
本项目提供训练好的模型及代码,用于预测三大Jigsaw竞赛中的毒性评论:毒性评论分类、毒性评论中的意外偏见、多语言毒性评论分类。
由Unitary公司的Laura Hanu开发,我们致力于通过上下文理解视觉内容来阻止网络有害内容传播。
依赖项:
- 推理所需:
- 🤗 Transformers
- ⚡ Pytorch lightning
- 训练额外需要:
竞赛名称 |
年份 |
目标 |
原始数据来源 |
Detoxify模型名称 |
Kaggle最高分 |
Detoxify得分 |
毒性评论分类挑战赛 |
2018 |
构建多头部模型以检测威胁、淫秽、侮辱和基于身份的仇恨等不同类型的毒性 |
维基百科评论 |
original |
0.98856 |
0.98636 |
Jigsaw毒性分类中的意外偏见 |
2019 |
构建能识别毒性并最小化身份提及相关偏见的模型 |
文明评论 |
unbiased |
0.94734 |
0.93639 |
Jigsaw多语言毒性评论分类 |
2020 |
构建有效的多语言模型 |
维基百科评论+文明评论 |
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(['示例文本','texte exemple','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 |
多语言毒性评论分类 |
快速预测可通过示例脚本直接运行:
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
Python调用示例:
from detoxify import Detoxify
import pandas as pd
results = Detoxify('original').predict('示例文本')
print(pd.DataFrame(results, index=['示例文本']).round(5))
训练流程
若未注册Kaggle:
- 需创建账号并下载kaggle.json凭证文件
- 存放至~/.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
多语言毒性评论分类
分两阶段训练:首阶段使用全量数据,次阶段仅使用首届竞赛的翻译版本数据(翻译数据含法/西/意/葡/土/俄语)。
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团队}},
howpublished={Github. https://github.com/unitaryai/detoxify},
year={2020}
}