rubert-tiny-toxicity 项目介绍
项目背景
rubert-tiny-toxicity 是基于 cointegrated/rubert-tiny 模型的一个项目,专门针对俄语短文本(如社交网络评论)的毒性和不当内容进行分类。这个模型对文本中的不良信息进行多标签分类,共包含以下几种类别:
non-toxic
:文本不含侮辱、粗俗或威胁性语言。insult
:含有侮辱性内容。obscenity
:含有粗俗语言。threat
:含有威胁性内容。dangerous
:文本含有可能对说话者声誉有害的不当内容。
安全性判定
一个文本被认为是安全的,需要满足同时为 non-toxic
且不 dangerous
。这意味着文本既不含有侮辱或威胁性内容,也不会对说话者的声誉造成损害。
使用方法
rubert-tiny-toxicity 提供了一种计算文本毒性和危险性的概率方法。以下是主要使用步骤和代码示例:
# 首先安装必要的库
# !pip install transformers sentencepiece --quiet
import torch
from transformers import AutoTokenizer, AutoModelForSequenceClassification
# 加载预训练模型和分词器
model_checkpoint = 'cointegrated/rubert-tiny-toxicity'
tokenizer = AutoTokenizer.from_pretrained(model_checkpoint)
model = AutoModelForSequenceClassification.from_pretrained(model_checkpoint)
if torch.cuda.is_available():
model.cuda()
# 定义计算毒性的方法
def text2toxicity(text, aggregate=True):
"""计算文本的毒性(若 aggregate=True)或毒性各方面的向量(若 aggregate=False)"""
with torch.no_grad():
inputs = tokenizer(text, return_tensors='pt', truncation=True, padding=True).to(model.device)
proba = torch.sigmoid(model(**inputs).logits).cpu().numpy()
if isinstance(text, str):
proba = proba[0]
if aggregate:
return 1 - proba.T[0] * (1 - proba.T[-1])
return proba
# 测试示例
print(text2toxicity('я люблю нигеров', True))
print(text2toxicity('я люблю нигеров', False))
通过上述代码,用户可以计算给定文本的毒性概率或详细的毒性类别概率。
模型训练
该模型在 OK ML Cup 和 Babakov et.al. 的联合数据集上进行训练,采用 Adam
优化器,学习率为 1e-5
,批量大小为 64
,训练了 15
个周期。文本的不当评分大于 0.8 被认为是不当的,而低于 0.2 则被认为是适当的。
在开发集上的每个标签 ROC AUC 结果如下:
non-toxic
:0.9937insult
:0.9912obscenity
:0.9881threat
:0.9910dangerous
:0.8295
这些结果表明,rubert-tiny-toxicity 在分类俄语短文本的毒性和不当内容方面表现出色。