bi-encoder モデル(Jina Embeddingsなど)は事前に計算された埋め込みのデータベースから多くの一致ドキュメントを素早く取得できますが、リランカーモデルはユーザーのクエリと取得したドキュメントをクロスエンコーディングする、より遅いものの正確なアプローチを使用してこのセットを絞り込むことができます。Jina AI は最初のリランカーモデルであるjina-reranker-v1-base-enをリリースしました。この記事では、リランカーが RAG の精度を最適化するために不可欠である理由と、Jina Embeddings/Reranker、LlamaIndex、および Mixtral-8x7B-Instruct-v0.1
言語モデル(HuggingFace でホスト)を使用して最先端の RAG システムを構築する方法について詳しく説明します。
必要なもの:

Jina Embeddings と Reranker モデル、および Mixtral はリモートで実行され、RESTful API を介してアクセスされるため、特別なハードウェアは必要ありません。
tagリランカーとは何か
チュートリアルを続ける前に、リランカーとは何かを理解することが重要です。リランカーとは何か、そしてなぜ Jina Reranker V1 があなたにとって最適な選択なのかを完全に理解するために、続行する前に Jina Reranker V1 のリリース記事をお読みください。

要約すると、リランカーはクロスエンコーダーモデルで、ドキュメント-クエリのペアを入力として受け取り、その入力ペアに対する関連性スコアを出力します。リランカーを使用することで、ユーザーは特定のクエリに対してドキュメントを最も関連性の高いものから低いものまで並べ替えることができます。
tagjina-reranker-v1-base-en を使用する理由
リランキングは、埋め込みモデルのみを使用する場合よりもはるかに関連性の高い情報を提供します。私たちのモデルリリース記事では、Jina Reranker がオープンソースおよびクローズドソースの競合他社と比較して際立っており、ヒット率で 8%、平均逆順位で 33% の検索システムの改善を実現できることを実証しました。
これは、適用された RAG ソリューションを通じて得られる応答の品質に直接的な影響を与えます。この主張を裏付ける理論とともに、LlamaIndex で構築された RAG パイプラインに Jina Reranker がどのような効果をもたらすかを実例で示します。
tag始める前に:LlamaIndex のノード後処理について
LlamaIndex のノード後処理は、クエリエンジン内で検索後かつ応答生成前にノードを変換またはフィルタリングするモジュールです。このパッケージの一部として、LlamaIndex は組み込みオプションとカスタム追加のための API の両方を提供しています。
Jina Reranker は現在、LlamaIndex にノード後処理として統合されています。応答の精度を向上させるために、取得されたノードはクエリとの関連性に基づいて再順序付けされ、上位 N 個のノードが返されます。
tagGoogle Colab で一緒に進める
このチュートリアルには、Google Colab またはローカルで実行できる付属のノートブックがあります。
tagデータセット:2024 Nike Kids 製品カタログ
RAG アプリケーションにおける Jina Reranker のパフォーマンス向上を示すために、2024 Nike Kids 製品カタログをデータセットとして選択しました。このドキュメントには、2024 年に Nike が提供する子供向け製品の構造化されたセットが含まれています。このデータセットを選んだのは、リランカーの効果が明確に示され、多くのユーザーに分かりやすいためです。
tag前提条件のインストール
必要な要件をインストールするには、以下を実行します:
pip install llama-index-postprocessor-jinaai-rerank
pip install llama-index-embeddings-jinaai
pip install llama-index
pip install llama-index-llms-huggingface
pip install "huggingface_hub[inference]"
tagMixtral LLM へのアクセス
Mixtral-8x7B-Instruct-v0.1
LLM を使用するには、HuggingFace トークンが必要です。
from llama_index.llms.huggingface import HuggingFaceInferenceAPI
hf_inference_api_key = "<your HuggingFace access token here>"
mixtral_llm = HuggingFaceInferenceAPI(
model_name="mistralai/Mixtral-8x7B-Instruct-v0.1",
token=hf_inference_api_key,
)
tagJina Embeddings と Jina Reranker へのアクセス
Jina Embeddings と Jina Reranker を使用するには、専用のAPI キーが必要です。これを api_key
という変数に保存し、LlamaIndex から Jina Embeddings モデルを呼び出します:
from llama_index.embeddings.jinaai import JinaEmbedding
api_key = "<your Jina key here>"
jina_embeddings = JinaEmbedding(api_key=api_key)
同様に、Jina Reranker モデルを呼び出すことができます。top_n
パラメータを設定することで、最終出力で返される最も関連性の高いドキュメントの数を決定できます。この場合、top_n=2
:
from llama_index.postprocessor.jinaai_rerank import JinaRerank
jina_rerank = JinaRerank(api_key=api_key, top_n=2)
tag2024年 Nike キッズ製品カタログのダウンロード
データをダウンロードするには、以下のコードを実行します:
from llama_index.core import SimpleDirectoryReader
import requests
url = '<https://niketeam-asset-download.nike.net/catalogs/2024/2024_Nike%20Kids_02_09_24.pdf?cb=09302022>'
response = requests.get(url)
with open('Nike_Catalog.pdf', 'wb') as f:
f.write(response.content)
reader = SimpleDirectoryReader(
input_files=["Nike_Catalog.pdf"]
)
documents = reader.load_data()
tagJina Embeddings によるエンベディングの生成とインデックス作成
セットアップが完了したので、エンベディングベクトル(ノード)を生成してインデックスを作成します。Jina Embeddings v2 モデルは最大 8192 トークンの入力を受け付けるため、このような文書の場合、さらなるテキストの分割やセクションのトークン数のチェックは必要ありません。文書のエンベッドとインデックス作成を行うには、以下のコードを実行します:
from llama_index.core import VectorStoreIndex
index = VectorStoreIndex.from_documents(
documents=documents, embed_model=jina_embeddings
)
tagJina Reranker を使用しないクエリ結果の取得
このテキストセットから特定の情報を検索する際、LlamaIndex の query_engine
は以下の処理を行います:
- Jina Embeddings V2 を使用してクエリのエンベディングを作成します。
- インデックスを使用して、クエリエンベディングとのコサイン類似度が最も高い
top_k = 10
の保存されたエンベディングを取得し、そのインデックス内の位置を返します。 - ベクトルデータ配列内の対応するテキストを検索します。
最高の Nike ジャージの生地について質問してみましょう:
query_engine = index.as_query_engine(
similarity_top_k=10, llm=mixtral_llm
)
response = query_engine.query(
"What are the best padded pants that Nike sells?",
)
print(response.source_nodes[0].text)
結果:
NIKE KIDS EQUIPMENT87NIKE BRASILIA SMALL DUFFEL 9.5
DM3976 $37.00
SIZES: Misc OFFER DATE: 07/01/22 END DATE: 07/01/25
Tough 600D polyester • Durable 300D polyester • Detachable shoulder
strap • Ventilated shoe or wet/dry storage • Secure zip pocket •
Limited lifetime guarantee • Screened Swoosh design trademark
DIMENSIONS: 20" L x 10" W x 11" H
010 Black/Black/(White) 068 Iron Grey/Black/(White)
...
tagReranker を使用したクエリ結果の取得
次に、RAG アプリケーションが異なる、より関連性の高い結果を生成するかどうかを確認するために、reranker を適用します。そのためには、query_engine
に node_postprocessors
を追加する必要があります:
query_engine = index.as_query_engine(
similarity_top_k=10, llm=mixtral_llm, node_postprocessors=[jina_rerank]
)
response = query_engine.query(
"What are the best padded pants that Nike sells?",
)
print(response.source_nodes[0].text)
reranker を使用しない前のケースと比較して、query_engine
には [jina_rerank]
に設定された node_postprocessors パラメータが含まれるようになったことに注意してください。
結果:
NIKE KIDS FOOTBALL – STOCK10
DJ5731 $47.00
SIZES: XS, S, M, L, XL, 2XL, 3XL
FABRIC: Body/panels lining: 100% polyester. Pad: 100%
ethylene vinyl acetate.
OFFER DATE: 04/01/23
END DATE: 04/01/27
Take the field ready to give it your all in the Nike Recruit
Pants. They're made from lightweight, stretchy fabric with
sweat-wicking power to help keep you dry and moving freely
when the game heats up. With integrated pads shaped for a
comfortable fit, you'll be prepared for a performance you can
be proud of. Choose from 6 different colors to outfit your
team. Nike Dri-FIT technology moves sweat away from your skin
for quicker evaporation, helping you stay dry and comfortable.
Lightweight knit fabric stretches with you to let you move
naturally. Thigh, knee, hip and tailbone pads are shaped for
an optimal fit, without compromising on coverage. A
body-hugging fit is designed to help keep the padding in place
and close to the body. Belt at the waist lets you dial in your
perfect fit to maximize comfort. Elastic at hems.
Hip width: 15", Inseam length: 11.75" (size medium).
010 Black/(White) 060 Team Anthracite/(White) 100 White/(Black)
419 Team Navy/(White) 493 Team Royal/(White) 657 Team Scarlet/(White)
tag結論
見ての通り、reranker を使用しないクエリでは、「通気性のためのメッシュバック」と「ソフトな肌触りのスリムフィット」に言及したトップ結果が得られました。対照的に、reranker を使用することで、「最適な通気性のために設計」され、「試合当日のプレッシャーの下でも乾燥した状態を保つ水分吸収デザイン」を備え、「リラックスした、着やすいフィットの軽量生地」を特徴とするトップ結果が得られました。
2 番目の結果は、私たちが投げかけたクエリに対してはるかに正確で適切なものでした。最後の 2 つの投稿で、私たちは理論的および実践的な観点から、RAG パイプラインに Jina Reranker を追加することで検索精度が向上し、それから得られる応答の質が改善されることを示しました。