1. システムとオフィスの融合
  2. media
  3. Azure Open AI
  4. Azure OpenAI Whisperで音声ファイルをテキスト変換、内容を要約してみた

QESブログ

Azure OpenAI Whisperで音声ファイルをテキスト変換、内容を要約してみた

  • LINEで送る
  • このエントリーをはてなブックマークに追加
今回はAzure OpenAI Whisperを使用して音声ファイルをテキスト化し、テキスト化したものをOpenAIのチャットへ入力して要約するよう指示してみました。
どの程度のクオリティになるのでしょうか。

Azure OpenAI Whisperとは

WhisperはOpenAIが公開している音声認識モデルであり、音声ファイルの文字起こしを行うことができます。
また、Whisper モデルは 詳細はこちらを参照いただければと思います。
https://learn.microsoft.com/ja-jp/azure/ai-services/speech-service/whisper-overview

音声のテキスト化

まずはAzure OpenAIリソースを作成しましょう。
現在(2023/12/28時点)は米国中北部(North Central US)または西ヨーロッパ(West Europe)リージョンのみWhisperを使用できるようですので、注意してください。
次にAzure OpenAI Studioからデプロイを行います。モデルはWhisperを選択します。


音声ファイルの準備

テキスト化したい音声ファイルを用意しましょう。
こちら に「Azure OpenAI の Whisper モデルには、25 MB というファイル サイズの制限があります。 25 MB を超えるファイルを文字起こしする必要がある場合は、Azure AI 音声のバッチ文字起こし API を使用できます。」と記載がありますので、使用するデータには注意しましょう。
今回はe-Govで公開されている音声データを使用します。 (3分34秒 1.63MB)
https://www.e-gov.go.jp/
(分割版_第2章 食料・農業・農村の主な動向_1)

実装例

Pythonで実装していきます。
テキスト化した内容はJsonファイルへ保存しています。
[whisper.py]
import requests
import json

azure_openai_endpoint = "AZURE_OPENAI_ENDPOINT"
deployment_name = "YOUR_DEPLOYMENT_NAME"
api_version = "2023-09-01-preview"
azure_openai_key = "AZURE_OPENAI_KEY"
file_path = "音声ファイルのパス"

url = f"{azure_openai_endpoint}/openai/deployments/{deployment_name}/audio/transcriptions?api-version={api_version}"

headers = {
    "api-key": azure_openai_key,
}

files = {
    "file": (file_path, open(file_path, "rb")),
}

response = requests.post(url, headers=headers, files=files)
print(response.json()) 

with open('./mp3Totext.json', "w", encoding="utf-8") as f:
    json.dump(response.json(), f,ensure_ascii=False)

出力結果はこちらです。
はっきりとした音声であったためか、誤字はあるものの、かなり高い精度でテキスト化されていそうです。
[mp3Totext.json]
{"text": "それでは次に、第2章、食糧、農業、農村の主な動向について解説します。 第1節では食糧を取り上げ、そのタイトルは、食糧持久力、持久率の向上と食糧の安定供給です。 ここでは第1に、食糧持久力、持久率の向上に向けた取り組みについて紹介します。 まず、食糧持久率について、その現状と持久率向上に向けた取り組みについて紹介します。 我々の食生活がどのくらい国産の食材で賄われているかを表す指標で、一般的にカロリーベースと生産額ベースで表しています。 我が国の2007年度のカロリーベースの総合食糧持久率は、前年度より1ポイント上昇して40%となっています。 その主な要因は、天候に恵まれ小麦の生産量が過去10年で最高となったことや、米の1人1日あたりの消費量が増加したことなどが挙げられます。 生産額ベースの総合食糧持久率は、野菜や米の価格低下、輸入飼料価格の高騰により2ポイント低下し66%となっています。 2015年度にカロリーベースで45%、生産額ベースで76%とする食糧持久率目標の達成に向け、農業生産面に加え食糧消費面の取り組みも併せた両面にわたる取り組みを行うことが重要です。 また、食糧に関する問題意識を共有し、消費者、企業、団体、地方公共団体といった関係者が一体となって、国産農産物の消費拡大などを具体的に推し進めることが重要な課題となっています。 こうした中、食糧持久率向上に向けた国民運動、フードアクション日本が2008年10月にスタートしました。 個人、企業、団体などの自主的な参画により、国産食材を活用した新商品の開発、国産食材にポイントを付与する取り組みなど、国産農産物の消費拡大をはじめとする様々な取り組みが展開されています。 また、カロリーベースの食糧持久率を1%向上させるための分かりやすい取り組みとして、国民一人一人がご飯であれば、一食につきもう一口の消費を増やせばよいという試算も紹介しています。 次に、食糧持久力・持久率の向上に向けた様々な取り組みについて紹介します。 まず、食育です。 食生活をめぐる様々な問題に対処するためには、食に関する知識や判断力を身につける食育が重要です。 そのため、1日に何をどれだけ食べたらよいかをイラストで示した食事バランスガイドについて、小売、中食、外食産業をはじめ様々な場面で情報を提供し、健全な食生活の実現を図ることや、食事バランスガイドを活用し、栄養バランスに優れた日本型食生活の実践を促進することが重要です。"}

見やすいようにtext部分を抜き出して、句点で改行したものがこちらです。
それでは次に、第2章、食糧、農業、農村の主な動向について解説します。
第1節では食糧を取り上げ、そのタイトルは、食糧持久力、持久率の向上と食糧の安定供給です。
ここでは第1に、食糧持久力、持久率の向上に向けた取り組みについて紹介します。
まず、食糧持久率について、その現状と持久率向上に向けた取り組みについて紹介します。
我々の食生活がどのくらい国産の食材で賄われているかを表す指標で、一般的にカロリーベースと生産額ベースで表しています。
我が国の2007年度のカロリーベースの総合食糧持久率は、前年度より1ポイント上昇して40%となっています。
その主な要因は、天候に恵まれ小麦の生産量が過去10年で最高となったことや、米の1人1日あたりの消費量が増加したことなどが挙げられます。
生産額ベースの総合食糧持久率は、野菜や米の価格低下、輸入飼料価格の高騰により2ポイント低下し66%となっています。
2015年度にカロリーベースで45%、生産額ベースで76%とする食糧持久率目標の達成に向け、農業生産面に加え食糧消費面の取り組みも併せた両面にわたる取り組みを行うことが重要です。
また、食糧に関する問題意識を共有し、消費者、企業、団体、地方公共団体といった関係者が一体となって、国産農産物の消費拡大などを具体的に推し進めることが重要な課題となっています。
こうした中、食糧持久率向上に向けた国民運動、フードアクション日本が2008年10月にスタートしました。
個人、企業、団体などの自主的な参画により、国産食材を活用した新商品の開発、国産食材にポイントを付与する取り組みなど、国産農産物の消費拡大をはじめとする様々な取り組みが展開されています。
また、カロリーベースの食糧持久率を1%向上させるための分かりやすい取り組みとして、国民一人一人がご飯であれば、一食につきもう一口の消費を増やせばよいという試算も紹介しています。
次に、食糧持久力・持久率の向上に向けた様々な取り組みについて紹介します。
まず、食育です。
食生活をめぐる様々な問題に対処するためには、食に関する知識や判断力を身につける食育が重要です。
そのため、1日に何をどれだけ食べたらよいかをイラストで示した食事バランスガイドについて、小売、中食、外食産業をはじめ様々な場面で情報を提供し、健全な食生活の実現を図ることや、食事バランスガイドを活用し、栄養バランスに優れた日本型食生活の実践を促進することが重要です。

要約してみる

上記で音声をテキスト化したファイルをOpenAIのチャットへインプットし、要約してみます。

実装例

[chat.py]
import openai
import os
import json

azure_openai_endpoint = ""
deployment_name = ""
api_version = "2023-09-01-preview"
azure_openai_key = ""
file_path = "./mp3Totext.json"

client = openai.AzureOpenAI(
    azure_endpoint=azure_openai_endpoint,
    api_key=azure_openai_key,
    api_version=api_version
)

with open(file_path, 'r', encoding="utf-8") as f:
    jsonData = json.load(f)

messages= [
    {"role": "system", "content": "あなたは優秀なアシスタントです。"}
    ]

content = '''
-以下音声をテキスト化したデータの内容を要約してください。
-適宜改行を入れ、読みやすくしてください。
-****************************************
'''

content = content + jsonData['text']

messages.append({"role": "user","content": content})
response = client.chat.completions.create(
    model=deployment_name,
    messages=messages,
)
resContent = response.choices[0].message.content

f = open('./textToYoyaku.txt', 'w', encoding="utf-8")
f.write(resContent)
f.close()

出力結果がこちらです。
[textToYoyaku.txt]
第2章では、食糧、農業、農村の主な動向について解説されています。
第1節では、食糧持久力と持久率の向上、食糧の安定供給について説明されています。
食糧持久率は、カロリーベースと生産額ベースで表される指標で、2007年度の総合食糧持久率は前年より1ポイント上昇して40%となりました。
これは、天候に恵まれたことや米の消費量の増加が要因とされています。
一方、生産額ベースの総合食糧持久率は野菜や米の価格低下、輸入飼料価格の高騰により2ポイント低下し66%となっています。
2015年度までに食糧持久率目標を達成するためには、農業生産と食糧消費の両面で取り組む必要があります。
また、食糧に関する問題意識を共有し、関係者全員が国産農産物の消費拡大に取り組むことも重要です。
フードアクション日本などの国民運動によって、国産食材の消費拡大を促進する様々な取り組みが行われています。
食育も重要な取り組みであり、食に関する知識や判断力を身につけることが求められています。
食事バランスガイドなどの情報提供や栄養バランスに優れた食生活の実践の促進が重要です。

要約にしては文量が多いですが、それっぽいものが出力されています。 より長い音声であればもっと要約が効いてくるかもしれません。
今回チャットへインプットする際、以下のように指示しています。
以下音声をテキスト化したデータの内容を要約してください。
適宜改行を入れ、読みやすくしてください。
****************************************
音声をテキスト化した内容

この指示を変化させることで、チャットからの応答も変わってきます。 今度は以下のように指示してみます。
以下音声をテキスト化したデータの内容を要約してください。
適宜改行を入れ、読みやすくしてください。
要約内容は箇条書きにしてください。
****************************************
音声をテキスト化した内容
- 第1節では食糧を取り上げ、そのタイトルは食糧持久力、持久率の向上と食糧の安定供給です。
- 食糧持久率は、カロリーベースと生産額ベースで表されており、現状は40%となっている。
- 食糧持久率向上への取り組みとして、農業生産面と食糧消費面の両方に取り組む必要がある。
- 国産農産物の消費拡大など、関係者が一体となって取り組むことが重要な課題である。
- フードアクション日本という国民運動が立ち上がり、国産農産物の消費拡大を推進している。
- 国民一人一人が消費を増やすために、ご飯については一食につきもう一口を増やすことができると試算されている。
- 食育が食糧持久力・持久率の向上に重要であり、食事バランスガイドの普及や実践が促進される必要がある。

要約内容が箇条書きで記載されるようになりました。 これであれば長い音声データの内容がすんなり頭に入ってきそうです。

まとめ

いかがでしょうか。Whisperの精度はかなり高いのではないかという印象です。
OpenAIのChatを使ってWhisperでテキスト化したデータの(文脈を加味した)誤字修正を行ったうえで要約してみるとより正確なものが出力されるかもしれません。
今回適当な会議音声が見つからずご紹介できませんでしたが、会議音声をテキスト化して議事録にしてみるのも面白そうです。
(議事録を作成するならTeamsと連携して参加者情報なんかも取得できればいいですね。)

QESでは、「AIチャットボット構築サービス」をはじめとして、各AIサービスを利用したシステム導入のお手伝いをしております。それ以外でも QESでは様々なアプリケーションの開発・導入を行っております。提供するサービス・ソリューションにつきましては こちら に掲載しております。
システム開発・構築でお困りの問題や弊社が提供するサービス・ソリューションにご興味を抱かれましたら、是非一度 お問い合わせ ください。

※このブログで参照されている、Microsoft、Azure、Azure OpenAI、Teams、その他のマイクロソフト製品およびサービスは、米国およびその他の国におけるマイクロソフトの商標または登録商標です。
※その他の会社名、製品名は各社の登録商標または商標です。

  • LINEで送る
  • このエントリーをはてなブックマークに追加

お気軽にお問い合わせください。

ページのトップへ