Azure におけるAI開発について
はじめに
Microsoft Azure 上で提供されている人工知能(AI)関連サービスの総称である、Azure AI Services の開発手法についてまとめてみました。
Azure AI Services には、機械学習、認知サービス、ボットサービスなどが含まれ、これらのサービスを使用することで開発者は AI 機能を簡単にアプリケーションに統合することができます。
Azure AI Services とは
Microsoft Azure 上で展開されている AI 関連サービス群で、すぐに利用できる事前構築済みでかつカスタマイズ可能な API モデルを使用してアプリケーションの作成が可能となるサービスです。
アプリケーションの例には、会話、検索、監視、翻訳、音声、ビジョン、意思決定のための自然言語処理が含まれます。
2024年1月現在で使用できる Azure AI サービスは以下となります。
参考:公式ドキュメント
名称変更や Preview 公開、廃止など変化の多いサービス群のため注視していくことが必要です。
実際にどう利用するかを見ていきましょう。
画像解析の検証
[画像解析]について検証していきます。
流れとしては以下となります。
Azure AI Services のデプロイ
デプロイしたリソースの確認
動作確認
Azure AI Services のデプロイ方法
利用するには AI Services をデプロイする必要があります。
AI Services リソースをデプロイするには大きく4つ手法があります。
Azure Portal / Azure CLI / Azure PowerShell
Bicep
ARM Template
Terraform
本項では Azure Portal を使ったデプロイ手法について解説していきます。
1. Azure Portal からのデプロイ
1. Azure Portal より[リソースの作成]をクリックします。
2. [Azure AI Services]を検索して選択します。
3. [作成]をクリックします。
4. 必要事項を入力して[作成]します。
※本稿では検証用として作成しますので、ネットワーク等の設定はスキップします。
必要に応じてネットワークやIDの設定をします。
5. 最終確認が出るのでエラーがないことを確認して[作成]をクリックします。
6. デプロイが完了すると以下のようにリソースが作成されます。
2. リソースの確認
デプロイが完了したリソースを開き、接続するためのキーを確認します。
まず、対象のリソースで[キーとエンドポイント]を開きます。
[キー 1]をテキスト枠の右側にあるコピーアイコンをクリックしてコピーして保管しておきます。
後ほどサンプルアプリケーションの方で使用します。
※キーの表示をしなくてもコピー可能です。
3. サンプル画像を使った動作確認
AI Services の接続を確認します。
本項では[画像分析]を動かしてみます。
最も簡単な確認方法は REST API です。
インターネット上に公開した画像を使い、何が写っているかを返してもらいます。
curl -H "Ocp-Apim-Subscription-Key: <API_KEY>" -H "Content-Type: application/json" "<API_ENDPOINT>/computervision/imageanalysis:analyze?features=caption,read&model-version=latest&language=en&api-version=2023-10-01" -d "{'url':'<IMG_URL>'}"
<API_KEY> にはポータルで確認できる[キー 1]、<API_ENDPOINT> にはポータルで確認できる[エンドポイント]を、<IMG_URL> には分析する画像のURLを代入して実行します。
例としては以下のようになります。
curl -H "Ocp-Apim-Subscription-Key: 4xhx9hz39sixks2f6e8532y2k47nw325" -H "Content-Type: application/json" "https://<YOUR_AI_NAME>.cognitiveservices.azure.com/computervision/imageanalysis:analyze?features=caption,read&model-version=latest&language=en&api-version=2023-10-01" -d "{'url':'https://<IMG_DOMAIN>/img.png'}"
以下は葉にとまっているトンボの写真を解析した結果の応答の例です。
{
"modelVersion":"2023-10-01",
"captionResult":
{
"text":"a dragonfly on a leaf",
"confidence":0.845266580581665
},
"metadata":
{
"width":1280,
"height":853
},
"readResult":
{
"blocks":[]
}
}
Translatorの検証
次に[Translator]について検証していきます。
流れとしては以下となります。
先ほどとほぼ同じですが、使うサービスが異なります。
Translator リソースのデプロイ
デプロイしたリソースの確認
動作確認
1. Azure Portal から Translator リソースのデプロイ
流れは前項とほぼ同様です。
1. Azure Portal より[リソースの作成]をクリックします。
2. [Translator]を検索して選択します。
3. [作成]をクリックします。
4. 必要事項を入力して[作成]します。
※本稿では検証用として作成しますので、ネットワーク等の設定はスキップします。
必要に応じてネットワークやIDの設定をします。
5. 最終確認が出るのでエラーがないことを確認して[作成]をクリックします。
6. デプロイが完了すると以下のようにリソースが作成されます。
2. リソースの確認
デプロイが完了したリソースを開き、接続するためのキーを確認します。
まず、対象のリソースで[キーとエンドポイント]を開きます。
[キー 1]をテキスト枠の右側にあるコピーアイコンをクリックしてコピーして保管しておきます。
後ほどサンプルアプリケーションの方で使用します。
※キーの表示をしなくてもコピー可能です。
3. サンプル画像を使った動作確認
Translator の接続を確認します。
本項ではサンプルアプリケーションを使って確認します。
公式ドキュメント に公開されているサンプルアプリケーションを流用して作成していきます。
前提条件
dotnet コマンドがインストールされていること
まず dotnet コマンドでプロジェクトを作成します。
ここでは動作確認のためなのでコンソールアプリケーションを作成します。
dotnet new console -o TransratorDemo
cd TransratorDemo
作成されたプロジェクトの Program.cs へ以下のコードを貼り付けます。
※ 参考 サンプルアプリケーション
using System.Text;
using Newtonsoft.Json;
class Program
{
private static readonly string key = "<API_KEY>";
private static readonly string endpoint = "https://api.cognitive.microsofttranslator.com";
// location, also known as region.
// required if you're using a multi-service or regional (not global) resource. It can be found in the Azure portal on the Keys and Endpoint page.
private static readonly string location = "<LOCATION>";
static async Task Main(string[] args)
{
// Input and output languages are defined as parameters.
string route = "/translate?api-version=3.0&from=en&to=fr&to=ja";
string textToTranslate = "I want to travel a lot and eat delicious food.";
object[] body = new object[] { new { Text = textToTranslate } };
var requestBody = JsonConvert.SerializeObject(body);
using (var client = new HttpClient())
using (var request = new HttpRequestMessage())
{
// Build the request.
request.Method = HttpMethod.Post;
request.RequestUri = new Uri(endpoint + route);
request.Content = new StringContent(requestBody, Encoding.UTF8, "application/json");
request.Headers.Add("Ocp-Apim-Subscription-Key", key);
// location required if you're using a multi-service or regional (not global) resource.
request.Headers.Add("Ocp-Apim-Subscription-Region", location);
// Send the request and get response.
HttpResponseMessage response = await client.SendAsync(request).ConfigureAwait(false);
// Read response as a string.
string result = await response.Content.ReadAsStringAsync();
Console.WriteLine(result);
}
}
}
<API_KEY> にはポータルで確認できる[キー 1]、 にはポータルで確認できる[リージョン]を代入します。
例としては以下のようになります。
翻訳される文章は、[textToTranslate] 部分となりますので変更したりしてご確認ください。
private static readonly string key = "4xhx9hz39sixks2f6e8532y2k47nw325";
private static readonly string location = "southeastasia";
出来上がったら実行してみます。
dotnet run
以下のようにレスポンスが返ってきたら動作OKです。
[textToTranslate]に記載された英語の文章がフランス語と日本語に変換されて返ってくるのがわかります。
{
"translations":
[
{
"text":"J’ai envie de voyager beaucoup et de manger de la nourriture délicieuse.",
"to":"fr"
},
{
"text":"たくさん旅行して、おいしいものを食べたいです。",
"to":"ja"
}
]
}
まとめ
如何でしたでしょうか。
自らモデルを作成するのではなく、モデルを含めたサービスとしての AI を利用してアプリケーションを作成することでモデル生成の時間を大幅に短縮することができます。
本稿では REST API や コンソールアプリケーションを使って動作検証しましたが、コンテナアプリケーションや Azure Functions で組んで、戻り値の JSON データを操作することで実用的なアプリケーションにしていくことができると思います。
開発するアプリケーションに合ったサービスを選択してサービス化することで運用コストも下げることが出来ると思いますので、是非検討してみてください。