决赛赛题链接https://gss.tencent.com/competition/2024/doc/2024%E8%85%BE%E8%AE%AF%E6%B8%B8%E6%88%8F%E5%AE%89%E5%85%A8%E6%8A%80%E6%9C%AF%E7%AB%9E%E8%B5%9B-%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0-%E5%86%B3%E8%B5%9B.zip
今年的题目是游戏跨语言恶意内容识别 ,题目比较简洁,数据也简单,只有0-1标签和语句.但是想要拿高分不容易,训练集少是一方面,跨语言也是一方面.相较于往年的题目,数据集非常有限(往年甚至有70G的数据),也从机器学习进化到了深度学习.
题目介绍
参赛者需要基于英语数据集开发一款跨语言恶意文本识别模型,最终模型将在包含英语、阿语、土语、俄语的测试集上评估效果,并取各语种的 F-score 平均值作为评定最终成绩的依据。
比赛提供的数据集:
1. 训练集及相关数据集:
- 8k 条带标注数据(英语),文件名:train.txt
- 4*20k 条无标注数据(每个语种各 20k),文件名:unlabel_text.txt
- 4*5k 条 ChatGPT 标注数据(每个语种各 5k),文件名:labeled_text_by_ChatGPT.txt。 prompt 见文件 labeled_text_by_ChatGPT_prompt.txt。
- 50k 平行语料(以英语为原语言,通过 ChatGPT 翻译获取)文件名:parallel_text_by_ChatGPT.txt。prompt 见文件 parallel_text_by_ChatGPT_prompt.txt。
2. 验证集:
- 4*100 条带标注数据(每个语种各 100),文件名:dev_ar.txt、dev_en.txt、dev_ru.txt、dev_tr.txt
3. 测试集:4*1k 无标注数据(每个语种各 1k),与验证集同分布,不对外提供。
这个赛题机制比较特别,一般比赛直接提供测试集或者分数排行榜,本赛题啥也不给,完全黑盒状态,不能通过排行榜去判断自己模型的好坏,唯一评判标准只有验证集.结果就跟买彩票一样.
赛题分析
题目给出了baseline:
采用 twitter-xlm-roberta-base 作为基础模型,https://huggingface.co/cardiffnlp/twitter-xlm-roberta-base.
合并训练集和验证集作为训练集,训练参数:learning_rate=1e-5;batch_size=64;train_epoch=3;
最终指标:0.674094
一般情况下,根据比赛时间的长短,选择是否更换模型.这次比赛初赛3天,决赛5天(本来没有5天的,但是提前开赛了,感觉缺少了优势).时间比较短就没有必要更换基础模型了,最多找一下微调的模型.
废话:XLM-RoBERTa(XLM-R)是由Facebook AI团队在2019年11月发布的模型,作为其原始的XLM-100模型的更新。XLM-R是基于Transformer的语言模型,都依赖于掩码语言模型目标,并且都能够处理100种不同语言的文本。它已经证明能在各种跨语言任务上达到行业领先的性能表现,并在需要多语言理解和迁移学习的场景中尤其有用。
针对数据集,唯一能直接使用的训练集只有8k 条带标注数据(英语),其他未标注数据和GPT标注数据慎用(实测直接用会降分).所以要寻找公开的数据集(题目提到比赛不限制使用任何开源数据、模型、代码).
最后是训练方法,baseline中提到合并训练集和验证集作为训练集.而我们没有测试集,唯一的评价标准只有验证集,所以不能一开始就直接使用验证集进行训练,应该根据其他训练集在验证集上的表现,把评价指标拉到最高后,再使用验证集进行训练.
一些想法
模型
由于初赛只有两种语言,所以没有想着要使用其他微调过的模型,直接使用了baseline进行训练,可到了决赛却有4种语言,应该选用更好的微调模型,可以以验证集评价在线模型.
这里给出一些微调模型的比较(在验证集上评估,评价指标为准确率):
-
szzzzz/xlm-roberta-base-text-toxic
https://huggingface.co/szzzzz/xlm-roberta-base-text-toxic
-
cardiffnlp/twitter-xlm-roberta-base(baseline)
https://huggingface.co/cardiffnlp/twitter-xlm-roberta-base
-
EIStakovskii/xlm_roberta_base_multilingual_toxicity_classifier_plus
https://huggingface.co/EIStakovskii/xlm_roberta_base_multilingual_toxicity_classifier_plus
-
airKlizz/xlm-roberta-base-germeval21-toxic-with-data-augmentation
https://huggingface.co/airKlizz/xlm-roberta-base-germeval21-toxic-with-data-augmentation
szzzzz | cardiffnlp | EIStakovskii | airKlizz | |
en | 0.36 | 0.4 | 0.66 | 0.62 |
ru | 0.66 | 0.3 | 0.61 | 0.53 |
ar | 0.52 | 0.36 | 0.65 | 0.63 |
tr | 0.39 | 0.39 | 0.52 | 0.55 |
平均 | 0.55 | 0.36 | 0.61 | 0.58 |
如果在初赛的时候就选择了一个指标较高的模型,结果应该会更好.
数据集
GitHub - aymeam/Datasets-for-Hate-Speech-Detection: Datasets for Hate Speech Detection
Multi-lingual HateSpeech Dataset | Kaggle(MultiLanguageTrainDataset.csv)
词汇 GitHub - valeriobasile/hurtlex: A multilingual lexicon of words to hurt.
英语
数据集 |
xhate |
Davidson et al., 2017 |
俄语
数据集 |
xhate |
Automatic Toxic Comment Detection in Social Media for Russian |
Detection of Abusive Speech for Mixed Sociolects of Russian and Ukrainian Languages |
Russian South Park |
土耳其语
数据集 |
xhate |
offenseval_2020 |
Turkish Hate Speech Analysis |
turkish-toxic-language |
turkish-offensive-language-detection |
阿拉伯语
数据集 |
Let-Mi |
MLMA |
L-HSAB |
Arabic Hate Speech Dataset 2023 |
SSTD |
实际测试只有部分数据集能提分,其他数据集都不太行.我认为是打标签的规则不一样,所以GPT的数据和其他数据集需要慎用.
训练
我的方法是先集中力量提升某一语言的指标(数据集要筛选,降分的不用),然后在提升下一语言的时候,把之前的数据集和新语言的数据集合并进行训练,防止练了这个语言,上一语言又不行了.最后拿验证集进行训练.
可能有用的方法
- 每种语言单独训练一个模型,开头加个语种分类器.这个应该不违规,达到下面这个限制应该就行
- 想办法使用GPT标注的数据和无标注数据.我觉得聚类可能不太行,想了一种比较简单的方法.因为唯一已知的打标签方法只有验证集和英语的训练集,所以通过去学习他们的打标签规则去给无标签的数据集生成标签.也就是先用非验证集数据把模型指标拉到最高,然后加入验证集进行训练.把这个训练好的模型作为标签生成模型,对GPT标注的数据(不是翻译的数据)进行打标签,根据生成的标签和GPT的标签进行融合,筛选出两者标签相同的数据.再把这些数据放入指标最高的模型进行训练,如果有提升,则逐渐扩展到给无标注数据打标签.翻译的数据最好不要用,翻译质量不好掌握.GPT打的标签也不要直接使用,联想能力太强,导致过渡解读语句.