2024.10.10
将来は卵1パックの価格が2倍に? 多くの日本人が知らない世界の新潮流、「動物福祉」とは
Azure OpenAI Serice を利用したリアルタイム文字起こし処理(全1記事)
リンクをコピー
記事をブックマーク
永里洋氏:今回はStudyCoさんのLT会に初参加ということで、よろしくお願いいたします。
本日は「Azure OpenAI Service」を利用して、リアルタイムで音声データを取得して、文字起こしをリアルタイムで処理して動かしてみるということをやったので、軽く話します。
一瞬だけ「Notebook」を動かします。うまくいくかどうかわからないですが、リアルタイム文字起こしをこの発表でそのままやって、うまくいくかどうかを試してみようかと思います。
まず自己紹介をします。永里洋と申します。現在、株式会社エーピーコミュニケーションズで仕事をしています。もともとはネットワークインフラ系の職種をやっていたところ、クラウド基盤系の案件から機械学習系、ビッグデータ系の案件に関わるようになってきて、徐々にそちらの仕事をしています。現在はデータエンジニアリング系やデータサイエンス系の仕事も徐々に担当しています。
本日は、先ほど少し話しましたが、リアルタイムの音声の文字起こし処理の検証をやったことのシナリオ説明して、今デモンストレーションを動かしてみていますが、内容の紹介を軽くして、デモを見てもらおうかなと考えています。
(スライドを示して)では、まずはやってみたいことと検証のシナリオになりますが、こちらになります。弊社でも現在、Azure OpenAIといった生成AIを有効活用して、いろいろなお客さまに導入しようという話がよく出ています。
典型的な導入パターンだと、「Azure Cognitive Search」、現在は「Azure AI Search」と呼ばれています。いわゆるテキスト検索です。
今はベクトルサーチやセマンティック検索もできるようなサービスになってきていますが、そういったナレッジデータベースとAzure OpenAI Serviceを組み合わせたRAG(Retrieval-Augmented Generation)の形態でのFAQサービスなど……。典型的なサービスになっちゃうかもしれませんが、こういった話の導入をよく聞いています。
こちらは、リアルタイムで会議のやり取りを取得して、文字起こししたデータをどんどんAzure AI Searchに溜め込んでいき、会議が進行中の状態で、その時点での要約情報を取ったり、進行状況の確認、今どういった話が進んでいるかや、論点や課題の整理、進行中の会議の中でのナレッジの有効活用などができるんじゃないかなというところを期待していて、少しずつ検証をやっています。
内容としてはまだ雑なところもありますが、想定としては現場の中で会議やミーティングでやり取りされている意見や議事とか、レビューなどを取ったり、なにかしらのイベントやLT会で発表された内容などを収集、蓄積していって、うまく有効活用できないかというところを試しています。
今回は、対象としてAzure OpenAI Serviceを利用しようかと思っています。みなさんもよく利用していると思いますが、テキストの生成部分では、GPT-3.5やGPT-4を使い分けながら試しています。あと、まだ日本では提供できていないようですが、Azure OpenAI Serviceの中の音声文字起こしサービスとして「Whisper」を今回使っています。
厳密にはリアルタイムでの音声の取得はまだできないようですが、今回はいったんバッチ方式で取ろうということをやっています。
厳密には、Azureは別のAIサービスで「Speech to Text」といったサービスもあるにはあるのですが、今回はWhisperを利用しています。画像生成サービスもあるようですが、今回は使っていません。
デモンストレーションの内容の紹介に移ります。(スライドを示して)大まかな構成になりますが、上段の会議参加者の部分と、下段の取得したナレッジからなにかしらの要約を取得したい人、上の人と下の人の2つの登場人物がいるようなイメージで書いています。
上のほうでは、参加者の方がなにかしらの発声をした場合、今回はPythonスクリプトを使っているのですが、そこから音声データをWebファイルとして取得して、WebファイルからAzure OpenAIのWhisperにアクセスして文字起こしするといった構成を取っています。
そして、文字起こししたサービスの中の言語情報に整形をかけたり、元データで発声されている方が国外の方だった場合も見据えて、日本語に翻訳するというかたちで今回やっています。
文字起こしされたデータをリアルタイムでどんどんAzure AI Searchに蓄積するというかたちでリアルタイムでナレッジが蓄積されている動きを取り、それに対して進行中の会議やミーティングでなにかしらのデータ、要約文とかを取得したいという登場人物が下にいます。
今回はPythonで「LangChain」を使っていますが、Azure OpenAIとAzure AI Searchを組み合わせたRAGの構成で、AI Searchから該当の会議の情報を抜き出してくる、欲しい情報を抜き出せるというかたちを目指してやっています。
ただ今回は、そこまで複雑なかたちは目指さずに、いったん会議の要約ができないかなと目指しています。
今、上と下で2役の紹介をしましたが、まずは上の会議参加者の方のパターンにフォーカスして軽く話します。
(スライドを示して)こちらが今回作った簡単な構成についてのパターンになります。今回はこのまま利用しています。ローカルPCの環境でPythonのコードをNotebook環境で動かしていて、こちら(スライド図左)が端末のデバイスですね。マイクデバイスからインプットして入力した音声データを取得しています。
こちら(スライド図の真ん中)が、今実行中のPythonのコードで、「PyAudio」を使って一定間隔ごとにWAVファイルを取得するかたちで進行しています。
こちらはスレッドのかたちで動いていて、ここから一つひとつ生成されたファイル情報がqueueを通り、文字起こしの取得スレッドに渡されるようにしています。
文字起こしの取得スレッドは、queueから受け取った音声情報のファイル名をもとにAzure OpenAI側のWhisper APIを叩いて、文字起こし情報を取得して、そこから翻訳なり文章整形をして、Azure OpenAI側に送るような処理で書いています。
今動いている処理がうまくいったらいいですが。一定間隔ごとにリアルタイムの音声文字起こしが進行しているかたちを、簡単にJSONで吐き出しています。
今想像したとおりに動いているのがいったんはわかるようです。(画面を示して)こんなかたちで、一定間隔ごとに少しずつしゃべっている内容が文字起こしされて、Azure AI Searchにどんどん蓄積されていくような流れになっています。
(画面を示して)今回LLM側については、LangChainとAzure OpenAIの構成を使っていて、こういったかたちでいったん簡単な関数にして、そこからどのモデルを使うか選択するようなイメージにしています。
文字起こしされたデータについては、口語体になっているような文章をよりフォーマルなかたちで整形するというようなお願いごとをするプロンプトを投げていて、それで先ほどのような整形された文章をAzure AI Searchのほうに投げています。
Azure AI Searchは専用のSDKが一応あるにはあるんですが、今回は特には使っていません。そのままの素のREST APIを叩くかたちで、今回は用に立てています。
Azure AI Searchのリソースに対して、関数としてのかたちでRESTでどんどん文字起こしデータを投げているような構成を取っています。
続いて、下のほうですね。リアルタイムで進行している会議について、なにかしらの知りたい情報を取りたいというパターンです。下の段の役割を取っていた方についての紹介になります。今回、LangChainのAgentを立てるかたちで処理を作ってみました。
1つは、Azure OpenAI側のLLMコンポーネントとして「GPT-4」のモデルを使っています。と同時に、現在のAzure AI Searchのストア上にどういったセッション、会議情報が蓄積されているかというセッションのリストを取得するためのカスタムツールを簡単に作っています。
リストから取得した会議一覧の中から特定の会議を選択して、その会議についての要約文を得るためのカスタムツールをまた別で作っています。
こちらも今回はNotebookで簡単に書いています。(画面をしめして)このように簡単にCustom agentを作っています。
先ほど、セッションのリストを取得するという話をしました。(画面を示して)カスタムツール用としてこんなかたちで「findSessionTool」という簡単な関数のクラスを書いています。
もう1つは特定のセッションの要約文を得るための簡単なクラスを作っています。先ほど簡単に話したAI SearchからRESTで簡単なデータを取るための簡単な関数を使って取得できるように書いています。
こちらがうまく意図どおりに動くかどうか試してみようかと思います。(画面を示して)こういったかたちで、Agentに対して「OpenAIに関するセッションを探して、HTMLのリスト形式で教えてほしい」と、聞いてみます。現在進行しているこのLTについてのタイトルもうまく取れたら成功かなと思います。
(取得したデータを確認して)いくつか取れましたね。きれいに行ごとに分かれていたら理想的だったのですが……。他にも蓄積されているタイトルがあるのですが、こういった蓄積しているセッションのタイトルがリストで取れるようなかたちを考えていました。
(画面を示して)今話しているセッションの内容は、Azure OpenAI Serviceを利用したリアルタイム文字起こし処理だと思いますが、こういったかたちで取れています。
では続いて、こちら(スライド下段)の処理の、こちらのセッションのリアルタイムで進行している内容の要約文が取れるかを試してみます。簡単なプロンプトを書いて、「このタイトルについての要約文を取ってくれ」とお願いしてみます。時間がかかっちゃうかもしれませんが、少しお待ちください。
(取得したデータを確認して)こういったかたちで、現在進行しているLTの要約文を簡単に吐き出してくれました。
ちょっとまだコードに粗い部分もありますが、リアルタイムで進行している会議やミーティングについての有用な知見が取れるんじゃないかということで、こんなかたちで情報共有しました。
以上で私のセッションは終了します。ありがとうございました。
関連タグ:
2024.11.13
週3日働いて年収2,000万稼ぐ元印刷屋のおじさん 好きなことだけして楽に稼ぐ3つのパターン
2024.11.11
自分の「本質的な才能」が見つかる一番簡単な質問 他者から「すごい」と思われても意外と気づかないのが才能
2024.11.13
“退職者が出た時の会社の対応”を従業員は見ている 離職防止策の前に見つめ直したい、部下との向き合い方
2024.11.12
自分の人生にプラスに働く「イライラ」は才能 自分の強みや才能につながる“良いイライラ”を見分けるポイント
2023.03.21
民間宇宙開発で高まる「飛行機とロケットの衝突」の危機...どうやって回避する?
2024.11.11
気づいたら借金、倒産して身ぐるみを剥がされる経営者 起業に「立派な動機」を求められる恐ろしさ
2024.11.11
「退職代行」を使われた管理職の本音と葛藤 メディアで話題、利用者が右肩上がり…企業が置かれている現状とは
2024.11.18
20名の会社でGoogleの採用を真似するのはもったいない 人手不足の時代における「脱能力主義」のヒント
2024.11.12
先週まで元気だったのに、突然辞める「びっくり退職」 退職代行サービスの影響も?上司と部下の“すれ違い”が起きる原因
2024.11.14
よってたかってハイリスクのビジネスモデルに仕立て上げるステークホルダー 「社会的理由」が求められる時代の起業戦略
2024.11.13
週3日働いて年収2,000万稼ぐ元印刷屋のおじさん 好きなことだけして楽に稼ぐ3つのパターン
2024.11.11
自分の「本質的な才能」が見つかる一番簡単な質問 他者から「すごい」と思われても意外と気づかないのが才能
2024.11.13
“退職者が出た時の会社の対応”を従業員は見ている 離職防止策の前に見つめ直したい、部下との向き合い方
2024.11.12
自分の人生にプラスに働く「イライラ」は才能 自分の強みや才能につながる“良いイライラ”を見分けるポイント
2023.03.21
民間宇宙開発で高まる「飛行機とロケットの衝突」の危機...どうやって回避する?
2024.11.11
気づいたら借金、倒産して身ぐるみを剥がされる経営者 起業に「立派な動機」を求められる恐ろしさ
2024.11.11
「退職代行」を使われた管理職の本音と葛藤 メディアで話題、利用者が右肩上がり…企業が置かれている現状とは
2024.11.18
20名の会社でGoogleの採用を真似するのはもったいない 人手不足の時代における「脱能力主義」のヒント
2024.11.12
先週まで元気だったのに、突然辞める「びっくり退職」 退職代行サービスの影響も?上司と部下の“すれ違い”が起きる原因
2024.11.14
よってたかってハイリスクのビジネスモデルに仕立て上げるステークホルダー 「社会的理由」が求められる時代の起業戦略