Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks
論文資訊
快速重點
- 這是一個 sentence embeddings 的工作
- 提出 SBERT 和 SRoBERTa
- 基於 siamese 和 triplet loss 架構
- 在 NLI 資料集上進行 fine-tuning,表現比 InferSent、Universal Sentence Encoder 還要好
- 在 STS 資料集上贏過 InferSent 11.7 分、贏過 Universal Sentence Encoder 5.5 分
- 在 SentEval 的兩個任務上得到 2.1 和 2.6 分的提升
背景
BERT
- 將兩個句子以
SEP
合起來當成1個句子 - 在 inference 時會很沒有效率
- inference 時是要找到最佳的配對組合
- 假設有10,000個句子,BERT 就要做 n*(n-1)/2 次,共 49,995,000 次
- 10,000個句子只會找本身以外的10,000-1個句子
- 因為是找成對句子,所以總次數除以2
- 以 V100 來做運算的話需要花費 65 小時
方法
模型
- 對 BERT/ RoBERTa 的輸出使用池化 (pooling) 的方法進行處理:
(1) 取
CLS
token (2) 取 MEAN (3) 取 MAX 來得到固定大小 (fixed sized) 的句向量 - 本論文預設使用 ==MEAN== 作為 pooling 方法
分類任務的最佳化方式
-
$o=\text{softmax}(W_t(u,v,|u-v|))$
- 其中:
- $u$ 和 $v$ 分別是不同句子的句向量
- $|u-v|$ 是兩個句向量的差 (element-wise difference)
- $W_t \in \mathbb{R}^{3n\times k}$
- $n$ 是句向量的維度
- $k$ 是 label 的數目
- 其中:
-
如下圖 1 所示
迴歸任務的最佳化方式
- 先計算相似度
- $\textrm{cos_similarity}(s_u, s_v)$
- 再 minimize mean-squared error
- 如下圖 2 所示
Triplet 任務的最佳化方式
- 針對 Wikipedia section triplets dataset (Dor et al., 2018).
- Minimize
- $\textrm{max}(||s_a-s_p||-||s_a-s_n||+\epsilon, 0)$
- $s_a$: an anchor sentence
- $s_p$: a positive sentence
- $s_n$: a negative sentence
- $||\cdot||$: Euclidean distance
- 目標是要最小化 $a$ 和 $p$ 的距離,並使 $a$ 和 $n$ 的距離最大化
- $\epsilon$: 用來確保最佳化之後 $a$ 和 $p$ 的距離至少會比 $a$ 和 $n$ 的距離少一個 $\epsilon$
SBERT 的訓練
- 使用 SNLI 和 MNLI 進行三分類任務的 fine-tuning
- 權重初始化
- SBERT: 使用 pre-trained BERT
- RoBERTa: 使用 pre-trained RoBERTa
- 權重初始化
- 訓練時間: ==1 個 epoch==
- batch size 16
- Adam optimizer
- learning rate 2e-5
- 使用 10% 的 training data 進行 linear learning rate warmup
實驗結果
STS-B
- 根據 Table 2,可以發現在沒有經過 fine-tuning 的情況下,SBERT-NLI 比 BERT embeddings 表現更好,也勝過先前的 sentence embeddings