「Apache SeaTunnel、Milvus、およびOpenAIが本のタイトルの類似検索の精度と効率を向上させる」

『Apache SeaTunnel、Milvus、そしてOpenAIが書籍の類似検索の精度と効率を向上』

現在、既存の書籍検索ソリューション(例:公共図書館で使用されているもの)は、実際の書籍タイトルの内容のセマンティックな理解ではなく、キーワードの一致に重点を置いています。その結果、検索結果は私たちのニーズに合わないか、予想とは大きく異なる場合があります。キーワードの一致に頼るだけでは十分ではないため、セマンティックな理解を達成することはできず、したがって、検索者の真の意図を理解することができません。

では、書籍の検索をより正確かつ効率的に行う方法はあるのでしょうか? 答えは「はい」です! この記事では、Apache SeaTunnel、Milvus、およびOpenAIの使用を組み合わせて類似検索を行う方法を紹介し、書籍のタイトル全体のセマンティックな理解と検索結果の向上を実現します。

入力データを表現するためにトレーニングされたモデルを使用することをセマンティック検索と呼び、このアプローチは異常検出やドキュメント検索などのさまざまなテキストベースのユースケースに拡張することができます。したがって、この記事で紹介される技術は書籍検索の分野に重要な突破口と影響をもたらすことができます。

次に、この記事に関連するいくつかの概念やツール/プラットフォームを簡単に紹介して、この記事をより理解しやすくします。

Apache SeaTunnelとは?

Apache SeaTunnelは、オープンソースの高性能分散データ管理および計算プラットフォームです。これはApache Foundationがサポートするトップレベルプロジェクトであり、大規模なデータを処理し、リアルタイムのデータクエリや計算を提供し、複数のデータソースと形式をサポートします。SeaTunnelの目標は、スケーラブルなエンタープライズレベルのデータ管理および統合プラットフォームを提供し、さまざまな大規模データ処理のニーズに対応することです。

Milvusとは?

Milvusは、大量のベクトルに対する格納、検索、類似検索をサポートするオープンソースのベクトル類似検索エンジンです。これは、大規模なベクトルデータに対する高性能で低コストのソリューションです。Milvusは、レコメンドシステム、画像検索、音楽の推薦など、さまざまなシナリオで使用することができます。

OpenAIとは?

ChatGPTは、OpenAIが開発したGenerative Pre-trained Transformer(GPT)モデルに基づく対話型AIシステムです。このシステムは、自然言語処理と深層学習技術を主に使用して、人間の会話に似た自然言語テキストを生成します。ChatGPTは、インテリジェントなカスタマーサービス、チャットボット、インテリジェントアシスタント、および言語モデルの研究開発など、幅広い応用があります。近年、ChatGPTは自然言語処理の分野での研究のホットスポットの1つとなりました。

LLMとは?

Large Language Model(LLM)は、与えられたテキストを分析して理解し、それに関連するテキストコンテンツを生成するための深層学習技術に基づく自然言語処理モデルです。大規模言語モデルは通常、深層ニューラルネットワークを使用して自然言語の文法や意味的なルールを学習し、テキストデータを連続的なベクトル空間のベクトル表現に変換します。トレーニング中、大規模言語モデルは大量のテキストデータを使用して言語パターンと統計的なルールを学習し、記事、ニュース、会話などの高品質なテキストコンテンツを生成することができます。大規模言語モデルには、機械翻訳、テキスト生成、質問応答システム、音声認識など、さまざまな応用があります。現在、TensorFlow、PyTorchなど、多くのオープンソースの深層学習フレームワークが大規模言語モデルの実装を提供しています。

チュートリアル

さあ、始めましょう! Apache SeaTunnel、OpenAIの埋め込みAPIを使って、私たちのベクトルデータベースと組み合わせて書籍のタイトル全体に対してセマンティック検索を行う方法をご紹介します。

準備

実験を行う前に、公式ウェブサイトからOpenAIトークンを取得し、Milvusの実験環境を展開する必要があります。また、この例で使用するデータを準備する必要もあります。データはダウンロードできます。

SeaTunnelを介してMilvusにデータをインポートします。

まず、book.csvを/tmp/milvus_test/book以下に配置し、milvus.confをタスク構成として設定し、config下に配置します。詳細はクイックスタートガイドを参照してください。

env {  # ここでエンジンの設定を行うことができます  execution.parallelism = 1  job.mode = "BATCH"  checkpoint.interval = 5000  #execution.checkpoint.data-uri = "hdfs://localhost:9000/checkpoint"}

source {  # これはテストとデモンストレーションのためのサンプルソースプラグインのみです  LocalFile {    schema {      fields {        bookID = string        title_1 = string        title_2 = string      }    }    path = "/tmp/milvus_test/book"    file_format_type = "csv"  }}transform {}sink {  Milvus {    milvus_host = localhost    milvus_port = 19530    username = root    password = Milvus    collection_name = title_db    openai_engine = text-embedding-ada-002    openai_api_key = sk-xxxx    embeddings_fields = title_2  }}

以下のコマンドを実行してください:

./bin/SeaTunnel.sh --config ./config/milvus.conf -e local

データベース内のデータを表示すると、データが書き込まれていることが確認できます。

次に、次のコードを使用して書籍タイトルに対して意味検索を実行します:

import jsonimport randomimport openaiimport timefrom pymilvus import connections, FieldSchema, CollectionSchema, DataType, Collection, utility

COLLECTION_NAME = 'title_db'  # コレクション名DIMENSION = 1536  # 埋め込みサイズCOUNT = 100  # 埋め込みと挿入するタイトルの数MILVUS_HOST = 'localhost'  # MilvusサーバーのURIMILVUS_PORT = '19530'OPENAI_ENGINE = 'text-embedding-ada-002'  # 使用するエンジンopenai.api_key = 'sk-******'  # ご自身のOpen AI APIキーを使用してくださいconnections.connect(host=MILVUS_HOST, port=MILVUS_PORT)collection = Collection(name=COLLECTION_NAME)collection.load()def embed(text):    return openai.Embedding.create(        input=text,         engine=OPENAI_ENGINE)["data"][0]["embedding"]def search(text):    # インデックスの検索パラメータ    search_params={        "metric_type": "L2"    }    results=collection.search(        data=[embed(text)],  # 埋め込まれた検索値        anns_field="title_2",  # 埋め込みから検索        param=search_params,        limit=5,  # 検索ごとの結果の制限は5件        output_fields=['title_1']  # 結果にタイトルフィールドを含める    )    ret=[]    for hit in results[0]:        row=[]        row.extend([hit.id, hit.score, hit.entity.get('title_1')])  # 結果のID、距離、タイトルを取得        ret.append(row)    return retsearch_terms=['self-improvement', 'landscape']for x in search_terms:    print('Search term:', x)    for result in search(x):        print(result)    print()

以下は結果です:

Search term: self-improvement[96, 0.4079835116863251, "The Dance of Intimacy: A Woman's Guide to Courageous Acts of Change in Key Relationships"][56, 0.41880303621292114, 'Nicomachean Ethics'][76, 0.4309804439544678, 'Possession'][19, 0.43588975071907043, 'Vanity Fair'][7, 0.4423919916152954, 'Knowledge Is Power (The Amazing Days of Abby Hayes: #15)']

Search term: landscape[9, 0.3023473024368286, 'The Lay of the Land'][1, 0.3906732499599457, 'The Angry Hills'][78, 0.392495334148407, 'Cloud Atlas'][95, 0.39346450567245483, 'Alien'][94, 0.399422287940979, 'The Known World']

もし古い方法のキーワード検索を使用する場合、書籍タイトルは「self-improvement」や「improvement」といったキーワードを含む必要があります。しかし、大規模な言語モデルを用いた意味理解により、よりニーズに合った書籍タイトルを取得することができます。例えば、上記の例では「self-improvement」というキーワードで検索した際、「The Dance of Intimacy: A Woman’s Guide to Courageous Acts of Change in Key Relationships」や「Nichomachean Ethics」といったタイトルは関連キーワードを含んでいませんが、明らかにニーズに合った結果です。

以上のように、Apache SeaTunnel、Milvus、OpenAIを使用することで、大規模な言語モデルを介した正確な書籍タイトルの類似検索を実現し、書籍検索の分野において技術的な突破口をもたらすと同時に意味理解に貴重な参考情報を提供することができます。皆様に何かインスピレーションを与えられれば幸いです。

We will continue to update VoAGI; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more