SimCSEとは?ドロップアウトだけで文埋め込みを強化し、検索・類似度計算を改善する手法

SimCSEは、同じ文を2回エンコードし、ドロップアウトの揺らぎだけを使って対照学習する文埋め込み手法です。仕組み、実験結果、検索やRAGでの使い道を日本語で解説します。

参考文献

SimCSE: Simple Contrastive Learning of Sentence Embeddings

Tianyu Gao, Xingcheng Yao, Danqi Chen

論文を見る

今回の論文

今回取り上げるのは、Tianyu Gao、Xingcheng Yao、Danqi Chen による論文「SimCSE: Simple Contrastive Learning of Sentence Embeddings」です。2021 年 4 月に arXiv で公開された論文で、研究分野は文埋め込み、対照学習、意味類似検索です。URL は https://doi.org/10.48550/arXiv.2104.08821 です。

この論文を選んだ理由は、検索や RAG の土台になる埋め込みモデルを、かなり少ない仕掛けで強くできるからです。新しい巨大モデルを作る話ではなく、既存の BERT 系モデルをどう使えば検索に効く表現空間を作れるか、という実務に近い問いに正面から答えています。

どんな技術か

SimCSE は、文をベクトルに変換する sentence embedding を改善する技術です。

たとえば、FAQ 検索、問い合わせの重複検出、RAG のクエリ拡張前段、ナレッジベース検索では、「意味が近い文どうしをベクトル空間で近く置く」ことが重要です。しかし、そのままの BERT を使うと、文ベクトルがうまく広がらず、似ていない文まで近く集まりやすい問題があります。

SimCSE は、この問題に対して対照学習を使います。しかも発想はかなりシンプルです。教師なし版では、同じ文を 2 回モデルに通し、ドロップアウトだけで少し違う表現を作って positive pair にします。教師あり版では、自然言語推論データの entailment を positive、contradiction を hard negative として使います。

ひとことで言えば、SimCSE は「文の意味を保ったまま、ベクトル空間の形を検索向きに整える技術」です。検索や類似度計算で効く埋め込みを、小さな学習レシピの変更で作れるのが価値です。

課題

SimCSE が解決しようとしているのは、事前学習済み言語モデルの文埋め込みが、そのままでは意味検索に向かないことです。

何が難しいのかというと、言語モデルは単語予測やマスク復元には強くても、「文全体を 1 本のベクトルに圧縮して、意味の近さで比較する」ようには最適化されていないからです。その結果、文ベクトルが狭い方向に偏って並ぶ anisotropy が起きやすく、コサイン類似度で比べても差が出にくくなります。

既存手法にも限界がありました。Sentence-BERT のように文ペアの教師データで学習する方法は強力ですが、教師データに依存します。逆に、教師なしで文埋め込みを作る手法は、データ拡張の設計が難しく、単語削除や置換のような離散的な augmentation が文の意味を壊しやすいという問題がありました。

なぜこの課題を解く必要があるのかというと、実際の AI システムでは「似た文をうまく集められるか」がボトルネックになる場面が多いからです。RAG の検索精度、FAQ ボットの候補抽出、問い合わせの自動分類、ログや議事録のクラスタリングなどは、土台の文埋め込み品質に強く依存します。ここが弱いと、後段の reranker や LLM を改善しても限界があります。

つまり SimCSE の問題設定は、「巨大な検索システムを作る前に、そもそも文ベクトルをどう学習すれば意味比較に強くなるのか」です。

用語解説

sentence embedding
文全体を固定長ベクトルに変換した表現です。SimCSE の目的は、このベクトルが意味の近さを反映するように学習することです。検索、クラスタリング、重複検出などの基礎になります。
対照学習
近づけたいペアは近づけ、離したいサンプルは離す学習方法です。SimCSE では同じ文から作った 2 つの表現を近づけ、同一バッチ内の別文を離すことで、意味空間を整理します。
dropout
学習時に一部のユニットをランダムに無効化する正則化です。SimCSE ではこのランダム性をノイズ源として使い、同じ文でも少し異なる埋め込みを作るのが重要です。
hard negative
単なる無関係文ではなく、見た目や文脈がある程度近く、間違えやすい負例です。SimCSE の教師あり版では contradiction 文を hard negative として使い、似ているが意味は逆の文を区別する力を伸ばします。
anisotropy
埋め込み空間が特定方向に偏り、多くのベクトルが似た向きに集まる性質です。BERT 系の文ベクトルで起こりやすく、検索時にスコア差がつきにくくなるため、SimCSE を理解するうえで重要です。

技術の仕組み

SimCSE の核は、「難しいデータ拡張を作らなくても、同じ文を 2 回通して対照学習すれば強い文埋め込みが作れる」という点にあります。

基本アイデア

一般的な対照学習では、元データから意味を保った 2 つの view を作って positive pair にします。画像なら切り抜きや反転が使えますが、文章ではこの設計が難しいです。単語を消したり置き換えたりすると、意味が壊れたり不自然な文になったりします。

SimCSE はこの問題を、入力文を変えずに hidden state 側の揺らぎだけで解決します。同じ文を同じエンコーダへ 2 回入力し、そのときの dropout mask の違いで少し異なる埋め込みを得ます。この 2 つを positive とし、同一ミニバッチの他の文を negative として学習します。

モデル構造

モデル構造自体は特別ではありません。BERT や RoBERTa のような既存の事前学習済みエンコーダをそのまま使い、その出力から文ベクトルを取り出します。大きな新規アーキテクチャを足すのではなく、既存エンコーダを sentence embedding 向けに fine-tune する設計です。

つまり SimCSE の新しさは「Transformer をどう作るか」ではなく、「sentence embedding の学習信号をどう与えるか」にあります。

学習方法

教師なし SimCSE

教師なし版では、同じ文 x を 2 回エンコードし、それぞれ異なる dropout mask を適用した埋め込みを作ります。この 2 つが positive pair です。損失関数は in-batch negatives を使う contrastive loss で、正例とのコサイン類似度を高め、他文との類似度を下げます。

この設計の重要点は、「dropout が最小限の data augmentation として機能する」ことです。論文では dropout を外すと representation collapse に近い挙動が起き、性能が大きく落ちることを示しています。つまりノイズは邪魔ではなく、同一文から意味を保った別 view を作る役割を持っています。

教師あり SimCSE

教師あり版では、自然言語推論のデータを使います。entailment の文ペアを positive にし、contradiction の文を hard negative として組み込みます。

ここが実務的に面白い点です。単に「似ている文を近づける」だけでなく、「表面上は似ていても意味が食い違う文は離す」ので、FAQ 検索や社内文書検索で起きやすい取り違えに強くなります。肯定と否定、条件付きの違い、例外ルールの見分けに効きやすい設計です。

推論方法

推論時は非常に単純です。学習済みエンコーダで文をベクトル化し、コサイン類似度などで検索や比較に使います。生成モデルのような複雑な decoding はありません。

このため SimCSE は、ベクトル DB の前段、ANN 検索、クラスタリング、重複検出などへそのまま組み込みやすいです。既存の RAG パイプラインでも、埋め込みモデルの差し替え先として使いやすい部類です。

何が効いているのか

論文では、SimCSE の効果を alignment と uniformity の観点で説明しています。対照学習によって positive pair は近づきつつ、埋め込み全体はより均一に広がります。これにより、BERT 系文ベクトルが抱えやすい anisotropy が緩和され、類似度スコアが意味差を反映しやすくなります。

実務目線で言えば、「似た文を近づける」だけでは足りず、「空間全体を詰まりすぎないように広げる」ことが検索精度に効く、という話です。SimCSE はこの空間整形をかなりシンプルに実現しています。

実験と結果

論文では、SimCSE が sentence embedding として本当に強いか、また dropout や hard negative がどれだけ効くかを検証しています。

何を検証したのか

主な検証は 3 つあります。1 つ目は、教師なし SimCSE が既存の教師なし手法より強いかです。2 つ目は、教師あり SimCSE が NLI を使う既存手法より強いかです。3 つ目は、dropout や hard negative などの設計が本当に性能要因になっているかです。

データセットと評価指標

評価では、7 つの STS タスクと 7 つの transfer tasks が使われています。中心となる指標は STS における Spearman 相関で、「人間が感じる意味の近さ」とモデルの類似度スコアがどれだけ一致するかを見ています。

この評価設定は実務との相性が良いです。FAQ 候補抽出や検索の一次スコアは、最終的には「意味的に近いものが上に来るか」に帰着するため、STS の改善はそのまま応用価値につながりやすいです。

教師なしでもかなり強い

論文では、BERT-base を使った教師なし SimCSE が STS 平均 76.3 を達成し、従来の最良手法を 4.2 ポイント上回りました。かなり重要なのは、この方法が特別な外部教師データなしで成立していることです。

さらに、開発セットでの比較では、単語削除や synonym replacement、MLM 置換といった離散的 augmentation よりも、何もしないで dropout だけを使うほうが良い結果になっています。文章では雑な augmentation が逆効果になりやすいことを、かなり明快に示しています。

教師あり版はさらに強い

教師あり SimCSE は、NLI の entailment と contradiction を使うことで、BERT-base で STS 平均 81.6 を達成しました。これは当時の既存手法より 2.2 ポイント高い結果です。

この差は、単なるスコア改善以上の意味があります。意味が近い文を近づけるだけでなく、意味が衝突する hard negative を明示的に離すことで、検索の誤ヒットを減らせる可能性が高いからです。特に社内規程や仕様書のような、「文面は似ているが条件が違う」文書群で効きやすいと考えられます。

dropout を外すと大きく落ちる

論文のアブレーションでは、教師なし SimCSE から dropout を外すと STS-B 開発セットで性能が大きく下がっています。著者らはこれを representation collapse の観点から説明しています。

これは実装上かなり大事です。SimCSE は「同じ文を 2 回入れるだけ」に見えますが、本質は同一文から 2 つの slightly different view を作ることにあります。したがって、学習設定を雑に移植すると再現しづらい技術でもあります。

何に使える?

SimCSE は、文どうしの意味比較が入る処理ならかなり広く使えます。特に、最初の候補抽出を embedding ベースで行うシステムと相性が良いです。

RAG の検索精度改善

RAG では、最初の retrieval が弱いと後段の LLM が苦しくなります。SimCSE 系の文埋め込みを使うと、問い合わせ文とナレッジ断片の意味的な近さをより素直に測れるため、top-k に正しい候補を入れやすくなります。

特に、短い質問と短いナレッジ片のマッチングでは効果が出やすいです。たとえばヘルプセンター記事の見出し検索、FAQ 検索、社内規程の条項検索などです。

FAQ ボットや問い合わせ自動応答

過去回答や FAQ ペアをベクトル化し、新規問い合わせに近い候補を探す用途に向いています。教師あり SimCSE の hard negative の発想は、「似た文面だが回答が違う問い合わせ」を区別したいケースに合っています。

たとえば「解約できますか」と「解約手数料はかかりますか」のように、表面上は似ていても intent が違う質問の切り分けに役立ちます。

重複検出とクラスタリング

問い合わせチケット、会議メモ、障害報告、レビューコメントなどをまとめる用途でも使えます。文埋め込みが改善されると、単純なキーワード一致では拾えない言い換えをまとめやすくなります。

これは小規模チームにも実用的です。高度な生成モデルを入れなくても、まず埋め込み品質を上げるだけで運用の見通しが良くなる場面があります。

reranker や分類器の前段

SimCSE 自体は最終判断を下すモデルではありませんが、一次候補生成の質を高められます。上位候補だけ cross-encoder や LLM で再判定する構成にすると、計算コストを抑えつつ精度を上げやすいです。

実務では「全部を高コスト推論する」のではなく、「埋め込みで絞る」段階が重要なので、その前段の品質改善として意味があります。

開発や事業へのヒント

この論文から得られるヒントは、検索や RAG の改善を、すぐに巨大な生成モデル側の工夫へ寄せなくてもよいということです。ベクトル化の設計だけでも、かなり効く余地があります。

まず埋め込みを疑う

RAG が弱いとき、chunk サイズや prompt ばかり見がちです。しかし、そもそも埋め込み空間が意味比較に向いていないなら、その後の工夫で取り返せる幅は限られます。自分で AI アプリを作るなら、retrieval エラーの何割が embedding 起因かを切り分けるだけでも改善方針が変わります。

少量教師データでも価値が出る

教師あり SimCSE の発想は、小規模プロダクトにも移植しやすいです。たとえば自社 FAQ で、同義の質問ペアを positive にし、紛らわしい別質問を hard negative にするだけでも、検索品質の改善余地があります。これは論文の完全再現ではありませんが、設計思想としてかなり応用しやすい部分です。

生成より先に retrieval 基盤を整える

社内ツールや SaaS の AI 機能では、最終回答を LLM にさせる前に、候補を取りに行く retrieval 層があります。ここが弱いと hallucination 対策も効きにくくなります。SimCSE のような埋め込み改善は、派手ではないですが、実務では費用対効果が高い投資になりやすいです。

hard negative の収集は事業資産になる

論文の教師あり版で効いているのは、間違えやすい negative を明示的に入れている点です。プロダクト運営でも、「よく誤ヒットする質問」「似ているが別カテゴリの文書」を蓄積すると、検索改善だけでなく、分類器や評価データの資産にもなります。

限界

SimCSE にも限界はあります。まず、教師なし版は非常に手軽ですが、ドメイン固有の意味差まできれいに学べるとは限りません。業界用語や社内用語が多い環境では、追加のドメイン適応が必要になる可能性があります。

また、教師あり版は NLI 的なラベルや hard negative が効きますが、その分だけデータ整備コストが増えます。実務で hard negative を集めるには、検索ログや誤ヒット分析が必要です。

精度面でも、SimCSE は sentence embedding の基盤技術であり、複雑なマルチホップ推論や長文全体の読解を単独で解決するわけではありません。長い文書検索では chunking、late interaction、reranking など別の設計も必要です。

さらに、実装時には再現性に注意が要ります。dropout の扱い、バッチサイズ、温度パラメータ、negative の取り方で結果が変わりやすく、論文の「シンプルさ」に反して学習条件の影響は小さくありません。

よくある質問

Q. SimCSE は Sentence-BERT と何が違うのですか?

A. Sentence-BERT は主に教師ありの文ペア学習を前提にした手法ですが、SimCSE は教師なしでも強い文埋め込みを作れる点が特徴です。さらに SimCSE は、対照学習で埋め込み空間の uniformity を改善することを重視しています。

Q. RAG で使うなら SimCSE だけで十分ですか?

A. 十分とは限りません。SimCSE は retrieval の土台を改善できますが、長文の chunk 設計、メタデータ活用、reranker、最終生成モデルの制御は別途必要です。ただし最初の候補抽出品質を底上げする手段としてはかなり有力です。

Q. 教師なし版と教師あり版はどちらを選ぶべきですか?

A. まずは教師なし版が試しやすいです。追加ラベルが不要で、既存のテキストだけでも始められます。一方で、問い合わせログや FAQ ペアがあり、似ているが違うケースを学ばせたいなら教師あり版の発想が有効です。

Q. 日本語の検索にも応用できますか?

A. はい、考え方自体は応用できます。ただし論文は主に英語データで評価しているため、日本語ではベースモデル選定と追加学習データが重要です。特に社内文書や業界文書に寄せるなら、日本語コーパスでの適応を考えたほうがよいです。

Q. なぜ dropout だけでうまくいくのですか?

A. 同じ文から意味を保った 2 つの slightly different view を作れるからです。文章では単語削除や置換が意味を壊しやすいため、hidden state 側の軽いノイズのほうが対照学習に向いていた、というのがこの論文の重要な発見です。

今日の学び

この論文は、事前学習済みモデルの文埋め込みが、そのままでは意味検索に向かず、ベクトル空間が偏ってしまう課題を扱いました。これに対して SimCSE は、同じ文を 2 回エンコードして dropout の違いだけで positive pair を作る対照学習と、必要に応じて entailment / contradiction を使う教師あり学習で解こうとしました。

ここから得られるヒントは、検索や RAG の改善は後段の LLM だけでなく、前段の埋め込み設計でも大きく変えられるということです。派手な生成最適化の前に、意味空間をどう整えるかを見るだけでも、実務の精度はかなり動きます。

関連記事

RAG・検索

ColPaliとは?PDFを画像のまま検索できる視覚RAGの仕組みと使い道

ColPaliは、PDFをOCRでテキスト化してから検索するのではなく、ページ画像をそのまま埋め込み検索する文書検索技術です。図表やレイアウトを含む文書検索でなぜ強いのか、仕組み、評価結果、RAGへの使い道まで日本語で解説します。

参照論文:ColPali: Efficient Document Retrieval with Vision Language Models

RAG・検索

Late Chunkingとは?RAGの文脈切れを減らす埋め込み分割の仕組みと使い道

Late Chunkingは、文書を先に小さく分割するのではなく、全文を一度エンコードしてからチャンク単位に埋め込みを作る手法です。RAGや検索で起きやすい文脈切れをなぜ減らせるのか、仕組み、評価結果、実務での使い道まで日本語で解説します。

参照論文:Late Chunking: Contextual Chunk Embeddings Using Long-Context Embedding Models

RAG・検索

Matryoshka Representation Learningとは?1つの埋め込みを用途ごとに縮めて使える多粒度表現学習の仕組みと使い道

Matryoshka Representation Learningは、1本の埋め込みベクトルの先頭側に重要情報を詰め込み、短い次元でも長い次元でも使えるようにする学習手法です。なぜ固定長埋め込みが非効率なのか、どうやって多粒度表現を作るのか、検索やRAGでどう活かせるのかを解説します。

参照論文:Matryoshka Representation Learning