Sentence-BERTとは
SBERT
シャム(Siamese)ネットワーク構造で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)利点
欠点
比較
関連用語
よくある質問
Sentence-BERTはBERTを再学習しないと使えない?
Hugging Face等で公開されている学習済みのSentence-BERT系モデルをそのまま利用すれば、追加学習なしに文埋め込みを得られる。ドメインに特化した精度を求める場合は、独自データでの追加のファインチューニングも可能。