書籍検索の分野で大きな進歩を遂げました。Apache SeaTunnel、Milvus、OpenAI を使用して書籍タイトルの類似性検索の精度と効率を向上

ファイル

著者 | Guangdong Liu、Apache SeaTunnel コミッター

バックグラウンド

現在、公共図書館で使用されているような既存の書籍検索ソリューションは、書籍タイトルの実際の内容の意味的理解ではなく、キーワード マッチングに大きく依存しています。したがって、検索結果は私たちのニーズを十分に満たすことができず、さらには私たちが期待する結果と大きく異なることもあります。キーワードマッチングだけでは意味理解ができず、検索者の真の意図を理解できないためです。

では、より正確かつ効率的に書籍検索を行うためのより良い方法はあるのでしょうか? 答えは「はい」です!この記事では、Apache SeaTunnel、Milvus、OpenAI を使用して類似検索を実行し、書籍タイトル全体の意味を理解し、検索結果をより正確にする方法を紹介します。

トレーニングされたモデルを使用して入力データを表すことはセマンティック検索として知られており、このアプローチは、異常検出やドキュメント検索など、さまざまなテキストベースのユースケースに拡張できます。したがって、このホワイトペーパーで紹介したテクノロジーは、書籍検索の分野に大きな進歩と影響をもたらす可能性があります。

次に、誰もがこの記事をよりよく理解できるように、この記事と使用されるツール/プラットフォームに関連するいくつかの概念を簡単に紹介します。

Apache SeaTunnel とは

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

ミルバスとは

Milvus は、大規模なベクトルの保存、検索、類似性検索をサポートするオープンソースの類似ベクトル検索エンジンであり、大規模なベクトル データに対する高性能かつ低コストのソリューションです。Milvusは、レコメンドシステム、画像検索、音楽レコメンド、自然言語処理など、さまざまなシーンで利用できます。

OpenAIとは

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

LLM(大規模言語モデル)とは

大規模言語モデル (大規模言語モデル) は、深層学習テクノロジに基づく自然言語処理モデルであり、特定のテキストを分析および理解して、関連するテキスト コンテンツを生成できます。大規模な言語モデルは通常、ディープ ニューラル ネットワークを使用して自然言語の構文規則と意味規則を学習し、テキスト データを連続ベクトル空間のベクトル表現に変換します。トレーニング プロセス中に、大規模言語モデルは大量のテキスト データを使用して言語パターンと統計法則を学習し、記事、ニュース、対話などの高品質のテキスト コンテンツを生成できます。大規模な言語モデルの応用分野は、機械翻訳、テキスト生成、質問応答システム、音声認識などを含め、非常に幅広いです。現在、多くのオープンソースの深層学習フレームワークが、TensorFlow、PyTorch などの大規模な言語モデルの実装を提供しています。

チュートリアル

ここからがポイントです!OpenAI の埋め込み APIである Apache SeaTunnel とベクトル データベースを使用して、書籍のタイトル全体を意味的に検索する方法を説明します

準備手順

実験の前に、公式 Web サイトにアクセスして OpenAI トークンを取得し、Milvus 実験環境をデプロイする必要があります。この例で使用するデータも準備する必要があります。データはここからダウンロードできます。

SeaTunnel を介して Milvus にデータをインポートする まず、book.csv を /tmp/milvus_test/book に配置し、次にタスクを milvus.conf として設定して config の下に配置します。クイック スタート ガイドを参照してください

env {
  # You can set engine configuration here
  execution.parallelism = 1
  job.mode = "BATCH"
  checkpoint.interval = 5000
  #execution.checkpoint.data-uri = "hdfs://localhost:9000/checkpoint"
}

source {
  # This is a example source plugin **only for test and demonstrate the feature source plugin**
  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 json
import random
import openai
import time
from pymilvus import connections, FieldSchema, CollectionSchema, DataType, Collection, utility

COLLECTION_NAME = 'title_db'  # Collection name
DIMENSION = 1536  # Embeddings size
COUNT = 100  # How many titles to embed and insert.
MILVUS_HOST = 'localhost'  # Milvus server URI
MILVUS_PORT = '19530'
OPENAI_ENGINE = 'text-embedding-ada-002'  # Which engine to use
openai.api_key = 'sk-******'  # Use your own Open AI API Key here

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 parameters for the index
    search_params={
        "metric_type": "L2"
    }

    results=collection.search(
        data=[embed(text)],  # Embeded search value
        anns_field="title_2",  # Search across embeddings
        param=search_params,
        limit=5,  # Limit to five results per search
        output_fields=['title_1']  # Include title field in result
    )

    ret=[]
    for hit in results[0]:
        row=[]
        row.extend([hit.id, hit.score, hit.entity.get('title_1')])  # Get the id, distance, and title for the results
        ret.append(row)
    return ret

search_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']

従来の方法であるキーワード検索に従う場合、本のタイトルには自己啓発や改善などのキーワードが含まれている必要がありますが、意味理解のための大規模なモデルを提供すれば、よりニーズに合ったタイトルを検索できます。たとえば、上記の例では、検索したキーワードは自己改善(自己改善)で、表示された書籍のタイトルは「関係のダンス:親密かつ独立的に集まる芸術」、「ニコマコス倫理」でした。 、など。関連するキーワードが含まれていますが、明らかに私たちの要件により一致しています。Apache SeaTunnel、Milvus、OpenAI を使用すると、大規模言語モデルの方法を通じて書籍タイトルの類似性をより正確に検索できることがわかります。これは書籍検索の分野に大きな技術的進歩をもたらし、貴重な情報も提供します。意味の理解に役立つことを願っています。

関連リンク

おすすめ

転載: blog.csdn.net/weixin_54625990/article/details/131403701