EXTENSIONS

セマンティック検索に必要なベクトルデータ作成用のスローインデクシングツール
無料

ご利用にはKandaSearchへの
ユーザー登録(無料)が必要です

Misc
セマンティック検索に必要なベクトルデータ作成用のスローインデクシングツール

最新バージョン: 1.0.0

開発者: RONDHUIT

ダウンロード数: 3

最終更新日: 2024-06-24

Copyright: RONDHUIT Co.,LTD

最新バージョン: 1.0.0

開発者: RONDHUIT

ダウンロード数: 3

最終更新日: 2024-06-24

Copyright: RONDHUIT Co.,LTD

セマンティック検索に必要なベクトルデータ作成用のスローインデクシングツールです。JSON形式のドキュメントをHuggingFaceのモデルを使ってベクトルデータを付与しながらゆっくりSolrに登録します。

準備

  • KandaSeachで必要に応じてプロジェクトおよびインスタンスを作成します。詳細手順は、KandaSearchドキュメントのプロジェクトの作成インスタンスの作成をご参照ください。

  • KandaSearchのSolrにアクセスできるよう、KandaSearchドキュメントインスタンスの設定の手順に従ってIPアドレスを適切に許可してください。

  • インデクシング対象となるJSON形式のドキュメントを用意します。サンプルデータとして、Livedoorニュース記事からドキュメント10件を抽出し作成したJSONファイルlivedoor-10docs.jsonを使用します。記事ID、ニュース記事へのURL、ニュースタイトル、記事カテゴリー、記事本文、ニュース日付のフィールドからなります。Livedoorニュースコーパスについては、KandaSearch拡張機能ライブラリのLivedoor ニュースコーパス(mini)をご参照ください。

[
  {
    "id":"dokujo-tsushin-4778030.txt",
    "url":"http://news.livedoor.com/article/detail/4778030/","category":"dokujo-tsushin","date":"2010-05-22T14:30:00Z",
    "title":"友人代表のスピーチ、独女はどうこなしている?",
    "body":[" もうすぐジューン・ブライドと呼ばれる6月。... ....",""," 「お願いがあるんだけど……友人代表のスピーチ、やってくれないかな?」"]}
  },
  ... ...
]
  • インデクシング対象フィールド、ベクトルデータのソースフィールドおよびターゲットフィールドが定義されたmanaged-schemaを用意します。サンプルとして、Livedoorニュースコーパスを検索対象とする、KandaSearch拡張機能ライブラリLivedoorニュース(embeddings) configuration(Solr 9)のmanaged-schemaを使用します。
  ... ...
  <field name="title" type="text_ja" indexed="true" stored="true"/>
  <field name="title_vector" type="knn_vector" indexed="true" stored="true"/>
  <field name="body" type="text_ja" indexed="true" stored="true" multiValued="true"/>
  <field name="body_vector" type="knn_vector" indexed="true" stored="true"/>
  ... ...
  <updateRequestProcessorChain name="get-embeddings">
    <processor class="com.rondhuit.solr.update.dense.EmbeddingsProcessorFactory">
      <str name="clientType">COMMUNITY_JA</str>
      <str name="sourceField">body</str>
      <str name="targetField">body_vector</str>
    </processor>
    <processor class="solr.LogUpdateProcessorFactory"/>
    <processor class="solr.RunUpdateProcessorFactory"/>
  </updateRequestProcessorChain>
  • 上記Solrコンフィグを使ってコレクションを作成します。サンプルとして、Livedoorニュースコーパスを検索対象とするコレクションを作成します。詳細手順は、KandaSearch拡張機能ライブラリのLivedoorニュース(embeddings) configuration(Solr 9)をご参照ください。

インデクシング

ベクトルデータを生成しながらインデクシングを行うには、ZIPに同梱されているシェルスクリプトvector_slow_indexing.shを実行します。

本ツールを実行するには、jqコマンドとcurlコマンドをインストールする必要があります。

ご使用環境のOSやShellの種類・バージョンによっては、スクリプトが実行できない可能性があります。シンタックスエラーなどが発生した場合、ご使用環境に合わせスクリプトを適宜修正してください。

スクリプトを実行する前に、スクリプトの先頭に定義された変数を実際のKandaSearchのSolrを指すように適切に設定してください。Solr Admin URLは、KandaSearchのインスタンスオーバービューで確認できます。

JSON_DATA=/path/to/your_json_file
SOLR_URL=your_solr_url
SOLR_COLLECTION=your_solr_collection

上記を設定した上で、以下のようにスクリプトを実行します。ドキュメントサイズ、ドキュメント件数、登録失敗時のリトライ回数などにより実行時間が変動します。

$ cd data_and_script
$ ./vector_slow_indexing.sh

本スクリプトは、ベクトルデータの作成にHuggingFaceモデルを使用します。HuggingFaceの負荷を抑えるため一回のアップデートにつき、ドキュメントを一つのみ登録し、スリープを入れます。すべてのドキュメントが正常にインデクシングできるように、最大10回までリトライを行い、前回のデータ登録に失敗したドキュメントを再度インデクシングします。

1回目に全ドキュメントが登録できた実行例です。

[2024/06/24 10:46:39] Started indexing of 10 documents.
============================== 1st indexing ==============================
[dokujo-tsushin-4778030.txt] status: 0, QTime: 2357
[dokujo-tsushin-4778031.txt] status: 0, QTime: 1914
[dokujo-tsushin-4782522.txt] status: 0, QTime: 1530
[dokujo-tsushin-4788357.txt] status: 0, QTime: 1160
[dokujo-tsushin-4788362.txt] status: 0, QTime: 1594
[dokujo-tsushin-4788373.txt] status: 0, QTime: 1617
[dokujo-tsushin-4788374.txt] status: 0, QTime: 1601
[dokujo-tsushin-4788388.txt] status: 0, QTime: 1493
[dokujo-tsushin-4791665.txt] status: 0, QTime: 1417
[dokujo-tsushin-4796054.txt] status: 0, QTime: 1194
[2024/06/24 10:47:09] 10 documents succeeded.
[2024/06/24 10:47:09] 0 documents failed.
==========================================================================
[2024/06/24 10:47:09] Finished indexing of all 10 documents in 30 seconds.

リトライにより全ドキュメントが登録できた実行例です。

[2024/06/24 10:45:21] Started indexing of 10 documents.
============================== 1st indexing ==============================
[dokujo-tsushin-4778030.txt] status: 500, QTime: 6625
[dokujo-tsushin-4778031.txt] status: 500, QTime: 9402
[dokujo-tsushin-4782522.txt] status: 500, QTime: 9322
[dokujo-tsushin-4788357.txt] status: 500, QTime: 9330
[dokujo-tsushin-4788362.txt] status: 0, QTime: 6258
[dokujo-tsushin-4788373.txt] status: 0, QTime: 1143
[dokujo-tsushin-4788374.txt] status: 0, QTime: 1061
[dokujo-tsushin-4788388.txt] status: 0, QTime: 1196
[dokujo-tsushin-4791665.txt] status: 0, QTime: 1002
[dokujo-tsushin-4796054.txt] status: 0, QTime: 1216
[2024/06/24 10:46:21] 6 documents succeeded.
[2024/06/24 10:46:21] 4 documents failed.
============================== 2nd indexing ==============================
[dokujo-tsushin-4778030.txt] status: 0, QTime: 1157
[dokujo-tsushin-4778031.txt] status: 0, QTime: 1146
[dokujo-tsushin-4782522.txt] status: 0, QTime: 1199
[dokujo-tsushin-4788357.txt] status: 0, QTime: 1426
[2024/06/24 10:46:31] 4 documents succeeded.
[2024/06/24 10:46:31] 0 documents failed.
==========================================================================
[2024/06/24 10:46:31] Finished indexing of all 10 documents in 70 seconds.

お見積もり・詳細は KandaSearch チームに
お気軽にお問い合わせください。

お問い合わせ