カスタム・ボキャブラリの作成および使用

独自の語彙のトークンを作成して、データをチャンク化するときに使用します。

ここでは、DBMS_VECTOR_CHAINパッケージのチャンカ・ヘルパー関数CREATE_VOCABULARYを使用して、カスタム語彙をロードします。この語彙ファイルには、ベクトル埋込みモデルのトークナイザで認識されるトークンのリストが含まれています。
  1. ローカル・ユーザーとして接続し、データ・ダンプ・ディレクトリを準備します。
    1. SQL*PlusにSYSユーザーとしてログインし、SYSDBAとして接続します。
      conn sys/password as sysdba
      CREATE TABLESPACE tbs1
      DATAFILE 'tbs5.dbf' SIZE 20G AUTOEXTEND ON
      EXTENT MANAGEMENT LOCAL
      SEGMENT SPACE MANAGEMENT AUTO;
      SET ECHO ON
      SET FEEDBACK 1
      SET NUMWIDTH 10
      SET LINESIZE 80
      SET TRIMSPOOL ON
      SET TAB OFF
      SET PAGESIZE 10000
      SET LONG 10000
    2. ローカル・ユーザー(docuser)を作成し、必要な権限を付与します。
      drop user docuser cascade;
      create user docuser identified by docuser DEFAULT TABLESPACE tbs1 quota unlimited on tbs1;
      grant DB_DEVELOPER_ROLE to docuser;
    3. 語彙ファイルを格納するローカル・ディレクトリ(VEC_DUMP)を作成します。必要な権限を付与します。
      create or replace directory VEC_DUMP as '/my_local_dir/';
      grant read, write on directory VEC_DUMP to docuser;
      
      commit;
    4. 必要なモデルの語彙ファイルをVEC_DUMPディレクトリに転送します。

      たとえば、WordPieceトークン化を使用する場合、「bert-base-uncased」のvocab.txtボキャブラリ・ファイルをダウンロードして転送できます。

    5. ローカル・ユーザー(docuser)として接続します:
      conn docuser/password
  2. リレーショナル表(doc_vocabtab)を作成して、語彙トークンを格納します。
    CREATE TABLE doc_vocabtab(token nvarchar2(64))
      ORGANIZATION EXTERNAL
      (default directory VEC_DUMP
       ACCESS PARAMETERS (RECORDS DELIMITED BY NEWLINE)
       location ('bert-vocabulary-uncased.txt'));
  3. DBMS_VECTOR_CHAIN.CREATE_VOCABULARYをコールして、語彙(doc_vocab)を作成します。
    DECLARE
      vocab_params clob := '{
                             "table_name"      : "doc_vocabtab",
                             "column_name"     : "token",
                             "vocabulary_name" : "doc_vocab",
                             "format"          : "bert",
                             "cased"           : false
                            }';
    
    BEGIN
      dbms_vector_chain.create_vocabulary(json(vocab_params));
    END;
    /
トークン語彙をロードしたら、BY VOCABULARYチャンク化モード(VECTOR_CHUNKSまたはUTL_TO_CHUNKSを使用)を使用して、トークン数をカウントすることでデータを分割できるようになります。