ほとんどの場合、企業は OLTP データベースに直接クエリを実行するだけで、非常に基本的な検索レベルのままです。リクエストは次のようになります: SELECT id, title FROM, entities WHERE, description LIKE '%bow%
.
これらは比較的高速で、複雑なクエリの処理やフィルターの操作がはるかに優れている傾向があります。しかし、これらの検索エンジンをGoogle検索や DuckDuckGo などの対応するものと比較すると、オープンソース ソリューションが適切な検索コンテキストとクエリ モダリティを構築できないことが明らかになります。
これは、クエリからの意味の抽出は自然言語タスクであり、AI コンポーネントなしでは解決できない可能性が高いためです。 GPT-3はこのタスクに適しています。
OpenAI オファー
text-search-ada-doc-001: 1024 text-search-babbage-doc-001: 2048 text-search-curie-doc-001: 4096 text-search-davinci-doc-001: 12288
ドキュメントは通常長く、クエリは通常短く不完全です。したがって、ドキュメントのベクトル化は、コンテンツの密度とサイズを考慮すると、クエリのベクトル化とは大きく異なります。 OpenAI はそれを知っているため、2 つのペアのモデル、 -doc
と-query
を提供します。
text-search-ada-query-001: 1024 text-search-babbage-query-001: 2048 text-search-curie-queryc-001: 4096 text-search-davinci-query-001: 12288
クエリとドキュメントの両方が同じモデル ファミリを使用し、出力ベクトルの長さが同じでなければならないことに注意することが重要です。
例を通して、この検索ソリューションの威力を見て理解するのが最も簡単かもしれません。この例では、
データセットには多数の列が含まれていますが、ベクトル化プロセスはタイトルと概要の列のみを中心に構築されます。
Title: Harry Potter and the Half-Blood Prince Overview: As Harry begins his sixth year at Hogwarts, he discovers an old book marked as 'Property of the Half-Blood Prince', and begins to learn more about Lord Voldemort's dark past.
datafile_path = "./tmdb_5000_movies.csv" df = pd.read_csv(datafile_path) def combined_info(row): columns = ['title', 'overview'] columns_to_join = [f"{column.capitalize()}: {row[column]}" for column in columns] return '\n'.join(columns_to_join) df['combined_info'] = df.apply(lambda row: combined_info(row), axis=1)
def get_embedding(text, model="text-search-babbage-doc-001"): text = text.replace("\n", " ") return openai.Embedding.create(input = [text], model=model)['data'][0]['embedding'] get_embedding(df['combined_info'][0])
このコード ブロックは、モデルが操作しているパラメーターtext-search-babbage-doc-001
の場合は 2048) と同じサイズのリストを出力します。
df['combined_info_search'] = df['combined_info'].apply(lambda x: get_embedding(x, model='text-search-babbage-doc-001')) df.to_csv('./tmdb_5000_movies_search.csv', index=False)
列combined_info_search
結合テキストのベクトル表現を保持します。
from openai.embeddings_utils import get_embedding, cosine_similarity def search_movies(df, query, n=3, pprint=True): embedding = get_embedding( query, engine="text-search-babbage-query-001" ) df["similarities"] = df.combined_info_search.apply(lambda x: cosine_similarity(x, embedding)) res = ( df.sort_values("similarities", ascending=False) .head(n) .combined_info ) if pprint: for r in res: print(r[:200]) print() return res res = search_movies(df, "movie about the wizardry school", n=3)
Title: Harry Potter and the Philosopher's StoneOverview: Harry Potter has lived under the stairs at his aunt and uncle's house his whole life. But on his 11th birthday, he learns he's a powerful wizard — with a place waiting for him at the Hogwarts School of Witchcraft and Wizardry. As he learns to harness his newfound powers with the help of the school's kindly headmaster, Harry uncovers the truth about his parents' deaths — and about the villain who's to blame. Title: Harry Potter and the Goblet of FireOverview: Harry starts his fourth year at Hogwarts, competes in the treacherous Triwizard Tournament and faces the evil Lord Voldemort. Ron and Hermione help Harry manage the pressure — but Voldemort lurks, awaiting his chance to destroy Harry and all that he stands for. Title: Harry Potter and the Prisoner of AzkabanOverview: Harry, Ron and Hermione return to Hogwarts for another magic-filled year. Harry comes face to face with danger yet again, this time in the form of an escaped convict, Sirius Black — and turns to sympathetic Professor Lupin for help.
Title: Harry Potter and the Philosopher's StoneOverview: Harry Potter has lived under the stairs at his aunt and uncle's house his whole life. But on his 11th birthday, he learns he's a powerful wizard — with a place waiting for him at the Hogwarts School of Witchcraft and Wizardry. As he learns to harness his newfound powers with the help of the school's kindly headmaster, Harry uncovers the truth about his parents' deaths — and about the villain who's to blame. Title: Dumb and Dumberer: When Harry Met LloydOverview: This wacky prequel to the 1994 blockbuster goes back to the lame-brained Harry and Lloyd's days as classmates at a Rhode Island high school, where the unprincipled principal puts the pair in remedial courses as part of a scheme to fleece the school. Title: Harry Potter and the Prisoner of AzkabanOverview: Harry, Ron and Hermione return to Hogwarts for another magic-filled year. Harry comes face to face with danger yet again, this time in the form of an escaped convict, Sirius Black — and turns to sympathetic Professor Lupin for help.
「Dumb and Dumberer: When Harry Met Lloyd」がここで何をしているのか疑問に思うかもしれません。ありがたいことに、この問題は、より多くのパラメーターを持つパラメーターでは再現されませんでした。
前述の例では、
距離計算アルゴリズムは、クエリとドキュメント間のこの類似性 (相違点) を単一の数値で表す傾向があります。ただし、信頼することはできません。
ブルート フォース ソリューションの検索時間の複雑さはO(n * d * n * log(n))です。パラメータdはモデルによって異なります (Babbage の場合は 2048 です) が、並べ替えステップのためにO(nlog(n))ブロックがあります。
検索ソリューションでは、クエリはできるだけ早く完了する必要があります。そして、この価格は通常、トレーニングと事前キャッシュ時間の側面で支払われます. kd ツリー、r ツリー、ボール ツリーなどのデータ構造を使用できます。の記事を検討してください。
Text-search-babbage-query-001 Number of dimensions: 2048 Number of queries: 100 Average duration: 225ms Median duration: 207ms Max duration: 1301ms Min duration: 176ms
Text-search-ada-query-002 Number of dimensions: 1536 Number of queries: 100 Average duration: 264ms Median duration: 250ms Max duration: 859ms Min duration: 215ms
Text-search-davinci-query-001 Number of dimensions: 12288 Number of queries: 100 Average duration: 379ms Median duration: 364ms Max duration: 1161ms Min duration: 271ms
を参照
または、試すことを検討することもできます
エラスティックサーチによると
さらに、 Microsoft が最近 __ことも追加する価値があります。発表によると、新しい Prometheus 言語モデルにより、Bing は関連性を高め、より正確にスニペットに注釈を付け、より新しい結果を提供し、地理位置情報を理解し、セキュリティを向上させることができます。これにより、検索ソリューションに自己回帰言語モデルを使用する新しい可能性が開かれる可能性があり、今後も注目していきます。
参考文献: