python - 如何在词嵌入中发现性别偏见?
问题描述
我有glove.twitter.27B.200d.txt
词嵌入。这些嵌入GloVe
格式。我w2v
使用以下代码将其转换为格式:
model = KeyedVectors.load_word2vec_format(
"data/glove.twitter.27B.200d.w2v.txt", binary=False
)
len(model.vocab) == 1193514
这个词嵌入中存在性别偏见:
model.similarity("man", "kitchen") == 0.32785824
model.similarity("woman", "kitchen") == 0.40180725
我想在这个词嵌入中找到一个性别偏见方向,但不确定如何。
解决方案
你可以使用这篇论文(Man is to Computer Programmer as Woman is to Homemaker? Debiasing Word Embeddings)方法:
为了更稳健地估计偏差,我们将汇总多个配对比较。通过组合几个方向,例如
g ∈ R^d
确定在嵌入中很大程度上捕捉性别的性别方向。这个方向有助于我们量化单词和关联中的直接和间接偏见。
因此,首先,生成一些用于生成性别子空间的预定义配对差异。然后:
为了识别性别子空间,我们采用十个性别对差异向量并计算其主成分(PC)。如图 6 所示,有一个方向可以解释这些向量中的大部分方差。第一个特征值明显大于其余特征值。请注意,从 10 个噪声向量的有限样本中的随机性来看,人们预计特征值会减少。然而,同样如图 6 所示,由于随机抽样而观察到的下降更加渐进和均匀。因此,我们假设由单位向量 g 表示的顶部 PC 捕获了性别子空间。一般来说,性别子空间可能是更高维度的,我们所有的分析和算法(如下所述)都适用于一般子空间。
PC分析生成的性别子空间的生成向量g
如何确定性别偏差方向。最后,测量DirectBias:
为了衡量直接偏见,我们首先确定对于所讨论的应用程序应该是性别中立的词。如何生成这组性别中性词在第 7 节中描述。给定性别中性词,用 N 表示,以及从上面学到的性别方向 g,我们将嵌入的直接性别偏见定义为:
推荐阅读
- python - Python-用实际值替换分数(转置)
- python - 为什么 celery 链中的任务执行无序?
- javascript - jQuery - 在没有刷新的情况下成功函数后无法更新视图
- javascript - 带有选项输入字段的下拉列表
- c++ - 如何使这个小写和大写
- typescript - 如何在 TypeScript Compiler - tsc 中排除引用的 Firebase 模块?
- python - 使用 Py2app 时出现导入错误
- python-3.x - 使用 Bazel 构建 TensorFlow:执行 genrule //tensorflow:tensorflow_python_api_gen failed (Exit 1): bash failed: error execution command
- html - 如何将图像和标签放在彼此的顶部 HTML CSS
- database - 有人可以从公钥中获取私钥吗?