SPLADE
naver/splade: SPLADE: sparse neural search (SIGIR21, SIGIR22)
スパース検索モデル「SPLADE」を日本語で試す
SPLADE モデルの作り方・日本語SPLADEテクニカルレポート - A Day in the Life
高性能な日本語SPLADE(スパース検索)モデルを公開しました - A Day in the Life
情報検索モデルで最高性能(512トークン以下)・日本語版SPLADE v2をリリース - A Day in the Life
Japanese Splade Demo Streamlit - a Hugging Face Space by hotchpotch
hotchpotch/japanese-splade-v2 · Hugging Face
aken12/splade-japanese-v3 · Hugging Face
モデルは入力トークン * 語彙に対してスコアを割り当てている
モデルの出力は [batch, input_tokens, vocab]
例えば model(**tokenizer([text], return_tensors="pt")) して
返り値の .logits.shape は [1, len(text), 32768]
スコアの大半は負
splade_max_pooling で取り出す
ReLU で負の値を 0 に、log(1+x) でスコアをなだらかに
max_pooling で全語彙 に対して各トークン位置での最大スコアを取る
入力が "車の燃費を向上させる方法は?" の時
code:visualize
語彙トークン (32768次元)
┌───┬────┬─────┬────────┬─────┬───┐
│ 0 │... │5910 │ 19160 │ ... │327│
│ │ │ 車 │ ガソリン │ │ │
┌───┐ ├───┼────┼─────┼────────┼─────┼───┤
│ 0 │CLS│ │ │ │ │ │ │
├───┤ ├───┼────┼─────┼────────┼─────┼───┤
│ 1 │車 │ │... │1.86 │ -0.54 │ ... │ │ ← 「車」の位置でのスコア
├───┤ ├───┼────┼─────┼────────┼─────┼───┤
│ 2 │の │ │ │ │ │ │ │
├───┤ ├───┼────┼─────┼────────┼─────┼───┤
│ 3 │燃費 │ │... │ - │ 0.38 │ ... │ │ ← 「燃費」の位置での「ガソリン」のスコア
├───┤ ├───┼────┼─────┼────────┼─────┼───┤
│...│ │ │ │ │ │ │ │
└───┘ └───┴────┴─────┴────────┴─────┴───┘
入力位置
Max Pooling 後のベクトル (語彙次元)
┌───┬────┬─────┬───────┬─────┬───┐
│...│... │1.86 │ 0.38 │ ... │...│ ← 各語彙列の最大値
└───┴────┴─────┴───────┴─────┴───┘
│ │ └── 「ガソリン」の最大スコア (位置3から)
│ └────── 「車」の最大スコア (位置1から)
└──────────── 他の多くの次元はほぼ0
スパースベクトルの扱い