モデル別実行レシピ

カカオ Kanana-2 3B埋め込みで韓国語RAGの索引を作る

韓国語検索では先行し、ベクトルは128次元まで縮められます。

モデルカードの韓国語検索スコアと3Bの重み・ベクトル容量からMacに合う構成を選び、sentence-transformersで索引を作る例をまとめました。

実行条件と要点
  • 3Bは2,560次元、1.3Bは1,280次元で、一度に4,096トークンまで受け取ります。
  • MRLで1,024・512・256・128次元まで縮めれば、保存量を最大20分の1にできます。
  • 韓国語検索では先行しますが、英語MTEBではQwen3-Embedding-4Bが上です。

埋め込みモデルは質問と段落を同じ座標に置きます

Kanana-2埋め込みは、カカオが2026年10月29日に公開した韓国語・英語向けの検索モデルです。文書を分割した段落と利用者の質問をそれぞれ数値ベクトルに変え、質問のベクトルに近い順で段落を返します。3Bは2,560次元、1.3Bは1,280次元のベクトルを作り、一度に4,096トークン1まで受け取ります。

Kanana-2 SLMを双方向アテンション2に変え、平均プーリングで文一つをベクトル一つにまとめます。生成モデルのように次のトークンを書き続けるのではなく、入力全体を一度読んでベクトルを返すため、検索やRAG3、文の類似度計算に使えます。

一枚の長い文書が複数の小さなカードに分かれ、机の上に並ぶ図
文書を段落カードに分け、質問ベクトルに近いカードから取り出します。

韓国語検索のスコアはどのくらいですか

MTEB評価は、タスク別の指示文を入れず原文だけを通した条件です。nano-BEIR(ko)の平均は3Bが0.6088、1.3Bが0.5866で、韓国語検索6タスクの平均(Ko-Retrieval)は3Bが0.8211です。同じ表でQwen3-Embedding-4Bは0.5522と0.7837、Qwen3-Embedding-0.6Bは0.4845と0.7279でした。

英語では順序が変わります。MTEB(eng, v2)でQwen3-Embedding-4Bは0.6661で、3Bの0.6317を上回ります。韓国語文書が中心か、英語文書の比率が大きいかで選ぶモデルが変わります。

左右にスクロールして各項目を比較できます。

モデルカードのMTEB評価値(指示文なし・原文のみ・full次元)
モデルnano-BEIR(ko)Ko-RetrievalMTEB(eng v2)
kanana-2-3b-embedding0.60880.82110.6317
kanana-2-1.3b-embedding0.58660.79580.6197
Qwen3-Embedding-4B0.55220.78370.6661
Qwen3-Embedding-0.6B0.48450.72790.6311
EmbeddingGemma-300m0.45640.72950.6247

128次元に縮めると保存量が20分の1になります

Matryoshka表現学習(MRL)は、ベクトルの先頭部分だけを使っても検索が保つように学習する方式です。3Bモデルは1,024・512・256・128次元に縮められ、256次元でもnano-BEIR(ko) 0.5683、Ko-Retrieval 0.7873を維持します。

保存量は次元数×4バイトで計算します。2,560次元は段落一つで10,240バイト、10万段落なら約1.0GBです。256次元に縮めると102MBで10分の1、128次元なら51MBで20分の1になります。同じディスクに10〜20倍の段落を置けます。

float32での段落数別ベクトル容量(原文・索引構造を除く)
次元段落1万段落10万
2,560102MB1.0GB
1,02441MB410MB
51220MB205MB
25610MB102MB
1285MB51MB
机の上の書類の山と複数のカード、カードから矢印が伸びて別のカードへつながる図
索引の段階で段落を4,096トークン以下に分けると、検索結果がぶれません。

Macで索引を作る手順

sentence-transformersでモデルを読み込み、truncate_dimに256を渡せば切り詰めまで一度に処理できます。Apple Siliconではdeviceをmpsに指定してGPU4を使います。初回は重みをダウンロードするため、3Bで6GB前後の保存領域とメモリが必要です。

段落は4,096トークンを超えないように分割し、質問と段落に同じモデルと同じ次元を使ってください。検索はコサイン類似度で並べ、上位候補はリランカーで見直せます。索引ファイルにモデル名と次元を残しておくと、ベクトルを混ぜる事故を防げます。

index.py
from sentence_transformers import SentenceTransformer

model = SentenceTransformer(
    "kakaocorp/kanana-2-3b-embedding",
    trust_remote_code=True,
    truncate_dim=256,
    device="mps",
)
vectors = model.encode(chunks, batch_size=8, normalize_embeddings=True)
print(vectors.shape)  # (段落数, 256)
Macではmpsを指定し、次元を変えるときはtruncate_dimの値だけを変えます。

ライセンスと限界

重みはKanana Open Licenseで配布されます。自社サービスでの利用は許されますが、API5での再販やSI・オンデバイス形態での第三者への販売にはカカオの別途商用ライセンスが必要です。再配布時は「Powered by Kanana」の表記とライセンスの写しを添えます。

3Bはbf166の重みだけで6GBなので16GBのMacでも余裕がありますが、段落が増えるとベクトルと原文がメモリを使います。英語の比率が大きい検索ならMTEBスコアが高いモデルと 同じ質問で比べ、韓国語文書検索が中心ならこのモデルで索引を先に作り、欲しい段落が上位に来るかを見てください。

2台のPCで文書の索引作成と検索結果を比較する様子
索引と質問に同じモデル・同じ次元を使うと、スコアを比較できます。

用語の注釈

  1. トークン — モデルが入力や出力を分けて処理する単位です。

    本文に戻る
  2. Attention — 入力トークン間の関連度を計算し、各位置の情報を現在の表現に反映するニューラルネットワーク演算です。

    本文に戻る
  3. 検索拡張生成 — 質問に関連する資料を検索してモデル入力に加え、その文脈をもとに回答を生成する方式です。

    本文に戻る
  4. GPU — 多くの計算を並列に処理するプロセッサーです。AIモデルの実行ではモデル計算を担います。

    本文に戻る
  5. API — 別のコードからプログラムの機能を呼び出すための決められたインターフェースです。

    本文に戻る
  6. BF16 — モデルの数値に使う16ビット浮動小数点形式です。指数部はFP32と同じ幅で、同程度に広い値の範囲を表せます。

    本文に戻る

よくある質問

この記事で最初に確認すべきことは何ですか?
モデルカードの韓国語検索スコアと3Bの重み・ベクトル容量からMacに合う構成を選び、sentence-transformersで索引を作る例をまとめました。
必要なメモリはどのくらいですか?
sentence-transformersでモデルを読み込み、truncate_dimに256を渡せば切り詰めまで一度に処理できます。Apple Siliconではdeviceをmpsに指定してGPUを使います。初回は重みをダウンロードするため、3Bで6GB前後の保存領域とメモリが必要です。