Skip to main content
http://deeplearning.jp/
SimCSE: Simple Contrastive Learning of
Sentence Embeddings (EMNLP 2021)
山本 貴之 (ヤフー株式会社)
DEEP LEARNING JP
[DL Papers]
1
書誌情報
SimCSE: Simple Contrastive Learning of Sentence Embeddings
https://arxiv.org/abs/2104.08821
タイトル:
著者: Tianyu Gao†* , Xingcheng Yao‡*, Danqi Chen †
† プリンストン大学 コンピュータサイエンス学科
‡ 清華大学 学際情報科学研究所
• BERTで文章の意味合いをより正しく埋め込み表現する、対照学習手法
• 教師なし、教師ありの2つの手法で両方ともSOTA
概要:
2
選定理由: 手法がシンプルな為、応用範囲の期待による
(Accepted to EMNLP 2021)
公式実装: https://github.com/princeton-nlp/SimCSE
アジェンダ
1. 導入
2. 先行研究
3. 手法
4. 実験
5. まとめ
3
1. 導入
4
• 普遍的な文の意味合いのEmbeddingベクトルを学習する事は自然言語処理の基本的な問題
(Kiros et al., 2015; Hill et al., 2016; Conneau et al., 2017; Logeswaran and Lee, 2018; Cer et al., 2018; Reimers
and Gurevych, 2019, inter alia)
• STS(意味合い観点の類似文の評価手法)で評価し、SOTA(教師なしは+4.2%、教師ありは+2.2%)
• 理由は主に埋め込み空間の異方性を等方的に調整できた事による
• 事前学習済BERTやRoBERTaを用い、次のような、シンプルな対照学習手法を提案
• 教師なし:BERTに同じ文章を2回投入し、Dropoutによる2つの類似ベクトルを正例ペアとする
• 教師あり:NLI自然言語推論データセット使用し、”含意”と”矛盾”データを活用する
背景
手法
結果
5
対照学習のフレームワークとして参考にしている
1. 画像ベースの手法
2. 教師なしでも、教師ありに匹敵する性能
3. その為には、パラメータ数を増やし、大きなバッチサイズ
とより多くの学習ステップが必要
出典:https://arxiv.org/abs/2002.05709
2. 先行研究① SimCLR
ResNet-50
ImagetNet Top-1 Accuracy
6
1枚の画像から正例ペアを生成→softmax的損失関数(NT-Xent)で正例ペアを1に、負例ペアを0に近づける
出典: https://arxiv.org/abs/2002.05709
https://ai.googleblog.com/2020/04/advancing-self-supervised-and-semi.html
2. 先行研究① SimCLR
エンコーダー
プロジェクションヘッド
※sim:コサイン類似度
■損失関数
この損失関数をNT-Xentと呼ぶ
(=Normalized Temperature-scaled CROSS entropy)
温度付きソフトマックス
に類似した式構造
ミニバッチ
元画像数N
*
*
*
正例のソフトマックスを
1に近づけるよう学習
8
• 従来のSOTA論文
• 文章のEmbeddingベクトルの表現学習をBERTを用い教師なしで行う(教師ありも実施)
• モデル2つが独立してるのが特徴的
• ドット積を大きくor小さくする対照学習。(ベクトル間の角度を調整する思想と考えられる)
出典: https://openreview.net/pdf?id=Ov_sMNau-PF
2. 先行研究② CT-BERT (CONTRASTIVE TENSION)
9
• BERTは元々出力層に近づくにつれ、分の意味合いを正しく表現できていない
• CT-BERTで学習を進めると、出力層に近い層が、分の意味合いを正しく表現できるようになっていく
出典: 図 :https://openreview.net/pdf?id=Ov_sMNau-PF
STS score :https://arxiv.org/abs/1708.00055
2. 先行研究② CT-BERT (CONTRASTIVE TENSION)
文の意味の類似性を
表現できているかのスコア
BERTの層(左が入力層、右が出力層)
3. 本研究の手法
学習方法(概要)
10
学習データ
教師なし:英語版Wikipediaから100万文をサンプリング
教師あり:SNLIおよびMNLIデータセットを使用
モデル構造
プレトレーニング済 BERT、もしくは、RoBERTa
エンコーダー(BERT)出力に、プロジェクションヘッド(1層MLP)を追加
損失関数
Normalized Temperature-scaled CROSS entropy loss(NT-Xent)
温度付きsoftmax CrossEntropyLoss
3. 手法 教師なし
教師なし手法の学習手法
11
1
2
1. 左図の各文章をBERTに2回入力し、Dropoutの影響で微
妙に異なる2つのベクトルを正例とする。すなわち下式のxiと
xi+の2つの正例ベクトルのペアがミニバッチ分が出来上がる
2. ミニバッチ内の他の文章のベクトルを負例とする
3. NT-Xent lossで正例を1に近づけ、負例は0に近づける
出典:https://arxiv.org/abs/2104.08821
正例
負例
負例
負例
正例
3. 手法 損失関数 (先行研究との比較)
当研究の損失関数(教師なし)
12
参考:温度付きsoftmax
先行研究① SimCLR 損失関数
iとjは元同一画像
iと(i以外のk)は違う画像
当図はN=2
ミニバッチの考え方が異なる
N×2が横に並んでいるイメージ
正例ペア
softmaxの分母
正例・負例の全組合せ
Dropoutマスク
softmax部が1になった時
損失 -log(・)は0になる
N:ミニバッチ組数
:温度パラメータ
sim:コサイン類似度
h:文章ベクトル
温度
3. 手法 損失関数の、cos類似度とsoftmax値の関係 温度0.05時
14
出典: 山本作成
正例ペア
負例ペア①
負例ペア②
正例ペア
負例ペア①
負例ペア②
学習の進行時間軸のイメージ
=0.05
softmaxの温度とSTSスコアの関係
1. 温度 を慎重に調整した結果、 =0.05が単なるdot積(下表N/A)
より優れた結果となった為、この設定を用いている
2. この時、cos類似度と、softmax値の関係は左図のようになる
3. 手法 損失関数の実装
15
### 損失関数関連のみ行単位で抜粋
### ハードネガティブは省略
class Similarity(nn.Module):
def forward(self, x, y):
return self.cos(x, y) / self.temp
def cl_init(cls, config):
cls.sim = Similarity(temp=cls.model_args.temp)
def cl_forward(cls,~略~)
cos_sim = cls.sim(z1.unsqueeze(1), z2.unsqueeze(0))
labels = torch.arange(cos_sim.size(0)).long().to(cls.device)
loss_fct = nn.CrossEntropyLoss()
loss = loss_fct(cos_sim, labels)
出典: https://github.com/princeton-nlp/SimCSE
温度付きcos類似度
BERTモデルclassのforward部
cos_sim.shape=[BATCH_SIZE, BATCH_SIZE]
pytorchのCrossEntropyLossを
loss関数として使うだけ
1. pytorchのCrossEntropyLoss関数は、softmaxが内包さ
れている
2. その関数に温度付きcos類似度と、を、投入するだけで、本論
分の損失関数が実現
z1,z2がDropoutで少々異なる
ミニバッチデータ群
出典:https://pytorch.org/docs/stable/generated/torch.nn.CrossEntropyLoss.html
PyTorch公式リファレンス
引数のlabels部はインデックス箇所が1
のone-hotベクトルが生成される
labels=[0,1,2,...BATCH_SIZE-1]
正例ぺアのsoftmaxを1に他を0に
近づけるようなloss関数となる
labels
温度付きcos_sim
3. 手法 教師あり
教師あり手法の学習手法
16
1. NLI自然言語推論データセットを用いる
2. entailment (含意)を正例とする
3. neutral (中立)は使わない
4. バッチ内の他文章は負例
5. さらに、contradiction (矛盾)をハードネガ
ティブ負例として使う事でさらに性能が向上
6. 上記を反映してデータセットを再定義
ハードネガティブ負例をxi-として追加
7. 損失関数を下記とする
contradictionを使った
ハードネガティブ項が追加
contradiction文章の
ハードネガティブ負例追加
出典:https://arxiv.org/abs/2104.08821
3. 手法 モデル構造
17
出典: https://arxiv.org/pdf/1810.04805.pdf
MLP
教師なしのテスト時のみ
MLP層は使わず
[CLS]出力を直接使用
文章意味合い
ベクトル
class MLPLayer(nn.Module):
def __init__(self, config):
super().__init__()
self.dense = nn.Linear(config.hidden_size, config.hidden_size)
self.activation = nn.Tanh()
def forward(self, features, **kwargs):
x = self.dense(features)
x = self.activation(x)
return x
1層MLP
出典: https://github.com/princeton-nlp/SimCSE
学習設定
18
4. 実験
バッチサイズは{64,128,256,512}、
学習率は{1e-5,3e-5,5e-5}のグリッドサーチで決定
SimCSEのバッチサイズと学習率
• simCSEはバッチサイズに敏感ではないことが分かった
これは「対照学習には大きなバッチサイズが必要である」という先行研究の知見と矛盾している
項目 教師なし 教師あり
トレーニング
データ
英語版Wikipediaから
100万文をサンプリング
NLI
max seq
length
32 32
エポック数 1 3
その他の学習設定
学習時間
GPU:P100×1
3時間12分
※学習時間は山本が公式実装を実行したもの
※教師ありのバッチサイズ512は、公式実装ではGPU4個×各GPUバッチ128としている。GPU1個で512バッチで動かすとGPUメモリ不足の為学習時間計測できず
出典:https://arxiv.org/abs/2104.08821
教師なし:従来手法との比較(augmentation手法)
19
4. 実験
旧方式の、文章の一部の単語を削除する事で正例ペアを作る方式などより、本研究の手法が良い
STS-Bにおけるaugmentation比較
(スピアマンの相関)
同義語置換
単語の削除
出典:https://arxiv.org/abs/2104.08821
教師なし:Dropout率による性能変化
20
4. 実験
BERTデフォルトのp=0.1が最も良い結果
“Fixed 0.1”(=両方同じDropoutマスク)の性能低下が顕著 → 本論文の手法の正例の効果が高い
STS-Bにおけるドロップアウト率別の効果
(スピアマンの相関)
※”Fixed 0.1”:p=0.1だが、両方全く同じDropoutマスク
出典:https://arxiv.org/abs/2104.08821
教師なし:ベクトル空間のアラインメントとユニフォームから、SimCSE高性能の理由を説明
21
4. 実験
異方性のあるベクトル空間形状(uniform)が、等方的に良くなっていく中で、アラインメントが悪化しない
※10学習ステップ毎にプロット
ベクトル空間のアラインメントとユニフォーム
(左下がgood)
出典:https://arxiv.org/abs/2104.08821
高精度の理由を異方性の観点から
22
4. 実験
提案手法は、ベクトル上のアラインメントと、ベクトル形状のユニフォームのバランスが良い
BERT-flow法による
等方的ガウス分布変換
Sentence-BERT, 2019
BERT-whitening法による
等方性向上
色は
STSスコア
出典:https://arxiv.org/abs/2104.08821
教師あり:ハードネガティブの効果
23
4. 実験
バッチ内他を負例にする事に加え、”矛盾”をハードネガティブに加える事で精度向上
entailment (含意)のみ利用と、各手法の比較
およびcontradiction (矛盾)ハードネガティブ利用の効果
entailment (含意)を正例、バッチ内他を負例
contradiction (矛盾)ハードネガティブも利用
出典:https://arxiv.org/abs/2104.08821
教師あり:ハードネガティブの強さを調整した結果、α=1.0が最も好精度
24
4. 実験
α=1の場合が最も性能が高い
ハードネガティブの強さを加味した損失関数
※ : i=jの時のみ1になる
最適なαの検討
出典:https://arxiv.org/abs/2104.08821
25
4. 実験 結果まとめ
教師なし:BERT:SOTA
教師なし:RoBERTa:SOTA
教師あり:BERT:SOTA
教師あり:RoBERTa:SOTA
+4.2%
+2.2%
出典:https://arxiv.org/abs/2104.08821
5. まとめ
結論
• シンプルな対照学習フレームワークを提案
• 意味の類似性タスク(STS)でSOTA
• 教師なしは、Dropoutノイズで正例ペアを生成、バッチ内他を負例
• 教師ありは、NLIデータセットを活用。バッチ内他を負例。加えて、NLI”矛盾”をハードネガティブにし精度向上
• ベクトルのアラインメントと、形状ユニフォームの2軸の観点から理由を説明
26
感想
• 非常にシンプルな手法なので、考え方の応用範囲が広そう
• BERTプレトレーニング → SimCSE的な教師なし意味合い学習 → ファインチューニングで、よりタスクの精度が上がる?
• ビジネス応用の際、自然言語処理以外でも使えそう。かつ、
教師なしの、量多め、深さ浅めのデータで表現学習空間を整え → 少量のより深いデータでファインチューニングする事で
ビジネスに関わる様々な事の表現学習に使えないか興味あり