top‑k
top‑kとは
top‑k とは、「候補にスコア(または明確な順序)を与え、上位 k 個に絞る発想」のことを、大枠として指します。
検索なら関連度スコアの高い順に k 件、ベクトル検索なら距離や内積にもとづく近傍 k 件、レコメンドの候補生成でもまず軽量ランカーで上位 k を広く拾ってから再ランクに回す、いずれも「上位 k に縮約する」という型を使っています。
補足としては、第一に「上位」は常に「数値が大きいほう」とは限りません。距離や損失のように「小さいほど良い」量では、実装上は「最小 k」か、あるいは符号反転して「最大 k」として扱います。
第二に、言語モデルの top‑k サンプリングも「確率の上位 k 語にいったん絞る」点で同じ発想ですが、そのあとに確定選択ではなく乱択を行うという追加ステップがあります。つまり、「切り詰め(トランケーション)」の部分をきれいに言い当てており、生成ではそこにサンプリングが乗る、と捉えるとズレません。
第三に、評価指標の @k(たとえば Precision@k や NDCG@k)の文脈では「上位 k スロットだけを見て品質を測る」という観測窓の意味で使われますが、根っこは同じく「上位 k に注目する」考え方です。
実務ではこの共通の型に、用途ごとの前提を一つ二つ足すことになります。
何に対しての「上位」なのか(関連度、確率、距離など)、最大側か最小側か、厳密取得か近似か、そして切り詰めた後に確定で選ぶのかそれとも確率的に選ぶのか。この四つの点を明示しておけば、top‑k を巡る用語の混乱はほぼ避けられます。
top‑kは「上位k件」にまつわる操作名の総称
top‑kは例えば「生成のtop‑kサンプリング」や、「スコア順リストの先頭k件を切り出す」などだけには収まりません。
より広く捉えると、top‑kは「候補にスコア(あるいは順序)を付け、上位kだけを選ぶ」という発想のもと、検索・レコメンド・機械学習・最適化・評価指標など、多くの分野でそれぞれの文脈に合わせて使われています。
以下では主要なtop‑kの使われ方を、かぶりの少ない切り口で俯瞰します。
検索とデータベースにおけるtop‑kクエリ
情報検索やデータベースの世界では、top‑kは最も素直な意味で使われます。
すなわち、クエリと文書の関連度を計算して高い順に並べ、上からk件だけを返す操作です。全文検索のBM25でも、SQLのORDER BYにLIMITを付ける操作でも、考え方は同じです。
複数の属性スコアを統合して上位を求める「top‑k結合」や、最後まで全文を読まずに十分な確信で上位k件を確定させる「しきい値アルゴリズム(FaginのTAなど)」のように、入出力は同じでも計算コストを下げる研究領域も発達しています。
生成的クエリ展開モデルの理論と実装などにおける「拡張集合 Q={q₁…q_m} を並列に投げ、各qⱼのtop‑kを和集合で集める」という一次取得は、まさにこの意味のtop‑kです。
近傍探索・ベクトル検索におけるtop‑k
埋め込みベクトルで検索する場合は、「クエリベクトルに最も近いk件(k‑nearest neighbors)」を返す近傍探索としてtop‑kが呼ばれます。大規模コーパスではHNSWやIVFのような近似手法で、厳密性と速度のトレードオフを取りつつ上位k候補を素早く出します。
ここでの「近い」はコサイン類似度や内積、ユークリッド距離の小ささなどで定義されますが、どの場合も「上位kを返す」という構造は変わりません。
ランキングとレコメンドにおける候補生成・再ランクのtop‑k
レコメンダや検索の実務では、まず軽量モデルで大量候補からtop‑k(数十〜数百)を「広く」拾い、その後で重い再ランカーで「厳密に」並べ替える二段構えが定番です。
多様性を保つために、類似度が高すぎる候補を抑制して「質が高く、かつバラけたtop‑k」を作る再ランク手法(たとえばMMRのような多様化)もこの文脈です。ここでのkはユーザーに最終的に見せる件数とは限らず、「二段目に回す一次候補の幅」を表すことが多い点がポイントです。
評価指標としての@k
top‑k accuracyやNDCG@kなど
top‑kは評価指標でも使われます。
画像認識などでよく使われる top‑k accuracyは、正解ラベルがモデルの予測上位kに含まれていれば正解と数える定義です。
検索・推薦ではPrecision@k、Recall@k、MRR@k、NDCG@kのように、上位kスロットに注目した指標が広く使われます。ここでのtop‑kは操作ではなく「評価の観測窓」を意味しており、ランキングの質を「上位kに限って」測るという考え方です。
生成・デコーディングにおけるtop‑kサンプリング
言語モデルのテキスト生成で言うtop‑kサンプリングは、確率分布の上位k語だけを残して正規化し、その中から確率的に次トークンを選ぶデコーディング手法です。nucleus(top‑p)やtypical samplingとの違いは「カットの基準が個数固定か、確率質量で可変か」です。
ここでのtop‑kは「確率分布の切り詰め」を指し、検索のtop‑kのように「既に並んだ結果セットをk件返す」話とは目的も対象も異なりますが、「上位だけを残す」という発想は共通しています。
深層学習オペレータとしてのtop‑k
計算やパラメータをk個に絞る
機械学習の内部計算でもtop‑kは頻出です。フレームワークのtopk演算はテンソルの要素から上位kの値と位置を返す基本オペレータで、スパース化やhard example miningの足場になります。
Transformer系では注意スコアの上位kだけに計算を絞る「top‑k attention」が用いられることがあり、Mixture‑of‑Expertsではゲーティングで「上位k専門家」にだけトークンをルーティングします。分散学習では通信量削減のために勾配の上位k成分だけを送る「Top‑K SGD(勾配疎化)」も一般的です。
さらに学習可能にするため、離散なtop‑kを連続近似する「Gumbel‑Top‑k」「Sinkhornベースのsoft top‑k」といった緩和も研究されています。
列挙・最適化でのk‑best問題
k本の良解を順に出す
最短経路や構文解析、HMMのViterbiなど「最良解を一つ」求める古典問題を、上位k解まで列挙する形に拡張したものは広く「k‑best」あるいは「top‑k列挙」と呼ばれます。
k本の最短経路、k個の最良マッチング、k個の最良パースツリーなど、応用ごとに専用アルゴリズムがあり、重複なく順序良く解集合を取り出す工夫が施されています。ここでも「上位k」という思想は共通ですが、対象が「候補解の空間全体」に広がっている点が特徴です。
アルゴリズムの基礎動作としてのtop‑k選択
大きな配列から上位k要素を見つける「top‑k選択」は、それ自体が典型的なアルゴリズム課題です。全件ソートは不要で、平均線形時間のquickselectや、サイズkのヒープを使う方法、外部メモリ向けの部分ソートなど、データ規模とメモリ事情に応じた定石があります。
ストリーミングでは重み付き頻出項目(heavy hitters)を近似的に保つ手法が使われ、厳密なtop‑kではなくとも「ほぼ上位k」を省メモリに維持する設計が行われます。
どれも同じ「型」だが、目的と副作用が違う
ここまで見たとおり、top‑kという言葉は、検索・近傍探索・評価・生成・内部オペレータ・列挙・アルゴリズム基盤という複数の文脈で使われます。共通しているのは「上位だけを見る/残す」という型ですが、目的はまちまちです。
検索文脈ではリコールとレイテンシの折り合い、生成では多様性と一貫性のバランス、学習オペレータでは計算量や通信量の削減、評価では「上位に効く品質」の測定が主眼になります。
したがって、同じ「k」でも意味は変わり、たとえば候補生成のkは再ランク器のキャパで決まり、生成のkは文体や事実性に影響し、評価の@kはビジネス上の「上位露出枠」に合わせて設計されます。
kの決め方と誤解しやすい点
kはハイパーパラメータであり、リコール、遅延、コスト、安定性、多様性のトレードオフを反映して決まります。検索では「広く集めて後で賢く並べ替える」ために一次候補のkをやや大きめに取り、生成ではtop‑kとtop‑pの併用や温度調整で文体を制御します。
実装では、同じ「top‑k」という名前でも、確率分布の切り詰め(生成)と、ランキング結果の切り出し(検索)は別物であり、混同すると評価やA/Bの設計を誤ります。
また、フレームワークのtopk演算は「値の上位k要素を返す」汎用オペレータで、距離の「下位k」(最も小さいk)を取りたいときは符号や並べ替えの扱いに注意が要ります。
何の上位を、なぜkに絞るのか
以上のように、top‑kは「生成のtop‑kサンプリング」と「検索のtop‑k切り出し」という代表選手にとどまらず、ベクトル検索のk‑NN、候補生成と多様化、@k系の評価指標、深層学習の計算削減やゲーティング、k‑best列挙、さらには基礎アルゴリズムとしてのtop‑k選択まで、広い領域にまたがる概念です。
文脈ごとに「何の上位を、なぜkに絞るのか」を言語化しておくと、設計やチューニングの判断が一貫します。