fc2ブログ

Azure OpenAIを使う(2)

 前回の続きです。今回は、Azure OpenAI StudioでChatGPTが利用できる環境を構築します。

 作成したAzure OpenAIのリソースにおいて、「Explore」をクリックすると、AzureOpenAI_setup7.pngAzure OpenAI Studioが立ち上がりました。何も環境構築していないデフォルトの画面を確認してみましょう。
 PlaygroundのChat画面です。Deployしていないので空です。AzureOpenAI_setup8-0.png次にPlaygroundのCompletions画面です。これもDeployしていないので空です。AzureOpenAI_setup8-1.pngDALL-E(Preview)は、East USリージョンのみ利用可のようですね。AzureOpenAI_setup8-2.png次にManagementのDeploymentsです。AzureOpenAI_setup8-3.pngModelsです。3種類のモデルがデプロイ可能であることが分かりました。AzureOpenAI_setup8-4.pngData filesも空状態です。AzureOpenAI_setup8-5.pngQuotas(割り当て)です。それぞれ300TPM(Tokens-per-Minute)分の割り当てがあるようですね。AzureOpenAI_setup8-6.png最後はContent filters(Preview)です。AzureOpenAI_setup8-7.png
 デフォルト画面を確認できたので、本題のChatGPTが利用できる環境を構築します。
 まず、Deploymentsから「Create new deployment」を選択しました。AzureOpenAI_deploy1.png次に以下の設定を行い、Createボタンを押しました。
 Select a model: gpt-35-turbo
 Deployment Name: GPT35Turbo (自由に設定可能)
 Content Filter: DefaultAzureOpenAI_deploy2.pngしばらく待つと、デプロイが完了しました。ChatGPT3.5が使える状態になりました。AzureOpenAI_deploy3.png早速PlaygroundのChat画面を確認すると、Azure OpenAIのChatGPTが正常に動作することを確認できました。AzureOpenAI_deploy4.png次に、PythonのプログラムでAPIを使って動作確認しました。AzureOpenAI_deploy5.pngコマンドラインで実行させても、問題なさそうですね。AzureOpenAI_deploy6.png
 今回は、Azure OpenAI StudioでChatGPTが利用できる環境を構築し、問題なく動作することを確認しました。今後、Azure OpenAIの環境で試すべく案件の調査を継続して行いたいと思います。
スポンサーサイト



Azure OpenAIを使う(1)

 OpenAI環境のChatGPTは自宅で利用していますが、会社で利用しているのはAzure OpenAI環境のChatGPTです。会社の環境で試してみたいことがたくさんあるのですが、環境構築等は情報システム部門が管理しているので、一般の社員の私は触ることができません。そこで自宅で自分のAzureのOpenAI環境を作ろうと思い立ちました。

 Azure OpenAIは許可制で、ターゲットが法人と認識しており、個人ユーザでは登録ができないと、今までずっと思っていました。ところが、やってみると問題なく登録できました。今回はその備忘録です。まずはSetupまでお話します。

 Azure PortalからAzure OpenAIの環境構築する際にまず、専用サイトから事前申し込みを行いました。
 申し込みサイトには21件の質問事項がありました。サービスを悪用されないためなのでしょうが、利用者の所属する会社も含めて入念に調べられますね・・。入力時の注意点と入力内容は以下の通り。
① 個人の電子メールアドレス(例: gmail.com、hotmail.com、Outlook.comなど)の使用不可。
  → 会社のメールアドレスではなく、個人契約のプロバイダの個人メールアドレスを設定。
② 会社について、社名、住所、郵便番号、Webサイト、電話番号まで事細かく入力要。
  → 秘密情報ではなく、WebサイトでOpenになっているので、所属する会社の情報を入力。
③ 申請は貴社自身のためのものであり、顧客に代わって申請するものではないことを念押し。
  → 私自身の組織(My own organization)を選択

 最後まで入力し、申し込みを送信すると、以下のメッセージが表示されました。実際にうまく行ったのか不明でしたが、「申し込みありがとう」と書いてあるので成功したのでしょう・・。AzureOpenAI_setup0.pngメールを確認すると、MicrosoftからAzure OpenAIのアクセスリクエストありがとうの旨のメールが届いていました。10営業日以内に連絡があるようですが、AzureOpenAI_setup0-1.png7時間後に、Azure OpenAIへようこそメールが届いていました。速っ!!AzureOpenAI_setup0-2.pngそれではAzure Portalでリソースを作成することにしましょう。

 すべてのサービスからAzure OpenAIを選択し、作成をクリックしました。AzureOpenAI_setup1.pngAzure OpenAIの作成の「①基本」において、以下の通り設定して「次へ」をクリックしました。
 リソースグループ: Azure-OpenAI (好きな名前入力可)
 リージョン: Japan East
 名前: Azure-OpenAI0 (好きな名前入力可)
 価格レベル: Standard S0AzureOpenAI_setup2.png「②ネットワーク」はそのまま「次へ」をクリック。AzureOpenAI_setup3.png「③タグ」もそのまま「次へ」をクリック。AzureOpenAI_setup4.png「④レビューおよび送信」で内容を確認後「作成」をクリックすると、デプロイが始まりました。AzureOpenAI_setup5.pngしばらく待つと、デプロイが完了しましたので「リソースに移動」しました。AzureOpenAI_setup6.png無事にリソースが作成されていることを確認しました。AzureOpenAI_setup7.png
 次回は、Azure OpenAI StudioでChatGPTが利用できる環境を構築します。

AzureのSpeech to Textを使う

 以前のブログでAzureのCognitive Serviceの「Text to Speech」についてお話しました。テキストで記入した文をAI合成音声がしゃべってくれるものですね。
 今回の「Speech to Text」はその逆で、話している言葉を「文字起こし」してくれるものです。最近のWeb会議でも議事録を作成するのに重宝しているものです。
 Speech to Textと、その後でお話しするSpeech Translation(翻訳)もAzureのCognitive Serviceの「Speechサービス」の機能で追加のAzure側の設定は不要でした。

 それでは、まず「Speech to Text」から実行してみましょう。コードはGitHubのサンプルを利用し、13行目のmy_keyはAzureで発行されたもの、リージョンはjapaneastを使いました。14行目で認識言語を日本語("ja-JP")に設定しました。
using System;
using System.Threading.Tasks;
using Microsoft.CognitiveServices.Speech;

namespace helloworld
{
class Program
{
public static async Task RecognizeSpeechAsync()
{
// Creates an instance of a speech config with specified subscription key and service region.
// Replace with your own subscription key // and service region (e.g., "westus").
var config = SpeechConfig.FromSubscription("my_key", "japaneast");
config.SpeechRecognitionLanguage = "ja-JP";

// Creates a speech recognizer.
using (var recognizer = new SpeechRecognizer(config))
{
Console.WriteLine("Say something...");

// Starts speech recognition, and returns after a single utterance is recognized. The end of a
// single utterance is determined by listening for silence at the end or until a maximum of 15
// seconds of audio is processed. The task returns the recognition text as result.
// Note: Since RecognizeOnceAsync() returns only a single utterance, it is suitable only for single
// shot recognition like command or query.
// For long-running multi-utterance recognition, use StartContinuousRecognitionAsync() instead.
var result = await recognizer.RecognizeOnceAsync();

// Checks result.
if (result.Reason == ResultReason.RecognizedSpeech)
{
Console.WriteLine($"We recognized: {result.Text}");
}
else if (result.Reason == ResultReason.NoMatch)
{
Console.WriteLine($"NOMATCH: Speech could not be recognized.");
}
else if (result.Reason == ResultReason.Canceled)
{
var cancellation = CancellationDetails.FromResult(result);
Console.WriteLine($"CANCELED: Reason={cancellation.Reason}");

if (cancellation.Reason == CancellationReason.Error)
{
Console.WriteLine($"CANCELED: ErrorCode={cancellation.ErrorCode}");
Console.WriteLine($"CANCELED: ErrorDetails={cancellation.ErrorDetails}");
Console.WriteLine($"CANCELED: Did you update the subscription info?");
}
}
}
}

static async Task Main()
{
await RecognizeSpeechAsync();
Console.WriteLine("Please press to continue.");
Console.ReadLine();
}
}
}
実行結果は以下の通りで正しく発声した内容を認識できることが分かりました。SpeechtoText.png
 次に、Speech Translationを試してみました。コードは同様にGithubにあるサンプルで、key、リージョンと発声言語を日本語に設定して使いました。日本語で発声した内容をドイツ語に翻訳するプログラムを実行すると結果は以下の通りでした。TranslateSpeechtoText.png途中の処理結果も出力されていますが、その発声したその時点(途中)での翻訳が出ていますね。最終的に発声し終わった後の結果は帳尻があって、正しい文章になりました。日本語とドイツ語(英語もそうですが)は主語と動詞の語順が異なるので、その辺りも考慮されているのでしょう。大したものですね。

YouTubeで英語の動画を見ていても同時翻訳AIの性能は飛躍的に向上しているように感じます。英語力をUpさせるために字幕なしを試みていたこともありますが、同時翻訳AIの誘惑には勝てませんね。

今回のSpeech to Text機能、使える機会があればまた遊んでみようと思います。

AzureのText to Speechを使う(2)

 前回、Text to Speechの実行環境をAzure上で構築できたので、今回は実際にプログラムを動かしてみました。M1-Mac Miniで実行させようとPCを確認すると「.NET6」がインストール済だったので、今回はこれを使おうと思いました。dotnet_env_221211.png プログラムはgithubにあったものを一部修正したものを使いました。
21行目のキーは前回発行されたもの、リージョンはjapaneastを使い、音声は24行目で指定の通り、「七海」に設定しました。色々音声を変えてみたのですが、現時点(22/12/11)では、七海(Nanami)、圭太(Keita)だけが正常に音声が出力されて、他の碧衣(Aoi)、大智(Daichi)、真夕(Mayu)、直紀(Naoki)、志織(Shiori)の5種類は音声が出ませんでした。原因は分かっていません・・。
using System;
using System.Threading.Tasks;
using Microsoft.CognitiveServices.Speech;

namespace helloworld
{
class Program
{
public static async Task SynthesisToSpeakerAsync()
{
// To support Chinese Characters on Windows platform
if (Environment.OSVersion.Platform == PlatformID.Win32NT)
{
Console.InputEncoding = System.Text.Encoding.Unicode;
Console.OutputEncoding = System.Text.Encoding.Unicode;
}

// Creates an instance of a speech config with specified subscription key and service region.
// Replace with your own subscription key and service region (e.g., "westus").

var config = SpeechConfig.FromSubscription("my_key", "japaneast");

// Set the voice name, refer to https://aka.ms/speech/voices/neural for full list.
config.SpeechSynthesisVoiceName = "ja-JP-NanamiNeural";

// Creates a speech synthesizer using the default speaker as audio output.
using (var synthesizer = new SpeechSynthesizer(config))
{
// Receive a text from console input and synthesize it to speaker.
Console.WriteLine("Type some text that you want to speak...");
Console.Write("> ");
string text = Console.ReadLine();

using (var result = await synthesizer.SpeakTextAsync(text))
{
if (result.Reason == ResultReason.SynthesizingAudioCompleted)
{
Console.WriteLine($"Speech synthesized to speaker for text [{text}]");
}
else if (result.Reason == ResultReason.Canceled)
{
var cancellation = SpeechSynthesisCancellationDetails.FromResult(result);
Console.WriteLine($"CANCELED: Reason={cancellation.Reason}");

if (cancellation.Reason == CancellationReason.Error)
{
Console.WriteLine($"CANCELED: ErrorCode={cancellation.ErrorCode}");
Console.WriteLine($"CANCELED: ErrorDetails=[{cancellation.ErrorDetails}]");
Console.WriteLine($"CANCELED: Did you update the subscription info?");
}
}
}
}
}

static async Task Main()
{
await SynthesisToSpeakerAsync();
Console.WriteLine("Press any key to exit...");
Console.ReadKey();
}
}
}
 今回、合成音声で読み上げるテキスト題材は、吉川英治著の『三国志』の桃園の巻の初めの部分です。テキストは青空文庫から抜粋しました。sangokushi_221210.png
 実行結果は以下の通りです。
今回、①漢字のふりがなを取り去った「漢字のまま」と②漢字のふりがなを「ひらがなに変換」したものを比較しました。

個人の主観も入っていますが、こんなイメージです。いかがでしょうか?

①漢字のまま : リズム感は自然だが、助詞や漢字の読み間違いがある。 ・身なりはいたって → リズムが変。「は(Wa)」を「は(Ha)」と発音。
 ・秀(ひい)で → 秀(ひで)で
 ・聡明そうな眸(ひとみ) → 聡明そうな眸(ぼう)
 ・容子(ようす) → 容子(ようこ)

②ひらがなに変換 : リズム感とアクセントが漢字パターンより、不自然である。 ・後漢 → アクセントが変。
 ・身なりはいたって → リズムが変。「は(Wa)」を「は(Ha)」と発音。
 ・聡明そうな眸や、豊かな頬をして → 訛っている?(笑)。アクセントが変。
 ・容子がなかった → アクセントが変。

細かいツッコミは入れていますが、クオリティ高いですね。難しい本でもスラスラ朗読してくれそうな気がします。また、いろいろ遊んでみようと思います。

AzureのText to Speechを使う(1)

 最近のAIによる音声認識、音声合成のクオリティーが高く大変興味があります。そこで、今回、AzureのCognitive ServiceのText to Speechを試してみようと思い立ちました(いつもの思いつきです・・)。Text to Speechはその名の通り、テキストの文章を「音声合成」するサービスですね。
 AzureのCognitive Serviceは以前に、翻訳Computer VisionAnomaly DetectorCustom Visionを使ったことがあり、blogで紹介しました。今回は5種類目のサービスを利用しますが、今までと同じ要領で試せそうです。

 まず、Text to Speechのサイトに移動すると、TextToSpeech1.pngプログラムを組まなくてもWeb上で音声合成できました。TextToSpeech2.png日本語の音声は、七海(Nanami)、圭太(Keita)、碧衣(Aoi)、大智(Daichi)、真夕(Mayu)、直紀(Naoki)、志織(Shiori)の7種類です。設定を変えて合成された音声を再生してみるだけで結構遊べます・・。

 プログラムから音声合成を利用するためには、Azure Portalから自分のアカウントでログインして、Azureのホーム画面で、Cognitive Servicesの「音声」の「作成」をクリックして、以降の設定を行いました。TextToSpeech3.pngちなみに、Speechサービスは、東日本、西日本の両方のリージョンに対応していますが、今回は東日本を選択しました。TextToSpeech4.pngまた、フリープラン(F0)で、Text to Speechは0.5million(50万)文字で無料とのことなので、遊びに使うには十分ですね。TextToSpeech5.png 以下の通り、リソースグループ名とインスタンス名を設定し、TextToSpeech6.png以降はデフォルトで進み、TextToSpeech7.pngTextToSpeech8.pngTextToSpeech9.png作成ボタンを押すと、TextToSpeech10.pngデプロイが完了しました。TextToSpeech11.pngキーとエンドポイントも他のAzureのCognitive Servicesと同じように発行されました。TextToSpeech12.png
 今回、Text to Speechの環境構築ができましたので、次回プログラムを動かして遊んでみようと思います。

ご訪問者数

(Since 24 July, 2016)

タグクラウド


プロフィール

Dr.BobT

Author: Dr.BobT
興味のおもむくままに生涯考え続けるエンジニアでありたい。

月別アーカイブ

メールフォーム

名前:
メール:
件名:
本文: