トランスフォーマー向けインテル® エクステンションを利用した効率的な自然言語埋め込みモデル

AI

この記事は、The Parallel Universe Magazine 56 号に掲載されている「Efficient Natural Language Embedding Models with Intel® Extension for Transformers」の日本語参考訳です。原文は更新される可能性があります。原文と翻訳文の内容が異なる場合は原文を優先してください。


parallel_v56_04

自然言語埋め込みの概要

自然言語埋め込みは、自然言語処理 (NLP) に不可欠なもので、テキストを意味情報をキャプチャーするベクトルとして表します。これらの埋め込みは計算操作に必要な数値入力を提供するため、さまざまな下流の NLP タスクにとって重要です。

数ある埋め込みモデルの中でも、BGE (BAAI General Embedding) (英語) は効率が非常に優れています。small (英語) および base (英語) バージョンは、速度と効率のバランスが良く、テキスト埋め込みの理想的な選択肢となっています。BGE はベクトル・データベースとシームレスに統合され、テキスト埋め込み以外でも、その可能性をさらに拡大しています。

この記事では、BGE small モデルの速度と精度を大幅に向上するオープンソース・ツールのトランスフォーマー向けインテル® エクステンション (英語) を利用して、埋め込みモデルのパフォーマンスを向上させる革新的なアプローチを紹介します。

INT8 静的なトレーニング後の量子化

静的なトレーニング後の量子化 (PTQ) は、追加のトレーニング段階を量子化する効果的なアプローチです。モデルの量子化パラメーター (スケール、ゼロ点など) を決定するには、代表的なデータセットを使用したキャリブレーションが必要です。bge-small-en-v1.5 (英語) に精度を考慮した自動チューニングを備えた PTQ を適用して、最適な量子化モデルを生成します。以下のコード例は、トレーニング後の量子化を活用して BGE small モデルを最適化する方法を示しています。CQADupStack (英語) データセットをキャリブレーションに使用し、MTEB (英語) STS タスクを評価ベンチマークとして使用します。完全なコードはこちらから (英語) 入手できます (ドキュメントは、readme (英語) を参照してください)。

from intel_extension_for_transformers.transformers import metrics, objectives, QuantizationConfig
from intel_extension_for_transformers.transformers.trainer import NLPTrainer
# Replace transformers.Trainer with NLPTrainer
# trainer = transformers.Trainer(......)
trainer = NLPTrainer(......)
metric = metrics.Metric(
    name="eval_accuracy", is_relative=True, criterion=0.01
)
objective = objectives.performance
q_config = QuantizationConfig(
    approach="PostTrainingStatic",
    metrics=[metric],
    objectives=[objective]
)
model = trainer.quantize(quant_config=q_config, eval_func=mteb_sts_eval)

開始方法を次に示します。

from transformers import AutoTokenizer 
from intel_extension_for_transformers.transformers import AutoModel 

sentences_batch = ['sentence-1', 'sentence-2', 'sentence-3', 'sentence-4'] 
tokenizer = AutoTokenizer.from_pretrained('BAAI/bge-small-en-v1.5') 
encoded_input = tokenizer(sentences_batch, 
                            padding=True, 
                            truncation=True, 
                            max_length=512, 
                            return_tensors="np") 

engine_input = [encoded_input['input_ids'], encoded_input['token_type_ids'], 
                    encoded_input['attention_mask']]

model = AutoModel.from_pretrained('./model_and_tokenizer/int8-model.onnx', 
                                   use_embedding_runtime=True) 
sentence_embeddings = model.generate(engine_input)['last_hidden_state:0'] 
print("Sentence embeddings:", sentence_embeddings)

パフォーマンスの測定

MTEB STS 上で最適な量子化 BGE モデルを測定しました。すべてのモデルの精度相対損失は 1% 以内です。

埋め込みレイテンシーとして、1 ソケット、24 コア/インスタンス、シーケンス長 = 512 の 1 つのインスタンス、バッチサイズ = 1 を使用して 1 つの文をエンコードする平均ミリ秒も測定しました。

タイトルとURLをコピーしました