RAG結果を向上させるのための再ランク付けの使用

再ランク付けモデルは、検索結果の初期セットを再評価および並替えするために主に使用されます。これにより、類似検索シナリオと検索拡張生成(RAG)シナリオの両方で検索結果の関連性と品質が向上します。

RAGシナリオでは、再ランキングは、最も関連性の高いドキュメントまたはチャンクが優先されるようにすることで、LLMに取り込まれた情報の品質を向上させる上で重要な役割を果たします。これにより、ハルシネーションを減らし、生成される出力の精度を向上させることができます。再ランク付けステップは、通常、より高速であるが精度の低い埋込みモデルを使用する初期検索の後に実行されます。再ランク付けは、特定の問合せに関する最も関連性の高い情報の識別に役立ちますが、単純なベクトルの比較を超えた高度な照合方法が採用されることが多いため、リソースに関してはよりコストがかかります。

ここでは、ユースケースに応じて、DBMS_VECTORまたはDBMS_VECTOR_CHAINパッケージのRERANKファンクションを使用できます。

Oracle AI Vector Searchは、CohereおよびVertex AIが提供する再ランク付けモデルをサポートしています。

警告:

データベースの特定の機能により、たとえば、REST APIへのアクセスを容易にするJSON仕様を使用して、第三者によって個別に提供されるサービスにアクセスできる場合があります。

お客様によるこれらの機能の使用は、お客様自身の責任においてのみ行われ、お客様は、当該第三者サービスの使用に関連するあらゆる条件を遵守する責任を負います。第三者のサービスに関するその他の条件にかかわらず、お客様は、かかるデータベース機能の使用によって、そのリスクを受諾し、当該アクセスにより生じた一切の損害について、Oracleの責任または法的責任を明示的に除外することになります。

サードパーティの再ランク付けモデルを使用して、問合せ「What are some interesting characteristics of the Jovian satellites?」の結果を再ランク付けするには:

  1. SQL*PlusにSYSユーザーとしてログインし、SYSDBAとして接続します。
    conn sys/password as sysdba
  2. ローカル・ユーザー(vector)を作成し、必要な権限を付与します:
    DROP USER vector cascade;
    CREATE USER vector identified by <my vector password>
    GRANT DB_DEVELOPER_ROLE, CREATE CREDENTIAL TO vector;
  3. プロキシを設定します(存在する場合)。
    EXEC UTL_HTTP.SET_PROXY('<my proxy full name>:<my proxy port>');
  4. DBMS_NETWORK_ACL_ADMINプロシージャを使用して、ホストへの接続権限を付与します。この例では、*を使用して任意のホストを許可します。ただし、接続する各ホストを明示的に指定できます:
    BEGIN
      DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE(
        host => '*',
        ace => xs$ace_type(privilege_list => xs$name_list('connect'),
                           principal_name => 'VECTOR',
                           principal_type => xs_acl.ptype_db));
    END;
    /
  5. テスト・ユーザーとしてOracle Databaseに接続します:
    conn vector/password;
  6. 次の問合せに関連する可能性のあるドキュメントを指定された順序で返す初期取得ステップをシミュレートします: "What are some interesting characteristics of the Jovian satellites?":
    set echo on
    
    set serveroutput on
    
    var query clob;
    
    var initial_retrieval_docs clob;
    
    exec :query := 'What are some interesting characteristics of the Jovian satellites?';
    
    begin
      :initial_retrieval_docs := '
    {
       "documents": [
                     "Jupiter boasts an impressive system of 95 known moons, including the four largest Galilean satellites.",
                     "Jupiter's immense mass, 318 times that of Earth, significantly influences the orbits of other bodies in the Solar System.",
                     "Io, one of Jupiter's Galilean moons, is the most volcanically active body in our solar system.",
                     "The gas giant completes one orbit around the Sun in just under 12 years, traveling at an average speed of 13 kilometers per second.",
                     "Jupiter's composition is similar to that of the Sun, and it could have become a brown dwarf if its mass had been 80 times greater."
                    ]
    }';
    end;
    /
  7. アクセスするRESTプロバイダ(CohereまたはVertex AI)の資格証明を設定します。ここで、<access token>を独自の値に置き換えます:
    • Cohereの例:

      EXEC DBMS_VECTOR.DROP_CREDENTIAL('COHERE_CRED');
      
      DECLARE
         jo json_object_t;
      BEGIN
         jo := json_object_t();
         jo.put('access_token', '<access token>');
         DBMS_VECTOR.CREATE_CREDENTIAL(
                credential_name => 'COHERE_CRED',
                params => json(jo.to_string));
      END;
      /
    • Vertex AIの例:

      begin
         dbms_vector_chain.drop_credential(credential_name  => 'VERTEXAI_CRED');
      exception
         when others then null;
      end;
      /
      
      declare
         jo json_object_t;
      begin
         jo := json_object_t();
         jo.put('access_token', '<access token>');
         dbms_vector_chain.create_credential(
                credential_name   =>  'VERTEXAI_CRED',
                params            => json(jo.to_string));
      end;
      /
  8. 初期取得を再ランク付けします:

    ノート:

    サポートされているすべてのRESTエンドポイントのリストは、「サポートされているサードパーティ・プロバイダの操作およびエンドポイント」を参照してください。
    • Cohere rerank-english-v3.0モデルを使用する場合:

      declare
        params clob;
        reranked_output json;
      begin
        params := '
      {
        "provider": "cohere",
        "credential_name": "COHERE_CRED",
        "url": "https://api.cohere.com/v1/rerank",
        "model": "rerank-english-v3.0",
        "return_documents": true,
        "top_n": 3
      }';
      
        reranked_output := dbms_vector_chain.rerank(:query, json(:initial_retrieval_docs), json(params));
        dbms_output.put_line(json_serialize(reranked_output));
      end;
      /
    • Vertex AI semantic-ranker-512モデルを使用する場合:

      declare
        params clob;
        reranked_output json;
      begin
        params := '
      {
        "provider": "vertexai",
        "credential_name": "VERTEXAI_CRED",
        "url": "https://discoveryengine.googleapis.com/v1/projects/1085581009881/locations/global/rankingConfigs/default_ranking_config:rank",
        "model": "semantic-ranker-512@latest",
        "ignoreRecordDetailsInResponse": false,
        "topN": 3
      }';
      
        reranked_output := dbms_vector_chain.rerank(:query, json(:initial_retrieval_docs), json(params));
        dbms_output.put_line(json_serialize(reranked_output));
      end;
      /

前述のCohereモデルを使用すると、再ランク付けされた結果が次のように表示されます:

[
   {
     "index" : "0",
     "score" : "0.059319142",
     "content" : "Jupiter boasts an impressive system of 95 known moons, including the four largest Galilean satellites."
   },
   {
     "index" : "2",
     "score" : "0.04352814",
     "content" : "Io, one of Jupiter's Galilean moons, is the most volcanically active body in our solar system."
   },
   {
     "index" : "4",
     "score" : "0.04138472",
     "content" : "Jupiter's composition is similar to that of the Sun, and it could have become a brown dwarf if its mass had been 80 times greater."
   }
]

関連トピック