【自然语言处理】BERT-Whitening
相关博客:
【自然语言处理】【对比学习】SimCSE:基于对比学习的句向量表示
【自然语言处理】BERT-Whitening
【自然语言处理】【Pytorch】从头实现SimCSE
【自然语言处理】【向量检索】面向开发域稠密检索的多视角文档表示学习
【自然语言处理】【向量表示】AugSBERT:改善用于成对句子评分任务的Bi-Encoders的数据增强方法
【自然语言处理】【向量表示】PairSupCon:用于句子表示的成对监督对比学习
苏神论文:https://arxiv.org/pdf/2103.15316.pdf
BERT-Whitening
BERT虽然很成功,但是通过BERT来获取句子嵌入仍然是个问题。先前的研究认为BERT获取的句嵌入向量存在各向异性的问题,导致cosine相似度无法度量句子间的语义相似性。 BERT-Whiteing \text{BERT-Whiteing} BERT-Whiteing通过简单的白化操作,将嵌入向量转化为各向同性。
一、假设
cosine相似度对于输入向量有什么假设?
给定两个向量 x ∈ R d x\in\mathbb{R}^d x∈Rd和 y ∈ R d y\in\mathbb{R}^d y∈Rd,这两个向量的cosine相似度为
cos(x,y) = ∑ i d x i y i ∑ i d x i 2 ∑ i d y i 2 (1) \text{cos(x,y)}=\frac{\sum_i^d x_iy_i}{\sqrt{\sum_i^d x_i^2}\sqrt{\sum_i^d y_i^2}} \tag{1} cos(x,y)=∑idxi2 ∑idyi2 ∑idxiyi(1)
等式(1)仅在标准正交基下才满足。但是,研究显示BERT中包含了充分的语义,只是无法通过cosine或者其他的度量方式进行语义相似度度量。那么一个合理的猜测就是:BERT产生句向量的坐标基不是标准正交基,也就是各向异性。为了解决BERT句嵌入向量的问题,就需要将句向量转化至标准正交基中。
二、白化变换
先前解决BERT句向量各向异性采用基于flow的方法。本文认为使用简单的whitening操作也能实现相同的效果。具体来说,就是将所有句向量转换为均值为0且协方差矩阵为单位矩阵的向量。
假设存在一组句向量 { x i } i = 1 N \{x_i\}_{i=1}^N {xi}i=1N,可以使用下面的线性变换实现各向同性(均值为0且协方差矩阵为单位矩阵)。
x ~ i = ( x i − u ) W (2) \tilde{x}_i=(x_i-u)W \tag{2} x~i=(xi−u)W(2)
等式 ( 2 ) (2) (2)就是机器学习中的白化操作。若要均值为0,仅需要
μ = 1 N ∑ i = 1 N x i (3) \mu=\frac{1}{N}\sum_{i=1}^Nx_i \tag{3} μ=N1i=1∑Nxi(3)
下面来确定矩阵 W W W。 { x i } i = 1 N \{x_i\}_{i=1}^N {xi}i=1N的原始协方差矩阵为
Σ = 1 N ∑ i = 1 N ( x i − μ ) T ( x i − μ ) (4) \Sigma=\frac{1}{N}\sum_{i=1}^N(x_i-\mu)^T(x_i-\mu) \tag{4} Σ=N1i=1∑N(xi−μ)T(xi−μ)(4)
转换后的协方差矩阵为
Σ ~ = W T Σ W (5) \tilde{\Sigma}=W^T\Sigma W \tag{5} Σ~=WTΣW(5)
若希望转换后的协方差矩阵为单位矩阵,则需要解决下面的等式
W T Σ W = I (6) W^T\Sigma W=I \tag{6} WTΣW=I(6)
将等式 ( 6 ) (6) (6)左乘 ( W T ) − 1 (W^T)^{-1} (WT)−1和右乘 W − 1 W^{-1} W−1,得到
Σ = ( W T ) − 1 W − 1 = ( W − 1 ) T W − 1 (7) \begin{aligned} \Sigma&=(W^T)^{-1}W^{-1} \\ &=(W^{-1})^TW^{-1} \tag{7} \end{aligned} Σ=(WT)−1W−1=(W−1)TW−1(7)
由于协方差矩阵 Σ \Sigma Σ是正定对称矩阵,满足 SVD \text{SVD} SVD分解,即
Σ = U Λ U T (8) \Sigma=U\Lambda U^T \tag{8} Σ=UΛUT(8)
等式 ( 7 ) (7) (7)和 ( 8 ) (8) (8)联立
( W − 1 ) T W − 1 = U Λ U T = U Λ Λ U T = ( Λ U T ) T Λ U T (9) (W^{-1})^TW^{-1}=U\Lambda U^T=U\sqrt{\Lambda}\sqrt{\Lambda}U^T=(\sqrt{\Lambda}U^T)^T\sqrt{\Lambda}U^T \tag{9} (W−1)TW−1=UΛUT=UΛ Λ UT=(Λ UT)TΛ UT(9)
因此, W − 1 = Λ U T W^{-1}=\sqrt{\Lambda}U^T W−1=Λ UT,那么最终
W = U Λ − 1 (10) W=U\sqrt{\Lambda^{-1}} \tag{10} W=UΛ−1 (10)
三、降维
通过矩阵 W = U Λ − 1 W=U\sqrt{\Lambda^{-1}} W=UΛ−1 可以将句向量的协方差矩阵转换为单位矩阵。在这个变换中,对角矩阵 Λ \Lambda Λ中的每个对角元素的大小都代表了对应维度的重要性。因此,可以通过去掉那些不重要的特征来实现特征向量降维,这样可以一定程度上降低噪音且加速向量检索速度。
在实现过程中,由于奇异值分解出的对角矩阵 Λ \Lambda Λ中的元素已经被降序排列。因此,仅需要将 W W W中的前 k k k列保留下来,就能实现降维效果。论文将整个流程称为 Whitening-k \text{Whitening-k} Whitening-k,详细的实现如算法1描述。
算法1
输入:句嵌入 { x i } i = 1 N \{x_i\}_{i=1}^N {xi}i=1N和要保留的维度 k k k;
- 计算 { x i } i = 1 N \{x_i\}_{i=1}^N {xi}i=1N的均值 μ \mu μ和协方差矩阵 Σ \Sigma Σ;
- 计算 U , Λ , U T = SVD ( Σ ) U,\Lambda,U^T=\textbf{SVD}(\Sigma) U,Λ,UT=SVD(Σ);
- 计算 W = ( U Λ − 1 ) [ : , : k ] W=(U\sqrt{\Lambda^{-1}})[:,:k] W=(UΛ−1 )[:,:k];
- for i = 1 , 2 , … , N i=1,2,\dots,N i=1,2,…,N do
- x ~ i = ( x i − u ) W \tilde{x}_i=(x_i-u)W x~i=(xi−u)W
- end for
输出:转换后的嵌入向量 { x ~ i } i = 1 N \{\tilde{x}_i\}_{i=1}^N {x~i}i=1N;
四、复杂度分析
在大规模语料库上训练时,均值 μ \mu μ和协方差矩阵 Λ \Lambda Λ是可以迭代计算的。具体来说,整个句向量 { x i } i = 1 N \{x_i\}_{i=1}^N {xi}i=1N均需要计算矩阵向量 μ ∈ R d \mu\in\mathbb{R}^d μ∈Rd和协方差矩阵 Σ ∈ R d × d \Sigma\in \mathbb{R}^{d\times d} Σ∈Rd×d。因此,给定一个新句子 x n + 1 x_{n+1} xn+1,均值可以迭代计算:
μ n + 1 = n n + 1 μ n + 1 n + 1 x n + 1 (11) \mu_{n+1}=\frac{n}{n+1}\mu_n+\frac{1}{n+1}x_{n+1} \tag{11} μn+1=n+1nμn+n+11xn+1(11)
类似地,协方差矩阵就是 ( x i − μ ) T ( x i − μ ) (x_i-\mu)^T(x_i-\mu) (xi−μ)T(xi−μ)的期望,迭代计算
Σ n + 1 = n n + 1 Σ n + 1 n + 1 ( x n + 1 − μ ) T ( x n + 1 − μ ) (11) \Sigma_{n+1}=\frac{n}{n+1}\Sigma_n+\frac{1}{n+1}(x_{n+1}-\mu)^T(x_{n+1}-\mu) \tag{11} Σn+1=n+1nΣn+n+11(xn+1−μ)T(xn+1−μ)(11)
因此,计算 μ \mu μ和 Σ \Sigma Σ的空间复杂度为 O ( 1 ) O(1) O(1),时间复杂度为 O ( N ) O(N) O(N)。
【自然语言处理】BERT-Whitening相关推荐
- BERT embedding 降维--BERT whitening
利用BERT whitening可以将embedding 比如768维降到256维 def compute_kernel_bias(vecs, n_components=256):"&quo ...
- 我爱自然语言处理bert ner chinese
BERT相关论文.文章和代码资源汇总 4条回复 BERT最近太火,蹭个热点,整理一下相关的资源,包括Paper, 代码和文章解读. 1.Google官方: 1) BERT: Pre-training ...
- [深度学习] 自然语言处理 --- Bert开发实战 (Transformers)
本文主要介绍如果使用huggingface的transformers 2.0 进行NLP的模型训练 除了transformers,其它兼容tf2.0的bert项目还有: 我的博客里有介绍使用方法 [ ...
- [深度学习] 自然语言处理 --- BERT模型原理
一 BERT简介 NLP:自然语言处理(NLP)是信息时代最重要的技术之一.理解复杂的语言也是人工智能的重要组成部分.Google AI 团队提出的预训练语言模型 BERT(Bidirectional ...
- 深度学习之 自然语言处理BERT
Natural Language Processing(NLP)包括自然语言理解和自然语言生成,自然语言理解的应用包括语义分析.机器客服.语音识别.机器翻译等. transformer这一深度网络架构 ...
- 自然语言处理——BERT情感分类实战(一)之预处理
写在前面 网上已经有很多文章对BERT的原理讲得很清楚了,今天我将以实战的方式(假装大家都懂原理≧◔◡◔≦)一步步带大家操作最近比较流行的BERT模型.源代码是pytorch版本.由于篇幅比较长我将分 ...
- PromptBERT: Improving BERT Sentence Embeddings with Prompts (通篇翻译)
PromptBERT:使用提示改进BERT句子嵌入 Ting Jiang 1 ∗ , Shaohan Huang 3 , Zihan Zhang 4 , Deqing Wang 1 † , Fuzhe ...
- BERT相关模型汇总梳理
©PaperWeekly 原创 · 作者|熊志伟 学校|清华大学 研究方向|自然语言处理 BERT 自 2018 年被提出以来,获得了很大的成功和关注.基于此,学术界陆续提出了各类相关模型,以期对 B ...
- BERT在多模态领域中的应用
©PaperWeekly 原创 · 作者|李明晓 学校|鲁汶大学博士生 研究方向|自然语言处理 BERT (Bidrectional Encoder Representations from Tran ...
- 【Pytorch基础教程36】基于Ernie预训练模型和Bert的新闻分类
文章目录 一.新闻分类任务 1.1 中文数据集 1.2 数据特点 1.3 跑起代码 二. 预训练语言模型ERNIE 2.1 ERNIE模型结构 2.2 bert模型结构 三.项目代码 1. bert模 ...
最新文章
- Android Studio 启动模拟器出现“Timed out after 300seconds waiting for emulator to come online“解决方案
- JavaScript倒计时
- python连接mysql代码_python连接mysql
- Python多版本管理器-pyenv 介绍及部署记录
- 【职场】看一位前端工程师如何上班摸鱼
- 【转】(六)unity4.6Ugui中文教程文档-------概要-UGUI Animation Integration
- vue-cli的初步使用
- 一文读懂 Serverless,将配置化思想复用到平台系统中
- Java构造字符串算法题_LeetCode算法题-Repeated Substring Pattern(Java实现)
- SMP、NUMA、MPP(Teradata)体系结构介绍
- python实现面部特效_Python实现在线批量美颜功能过程解析
- 形态学操作之提取水平与垂直直线
- 0bug到底碰痛了谁的神经?
- ospybook安装包及安装过程
- 拓端tecdat|matlab脉冲响应图的时域特征
- WLAN 安全协议 - WAPI
- 使用python批量压缩图片分辨率到指定大小,替换之前的压缩Image.ANTIALIAS
- 阿里云轻量服务器WordPress镜像建网站教程(图)
- 【Conic】最优性条件与对偶(1)
- 绝望的主妇第一二三季/Desperate Housewives迅雷下载