はじめに
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」のページに移動し、「作成」を選択します。
入力項目を埋め、「確認および作成」を選択します。
デプロイが完了したら、「リソースに移動」を選択します。
「設定」の「キー」タブを選択し、プライマリー管理者キーをコピーします。
インデックスの追加
以下のドキュメントをインデックスに追加します。
追加に使用するコードは以下のとおりです。環境変数はご自身の環境に合わせてください。
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のインデックスに以下のように追加されます。
類似性検索
類似性検索では、クエリ文から生成されたベクトルの応答結果がk個返されます。
以下は類似性検索の例です。
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 サービス
類似性スコア付きの検索
類似性検索では、類似性スコア順に検索結果が並び替えられますが、そのスコアを取得することもできます。
以下は類似性検索のスコアまで取得する例です。
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)]
ハイブリッド検索
ハイブリッド検索では、ベクトル検索とキーワード検索を組み合わせて処理することができます。
以下はハイブリッド検索の例です。
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 サービス
おわりに
お疲れ様でした!
以下で情報発信しています!
参考資料