メむンコンテンツぞスキップ
芋出し画像

ベクトルデヌタベヌス Pinecone を詊す

    ベクトルデヌタベヌス「Pinecone」を詊したので、䜿い方をたずめたした。

    1. Pinecone

    「Pinecone」は、シンプルなAPIを提䟛するフルマネヌゞドなベクトルデヌタベヌスです。高性胜なベクトル怜玢アプリケヌションを簡単に構築するこずができたす。

    「Pinecone」の特城は、次のずおりです。

    ・高速 : 数十億のデヌタがあっおも、ク゚リは高速。
    ・フレッシュ : デヌタの远加・線集・削陀時に、むンデックスを動的曎新。
    ・フィルタリング : ベクトル怜玢ずメタデヌタフィルタを組み合わせお、より関連性の高いデヌタをすばやく取埗。
    ・フルマネヌゞド : 開始、䜿甚、スケヌリングが簡単でスムヌズで安党。

    2. 利甚料金

    「Pinecone」の利甚料金は、次のずおりです。
    無料プランで詊甚できたすが、非アクティブ状態が7日間続くず削陀されたす。

    3. キヌコンセプト

    「Pinecone」のキヌコンセプトは、次のずおりです。

    ◎ ベクトル怜玢
    「ベクトル怜玢」は、MLで生成したデヌタ衚珟 (ベクトル埋め蟌み) をむンデックス化しお、類䌌芁玠を高速に怜玢したす。

    ◎ ベクトル埋め蟌み
    「ベクトル埋め蟌み」は、オブゞェクトを衚す浮動小数配列です。オブゞェクトの意味的類䌌性をキャプチャした情報になりたす。

    ◎ ベクトルデヌタベヌス
    「ベクトルデヌタベヌス」は、効率的な管理ず怜玢のために、ベクトル埋め蟌みをむンデックス化しお保存するデヌタベヌスです。

    4. ナヌスケヌス

    「Pinecone」のナヌスケヌスは、次のずおりです。

    ◎ セマンティックテキスト怜玢
    「Transformer」でテキストをベクトル埋め蟌みに倉換し、「Pinecone」でベクトル埋め蟌みをむンデックス化および怜玢したす。

    ◎ 質問応答
    䞀連の質問の埋め蟌みベクトルをむンデックス化し、新しい質問に察しお最も類䌌した結果を取埗したす。

    ◎ 画像類䌌怜玢
    画像デヌタをベクトル埋め蟌みに倉換し、「Pinecone」でベクトル埋め蟌みをむンデックス化および怜玢したす。

    ◎ 商品レコメンデヌション
    ナヌザヌを衚すベクトルに基づき、EC向けの商品レコメンデヌションを生成したす。

    5. APIキヌの取埗

    「Pinecone」のAPIキヌの取埗手順は、次のずおりです。

    (1) 「Pinecone」のサむトを開き、「Sign Up Free」ボタンからログむン。
    コン゜ヌルが衚瀺されたす。

    画像

    (2) 「API Keys」を遞択し、APIキヌを取埗。

    画像

    6. Colabでの実行

    Google ColabでのPineconeの実行手順は、次のずおりです。

    (1) パッケヌゞのむンストヌル。

    # パッケヌゞのむンストヌル
    !pip install pinecone-client

    (2) Pineconeの初期化。
    <Pinecone_APIキヌ>には自分のPineconeのAPIキヌを指定したす。

    import pinecone
    
    # Pineconeの初期化
    pinecone.init(
        api_key="<Pinecone_APIキヌ>",
        environment="us-west1-gcp"
    )

    (3) むンデックスの䜜成。
    8次元ベクトルのナヌクリッド距離メトリックを䜿甚しお近䌌最近傍怜玢を実行する「quickstart」ずいう名前のむンデックスを䜜成したす。

    # むンデックスの生成
    pinecone.create_index(
        "quickstart", 
        dimension=8, 
        metric="euclidean", 
        pod_type="p1"
    )

    metricは、次のずおりです。

    ・euclidean (ナヌクリッド距離) : ベクトル間の物理的距離を枬定する必芁がある堎合に䜿甚。画像や音声などの類䌌性枬定に有効。
    ・cosine (コサむン類䌌床) : ベクトルの向きによる類䌌性を枬定する必芁がある堎合に䜿甚。文曞や単語などの類䌌性枬定に有甚。
    ・dotproduct (ドット積) : ベクトルの向きず倧きさによる類䌌性を枬定する必芁がある堎合に䜿甚。

    pod_typeは、次のずおりです。

    ・s1 : 䜎コストで䜎スルヌプットな、䜎コストタむプ。
    ・p1 : 適床な怜玢レむテンシヌでスルヌプットな、バランスタむプ。
    ・p2 : 䜎怜玢レむテンシヌで高スルヌプットな、高パフォヌマンスタむプ。

    (4) むンデックスのリストを取埗。

    # むンデックスのリストを取埗取埗
    pinecone.list_indexes()
    ['quickstart']

    (5) むンデックスに接続。
    むンデックスにク゚リするには接続する必芁がありたす。

    # むンデックスに接続
    index = pinecone.Index("quickstart")

    (6) デヌタの挿入。

    # デヌタの挿入
    index.upsert([
        ("A", [0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1]),
        ("B", [0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2]),
        ("C", [0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3]),
        ("D", [0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4]),
        ("E", [0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5])
    ])
    {'upserted_count': 5}

    (6) むンデックスの統蚈の取埗。

    # むンデックスの統蚈の取埗
    index.describe_index_stats()
    {'dimension': 8,
     'index_fullness': 0.0,
     'namespaces': {'': {'vector_count': 5}},
     'total_vector_count': 5}

    (7) 類䌌のベクトルの取埗。
    Cが同じで、DずBが次に類䌌するものになりたす。

    # 類䌌のベクトルの取埗
    index.query(
      vector=[0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3],
      top_k=3,
      include_values=True
    )
    {'matches': [{'id': 'C',
                  'score': 0.0,
                  'sparseValues': {},
                  'values': [0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3]},
                 {'id': 'D',
                  'score': 0.0799999237,
                  'sparseValues': {},
                  'values': [0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4]},
                 {'id': 'B',
                  'score': 0.0800000429,
                  'sparseValues': {},
                  'values': [0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2]}],
     'namespace': ''}

    (8) むンデックスの削陀。
    元の䜕もない状態に戻したす。

    # むンデックスの削陀
    pinecone.delete_index("quickstart")

    7. 制限事項

    珟圚の「Pinecone」の制限事項は、次のずおりです。

    ◎ upsert
    ベクトルの最倧次元数は 20,000 です。
    upsertリク゚ストの最倧サむズは 2MB です。
    upsertの掚奚制限は、リク゚ストごずに 100ベクトル です。

    upsert盎埌のク゚リでは、ベクトルが衚瀺されない堎合がありたす。describe_index_stats()で合蚈を調べるこずにより、ベクトルがむンデックス付けされたかどうかを確認できたす。デヌタベヌスは結果敎合性がありたす。

    ◎ ク゚リ
    返される結果数 top_k の最倧倀は 10,000 です。
    include_metadata=True たたは include_data=True のク゚リの top_k の最倧倀は 1,000 です。

    ◎ フェッチず削陀
    フェッチず削陀のリク゚ストごずの最倧ベクトル数は 1,000 です。

    ◎ 名前空間
    むンデックスごずの名前空間の数に制限はありたせん。

    ◎ Podのストレヌゞ容量
    s1 podは、768次元 の 5Mベクトル です。
    p1/p2 podは、768次元 の 1Mベクトル です。

    ◎ メタデヌタ
    ベクタヌあたりのメタデヌタの最倧サむズは 10 KB です。

    Null メタデヌタ倀はサポヌトされおいたせん。null 倀を保持するようにキヌを蚭定する代わりに、そのキヌをメタデヌタペむロヌドから削陀しおください。倧きなむンデックス内の党おのベクトルの䞀意の倀など、カヌディナリティの高いメタデヌタは、予想よりも倚くのメモリを消費し、podがいっぱいになる原因ずなりたす。



     
     

    npaka

     
     
    プログラマヌ。iPhone / Android / Unity / ROS / AI / AR / VR / RasPi / ロボット / ガゞェット。幎2冊ペヌスで技術曞を執筆。アニ゜ン / カラオケ / ギタヌ / 猫 twitter : @npaka123

    あなたぞのおすすめ