話題の記事

自動文字起こしサービスである、OpenAIの「Whisper API」とAWSの「Amazon Transcribe」の精度を比較してみた

2023.10.20

はじめに

今回は、OpenAIのWhisper APIとAmazon Transcribeという2つの音声文字起こしサービスを試し、それぞれの精度を比較してみました。

Amazon Transcribeは、音声をテキストに変換する自動音声認識サービスです。

ストリーミングとバッチ処理のどちらでも文字起こしが可能です。

攻撃的な言葉を指定すると、Amazon Transcribeがそれらの言葉を文字起こしから自動的に削除する語彙フィルタリングなどの機能もあります。

Amazon Transcribeの詳細は、下記の記事をご参考ください。

OpenAIには音声をテキストに変換する「Whisper」という音声認識モデルがあり、WhisperをAPIの形で呼び出すWhisper APIが存在します。

Whisper APIは、主に「音声から文字起こし」と「音声から文字起こしと翻訳処理」の2つ機能があります。

今回の比較検証の環境としては、音声ファイルをS3バケットに保存し、AWS Lambdaが音声ファイルを取得します。その上で、Whisper APIまたはAmazon Transcribeを利用して文字起こしを行い、その結果をLambdaのログに出力します。

前提

  • 2023年10月19日時点での検証内容です。
  • 今回は、あくまでも音声ファイル1サンプルでの検証です。他のサンプルでは同様の結果になるわけではありません。
  • 今回は、LambdaのランタイムPython3.11で検証しました。
  • 今後のバージョンアップによって、それぞれのサービスが改善される可能性が高いので、恒久的な結果ではありません。
  • 精度の比較は、あくまでも私個人の主観での判断になります。

構築

S3バケット

拡張子がwavの音声ファイルをS3バケットに保存しました。

Whisper APIは、デフォルトでは 25 MB 未満のファイルのみをサポートしてますので、20MB程度のサイズにしてます。

ちなみに、音声ファイル元は、以前「Contact Lens for Amazon Connect 入門」というタイトルでビデオセッションした動画のうち、最初の2分を音声ファイルに変換したものです。

Lambdaの作成

LambdaでWhisper APIを利用する方法は、以下の記事に詳しく載っています。

一方、Amazon TranscribeをLambdaで利用する場合には、以下のように手順を踏んで文字起こしを行います。

Lambdaは、ランタイムPython3.11を指定し作成します。

次に、以下の設定を行います

  • S3バケットとAmazon Transcribeを利用するため、LambdaのIAMロールには、AmazonS3FullAccessAmazonTranscribeFullAccessをアタッチします
  • タイムアウトは、3秒から2分に変更します。

今回使用するコードは、下記の通りです

import json
import time
import boto3
import urllib.request

def lambda_handler(event, context):
    transcribe_client = boto3.client('transcribe')
    bucket_name = 'バケット名'
    file_name = 'ファイル名'

    file_url = f'https://s3.amazonaws.com/{bucket_name}/{file_name}'
    
    job_name = context.aws_request_id 
    job_uri = file_url
    transcribe_client.start_transcription_job(
        TranscriptionJobName=job_name,
        Media={'MediaFileUri': job_uri},
        LanguageCode='ja-JP',
        MediaFormat='wav'
    )
    
    while True:
        status = transcribe_client.get_transcription_job(TranscriptionJobName=job_name)
        if status['TranscriptionJob']['TranscriptionJobStatus'] in ['COMPLETED', 'FAILED']:
            break
        print("Not ready yet...")
        time.sleep(5)
    
    if status['TranscriptionJob']['TranscriptionJobStatus'] == 'COMPLETED':
        response_uri = status['TranscriptionJob']['Transcript']['TranscriptFileUri']
        response = urllib.request.urlopen(response_uri).read().decode('utf-8')
        json_response = json.loads(response)
        transcript = json_response['results']['transcripts'][0]['transcript']
    else:
        transcript = "Transcription job failed"
    print('Transcript result:' + transcript)
    return transcript

ここで記述するS3バケットの名前とファイル名は、各自に合わせて変更してください。

start_transcription_jobでは、文字起こし結果を保存するS3バケットを指定しない場合、マネージドS3バケットに結果が保存されます。ただし、マネージドS3バケットに保存した場合、90日後に自動削除されますので注意しましょう。

認識精度

次に、各Aサービスの文字起こし内容とその認識精度を比較します。

Whisper API

実際の文字起こし内容↓

ーーーここからーーー

ディベロッパーズ IO 2023 このセッションでは Amazon Connect の機能の一つである Contact Lens for Amazon Connect 入門と題しまして 主に Amazon Connect を既に利用している方や Contact Lens for Amazon Connect について知りたい方向けの入門セッションとなります 本セッションのスピーカーを務めさせていただきます AWS事業本部コンサルティング部所属の平井裕治と申します 本日はどうぞよろしくお願いいたします 本セッションのアジェンダです まず Amazon Connect について概要を解説し Amazon Connect の機能の一つである Contact Lens for Amazon Connect の概要や機能 有効化の設定方法 導入するメリットについてご紹介いたします Amazon Connect とは AWS が提供している スケーラブルかつ信頼性の高い顧客窓口を 低コストでセルフサービスにて構築できる クラウド型コンタクトセンターサービスです Connect では電話回線や電話番号の取得 チャット 通話録音 自動音声応答などの コンタクトセンターに必要な機能が提供されています また インターネットに接続されたPCがあれば どこからでもアクセス可能なため 在宅勤務を含む柔軟な働き方を実現できます 次に Connect で使用する用語について 先にご説明いたします Connect で電話をかけてきたお客様のことを 顧客と呼びます 電話対応したコールセンターの担当者のことを エージェントと呼びます そのエージェントの上司のことを スーパーエージェントと呼びます そして電話対応したその1件のことを コンタクトと呼びます 以上の用語をセッションでは

ーーーここまでーーー

Whisper APIの良いところ

  • 違和感なく漢字や英語に変換されています
  • 音声内容は抜けなく文字起こしされています

気になる点

  • 文中に句読点がないです
  • 関係ないスペースが存在しています
  • 固有名詞の誤記があります
    • ディベロッパーズ IO → DevelopersIO
    • 平井裕治 → 平井裕二

正確に音声をテキストに変換する能力の高さが垣間見えますが、句読点の欠如や不要なスペースがあるため、読みにくいといった問題も存在します。

Amazon Transcribe

こちらが実際の文字起こし内容↓

ーーーここからーーー

ディベロッパーIO二千二十三コンセッションでは、アマゾンコネクトの機能の一つであるコンタクトレンズフォーアマゾンコネクト入門と題しまして、主にアマゾンコネクトをすでに利用している方やコンタクトレンズフォーアマゾンコネクトについて知りたい方向けの入門セッションとなります。本セッションのスピーカーを務めさせていただきます。AW事業本部コンサルティング部所属の平裕一と申します。本日はどうぞよろしくお願いいたします。コンセッションのアジェンダです。まず、アマゾンコネクトについて概要を解説し、アマゾンコネクトの機能の一つであるコンタクトレンジフォーアマゾンコネクトの概要や機能有効化の設定方法、導入するメリットについてご紹介いたします。アマゾンコネクトとは、Aが提供しているスケーラブルかつ信頼性の高い顧客窓口を低コストでセルスサービスにて構築できるクラウド型コンタクトセンターサービスです。コネクトでは、電話回線や電話番号の取得、チャット、通話録音、自動音声応答などのコンタクトセンターに必要な機能が提供されています。また、インターネットに接続されたPCがあれば、どこからでもアクセス可能なため、在宅勤務を含む柔軟な働き方を実現できます。次に、コネクトで使用する用語について先にご説明いたします。コネクトで電話をかけてきたお客様のことを顧客と呼びます。電話対応したコールセンターの担当者のことをエージェントと呼びます。そのエージェントの上司のこと、スーパーエージェントと呼びます。そして、電話対応したその一件のことをコンタクトと呼びます。衣装の用語セセクション

ーーーここまでーーー

Amazon Transcribeの良いところ

  • 句読点があり、読みやすい。

気になる点

  • 音声内容から一部抜けて文字起こしされている箇所がある
    • ディベロッパー → ディベロッパーズ
    • 平裕一 → 平井裕二
    • Aが提供 → AWSが提供
  • 適切な漢字や英語、数字に変換されていない箇所がある
    • 二千二十三 → 2023
    • AW事業本部 → AWS事業本部
    • 衣装 → 以上
    • セセクション → セッション
    • コンセッション → このセッション
    • ディベロッパーズ IO → DevelopersIO
    • アマゾンコネクト → Amazon Connect
    • コンタクトレンズフォーアマゾンコネクト → Contact Lens for Amazon Connect

Amazon Transcribeを使用した結果からは、句読点の挿入により読みやすさが確保されています。

ただし、一部で音声内容が適切に文字起こしできていない点や適切な単語に変換できていない点などが目につきます。

精度の比較

基本的には、どちらも比較的精度が高く文字起こしされている印象です。

Amazon Transcribeは句読点があり読みやすいものの、一部の音声内容が文字起こしできていない箇所や適切な漢字や英語に変換できていない箇所があります。

同じAWSサービスであるAmazon Connectなどは英語表記に変換されてほしいですね。

一方、Whisper APIは適切に漢字や英語への変換が見られますが、文中に句読点がなく、無関係なスペースが存在するため、読みにくい面もあります。

今回の検証では、両者の比較をすると、音声認識の精度でいうとWhisper APIが優位と言えます。

一方、読みやすさという観点では、Amazon Transcribeに軍配が上がります。

精度の向上方法

上記の文字起こし内容をふまえて、それぞれのサービスで精度を向上させるための改善方法をご紹介します。

Whisper API

Whisper APIの場合は、下記の記事にある通り、2つあります。

  1. Whisper APIのプロンプトパラメータを使用
  2. GPT-4による追加処理

記事に書いてある通り、プロンプトパラメータよりもGPT-4による追加処理のほうが、全体的な読みやすさを大きく向上させています。

実行したコードも記事に紹介していますので、ご参考ください。

実際の文字起こし後、GPT-4による追加処理した内容↓

ーーーここからーーー

"DevelopersIO 2023、このセッションでは、Amazon Connectの機能の一つである「Contact Lens for Amazon Connect」入門と題しまして、主にAmazon Connectを既に利用している方や、Contact Lens for Amazon Connectについて知りたい方向けの入門セッションとなります。本セッションのスピーカーを務めさせていただきますAWS事業本部コンサルティング部所属の平井裕二と申します。本日はどうぞよろしくお願いいたします。\n\n本セッションのアジェンダです。まず、Amazon Connectについて概要を解説し、Amazon Connectの機能の一つであるContact Lens for Amazon Connectの概要や機能、有効化の設定方法、導入するメリットについてご紹介いたします。Amazon Connectとは、AWSが提供している、スケーラブルかつ信頼性の高い顧客窓口を、低コストでセルフサービスにて構築できるクラウド型コンタクトセンターサービスです。Connectでは、電話回線や電話番号の取得、チャット、通話録音、自動音声応答などのコンタクトセンターに必要な機能が提供されています。また、インターネットに接続されたPCがあれば、どこからでもアクセス可能なため、在宅勤務を含む柔軟な働き方を実現できます。\n\n次に、Connectで使用する用語について先にご説明いたします。Connectで電話をかけてきたお客様のことを「顧客」と呼びます。電話対応したコールセンターの担当者のことを「エージェント」と呼びます。そのエージェントの上司のことを「スーパーエージェント」と呼びます。そして、電話対応したその1件のことを「コンタクト」と呼びます。以上の用語をセッションでは使用します。"

ーーーここまでーーー

GPT-4による追加処理により、句読点や関係ないスペースの削除はもちろん、段落(\n\n)や引用符(「」)も追加され、大変読みやすい形となりました。

ただし、処理時間がその分増え、トータルの実行時間は、今回の場合1分弱になりました。

なお、GPT-4による追加処理はWhisper APIの機能ではないため、Amazon Transcribeで文字起こしした内容にも同様の処理を施すことが可能です。

Amazon Transcribe

Amazon Transcribeの機能だけで精度を改善する方法には以下の2つがあります。

  • カスタム語彙
    • ドメイン固有の単語やフレーズの認識精度を向上させるために、新しい単語を追加する機能
    • 参考記事
  • カスタム言語モデル
    • ドメイン固有の用語を認識するために、カスタム言語モデルを構築する機能
    • この機能を利用するためには参考になるテキストのデータを準備する必要があります
    • 参考記事

カスタム言語モデルは準備に手間がかかるので、検証の目的であれば、カスタム語彙で十分な精度向上が期待できます。

ただし、Whisper APIで解説したGPT-4による追加処理では、単語以外にも段落などもしてくれるため、GPT-4による追加処理を採用します。

実際の文字起こし後、GPT-4による追加処理した内容↓

ーーーここからーーー

"DevelopersIO2023コンセッションでは、Amazon Connectの機能の一つであるContact Lens for Amazon Connect入門と題しまして、主にAmazon Connectをすでに利用している方や、Contact Lens for Amazon Connectについて知りたい方向けの入門セッションとなります。本セッションのスピーカーを務めさせていただきますのは、AWS事業本部コンサルティング部所属の平井裕二と申します。本日はどうぞよろしくお願いいたします。\n\nコンセッションのアジェンダですが、まず、Amazon Connectについて概要を解説し、Amazon Connectの機能の一つであるContact Lens for Amazon Connectの概要や機能有効化の設定方法、導入するメリットについてご紹介いたします。Amazon Connectとは、Amazonが提供しているスケーラブルかつ信頼性の高い顧客窓口を低コストでセルフサービスにて構築できるクラウド型コンタクトセンターサービスです。Connectでは、電話回線や電話番号の取得、チャット、通話録音、自動音声応答などのコンタクトセンターに必要な機能が提供されています。また、インターネットに接続されたPCがあれば、どこからでもアクセス可能なため、在宅勤務を含む柔軟な働き方を実現できます。\n\n次に、Connectで使用する用語について先にご説明いたします。Connectで電話をかけてきたお客様のことを顧客と呼びます。電話対応したコールセンターの担当者のことをエージェントと呼びます。そのエージェントの上司のことをスーパーエージェントと呼びます。そして、電話対応したその一件のことをコンタクトと呼びます。以上が用語セクションです。"

ーーーここまでーーー

以下の単語は正しく変換してくれていますね。

  • 平裕一 → 平井裕二
  • ディベロッパーズ IO → DevelopersIO
  • 二千二十三 → 2023
  • 衣装 → 以上
  • アマゾンコネクト → Amazon Connect
  • コンタクトレンズフォーアマゾンコネクト → Contact Lens for Amazon Connect

また、段落もつけてくれてます。

処理時間

おおよそ5秒程度の録音内容であれば、Whisper APIの場合、文字起こしは1秒程度の処理時間です。

対して、Amazon Transcribeの場合、8秒程度かかりました。

料金

Whisper APIは、1分あたり0.006USDです。

Amazon Transcribeは、東京リージョンの場合、1分あたり、0.024USDです。無料枠もあります。 (スタンダードバッチ文字起こし)

Whisper APIはAmazon Transcribeの4分の1のコストで利用できます。

サポートされるファイルサイズ上限と形式

Amazon Transcribeの場合、音声時間は最大4時間、サイズは最大2GBまでです。

また、対応しているファイル形式は、mp3、mp4、webm、wav、amr、flac、oggです。

一方、Whisper APIの場合、ファイルサイズは最大25MBまでとなっており、対応しているファイル形式は、mp3、mp4、webm、wav、mpeg、mpga、m4aです。

Amazon Transcribeは最大2GBまで対応しているため、Whisper APIに比べると大容量の音声データの文字起こし処理が可能です。

ただし、mp4の動画ファイルをそのまま文字起こしする場合、2GBを容易に超える可能性があります。その際は、ファイルを適切に分割する等の手段が必要となります。

総評

今回の検証結果から見ると、Whisper APIとAmazon Transcribeを精度という点のみで比較すると、Whisper APIに軍配が上がります。

しかし、Whisper APIは音声からの適切な変換に優れている一方で、句読点の欠如など読みにくさも見受けられました。

それに対し、Amazon Transcribeでは句読点が挿入され読みやすくなっていますが、いくつかの音声内容が適切に文字起こしできていない箇所が存在します。

それぞれの特性を考慮すると、利用する目的やケースによって、どちらのサービスを使用するべきかが変わります。

例えば、高い精度が求められる場合や、コストが重視されるケースにはWhisper APIが適しています。

一方、文字起こし結果が基本的に正確であればよい、または大量のデータを一度に処理する必要がある、AWSサービスで完結する要件がある場合は、Amazon Transcribeが適しているでしょう。

最後に

精度に関しては、今回の検証時点での性能です。

どちらのサービスも音声認識技術が進化を続けており、今後の改良に期待が持てますね。