Re Reference AI

モデル

Sentence-BERTとは

SBERT

シャム(Siamese)ネットワーク構造でBERTを微調整し、コサイン類似度で比較可能な文単位の埋め込みを高速に得られるモデル

NLP埋め込み

ひとことで言うと

文章ごとの埋め込みを高速に作れるよう、BERTを改良したモデル。

概要

Sentence-BERT(SBERT)とは、事前学習済みのBERTをシャム(Siamese)/トリプレットネットワーク構造で微調整し、文単位の埋め込みベクトルコサイン類似度で直接比較できるようにしたモデル。 通常のBERTで2つの文の類似度を求めるには、2文をまとめて1回のモデル入力として処理する必要があり、大規模なコーパスの中から類似文を検索する用途では計算コストが非常に高くなる。Sentence-BERTは、各文を個別にBERTへ入力し、プーリング(CLSトークン・平均・最大値等)によって固定長の文埋め込みへ変換したうえで、シャムネットワーク構造により類似文同士の埋め込みが近くなるよう学習する。 あらかじめ全文書の埋め込みを計算しておけば、類似文検索はコサイン類似度の計算だけで高速化でき、意味的テキスト類似度(STS)判定やクラスタリング、意味検索(セマンティック検索)等の用途で広く使われている。

背景

BERTは文ペアの類似度判定で高い精度を示す一方、2文をまとめて入力する構造上、大規模なコーパスから類似文を検索するような組み合わせ数の多いタスクでは計算コストが膨大になっていた。Sentence-BERTは、文ごとに独立した埋め込みベクトルを得られるようにすることで、この計算コストの課題を解決するために開発された。

歴史

2019年8月: Nils ReimersとIryna Gurevychが、EMNLP-IJCNLP 2019にて論文「Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks」を発表。

コード例

sentence-transformersによる文埋め込みと類似度計算

from sentence_transformers import SentenceTransformer

model = SentenceTransformer("sentence-transformers/all-MiniLM-L6-v2")

sentences = [
    "The weather is lovely today.",
    "It's so sunny outside!",
    "He drove to the stadium.",
]

embeddings = model.encode(sentences)
similarities = model.similarity(embeddings, embeddings)
print(similarities)

利点

欠点

  • 通常のBERTが2文を同時に処理して得る精度と比べ、個別の埋め込みを比較する方式では精度がわずかに劣る場合がある
  • 埋め込みの品質は学習に使ったデータ・タスク次第で決まり、ドメインが大きく異なる文書では性能が低下しやすい

比較

  • BERTSentence-BERTは、BERTをシャムネットワーク構造で微調整し、文単位の埋め込みを高速に比較できるよう改良したモデル
  • 埋め込みモデルSentence-BERTは、文単位の埋め込みを得る代表的な埋め込みモデルの1つ
  • セマンティック検索Sentence-BERTによる文埋め込みは、意味検索(セマンティック検索)の実装によく使われる

関連用語

BERT埋め込みモデルセマンティック検索コサイン類似度

よくある質問

Sentence-BERTはBERTを再学習しないと使えない?

Hugging Face等で公開されている学習済みのSentence-BERT系モデルをそのまま利用すれば、追加学習なしに文埋め込みを得られる。ドメインに特化した精度を求める場合は、独自データでの追加のファインチューニングも可能。

参考文献