128に分けて1つだけ探すと、比較は全体の1.4%で済みました。
ただし再現率は8.5%です。狭めた分だけ、取れるものが減ります。
記録は名前空間へ分けられます。探す範囲は狭まりますが、取りこぼしも増えます。
Pineconeでは、記録が名前空間へ分けられます。公式は索引の中で、記録は名前空間へと分けられ、投入も問い合わせもその他の読み書きも、つねに1つの名前空間を対象にすると述べています。
分けると探す範囲が狭まります。どこまで狭められるのか実際に探して数えました。
文書 20000件・64次元。似た文書が 40個の塊にまとまっている 問い 300件で上位 10件を取る。全件を見た場合を正解とする シャード数 探すシャード 1問あたりの比較 全件比 再現率 8個 1個 2529件 12.6% 30.5% 8個 2個 5024件 25.1% 50.1% 8個 4個 10023件 50.1% 76.5% 8個 8個 20008件 100.0% 100.0% 32個 1個 661件 3.3% 15.9% 32個 2個 1285件 6.4% 27.2% 32個 4個 2540件 12.7% 42.7% 32個 8個 5043件 25.2% 64.4% 128個 1個 284件 1.4% 8.5% 128個 2個 441件 2.2% 15.1% 128個 4個 755件 3.8% 23.8% 128個 8個 1379件 6.9% 36.8%
128に分けて1つだけ探すと、比較は284件です。全件の1.4%で済みます。
そのとき再現率は8.5%でした。10件のうち1件も取れていません。
8個に分けて1つを探すと比較12.6%で再現率30.5%、32個に分けて4つを探すと比較12.7%で42.7%です。
比較の量はほぼ同じなのに、再現率が12.2ポイント違います。細かく分けて広く探すほうが有利でした。
この形はベクトル分割の記事で扱っていて、分け方が意味に沿っているかで結果が変わります。
同じ比較の量でも、細かく分けて広く探すほうが取れる。
Within an index, records are partitioned into namespaces, and all upserts, queries, and other data read and write operations always target one namespace.原文Pinecone 公式ドキュメント「Indexing overview」 この内容の有効期限2027-02-18
記録には識別子がついています。だから差し替えられますが、反映の間隔だけ古い内容が残ります。
Pineconeの記録には、識別子とベクトルが要ります。公式は索引の中のすべての記録は、識別子とベクトルを持たなければならないと述べています。
識別子があるので差し替えられます。反映が遅れるとどうなるのか実際に測って数えました。
索引の総件数 500000件。1日に 5000件が更新される 更新された文書は、そうでない文書より 6倍引かれやすいものとした 反映の間隔 未反映の件数 上位10件に古い内容が混ざる問いの割合 5分 17件 0.25% 60分 208件 2.38% 360分 1250件 13.88% 1440分 5000件 44.92%
1日1回の反映だと、未反映は5,000件です。全体の1%ですが、44.92%の問いに古い内容が混ざります。
更新された文書ほど引かれやすいためです。件数の割合より、混ざる割合のほうがずっと大きくなります。
60分ごとなら2.38%、5分ごとなら0.25%です。間隔にほぼ比例して下がりました。
だから許せる割合を先に決めれば、間隔が計算で出ます。
同じ形は増分索引の記事でも扱いました。
Every record in an index must contain an ID and a vector.原文Pinecone 公式ドキュメント「Indexing overview」 この内容の有効期限2027-02-18
用途ごとに1つ作る形です。その1つをどう保つかは、更新の量で決まります。
Pineconeでは、用途ごとに索引を作ります。公式は用途ごとに1つの索引というのが典型的な形であると述べています。
その1つを保つ方法は2つあります。実際に数えて比べました。
索引の総件数 500000件。全部作り直すと 4.2分かかる 作り直しは毎秒 2000件、差分の投入は毎秒 400件として計算した 1日の更新件数 全体に対する割合 全部作り直す 差分だけ入れる 速いのは 500件 0.1% 4.2分 0.0分 差分 5000件 1.0% 4.2分 0.2分 差分 50000件 10.0% 4.2分 2.1分 差分 100000件 20.0% 4.2分 4.2分 作り直し 200000件 40.0% 4.2分 8.3分 作り直し 入れ替わる点は 100000件。全体の 20.0% を超えると作り直したほうが速い。
1日1%の更新なら、差分だけ入れて0.2分です。作り直しの4.2分より21倍速くなります。
40%まで増えると差分は8.3分で、作り直しの倍かかります。20%が分かれ目でした。
差分の投入は毎秒400件、作り直しは毎秒2,000件です。1件あたりでは作り直しのほうが5倍速いという前提を置いています。
まとめて入れるほうが1件あたりは軽くなるからです。この比が5倍なら、分かれ目は5分の1のところに来ます。
3つの計測はいずれも手元で書いた模型で、実際のPineconeを叩いたものではありません。毎秒2000件・毎秒400件といった速さは置いた値です。更新された文書が6倍引かれやすいという前提も置いたもので、実際の偏りとは違います。分け方も、似た文書が塊にまとまっているという条件で作っています。ここで見せているのは、同じ比較の量でも分け方と探す数で再現率が変わるという点と、更新の割合で入れ方の有利不利が入れ替わるという点の2つです。
One index per use case is the typical pattern.原文Pinecone 公式ドキュメント「Indexing overview」 この内容の有効期限2027-02-18
同じ課題を持つ会社にとって、動いている設定は「作る時間」を買えるということです。ServiceDockは自作のワークフローやテンプレートを出品できるマーケットプレイスです。手数料や出品の流れは出品者向けページにまとまっています。
出品の仕組みを見る