🚀 Bloomz-560m-retriever-v2
このモデルは、文章とクエリを同じベクトル空間に投影し、関連する文章にクエリを近づけます。フランス語と英語に対応しており、どちらの言語でも効果的に動作します。Open Domain Question Answering (ODQA) に最適で、特定のリランカーと組み合わせることができます。
🚀 クイックスタート
このセクションでは、Bloomz-560m-retriever-v2 モデルの概要を説明します。
✨ 主な機能
📦 インストール
このREADMEにはインストール手順が記載されていないため、このセクションは省略されます。
💻 使用例
基本的な使用法
from typing import Union, List
import numpy as np
import torch
from transformers import AutoTokenizer, AutoModel
from scipy.spatial.distance import cdist
tokenizer = AutoTokenizer.from_pretrained('cmarkea/bloomz-560m-retriever-v2')
model = AutoModel.from_pretrained('cmarkea/bloomz-560m-retriever-v2')
def infer(txt: Union[str, List[str]]):
tok = tokenizer(txt, padding=True, return_tensors='pt')
with torch.inference_mode():
embedding = model(**tok)
return embedding.get('last_hidden_state')[:,-1,:].numpy()
list_of_contexts: List[str] = [...]
emb_contexts = infer(list_of_contexts)
list_of_queries: List[str] = [...]
emb_queries = infer(list_of_queries)
dist = cdist(emb_queries, emb_contexts, 'cosine')
top_k = lambda x: [
[list_of_contexts[qq] for qq in ii]
for ii in dist.argsort(axis=-1)[:,:x]
]
top_contexts = top_k(5)
高度な使用法
import numpy as np
from transformers import pipeline
from scipy.spatial.distance import cdist
retriever = pipeline('feature-extraction', 'cmarkea/bloomz-560m-retriever-v2')
infer = lambda x: [np.array(ii[0][-1]).reshape(1,-1) for ii in retriever(x)]
list_of_contexts: List[str] = [...]
emb_contexts = np.concatenate(infer(list_of_contexts), axis=0)
list_of_queries: List[str] = [...]
emb_queries = np.concatenate(infer(list_of_queries), axis=0)
dist = cdist(emb_queries, emb_contexts, 'cosine')
top_k = lambda x: [
[list_of_contexts[qq] for qq in ii]
for ii in dist.argsort(axis=-1)[:,:x]
]
top_contexts = top_k(5)
📚 ドキュメント
概要
Bloomz-560m-retriever-v2 モデルは、Bloomz-560m-dpo-chat モデルをベースに構築されています。このバイエンコーダは、文章とクエリを同じベクトル空間に投影し、関連する文章にクエリを近づけます。フランス語と英語に対応しており、どちらの言語でも効果的に動作します。
学習
学習データセットには、mMARCO の変種が使用されており、コントラスト学習を可能にし、誤った負例を除外します。フィルタリングの閾値は0.8に設定され、正例は10個のハードな負例と対比されます。モデルは、言語の均一分布 (1/4 フランス語 - フランス語、1/4 フランス語 - 英語、1/4 英語 - フランス語、1/4 英語 - 英語) で学習されました。学習目標は、CLIP モデルで提示されたような、学習可能な温度パラメータを持つ InfoNCE 型です。
注意事項
Bloomz-560m-retriever とは異なり、このモデルはコサイン距離をメトリックとして使用しており、以前のように L2 距離を使用していません。これにより、より効率的な検索が可能になります。
ベンチマーク
パフォーマンス評価は、SQuAD の評価部分 (35の異なるトピックにまたがる1204の文章に対する5921のクエリ) に基づいて行われました。このデータセットの興味深い点は、単一のテーマに複数の文章が関連付けられており、クエリがいくつかの関連する文章に近いという難しいコンテキストを表していることです。平均すると、テーマごとに約30の文章があります (正確な分布については、Bloomz-560m-reranking を参照)。
評価指標としては、クエリが対象とする文章の平均トップランク (Top-mean)、トップランクの標準偏差 (Top-std)、Top-1、Top-5、および Top-10 内の正しい文章の割合、そして1204の文章全体の平均逆順位 (MRR) が使用されました。
🔧 技術詳細
このモデルは、文章とクエリを同じベクトル空間に投影するバイエンコーダです。コントラスト学習を使用して、関連する文章にクエリを近づけるように訓練されています。学習データセットには、誤った負例を除外するためのフィルタリングが適用されています。コサイン距離をメトリックとして使用することで、より効率的な検索が可能になります。
📄 ライセンス
このモデルは、bigscience-bloom-rail-1.0 ライセンスの下で提供されています。
引用
@online{DeBloomzRetv2,
AUTHOR = {Cyrile Delestre},
ORGANIZATION = {Cr{\'e}dit Mutuel Ark{\'e}a},
URL = {https://huggingface.co/cmarkea/bloomz-560m-retriever-v2},
YEAR = {2024},
KEYWORDS = {NLP ; Transformers ; LLM ; Bloomz},
}