Fairness and social bias quantification in Large Language Models for sentiment analysis
情感分析中大型语言模型的公平性和社会偏见量化
发表于 2025.6.15 Knowledge-Based Systems
-
简介
LLMs在NLP任务中表现十分亮眼,但是这类模型存在社会性偏见。该篇论文量化了这种社会偏见,证明了SA中的社会性偏见在LLM中普遍存在。
-
数据集收集和标记
-
核能数据集
收集X平台上使用了“核能”、“核技术”等关键词的推文,共126万条左右。
人工标注126万条推文不现实,作者采用了7种不同的情感标注库对推文进行标注,7个标注数据库投票标注,标注工作具体如下:
分为3类标签:“积极”、“消极”、“中立”。采用“1,-1,0”的方式分别表示。
若分类是区间不是实数集合,则采取:[−1,0)、[0,0.05]和(0.05,1],分别对应“负面”、“中性”和“正面”三种情感倾向。
-
普通推文数据集
第二个数据集包含672,235条可用推文,涵盖不同主题且不局限于单一领域(如核能数据)。该数据集可在Kaggle平台获取。
-
实验方法
对于一些敏感的,可能引起偏见的词汇,AI应该做到情感中立;另外,这些词汇可能会通过改变文本中其他词汇的极性来间接影响整体的情感倾向。上述两种都会作为评价指标。
-
LLM
该任务使用了5种LLM,即BERT、GPT-2、LLLaMA-2、MistralAI、Falcon。
数据集分为训练集(80%)、测试集(20%)。
-
prompt结构
简单prompts:短句,单一情感极性
复杂prompts:长句,包含多种情感极性
多偏置prompts:包含多种偏见类型
-
实验结果
开篇明义,该篇论文注重于分类的公平性而不是准确率,作者先测试了五种模型的准确率以确保模型的有效性。
-
简单和复杂prompts
针对零样本核弹、低可信度与高可信度核弹模型,微调技术能有效提升其在简单能源、性别和政治类提示中的公平性,但这种技术对年龄提示的公平性改善效果有限甚至出现倒退,同时,微调技术对70亿参数大型模型在年龄与族裔提示上的公平性造成了显著负面影响。
而对于大多是社会偏见类型,当使用更多样本进行微调以从零样本泛化到完全泛化时,除LLaMA-2外,所有模型在处理简单和复杂提示时都会出现偏见加剧的情况。
-
多偏置prompts
和上述结果的性质一致,在这里不过多赘述。
综上所述,模型的公平性更多取决于架构设计和原始训练数据,而非微调所用的文本内容。文本对分类准确性有已知的影响,使用更多的数据进行微调很可能会提高准确性,但并不总是会改进公平性,而且无论使用什么文本进行微调,它都可能使公平性变得更糟。
-
分析词语带来的偏见
为了探索偏见由什么词语引起,作者采用了SHAP方法对句子中的每个词所带来的偏见进行量化。
通过在三种prompts(简单、复杂、多偏置)中、五种模型(零样本nuclear模型、低可信度nuclear模型、高可信度nuclear模型、低资源模型、饱和资源模型)下的计算,我们可以得出以下结论:
- 偏见源头可精确锁定到某些个具体的偏见性强的词(如nuclear、anthony),其SHAP值很高,足以影响整个句子的偏见性。
- 多偏见并存时,SHAP最高者主导,可以简单理解为数的加减。
- 微调可能消除部分偏见,但是在大多数情况下还是会加强偏见甚至改变偏见方向。
-
缓解偏见的方法
作者尝试了三种方法:
- 使用特定主题的高可信度推文对模型进行微调——提高了公平性。
- 使用对抗性样本微调——部分LLM提高,部分降低。
- 用同意的,不容易引起偏见的词汇替代偏见性词汇——部分提高,部分降低。
综上所述,微调对于公平性的帮助还有很大的发展空间。
-
启示与思考
这篇论文针对大模型在SA问题中的偏见性问题进行了量化的分析。
让我印象深刻的是,大模型的公平性和准确性不存在直接的关系,微调对于公平性的影响也有优有劣。
如何平衡公平性和准确性?能否同时提升公平性和准确性?如何提升公平性......
这些问题都亟待解决。
关于该领域未来的发展方向,我有一些想法:
- 文章提到特定领域的高可信度样本对于模型的公平性有帮助——我们可以着手构造内容更丰富、涵盖范围更广的高质量数据库。
- 对于包含偏见性强的词汇的句子,我们可以考虑使用LLMs对该句子进行修改,在保证语义不改变的情况下,减轻或消除偏见词汇的直接和间接影响。
- 我们该如何微调,才能在提升LLM的准确率的情况下保持或提升公平性。
-
尝试实现论文中的实验
-
1、创建环境,导入需要的库
我使用anonconda创建了python3.11的虚拟环境,并按照request导入了需要的库。
在下载库的过程中,accelerate库没有request中的“1.1.1”版本,所以我下载了最新的版本(具体看我的github库中的request文件)。
2、理解实验代码
逐个看每个py文件:
①run_fine_tuning.py
在零样本数据集(zero_shot.csv)上微调各个模型。
微调了四个模型。
LLaMA-2模型是一个大规模的LLM,若想要微调模型LLaMA-2模型,则将注释取消掉。
②fine_tuning.py
微调的实现代码。
分为小的LLM的fine_tune板块:bert、gpt-2;
大的LLM的fine_tune7B板块:flacon、mistral。
最后还实现了model-test板块来检测LLM的性能。
③run_testing.py
调用fine_tuning.py中的model_test板块,使用sample数据集对每个大模型进行性能测试
④use_models.py
分为四个板块:
* sentiment_model:
创建一个sentiment pipeline,输入字符串,得到输出。
* bias:
找到数据中的偏见句,并且以csv的形式存储下来。
* bias_matrix:
统计每一个模型中的带偏见的句子,并且把同一个模型的偏见句存储到同一个csv文件中。
命名为“instances.csv”(如图)。
* explain_trans:
逐句画图,选择shap绝对值top6(这是库中的函数决定的,如下图)作为图中的纵轴。
⑤run_bias.py
分为通用型和核型。
我们以核型为例
先通过fine _tuned找到地址,传输给bias_matrix函数进行偏见测试,生成的结果存储到Results目录下
⑥run_shap.py
画图,存储到 \SHAP\kumo24\集合名 中
3、尝试实验
显然,想要实现在四个模型上进行实验还有微调是不现实的,毕竟俺只有一台小电脑TuT。
那么,基于我对于代码的阅读,我修改了部分代码,以实现BERT模型上的基础实现(不包括微调)。
run_shap.py:
注释掉其他的模型
run_testing.py:
注释掉其他的模型
run_bias:
注释掉其他的模型
输出结果:
先运行run_bias,生成general_instances.csv和nuclear_instances.csv
两文件中只有BERT的结果。
再运行run_shap,生成图片:
具体的源码我已经上传到了github上了,链接如下:
、Samdy-L/SA-Reproducing-the-experiment: Reproducing the experiment in article about SA、

2442

被折叠的 条评论
为什么被折叠?



