NLP-字词向量的平衡算法(消除“偏见”)

向量的平衡算法

用于NLP领域的消除性别等偏见。问题表征如下:

为了使得e_w1 and e_w2对bia_orth有同样的距离

(扩充:nlp为了消除字词的语义偏见,比如,

给定“工程师”首先想到man而不是woman,即“工程师”和“man”的“距离”更近,

给定“服装设计师”首先想到woman而不是man,即“服装设计师”和“woman”的“距离”更近,

所以做了这样的工作:

(1):计算bia = "man" - "woman"。

(2):把产生偏见的词,放在bia_orth方向上  -----》更新的向量=向量-向量在bia方向的投影

(3):使得woman和man与bia_orth的距离一样

本片文章做得是第3步的介绍工作)

示例图片:

算法的思想:

 

核心代码:

import numpy as np

def equalize(e_w1,e_w2,bias_axis):
    mu = (e_w1 + e_w2) / 2.0
    
    #mu在bias_axis方向的投影
    mu_b = np.dot(mu,bias_axis) / np.sum(bias_axis*bias_axis) * bias_axis
    
    #mu在bias_axis垂直方向的投影
    mu_orth = mu - mu_b

    e_w1b = np.dot(e_w1,bias_axis) / np.sum(bias_axis*bias_axis) * bias_axis
    e_w2b = np.dot(e_w2, bias_axis) / np.sum(bias_axis * bias_axis) * bias_axis
    corrected_e_w1b = np.sqrt(np.abs(1-np.sum(mu_orth))) *\
                      (e_w1b - mu_b) / np.square(np.linalg.norm(e_w1-mu_orth-mu_b))

    corrected_e_w2b = np.sqrt(np.abs(1 - np.sum(mu_orth))) * \
                      (e_w2b - mu_b) / np.square(np.linalg.norm(e_w2 - mu_orth - mu_b))
    e1 = corrected_e_w1b + mu_orth
    e2 = corrected_e_w2b + mu_orth
    return e1,e2

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值