Slide 1

Slide 1 text

No content

Slide 2

Slide 2 text

Noriyuki TAKEI ෢Ҫ ٓߦ Information • サイオステクノロジー株式会社 • Microsoft MVP for Microsoft Azure Favorites • Azure • パデル • スキー • ライブ配信 • ⽢いもの • ⾛ること blog https://tech-lab.sios.jp/ core skill Azureによるクラウドネイティブな アプリ開発 Twitter @noriyukitakei

Slide 3

Slide 3 text

技術ブログ「SIOS Tech.Lab」 ⽣成AI時代の様々な検索⼿法を検証する 〜Azure AI Searchによるベクトル/セマンティック/ハイブリッド検索〜 https://tech-lab.sios.jp/archives/38508

Slide 4

Slide 4 text

༷ʑͳݕࡧख๏ ͦͷΩʔϫʔυݕࡧ

Slide 5

Slide 5 text

様々な検索⼿法 これは従来から使われている検索⽅法で、転置インデックスというもの を作成し、その転置インデックスから検索をして、対象のドキュメント を引っ張ってくる⽅法である。 キーワード検索 ベクトル検索は、テキストや画像などのデータを多次元のベクトルに変 換し、これらのベクトル間の類似度を計算することで、関連性の⾼い情 報を迅速に検索する技術である。 ベクトル検索 キーワード検索で得られた検索結果に対して、マイクロソフト独⾃のAI モデルによって検索結果をさらに並べ替える⼿法である。 セマンティック 検索 キーワード検索とベクトル検索による検索結果を組み合わせて、さらに 精度を⾼める⽅法である。 ハイブリッド 検索 キーワード検索とベクトル検索に加えて、さらにセマンティック検索に よる検索結果を組み合わせて、さらに精度を⾼める⽅法である。 セマンティック ハイブリッド 検索

Slide 6

Slide 6 text

キーワード検索のステップ テキストの前処理 不要な⽂字の除去や形態素解析によ る単語分割を⾏う。 検索結果の順位付け 単語の出現頻度により検索結果の順 位づけを⾏う。 転置インデックス作成 キーワードごとに、そのキーワード が含まれる⽂書の⼀覧を作成する。

Slide 7

Slide 7 text

テキストの前処理 猫は素晴らしいペットです。猫はとても可愛いです。 ドキュメント1 ⽝は素晴らしいペットです。⽝は忠実です。 ドキュメント2 ⿃は素晴らしい歌を歌う。⿃は美しいです。 ドキュメント3 猫と⽝は⼈気のペットです。 ドキュメント4 以下の4つのドキュメントを考える。

Slide 8

Slide 8 text

テキストの前処理 ドキュメント1を形態素解析する。 猫 は 素晴らしい ペット です 。 猫 は とても 可愛い です 。 猫 素晴らしい ペット とても 可愛い 重複単語を削除 助詞などを削除 猫 は 素晴らしい ペット です とても 可愛い 。 猫は素晴らしいペットです。猫はとても可愛いです。 ⽂章を最⼩の意味を持つ単位に分割

Slide 9

Slide 9 text

テキストの前処理 猫 素晴らしい ペット とても 可愛い ドキュメント1 ⽝ 素晴らしい ペット 忠実 ドキュメント2 ⿃ 素晴らしい 歌 歌う 美しい ドキュメント3 猫 ⽝ ⼈気 ペット ドキュメント4 ドキュメントを2〜4も合わせて形態素解析を⾏う。結果は以下の通り。

Slide 10

Slide 10 text

転置インデックスの作成 猫 ドキュメント1, ドキュメント4 素晴らしい ドキュメント1, ドキュメント2, ドキュメント3 ペット ドキュメント1, ドキュメント2, ドキュメント4 とても ドキュメント1 可愛い ドキュメント1 ⽝ ドキュメント2, ドキュメント4 忠実 ドキュメント2 ⿃ ドキュメント3 歌 ドキュメント3 歌う ドキュメント3 美しい ドキュメント3 ⼈気 ドキュメント3 前処理の結果をもとに転置インデックスを以下のように作成する。

Slide 11

Slide 11 text

検索結果の順位付け 𝑇𝐹!,# = $!,# ∑#$% & $!,# = 特定の単語の出現回数 ドキュメント内の総単語数 𝐼𝐷𝐹' = 𝑙𝑜𝑔 𝑁 𝑑𝑓' = 𝑙𝑜𝑔 ドキュメントの総数 その単語を含むドキュメント数 各⽂書中に含まれる各単語が、その⽂書内でどれくらい重要かを表す尺度 term frequency - inverse document frequency TF-IDF = TF ✕ IDF

Slide 12

Slide 12 text

検索結果の順位付け 「猫」 という単語で検索した場合を考えてみる。 TF と IDF をそれぞれ求めてみる。

Slide 13

Slide 13 text

検索結果の順位付け 「猫」 という単語で検索した場合を考えてみる。 まずは TF を求める。 ドキュメント1の猫という単語のTF = 猫という単語の出現回数! ドキュメント"の総単語数# = 0.4 ドキュメント2の猫という単語のTF = 猫という単語の出現回数$ ドキュメント!の総単語数# = 0 ドキュメント3の猫という単語のTF = 猫という単語の出現回数$ ドキュメント%の総単語数& = 0 ドキュメント4の猫という単語のTF = 猫という単語の出現回数" ドキュメント'の総単語数' = 0.25 ドキュメント1が最も猫という単語の出現頻度が⾼い⽂書である

Slide 14

Slide 14 text

検索結果の順位付け 「猫」 という単語 IDF を求める。 猫という単語のIDF = 𝑙𝑜𝑔 ドキュメントの総数! 猫という単語を含むドキュメント数" = 0.301 「猫」 という単語が含まれるドキュメントは、 全体のドキュメントの中でも 希少価値が⾼い︕︕

Slide 15

Slide 15 text

検索結果の順位付け ドキュメント1の猫という単語のTF-IDF = 0.12 ドキュメント2の猫という単語のTF-IDF = 0 ドキュメント3の猫という単語のTF-IDF = 0 ドキュメント4の猫という単語のTF-IDF = 0.06 ドキュメント1が最もユーザーの求めるものに近いドキュメント である。 「猫」 という単語 TF-IDF を求める。

Slide 16

Slide 16 text

「素晴らしい」という単語で 検索した場合を考えてみる。 TF と IDF をそれぞれ求めてみる。 検索結果の順位付け

Slide 17

Slide 17 text

猫は素晴らしいペットです。猫はとても可愛いです。 ドキュメント1 ⽝は素晴らしいペットです。⽝は忠実です。 ドキュメント2 ⿃は素晴らしい歌を歌う。⿃は美しいです。 ドキュメント3 猫と⽝は⼈気のペットです。 ドキュメント4 検索結果の順位付け

Slide 18

Slide 18 text

検索結果の順位付け 「素晴らしい」という単語で検索した場合を考えてみる。 まずは TF を求める。 ドキュメント1の 「素晴らしい」 という単語のTF = 「素晴らしい」という単語の出現回数! ドキュメント!の総単語数" = 0.25 ドキュメント2の 「素晴らしい」 という単語のTF = 「素晴らしい」という単語の出現回数! ドキュメント#の総単語数$ = 0.2 ドキュメント3の 「素晴らしい」 という単語のTF = 「素晴らしい」という単語の出現回数! ドキュメント%の総単語数& = 0.167 ドキュメント4の 「素晴らしい」 という単語のTF = 「素晴らしい」という単語の出現回数' ドキュメント"の総単語数" = 0 ドキュメント1が最も「素晴らしい」という単語の出現頻度が⾼ い⽂書である

Slide 19

Slide 19 text

検索結果の順位付け 「素晴らしい」 という単語 IDF を求める。 「猫」という単語に⽐べると 「素晴らしい」という単語は 希少価値が低い・・・。 「素晴らしい」という単語のIDF = 𝑙𝑜𝑔 ドキュメントの総数" 「素晴らしい」という単語を含むドキュメント数% = 0.125

Slide 20

Slide 20 text

検索結果の順位付け 「素晴らしい」という単語 TF-IDF を求める。 ドキュメント1の「素晴らしい」という単語のTF-IDF = 0.031 ドキュメント2の 「素晴らしい」 という単語のTF-IDF = 0.025 ドキュメント3の 「素晴らしい」 という単語のTF-IDF = 0.02 ドキュメント4の 「素晴らしい」 という単語のTF-IDF = 0.031

Slide 21

Slide 21 text

検索結果の順位付け TF IDF TF ✕ IDF 猫 ドキュメント1 0.4 0.301 0.12 ドキュメント2 0 0 ドキュメント3 0 0 ドキュメント4 0.25 0.06 素晴らしい ドキュメント1 0.25 0.125 0.031 ドキュメント2 0.2 0.025 ドキュメント3 0.167 0.02 ドキュメント4 0.25 0.031 ドキュメント4を⽐べてみると、「猫」も「素晴らしい」もTF(ドキュメント内の 単語の出現頻度)は同じだが、IDF(ドキュメントの希少性)は「猫」のほうが⼤きい。 「猫」で検索したときのほうがよりユーザーの望むドキュメントと⾔える。

Slide 22

Slide 22 text

༷ʑͳݕࡧख๏ ͦͷϕΫτϧݕࡧ

Slide 23

Slide 23 text

様々な検索⼿法 これは従来から使われている検索⽅法で、転置インデックスというもの を作成し、その転置インデックスから検索をして、対象のドキュメント を引っ張ってくる⽅法である。 キーワード検索 ベクトル検索は、テキストや画像などのデータを多次元のベクトルに変 換し、これらのベクトル間の類似度を計算することで、関連性の⾼い情 報を迅速に検索する技術である。 ベクトル検索 キーワード検索で得られた検索結果に対して、マイクロソフト独⾃のAI モデルによって検索結果をさらに並べ替える⼿法である。 セマンティック 検索 キーワード検索とベクトル検索による検索結果を組み合わせて、さらに 精度を⾼める⽅法である。 ハイブリッド 検索 キーワード検索とベクトル検索に加えて、さらにセマンティック検索に よる検索結果を組み合わせて、さらに精度を⾼める⽅法である。 セマンティック ハイブリッド 検索

Slide 24

Slide 24 text

ベクトル検索 ⽢み 価格 (20, 20) (22, 20) (10, 18) (5, 15) (10, 5) (3, 25) θ₁ θ₂

Slide 25

Slide 25 text

C( , ) = 0.999 コサイン類似度 C( , ) = 0.786 と の⽅が 似ている りんご いちご りんご ハバネロ りんご いちご と より りんご ハバネロ

Slide 26

Slide 26 text

タイトル 本⽂ ベクトルデータ ダース・ベイダー01 ジェダイ時代のアナキンは、愛 する者を守りたいという純粋な 願望と… [0.014032107,- 0.0075616054,…] ダース・ベイダー02 危機を察して駆けつけたシディ アスにより救出され、サイボー グ化⼿術を施されて… [0.014539597,- 0.015440392,…] ダース・ベイダー03 そんな折、息⼦であるルーク・ スカイウォーカーと出会い皇帝 すら凌ぐ可能性を秘めた類稀な る才能に⽬をつける。… [0.035118327,0.0351 18327,…] Azure AI Search Azure OpenAI Service Wikipedia ジェダイ時代のアナキンは、 愛する者を守りたいという 純粋な願望と若さ故の激情 から、ジェダイの掟を何度 となく破ってしまう… ダース・ベイダー ① Wikipedia本⽂取得 ジェダイ時代のアナキンは、 愛する者を守りたいという 純粋な願望と若さ故の激情 から、ジェダイの掟を何度 となく破ってしまう… ダース・ベイダー-03.txt ジェダイ時代のアナキンは、 愛する者を守りたいという 純粋な願望と若さ故の激情 から、ジェダイの掟を何度 となく破ってしまう… ダース・ベイダー-02.txt ジェダイ時代のアナキンは、 愛する者を守りたいという 純粋な願望と… ダース・ベイダー-01.txt ジェダイ時代のアナキンは、 愛する者を守りたいという 純粋な願望と… ダース・ベイダー-01.txt ② LangChainによる ドキュメントのチャンク化 [0.014032107,- 0.0075616054,…] ダース・ベイダー-01.txt ③ Embeddings API発⾏ ④ ベクトル化データ取得 ⑤ ドキュメント登録 [0.014032107,- 0.0075616054,…] ダース・ベイダー-01.txt

Slide 27

Slide 27 text

タイトル 本⽂ ベクトルデータ ダース・ベイダー01 ジェダイ時代のアナキンは、愛 する者を守りたいという純粋な 願望と… [0.014032107,- 0.0075616054,…] ダース・ベイダー02 危機を察して駆けつけたシディ アスにより救出され、サイボー グ化⼿術を施されて… [0.014539597,- 0.015440392,…] ダース・ベイダー03 そんな折、息⼦であるルーク・ スカイウォーカーと出会い皇帝 すら凌ぐ可能性を秘めた類稀な る才能に⽬をつける。… [0.035118327,0.0351 18327,…] Azure AI Search Azure OpenAI Service Wikipedia ジェダイ時代のアナキンは、 愛する者を守りたいという 純粋な願望と若さ故の激情 から、ジェダイの掟を何度 となく破ってしまう… ダース・ベイダー ① Wikipedia本⽂取得 ジェダイ時代のアナキンは、 愛する者を守りたいという 純粋な願望と若さ故の激情 から、ジェダイの掟を何度 となく破ってしまう… ダース・ベイダー-03.txt ジェダイ時代のアナキンは、 愛する者を守りたいという 純粋な願望と若さ故の激情 から、ジェダイの掟を何度 となく破ってしまう… ダース・ベイダー-02.txt ジェダイ時代のアナキンは、 愛する者を守りたいという 純粋な願望と… ダース・ベイダー-01.txt ジェダイ時代のアナキンは、 愛する者を守りたいという 純粋な願望と… ダース・ベイダー-01.txt ② LangChainによる ドキュメントのチャンク化 [0.014032107,- 0.0075616054,…] ダース・ベイダー-01.txt ③ Embeddings API発⾏ ④ ベクトル化データ取得 ⑤ ドキュメント登録 [0.014032107,- 0.0075616054,…] ダース・ベイダー-01.txt

Slide 28

Slide 28 text

ベクトル検索の検証 ドキュメントを登録するためのインデックスをAzure AI Searchに作成します。 1. Wikipedia本⽂取得 / 2.LangChainによるドキュメントのチャンク化 import wikipedia from langchain.text_splitter import RecursiveCharacterTextSplitter import os def save_chunks_to_files(title, chunk_size, chunk_overlap, output_dir='data', lang='ja‘): # Wikipediaページの取得 wikipedia.set_lang(lang) page = wikipedia.page(title) text = page.content # テキストをチャンクに分割 splitter = RecursiveCharacterTextSplitter.from_tiktoken_encoder( encoding_name='cl100k_base‘, chunk_size=chunk_size, chunk_overlap=chunk_overlap ) chunks = splitter.split_text(text) …省略…

Slide 29

Slide 29 text

ベクトル検索の検証 今回は以下の登場⼈物の情報を取得します。 • ルーク・スカイウォーカー • ダース・ベイダー • レイア・オーガナ • ハン・ソロ • ヨーダ • オビ=ワン・ケノービ • チューバッカ • シーヴ・パルパティーン • アナキン・スカイウォーカー • ランド・カルリジアン • パドメ・アミダラ • ボバ・フェット • キャプテン・ファズマ • C-3PO • レイ (スター・ウォーズ)

Slide 30

Slide 30 text

ベクトル検索の検証 ジェダイ時代のアナキン は、愛する者を守りたい という純粋な願望と若さ 故の激情から、ジェダイ の掟を何度となく破って しまう。特に、妻パド メ・アミダラが死の運命 にあるという予知夢を⾒ た後は[注 1]、妻を救う ⼒を得たいと願うあまり にシスの暗⿊卿ダース・ シディアス(後の銀河帝 国皇帝)の… ジェダイ時代のアナキンは、愛する 者を守りたいという純粋な願望と若 さ故の激情から、ジェダイの掟を何 度となく破ってしまう。… ダース・ベイダー-01.txt 危機を察して駆けつけたシディアス により救出され、サイボーグ化⼿術 を施されて⼀命は取り留めたものの シディアスが… ダース・ベイダー-02.txt 以降は帝国軍の指揮官として反乱同 盟軍によるレジスタンス活動の制圧 に従事することとなり、『反乱者た ち』ではその反乱軍として… ダース・ベイダー-03.txt Azure OpenAI Service チャンク化 ベクトル化 [0.014032107, -0.0075616054,…] [0.014032107, -0.0075616054,…] [0.014032107, -0.0075616054,…] Azure AI Search テキストをベクトル化するEmbeddings APIは、リクエストのトークン数に限度(text-embedding-ada-002で は8191トークン)があるのでテキストを細かく分割する(チャンク化)が必要になります。

Slide 31

Slide 31 text

タイトル 本⽂ ベクトルデータ ダース・ベイダー01 ジェダイ時代のアナキンは、愛 する者を守りたいという純粋な 願望と… [0.014032107,- 0.0075616054,…] ダース・ベイダー02 危機を察して駆けつけたシディ アスにより救出され、サイボー グ化⼿術を施されて… [0.014539597,- 0.015440392,…] ダース・ベイダー03 そんな折、息⼦であるルーク・ スカイウォーカーと出会い皇帝 すら凌ぐ可能性を秘めた類稀な る才能に⽬をつける。… [0.035118327,0.0351 18327,…] Azure AI Search Azure OpenAI Service Wikipedia ジェダイ時代のアナキンは、 愛する者を守りたいという 純粋な願望と若さ故の激情 から、ジェダイの掟を何度 となく破ってしまう… ダース・ベイダー ① Wikipedia本⽂取得 ジェダイ時代のアナキンは、 愛する者を守りたいという 純粋な願望と若さ故の激情 から、ジェダイの掟を何度 となく破ってしまう… ダース・ベイダー-03.txt ジェダイ時代のアナキンは、 愛する者を守りたいという 純粋な願望と若さ故の激情 から、ジェダイの掟を何度 となく破ってしまう… ダース・ベイダー-02.txt ジェダイ時代のアナキンは、 愛する者を守りたいという 純粋な願望と… ダース・ベイダー-01.txt ジェダイ時代のアナキンは、 愛する者を守りたいという 純粋な願望と… ダース・ベイダー-01.txt ② LangChainによる ドキュメントのチャンク化 [0.014032107,- 0.0075616054,…] ダース・ベイダー-01.txt ③ Embeddings API発⾏ ④ ベクトル化データ取得 ⑤ ドキュメント登録 [0.014032107,- 0.0075616054,…] ダース・ベイダー-01.txt

Slide 32

Slide 32 text

ベクトル検索の検証 3. Embeddings API発⾏ / 4. ベクトル化データ取得 / 5. ドキュメント登録 import requests # HTTPリクエストを送信するためのライブラリ import os # OSの機能を利⽤するためのライブラリ import base64 # データをBase64形式でエンコード/デコードするためのライブラリ # ファイルをAzure AI SearchのAPIに登録する関数 def post_file_to_search_api(file_path): # Azure AI SearchのAPIのエンドポイントURL srch_api_endpoint = "https://[Azure AI Searchのサービス名].search.windows.net/indexes/wiki/docs/index?api- version=2023-11-01" # Azure AI SearchのAPIのキー srch_api_key = "XXXXXX" # AOAI APIのエンドポイントURL aoai_api_endpoint = "https://[Azure OpenAI Serviceのサービス名].openai.azure.com/openai/deployments/[モデルtext- embedding-ada-002のデプロイ名]/embeddings?api-version=2023-05-15" # AOAI APIのキー aoai_api_key = "XXXXXX" …省略…

Slide 33

Slide 33 text

ベクトル検索の検証 以下のクエリを⽤いて、キーワード検索とベクトル検索の結果を⽐較します。 エピソード1〜3で語られるダースベーダーの本当の名前は︖ まずはキーワード検索を⾏い、その結果を取得します。 $ curl -X POST "https://[Azure AI Searchのサービス名].search.windows.net/indexes/wiki/docs/search?api-version=2023- 11-01" \ -H "Content-Type: application/json" \ -H "api-key: [Azure AI SearchのAPIキー]" \ -d ‘{ "queryType": "simple", "search": "エピソード1〜3で語られるダースベーダーの本当の名前は?", "searchFields":"content", "select": "title, content", "highlight": "content", "highlightPreTag": "", "highlightPostTag": "", "count": true }' \ | jq queryTypeをsimpleにする。

Slide 34

Slide 34 text

ベクトル検索の検証 次にベクトル検索を⾏います。 まずは検索クエリ「エピソード1〜3で語られるダースベーダーの本当の名前は︖」のベクトル化を⾏います。 $ embedding=$(curl -s -X POST "https://[Azure OpenAI Serviceのサービス名].openai.azure.com/openai/deployments/[ モデルtext-embedding-ada-002のデプロイ名]/embeddings?api-version=2023-05-15" \ -H 'Content-Type: application/json' \ -H 'api-key: [Azure OpenAI ServiceのAPIキー]' \ -d '{"input": "エピソード1〜3で語られるダースベーダーの本当の名前は?"}' \ | jq '.data[0].embedding')

Slide 35

Slide 35 text

ベクトル検索の検証 $ curl -X POST "https://[Azure AI Searchのサービス名].search.windows.net/indexes/wiki/docs/search?api-version=2023- 11-01" \ -H "Content-Type: application/json" \ -H "api-key: [Azure AI SearchのAPIキー]" \ -d '{ "count": true, "select": "title, content", "vectorQueries": [ { "fields": "contentVector", "kind": "vector", "vector": '$embedding', "exhaustive": true } ] }' | jq ベクトル化したクエリを⽤いて、Azure AI Searchに登録されたドキュメントに対してベクトル検索を⾏いま す。 ここにベクトル化されたクエリを指定する。

Slide 36

Slide 36 text

ベクトル検索の検証 キーワード検索 ベクトル検索 == 備考 ==『エピソード6』にて、ルークがレ イアに「本当の⺟親」の印象について尋ねる場⾯ がある。この時、ルークは既にレイアが⾃⾝の双 ⼦の妹である事を知っていた事と、“本当の”と前 置きしていることから、… アナキン・スカイウォーカーを主⼈公とする3部 作(『エピソード1 ファントム・メナス』、『エ ピソード2 クローンの攻撃』、『エピソード3 シ スの復讐』)のヒロインとして登場。… 検索クエリ: エピソード1〜3で語られるダースベーダーの本当の名前は︖ 形態素解析: エピソード 1 3 語る ダースベーダー 本当 名前 レイア・オーガナ-12.txt パドメ・アミダラ-01.txt === 『エピソード6』での配役変更 ===\n2004年製作以降の映像ソフトでは死後 フォースと⼀体化し霊体として登場するアナキ ン・スカイウォーカーの姿がセバスチャン・ショ ウが演じる姿から『エピソード2』 。… ダース・ベイダー-25.txt ︙ …本名およびジェダイの騎⼠であった頃の名はア ナキン・スカイウォーカーで、天性の才能の持ち 主に加えて優れた戦闘能⼒、技術⼒に⻑けた騎⼠ であったがフォースの暗⿊⾯に囚われ銀河帝国皇 帝… 旧三部作(オリジナル・トリロジー、エピソード 4 - 6)\nシリーズ第1作『エピソード4/新たなる 希望』(1977年公開)では直接の登場はないが、 帝国軍デス・スター 司令官ターキン総督が … ダース・ベイダー-01.txt シーヴ・パルパティーン-02.txt == キャラクター制作 ==\n名前は「ダーク・ ファーザー」のもじりで、ルーカス⾃⾝の⽗親と の確執が反映されたキャラクターなどとされてい る(別説あり)。実際オランダ語では、⽗親のこ とを「vader(ファーダー)」と⾔う。 ダース・ベイダー-17.txt ︙ ベクトル検索は、ユーザーの意図した回答が 最も⾼いスコアになっている。 1位 2位 10位 キーワード検索は、クエリ内の「エピソー ド」「本当」という単語に引っ張られすぎて、 関連のないドキュメントのスコアが⾼くなっ ている。

Slide 37

Slide 37 text

༷ʑͳݕࡧख๏ ͦͷ ηϚϯςΟοΫݕࡧ

Slide 38

Slide 38 text

様々な検索⼿法 これは従来から使われている検索⽅法で、転置インデックスというもの を作成し、その転置インデックスから検索をして、対象のドキュメント を引っ張ってくる⽅法である。 キーワード検索 ベクトル検索は、テキストや画像などのデータを多次元のベクトルに変 換し、これらのベクトル間の類似度を計算することで、関連性の⾼い情 報を迅速に検索する技術である。 ベクトル検索 キーワード検索で得られた検索結果に対して、マイクロソフト独⾃のAI モデルによって検索結果をさらに並べ替える⼿法である。 セマンティック 検索 キーワード検索とベクトル検索による検索結果を組み合わせて、さらに 精度を⾼める⽅法である。 ハイブリッド 検索 キーワード検索とベクトル検索に加えて、さらにセマンティック検索に よる検索結果を組み合わせて、さらに精度を⾼める⽅法である。 セマンティック ハイブリッド 検索

Slide 39

Slide 39 text

セマンティック検索の検証 === エピソード9/スカイウォーカーの夜明け ===\nカイロとの激戦の後、パルパティーン の孫… ルーク・スカイウォーカー-23.txt …ローグ中隊のリーダーでもあった。師匠はオ ビ=ワン・ケノービとヨーダ。⽗は後のシスの 暗⿊卿ダース・ベイダーである… ルーク・スカイウォーカー-02.txt BM25もしくはRRFによるランキング ︙ 1位 3位 ︙ ︙ "幼少時代から奴隷として過ごしてきたために 上から抑えつけられる事を根っから嫌う旺盛な 反⾻⼼を持つ故、師匠のオビ=ワンと… アナキン・スカイウォーカー-03.txt 50位 Bingから変化した深層学習モデルによる 再ランキング セマンティックアンサーや セマンティックキャプションの⽣成 "== 経歴 ==\nエピソード3/シスの復讐\n銀 河共和国が滅び、銀河帝国が誕⽣した⽇に⽣ま れたルーク・スカイウォーカーの双⼦の… レイア・オーガナ-02.txt 100位 …ローグ中隊のリーダーでもあった。師匠はオ ビ=ワン・ケノービとヨーダ。⽗は後のシスの 暗⿊卿ダース・ベイダーである… ルーク・スカイウォーカー-02.txt ︙ ︙ "幼少時代から奴隷として過ごしてきたために 上から抑えつけられる事を根っから嫌う旺盛な 反⾻⼼を持つ故、師匠のオビ=ワンと… アナキン・スカイウォーカー-03.txt そんな折、息⼦であるルーク・スカイウォー カーと出会い皇帝すら凌ぐ可能性を秘めた類稀 なる才能に⽬をつける。… ダース・ベイダー-07.txt ルーク・スカイウォーカー-02.txt 師匠はオビ=ワン・ケノービとヨーダ。 ⽗ は後のシスの暗⿊卿ダース・ベイダーであ るアナキン・スカイウォーカー。 … セマンティックアンサー 師匠はオビ=ワン・ケノービとヨーダ。 ⽗ は後のシスの暗⿊卿ダース・ベイダーであ るアナキン・スカイウォーカー。… セマンティックキャプション ︙ "幼少時代から奴隷として過ごしてきたために 上から抑えつけられる事を根っから嫌う旺盛な 反⾻⼼を持つ故、師匠のオビ=ワンと… アナキン・スカイウォーカー-03.txt 深層学習モデルによる再ランキング は、BM25もしくはRFFによるラン キングの結果の中から50位以内のも のに限定

Slide 40

Slide 40 text

セマンティック検索の検証 以下のクエリを⽤いて、キーワード検索とセマンティック検索の結果を⽐較します。 ルーク・スカイウォーカーの師匠はだれですか︖ セマンティック検索は以下のように⾏います。 $ curl -X POST "https://[Azure AI Searchのサービス名].search.windows.net/indexes/wiki/docs/search?api-version=2023- 11-01" \ -H "Content-Type: application/json" \ -H "api-key: [Azure AI SearchのAPIキー]" \ -d '{ "queryType": "semantic", "search": "ルーク・スカイウォーカーの師匠はだれですか?", "semanticConfiguration": "config1", "answers": "extractive", "select": "title, content", "count": true, "top": 5 }' | jq queryTypeにsemanticを指定する。

Slide 41

Slide 41 text

セマンティック検索の検証 キーワード検索 セマンティック検索 === エピソード9/スカイウォーカーの夜明け ===\nカイロとの激戦の後、パルパティーンの 孫として⾃⾝が暗⿊⾯に堕ちることを恐れたレイ は⽣前のルークと同じように惑星オク=トに⾝を 沈めようとした。… だがパルパティーンのフォースの暗⿊⾯の誘惑に 屈しなかった姿を⾒てそれに激怒したパルパ ティーンの電撃に苦しむルークの姿や良⼼を信じ 続けたルークの叫びを聞き、再びジェダイとして の⼼を思い出して… 検索クエリ: ルーク・スカイウォーカーの師匠はだれですか︖ 形態素解析: ルーク スカイウォーカ 師匠 だれる ルーク・スカイウォーカー-23.txt アナキン・スカイウォーカー-05.txt …ローグ中隊のリーダーでもあった。師匠はオビ =ワン・ケノービとヨーダ。⽗は後のシスの暗⿊ 卿ダース・ベイダーであるアナキン・スカイ ウォーカー。ルークは幼少時代を奴隷として⽣活 した⽗アナキンとは異なり普通の家庭に… ルーク・スカイウォーカー-02.txt ルーク・スカイウォーカー-02.txt == 創造とキャスティング ==\n脚本家のマイケ ル・アーントは2012年中頃にルーカスフィルム社 ⻑のキャスリーン・ケネディから『スター・ ウォーズ』続編三部作の脚本執筆を依頼され、彼 は⼥性ジェダイのオリジンを描く物語である… レイ (スター・ウォーズ)-02.txt ︙ 師匠はオビ=ワン・ケノービとヨーダ。 ⽗は 後のシスの暗⿊卿ダース・ベイダーであるアナ キン・スカイウォーカー。 … セマンティックアンサー 師匠はオビ=ワン・ケノービとヨーダ。 ⽗は 後のシスの暗⿊卿ダース・ベイダーであるアナ キン・スカイウォーカー。… セマンティックキャプション 3位から1位に浮上した 1位 2位 3位 セマンティックアンサ ー・セマンティックキ ャプションが⽣成され る

Slide 42

Slide 42 text

༷ʑͳݕࡧख๏ ͦͷ ϋΠϒϦουݕࡧ

Slide 43

Slide 43 text

様々な検索⼿法 これは従来から使われている検索⽅法で、転置インデックスというもの を作成し、その転置インデックスから検索をして、対象のドキュメント を引っ張ってくる⽅法である。 キーワード検索 ベクトル検索は、テキストや画像などのデータを多次元のベクトルに変 換し、これらのベクトル間の類似度を計算することで、関連性の⾼い情 報を迅速に検索する技術である。 ベクトル検索 キーワード検索で得られた検索結果に対して、マイクロソフト独⾃のAI モデルによって検索結果をさらに並べ替える⼿法である。 セマンティック 検索 キーワード検索とベクトル検索による検索結果を組み合わせて、さらに 精度を⾼める⽅法である。 ハイブリッド 検索 キーワード検索とベクトル検索に加えて、さらにセマンティック検索に よる検索結果を組み合わせて、さらに精度を⾼める⽅法である。 セマンティック ハイブリッド 検索

Slide 44

Slide 44 text

ハイブリッド検索の検証 キーワード検索 アナキン・スカイウォーカーを主⼈公と する3部作(『エピソード1 ファント ム・メナス』、『エピソード2 クローン の攻撃』 … パドメ・アミダラ-01.txt ︙ …ルーク・スカイウォーカーやレイア・ オーガナは当初本名で呼んでいたが… またベーシックを話せたとしても、ウー キー族の… ダース・ベイダー-01.txt … 『エピソード1』の中で、C-3PO は 後のダース・ベイダーであるアナキン・ スカイウォーカーの⼿によって、廃品を 結集し作られたことがわかる。 C-3PO-03.txt チューバッカ (Chewbacca) は、映画 『スター・ウォーズシリーズ』に登場す る架空の⼈物である。 チューバッカ-01.txt ︙ ︙ ベクトル検索 …新三部作に向けて⼥性主⼈公を創造す るにあたり、監督・脚本のJ・J・エイブ ラムスは脚本のローレンス・カスダンと の最初の会談から⼥性を物語の中⼼に… レイ (スター・ウォーズ)-02.txt ︙ == 経歴 ==\nエピソード3/シスの復讐 \n銀河共和国が滅び、銀河帝国が誕⽣し た⽇に⽣まれたルーク・スカイウォー カーの双⼦の妹で、 … レイア・オーガナ-02.txt … 『エピソード1』の中で、C-3PO は 後のダース・ベイダーであるアナキン・ スカイウォーカーの⼿によって、廃品を 結集し作られたことがわかる。 C-3PO-03.txt ︙ ︙ ジェダイ時代のアナキンは、愛する者を 守りたいという純粋な願望と若さ故の激 情から、ジェダイの掟を何度となく破っ てしまう… ダース・ベイダー-02.txt ハイブリッド検索 オビ=ワン・ケノービ(Obi-Wan Kenobi、ベン・ケノービ)は、アメリ カのSF映画『スター・ウォーズ』シリー ズに登場する架空の⼈物… オビ=ワン・ケノービ-01.txt ︙ 危機を察して駆けつけたシディアスによ り救出され、サイボーグ化⼿術を施され て⼀命は取り留めたもののシディアスが 期待していた… ダース・ベイダー-04.txt アナキンから報告を受け、ジェダイ・マ スター、メイス・ウィンドゥは、同⾏を 申し出たアナキンをジェダイ聖堂に留め 置き、エージェン・コーラー、 … シーヴ・パルパティーン-10.txt ︙ ︙ … 『エピソード1』の中で、C-3PO は 後のダース・ベイダーであるアナキン・ スカイウォーカーの⼿によって、廃品を 結集し作られたことがわかる。 C-3PO-03.txt + = キーワード検索とベクトル検索の結果をRRF(Reciprocal Rank Fusion、逆ランク融合)を⽤いて統合し、再 ランキングして検索結果を提供します。キーワード検索の精度とベクトル検索の⽂脈理解の利点を組み合わせ、 より適切な検索結果を得ることが可能になります。

Slide 45

Slide 45 text

ハイブリッド検索の検証 RRFScore(d) = ∑!"# $ % &'(!(*) d: 対象のドキュメント i: 検索システム k: 定数 𝑟! (𝑑): 検索システムiにおけるドキュメントdの順位

Slide 46

Slide 46 text

ハイブリッド検索の検証 検索システムX 検索システムY ドキュメントA ドキュメントD ドキュメントC ドキュメントE ドキュメントB ドキュメントG ドキュメントA ドキュメントH ドキュメントE ドキュメントF 1位 2位 3位 4位 5位 7つのドキュメントA〜Gがあり、2つの検索システム(検索システムX、検索システムY)で以下のような検索順 位であるとします。

Slide 47

Slide 47 text

ハイブリッド検索の検証 ドキュメントA Score: 1.50 検索システムX + Y 1位 2位 3位 ドキュメントG Score: 1.00 ドキュメントD Score: 0.50 ドキュメントE Score: 0.50 ドキュメントC Score: 0.33 ドキュメントH Score: 0.33 5位 ドキュメントB Score: 0.20 ドキュメントF Score: 0.20 7位 検索システムX 検索システムY ドキュメントA ドキュメントB ドキュメントC ドキュメントD ドキュメントF ドキュメントG ドキュメントH ドキュメントE 1 0.5 + = 1.50 0.20 0 + = 0.20 0.33 0 + = 0.33 0.50 0 + = 0.50 0.25 0.25 + = 0.50 0 0.20 + = 0.20 0 1 + = 1.00 0 0.33 + = 0.33 RRFにより2つの検索システムのスコアを融合し、リランクします。

Slide 48

Slide 48 text

ハイブリッド検索の検証 検索システムX 検索システムY ドキュメントA ドキュメントD ドキュメントC ドキュメントE ドキュメントB ドキュメントG ドキュメントA ドキュメントH ドキュメントE ドキュメントF 1位 2位 3位 4位 5位 ドキュメントA 検索システムX + Y ドキュメントG ドキュメントD ドキュメントE ドキュメントC ドキュメントH ドキュメントB ドキュメントF 7位 ドキュメントEは、検索システムXとYの両⽅で4位にランクされていました。しかし、RRFを⽤いて両システムの結果を統合 した後、ドキュメントEの最終的なランキングは3位に上昇しました。これは、両⽅のシステムで⼀貫して⾼いランキングを 得ているドキュメントは、結果が融合されるとさらに重要度が⾼まるためです。つまり、複数の検索システムからのランキ ングが合わさることで、そのドキュメントの総合的な評価が向上します。

Slide 49

Slide 49 text

ハイブリッド検索の検証 以下のクエリを⽤いて、キーワード検索、ベクトル検索、ハイブリッド検索の結果を⽐較します。 アナキン・スカイウォーカーによって作成されてとてもたくさんの⾔葉が話せる登場⼈物は︖ ハイブリッド検索は以下のように⾏います。 $ curl -X POST "https://[Azure AI Searchのサービス名].search.windows.net/indexes/wiki/docs/search?api-version=2023-11-01" \ -H "Content-Type: application/json" \ -H "api-key: [Azure AI SearchのAPIキー]" \ -d '{ "count": true, "select": "title, content", "vectorQueries": [ { "fields": "contentVector", "kind": "vector", "vector": '$embedding', "exhaustive": true, "k": 30 } ], "search": "アナキン・スカイウォーカーによって作成されて、とてもたくさんの⾔葉が話せる登場⼈物は?" }' | jq vectorにベクトル化したクエリを設定する。 seachにベクトル化する前のクエリを設定する。

Slide 50

Slide 50 text

ハイブリッド検索の検証 キーワード検索 アナキン・スカイウォーカーを主⼈公と する3部作(『エピソード1 ファント ム・メナス』、『エピソード2 クローン の攻撃』 … パドメ・アミダラ-01.txt ︙ ベクトル検索 ハイブリッド検索 …ルーク・スカイウォーカーやレイア・ オーガナは当初本名で呼んでいたが… またベーシックを話せたとしても、ウー キー族の… ダース・ベイダー-01.txt … 『エピソード1』の中で、C-3PO は 後のダース・ベイダーであるアナキン・ スカイウォーカーの⼿によって、廃品を 結集し作られたことがわかる。 C-3PO-03.txt チューバッカ (Chewbacca) は、映画 『スター・ウォーズシリーズ』に登場す る架空の⼈物である。 チューバッカ-01.txt ︙ ︙ …新三部作に向けて⼥性主⼈公を創造す るにあたり、監督・脚本のJ・J・エイブ ラムスは脚本のローレンス・カスダンと の最初の会談から⼥性を物語の中⼼に… レイ (スター・ウォーズ)-02.txt ︙ == 経歴 ==\nエピソード3/シスの復讐 \n銀河共和国が滅び、銀河帝国が誕⽣し た⽇に⽣まれたルーク・スカイウォー カーの双⼦の妹で、 … レイア・オーガナ-02.txt … 『エピソード1』の中で、C-3PO は 後のダース・ベイダーであるアナキン・ スカイウォーカーの⼿によって、廃品を 結集し作られたことがわかる。 C-3PO-03.txt ︙ ︙ オビ=ワン・ケノービ(Obi-Wan Kenobi、ベン・ケノービ)は、アメリ カのSF映画『スター・ウォーズ』シリー ズに登場する架空の⼈物… オビ=ワン・ケノービ-01.txt ︙ 危機を察して駆けつけたシディアスによ り救出され、サイボーグ化⼿術を施され て⼀命は取り留めたもののシディアスが 期待していた… ダース・ベイダー-04.txt アナキンから報告を受け、ジェダイ・マ スター、メイス・ウィンドゥは、同⾏を 申し出たアナキンをジェダイ聖堂に留め 置き、エージェン・コーラー、 … シーヴ・パルパティーン-10.txt ︙ ︙ ジェダイ時代のアナキンは、愛する者を 守りたいという純粋な願望と若さ故の激 情から、ジェダイの掟を何度となく破っ てしまう… ダース・ベイダー-02.txt … 『エピソード1』の中で、C-3PO は 後のダース・ベイダーであるアナキン・ スカイウォーカーの⼿によって、廃品を 結集し作られたことがわかる。 C-3PO-03.txt 検索クエリ: アナキン・スカイウォーカーによって作成されて、とてもたくさんの⾔葉が話せる登場⼈物は︖ 形態素解析: アナ キン スカイウォーカ 作成 とても たくさん ⾔葉 話せる 登場 ⼈物 9位 19位 20位 2位

Slide 51

Slide 51 text

༷ʑͳݕࡧख๏ ͦͷηϚϯςΟοΫ ϋΠϒϦουݕࡧ

Slide 52

Slide 52 text

様々な検索⼿法 これは従来から使われている検索⽅法で、転置インデックスというもの を作成し、その転置インデックスから検索をして、対象のドキュメント を引っ張ってくる⽅法である。 キーワード検索 ベクトル検索は、テキストや画像などのデータを多次元のベクトルに変 換し、これらのベクトル間の類似度を計算することで、関連性の⾼い情 報を迅速に検索する技術である。 ベクトル検索 キーワード検索で得られた検索結果に対して、マイクロソフト独⾃のAI モデルによって検索結果をさらに並べ替える⼿法である。 セマンティック 検索 キーワード検索とベクトル検索による検索結果を組み合わせて、さらに 精度を⾼める⽅法である。 ハイブリッド 検索 キーワード検索とベクトル検索に加えて、さらにセマンティック検索に よる検索結果を組み合わせて、さらに精度を⾼める⽅法である。 セマンティック ハイブリッド 検索

Slide 53

Slide 53 text

セマンティックハイブリッド検索の検証 キーワード検索 と ベクトル検索 と セマンティック検索 と ハイブリッド 検索の全部のせ。

Slide 54

Slide 54 text

セマンティックハイブリッド検索の検証 $ curl -X POST "https://[Azure AI Searchのサービス名].search.windows.net/indexes/wiki/docs/search?api-version=2023-11- 01" \ -H "Content-Type: application/json" \ -H "api-key: [Azure AI SearchのAPIキー]" \ -d '{ "count": true, "select": "title, content", "vectorQueries": [ { "fields": "contentVector", "kind": "vector", "vector": '$embedding', "exhaustive": true } ], "queryType": "semantic", "search": "アナキン・スカイウォーカーによって作成されて、とてもたくさんの⾔葉が話せる登場⼈物は?", "semanticConfiguration": "config1", "answers": "extractive" }' | jq ハイブリッド検索のときと同じクエリを⽤いて、以下のようにセマンティックハイブリッド検索を⾏います。 vectorにベクトル化したクエリを設定する。 セマンティック検索の設定をする。

Slide 55

Slide 55 text

セマンティックハイブリッド検索の検証 キーワード検索 アナキン・スカイウォーカーを主⼈公と する3部作(『エピソード1 ファント ム・メナス』、『エピソード2 クローン の攻撃』 … 検索クエリ: アナキン・スカイウォーカーによって作成されて、とてもたくさんの⾔葉が話せる登場⼈物は︖ 形態素解析: アナ キン スカイウォーカ 作成 とても たくさん ⾔葉 話せる 登場 ⼈物 パドメ・アミダラ-01.txt ︙ 9位 19位 20位 ベクトル検索 2位 ハイブリッド検索 セマンティックハイブリッド検索 …ルーク・スカイウォーカーやレイア・ オーガナは当初本名で呼んでいたが… またベーシックを話せたとしても、ウー キー族の… ダース・ベイダー-01.txt … 『エピソード1』の中で、C-3PO は 後のダース・ベイダーであるアナキン・ スカイウォーカーの⼿によって、廃品を 結集し作られたことがわかる。 C-3PO-03.txt チューバッカ (Chewbacca) は、映画 『スター・ウォーズシリーズ』に登場す る架空の⼈物である。 チューバッカ-01.txt ︙ ︙ …新三部作に向けて⼥性主⼈公を創造す るにあたり、監督・脚本のJ・J・エイブ ラムスは脚本のローレンス・カスダンと の最初の会談から⼥性を物語の中⼼に… レイ (スター・ウォーズ)-02.txt ︙ == 経歴 ==\nエピソード3/シスの復讐 \n銀河共和国が滅び、銀河帝国が誕⽣し た⽇に⽣まれたルーク・スカイウォー カーの双⼦の妹で、 … レイア・オーガナ-02.txt … 『エピソード1』の中で、C-3PO は 後のダース・ベイダーであるアナキン・ スカイウォーカーの⼿によって、廃品を 結集し作られたことがわかる。 C-3PO-03.txt ︙ ︙ オビ=ワン・ケノービ(Obi-Wan Kenobi、ベン・ケノービ)は、アメリ カのSF映画『スター・ウォーズ』シリー ズに登場する架空の⼈物… オビ=ワン・ケノービ-01.txt ︙ 危機を察して駆けつけたシディアスによ り救出され、サイボーグ化⼿術を施され て⼀命は取り留めたもののシディアスが 期待していた… ダース・ベイダー-04.txt アナキンから報告を受け、ジェダイ・マ スター、メイス・ウィンドゥは、同⾏を 申し出たアナキンをジェダイ聖堂に留め 置き、エージェン・コーラー、 … シーヴ・パルパティーン-10.txt ︙ ︙ ︙ クローン⼤戦が始まるとオビ=ワンと共 に各地で共和国軍を勝利に導き、ジェダ イ評議会に功績を認められて弟⼦から騎 ⼠へと昇格する。… アナキン・スカイウォーカー-11.txt ︙ ︙ ジェダイ時代のアナキンは、愛する者を 守りたいという純粋な願望と若さ故の激 情から、ジェダイの掟を何度となく破っ てしまう… ダース・ベイダー-02.txt … 『エピソード1』の中で、C-3PO は 後のダース・ベイダーであるアナキン・ スカイウォーカーの⼿によって、廃品を 結集し作られたことがわかる。 C-3PO-03.txt … 『エピソード1』の中で、C-3PO は 後のダース・ベイダーであるアナキン・ スカイウォーカーの⼿によって、廃品を 結集し作られたことがわかる。 C-3PO-03.txt === 『エピソード6』での配役変更 ===\n2004年製作以降の映像ソフトで は死後フォースと⼀体化し霊体として登 場するアナキン・スカイウォーカー… ダース・ベイダー-25.txt == 経歴 ==\nエピソード3/シスの復讐 \n銀河共和国が滅び、銀河帝国が誕⽣し た⽇に⽣まれたルーク・スカイウォー カーの双⼦の妹で、 … レイア・オーガナ-02.txt

Slide 56

Slide 56 text

SIOS Tech.Lab https://tech-lab.sios.jp/ 世界⼀わかりみの深い クラウドネイティブ on Azure https://youtube.com/playlist?list=PLbTt_DSTMYgGLUtZ0ewuBwhTBSZnNE2-w 様々なメティアで情報発信しています!! 是非みてね!! 技術ブログ YouTube配信

Slide 57

Slide 57 text

エンジニア募集(プロフェッショナルサービスチーム) エンジニアファーストの環境で、技術⼒を⾼めませんか︖ 変化や進化を楽しみながら、私たちとともに歩んでくれる仲間を募集してい ます︕ OSS & クラウド技術をコアテクノロジーとしたシステム開発 ● 統合認証システム&クラウド連携 ● OSS&クラウド基盤導⼊、OSSカスタマイズや開発、OSSサポート ● クラウドネイティブシステム、データ分析基盤、アプリ開発 ● APIエコノミーコンサルティング&技術⽀援サービス 詳細はこちらのサイトからご覧ください︕ https://tech-lab-engineer.sios.jp/

Slide 58

Slide 58 text

࠷ޙ·Ͱ͝ਗ਼ௌ௖͖ ͋Γ͕ͱ͏͍͟͝·ͨ͠ʂʂ