LoginSignup
7
7

Azure AI Searchで文書検索をやってみた(LangChain使用)

Last updated at Posted at 2023-12-23

はじめに

Azure AI Searchで文書検索をやってみました。
  

環境

  • Windows 11
  • Python 3.11.5
  • LangChain
  • Azure OpenAI
  • Azure AI Search
      

ライブラリのインストール

以下のコマンドで必要なライブラリをインストールします。azure-search-documentsは11.4.0b8を指定しないとエラーが起きる場合があるため、注意してください。

pip install langchain openai azure-search-documents==11.4.0b8 azure-identity

  

実装

Azure AI Searchリソースの作成

Azure Portalから「AI Search」のページに移動し、「作成」を選択します。

入力項目を埋め、「確認および作成」を選択します。

記事投稿用 (11).png
  
検証が完了したら、「作成」を選択します。

記事投稿用 (12).png

  
デプロイが完了したら、「リソースに移動」を選択します。

記事投稿用 (13).png

  
「設定」の「キー」タブを選択し、プライマリー管理者キーをコピーします。

image.png

  

インデックスの追加

以下のドキュメントをインデックスに追加します。

追加に使用するコードは以下のとおりです。環境変数はご自身の環境に合わせてください。

test.py
import os

os.environ["AZURE_OPENAI_API_KEY"] = "Azure OpenAIのキーを指定"
os.environ["AZURE_OPENAI_ENDPOINT"] = "Azure OpenAIのエンドポイントを指定"

vector_store_address: str = "Azure AI Searchのエンドポイントを指定"
vector_store_password: str = "Azure AI Searchのプライマリー管理者キーを指定"

from langchain.embeddings import AzureOpenAIEmbeddings
from langchain.vectorstores.azuresearch import AzureSearch

embeddings: AzureOpenAIEmbeddings = AzureOpenAIEmbeddings(
    deployment="text-embedding-ada-002", chunk_size=1
)
index_name: str = "ai-search-demo"
vector_store: AzureSearch = AzureSearch(
    azure_search_endpoint=vector_store_address,
    azure_search_key=vector_store_password,
    index_name=index_name,
    embedding_function=embeddings.embed_query,
)

from langchain.document_loaders import PyPDFLoader
from langchain.text_splitter import CharacterTextSplitter

loader = PyPDFLoader("datasets/azure-ai-services.pdf")


documents = loader.load()
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
docs = text_splitter.split_documents(documents)

vector_store.add_documents(documents=docs)

Azure OpenAIでPDFドキュメントの内容をインデックス化し、Azure AI Searchにアップロードします。
  
上記のファイルを実行すると、AI Searchのインデックスに以下のように追加されます。

image.png

  

類似性検索

類似性検索では、クエリ文から生成されたベクトルの応答結果がk個返されます。
以下は類似性検索の例です。

test.py
import os

os.environ["AZURE_OPENAI_API_KEY"] = "Azure OpenAIのキーを指定"
os.environ["AZURE_OPENAI_ENDPOINT"] = "Azure OpenAIのエンドポイントを指定"

vector_store_address: str = "Azure AI Searchのエンドポイントを指定"
vector_store_password: str = "Azure AI Searchのプライマリー管理者キーを指定"

from langchain.embeddings import AzureOpenAIEmbeddings
from langchain.vectorstores.azuresearch import AzureSearch

embeddings: AzureOpenAIEmbeddings = AzureOpenAIEmbeddings(
    deployment="text-embedding-ada-002", chunk_size=1
)
index_name: str = "ai-search-demo"
vector_store: AzureSearch = AzureSearch(
    azure_search_endpoint=vector_store_address,
    azure_search_key=vector_store_password,
    index_name=index_name,
    embedding_function=embeddings.embed_query,
)

docs = vector_store.similarity_search(
    query="利用可能なAzure AIサービスは?",
    k=3,
    search_type="similarity",
)
print(docs[0].page_content)

similarity_searchメソッドを用いて、「利用可能なAzure AIサービスは?」というクエリを実行します。k=3で取得する検索結果の数を3個に指定しています。
  
結果

Azure AI サービスとは
[アーティクル ]•2023/11/22
Azure AI サービスは、開発者と組織が、すぐに使⽤できる事前構築済みのカスタマイズ
可能な  API とモデルを使⽤して、インテリジェントで最先端の市場対応の責任あるア
プリケーションを迅速に作成するのに役⽴ちます。  アプリケーションの例には、会
話、検索、監視、翻訳、⾳声、ビジョン、意思決定のための⾃然⾔語処理が含まれま
す。
ほとんどの  Azure AI サービスは、 REST API とクライアント  ライブラリ  SDK を通じ
て、⼀般的な開発⾔語で利⽤できます。  詳細については、各サービスのドキュメント
を参照してください。
以下の表からサービスを選択し、開発⽬標を達成するためにそれらがどのように役⽴つ
かを確認します。
サービス 説明
Anomaly Detector  (廃⽌ )潜在的な問題を早期に特定する
Azure AI Search AI を利⽤したクラウド検索をモバイル  アプリと  Web アプリで使
⽤できるようにします
Azure OpenAI さまざまな⾃然⾔語タスクを実⾏する
Bot Service ボットを作成して複数のチャネルにわたって接続します
Content Moderator  (廃⽌ )不快感を与える可能性がある、または望ましくないコンテンツを
検出する
Content Safety 望ましくないコンテンツを検出する  AI サービス
Custom Vision ビジネスに合わせて画像認識をカスタマイズする ヒント
Azure AI S tudio で、 Azure OpenAI 、 Content Safety 、 Speech 、 Vision などの  Azure
AI サービスをお試しください。  詳細については、「 Azur e AI S tudio とは」をご覧
ください。
利⽤可能な  Azure AI サービス

  

類似性スコア付きの検索

類似性検索では、類似性スコア順に検索結果が並び替えられますが、そのスコアを取得することもできます。
以下は類似性検索のスコアまで取得する例です。

test.py
import os

os.environ["AZURE_OPENAI_API_KEY"] = "Azure OpenAIのキーを指定"
os.environ["AZURE_OPENAI_ENDPOINT"] = "Azure OpenAIのエンドポイントを指定"

vector_store_address: str = "Azure AI Searchのエンドポイントを指定"
vector_store_password: str = "Azure AI Searchのプライマリー管理者キーを指定"

from langchain.embeddings import AzureOpenAIEmbeddings
from langchain.vectorstores.azuresearch import AzureSearch

embeddings: AzureOpenAIEmbeddings = AzureOpenAIEmbeddings(
    deployment="text-embedding-ada-002", chunk_size=1
)
index_name: str = "ai-search-demo"
vector_store: AzureSearch = AzureSearch(
    azure_search_endpoint=vector_store_address,
    azure_search_key=vector_store_password,
    index_name=index_name,
    embedding_function=embeddings.embed_query,
)

docs_and_scores = vector_store.similarity_search_with_relevance_scores(
    query="利用可能なAzure AIサービスは?",
    k=4,
    score_threshold=0.80,
)
from pprint import pprint

pprint(docs_and_scores)

similarity_search_with_relevance_scoresメソッドを用いて、クエリに対する検索結果をスコアと合わせて取得します。k=4で取得する検索結果の数を4個に指定しています。score_thresholdで取得するスコアの閾値を指定しています。
  
結果

[(Document(page_content='Azure AI サービスとは\n[アーティクル ]•2023/11/22\nAzure AI サービスは、開発者と組織が、すぐに使⽤できる事前構築済みのカスタマイズ\n可能な  API とモデルを使⽤して、インテリジェントで最先端の市場対応の責任あるア\nプリケーションを迅速に作成するのに役⽴ちます。  アプリケーションの例には、会\n話、検索、監視、翻訳、⾳声、ビジョン、意思決定のための⾃然⾔語処理が含まれま\nす。\nほとんどの  Azure AI サービスは、 REST API とクライアント  ライブラリ  SDK を通じ\nて、⼀般的な開発⾔語で利⽤できます。  詳細については、各サービスのドキュメント\nを参照してください。\n以下の表からサービスを選択し、開発⽬標を達成するためにそれらがどのように役⽴つ\nかを確認します。\nサービス 説明\nAnomaly Detector  (廃⽌ )潜在的な問題を早期に特定する\nAzure AI Search AI を利⽤したクラウド検索をモバイル  アプリと  Web アプリで使\n⽤できるようにします\nAzure OpenAI さまざまな⾃然⾔語タスクを実⾏する\nBot Service ボットを作成して複数のチャネルにわたって接続します\nContent Moderator  (廃⽌ )不快感を与える可能性がある、または望ましくないコンテンツを\n検出する\nContent Safety 望ましくないコンテンツを検出する  AI サービス\nCustom Vision ビジネスに合わせて画像認識をカスタマイズする\uea80 ヒント\nAzure AI S tudio で、 Azure OpenAI 、 Content Safety 、 Speech 、 Vision などの  Azure\nAI サービスをお試しください。  詳細については、「 Azur e AI S tudio とは」をご覧\nください。\n利⽤可能な  Azure AI サービス', metadata={'id': 'NzNhOWQ4ZDUtOTIwNi00NmE4LWE2NDAtZjFjOGNjMTM2ZGQ2', 'source': 'datasets/azure-ai-services.pdf', 'page': 3}),
  0.91115886),
 (Document(page_content='Azure と  Azure AI サービスを使⽤すると、広⼤なエコシステムを利⽤できます。以下\nはその例です。\nLogic Apps や  Power Automate のような⾃動化および統合ツール。\nAzure Functions や  App Service のようなデプロイ  オプション。\nセキュリティで保護されたアクセス⽤の  Azure AI サービス  Docker コンテナー。\nビッグ  データ  シナリオ⽤の  Apache Spark 、 Azure Databricks 、 Azure S ynapse\nAnalytics、 Azure Kubernetes Service などのツール。\n詳細については、「 Azure AI サービスのエコシステム 」を参照してください。\nAzure AI サービスの  API は、 Microsoft マネージド  データ  センターの拡⼤しているネ\nットワーク上でホストされます。  Azure リージョン⼀覧 で API ごとのリージョン別\nの提供状況がわかります。\nまだサポートされていないリージョンを探しているのですか。  UserV oice フォーラム\nに機能要求を記⼊してご連絡ください。\nAzure AI サービスでは、さまざまなカルチャ⾔語がサービス  レベルでサポートされて\nいます。  各  API で利⽤可能な⾔語は、 サポート対象の⾔語⼀覧 に関するページで検索\nできます。\nAzure AI サービスには、 Microsoft Entra 資格情報を使った 認証、有効なリソース  キ\nー、Azure 仮想ネットワーク を含む多層型のセキュリティ  モデルが⽤意されていま\nす。\nAzure AI サービスは  CSA ST AR Certification 、 FedRAMP Moderate 、 HIPAA BAA などの\n認定を受けています。  ⾃分で監査したり、セキュリティを確認する⽬的で認定資格を\nダウンロードできます。\nプライバシーやデータ管理については、 トラスト  センターを参照してください。エコシステム内の  Azure AI サービス\nリージョン別の提供状況\n⾔語のサポート\nSecurity\n認定資格とコンプライアンス', metadata={'id': 'MmY3MGYxZDAtZTY2My00MzYyLWI3NmQtYTJkOTc3MGY2YTcx', 'source': 'datasets/azure-ai-services.pdf', 'page': 7}),
  0.90952885),
 (Document(page_content='Azure AI サービスの価格 。関連項⽬', metadata={'id': 'ZTkyNjJjY2YtNGU4ZC00ZGRhLTgzMGYtNTUwNWE2MjRlOTk0', 'source': 'datasets/azure-ai-services.pdf', 'page': 63}),
  0.9082628),
 (Document(page_content='Azure AI サービスを安全に使⽤する⽅法については、「 Azur e AI サービスに対す\nる要求の認証」を参照してください。\nAzure AI サービスの⼀覧については、「 Azur e AI サービスとは ?」を参照してくだ\nさい。\nAzure AI サービスがサポートする⾃然⾔語の⼀覧を確認するには、「 ⾃然⾔語の\nサポート」を参照してください。\nAzure AI サービスをオンプレミスで使⽤する⽅法を確認するには、「 Azur e AI サ\nービスのコンテナーとしての使⽤ 」を参照してください。\nAzure AI サービスの使⽤コストを⾒積もるには、「 Azur e AI サービスのコストの\n計画および管理」を参照してください。関連項⽬', metadata={'id': 'ZGM0YTdlM2MtYzkyOS00N2QxLWI0MDctZGQ2MzE0NWIwNjM3', 'source': 'datasets/azure-ai-services.pdf', 'page': 22}),
  0.90784776)]

   

ハイブリッド検索

ハイブリッド検索では、ベクトル検索とキーワード検索を組み合わせて処理することができます。
以下はハイブリッド検索の例です。

test.py
import os

os.environ["AZURE_OPENAI_API_KEY"] = ""
os.environ["AZURE_OPENAI_ENDPOINT"] = ""

vector_store_address: str = ""
vector_store_password: str = ""

from langchain.embeddings import AzureOpenAIEmbeddings
from langchain.vectorstores.azuresearch import AzureSearch

embeddings: AzureOpenAIEmbeddings = AzureOpenAIEmbeddings(
    deployment="text-embedding-ada-002", chunk_size=1
)
index_name: str = "ai-search-demo"
vector_store: AzureSearch = AzureSearch(
    azure_search_endpoint=vector_store_address,
    azure_search_key=vector_store_password,
    index_name=index_name,
    embedding_function=embeddings.embed_query,
)

docs = vector_store.hybrid_search(
    query="利用可能なAzure AIサービスは?", k=3
)
print(docs[0].page_content)

hybrid_searchメソッドを用います。k=3で取得する検索結果の数を3個に指定しています.

  
結果

Azure AI サービスとは
[アーティクル ]•2023/11/22
Azure AI サービスは、開発者と組織が、すぐに使⽤できる事前構築済みのカスタマイズ
可能な  API とモデルを使⽤して、インテリジェントで最先端の市場対応の責任あるア
プリケーションを迅速に作成するのに役⽴ちます。  アプリケーションの例には、会
話、検索、監視、翻訳、⾳声、ビジョン、意思決定のための⾃然⾔語処理が含まれま
す。
ほとんどの  Azure AI サービスは、 REST API とクライアント  ライブラリ  SDK を通じ
て、⼀般的な開発⾔語で利⽤できます。  詳細については、各サービスのドキュメント
を参照してください。
以下の表からサービスを選択し、開発⽬標を達成するためにそれらがどのように役⽴つ
かを確認します。
サービス 説明
Anomaly Detector  (廃⽌ )潜在的な問題を早期に特定する
Azure AI Search AI を利⽤したクラウド検索をモバイル  アプリと  Web アプリで使
⽤できるようにします
Azure OpenAI さまざまな⾃然⾔語タスクを実⾏する
Bot Service ボットを作成して複数のチャネルにわたって接続します
Content Moderator  (廃⽌ )不快感を与える可能性がある、または望ましくないコンテンツを
検出する
Content Safety 望ましくないコンテンツを検出する  AI サービス
Custom Vision ビジネスに合わせて画像認識をカスタマイズする ヒント
Azure AI S tudio で、 Azure OpenAI 、 Content Safety 、 Speech 、 Vision などの  Azure
AI サービスをお試しください。  詳細については、「 Azur e AI S tudio とは」をご覧
ください。
利⽤可能な  Azure AI サービス

  

おわりに

お疲れ様でした!
以下で情報発信しています!

  

参考資料

7
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
7