Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks
September 23, 2023Sentence-BERTは、テキストをコサイン類似度で意味の類似度を比較できる固定長のベクトルに変換できる。 BERTを2つのテキストを入力し類似度を出力するように訓練できるが、あるテキストに類似するテキストを求めたい場合には組合せ爆発が生じる。 Sentence-BERTは、類似度が定義されたテキストの組から、類似するテキスト同士を近い位置に写像できるように学習する。 ネットワークは、BERTを使ったシャムネットワークであり、重みを共有した2つのBERTに1つずつテキストを入力し、両方の出力を目的関数に入力する。
テキストをベクトル空間に配置するために、BERTの出力は固定長のベクトルに変換される。 変換方法は、2つのテキストの先頭につけられるBERTのCLSトークンの出力、出力のされるすべてのベクトルの平均値、または最大値の3つがある。 平均値がデフォルトである。
固定長の変換方法とおなじく、目的関数も、分類、回帰、トリプレットロスの3種類がある。 訓練データにあわせてふさわしい目的関数を選ぶ。
分類は、2つのテキストの埋め込みベクトル\(u, v\)と要素間の差\(|u-v|\)を連結したベクトルから\(k\)種類のラベルのうち1つを推定するタスクである。 $$ o = \text{softmax}(W_t(u, v, |u-v|)) $$ 埋め込みベクトルの長さが\(n\)であれば、重みは\(W_t \in \mathbb{R}^{3n\times k}\)である。
回帰であれば、\(u, v\)のコサイン類似度を計算し、ラベルとの最小二乗誤差を最小化するように重みを更新する。
トリプレットロスの訓練データは、ancher sentence \(s_a\), positive sentence \(s_p\), negative sentence \(s_n\)の3つのテキストからなり、\(s_p\)と\(s_a\)の距離が\(s_a\)と\(s_n\)よりも小さくなるようにモデルを訓練する。 \(\epsilon\)を\(s_p\)が\(s_n\)よりも\(s_a\)に少なくとも\(\epsilon\)だけ近いことを保証する値とすると、目的関数は $$ \max(||s_a - s_p|| - ||s_a - s_n || + \epsilon, 0) $$ である。