【OpenAIアップデート】音声サービスの処理時間を調べてみた【Whisper・TTS・GPT3.5-Turbo-1106】

【OpenAIアップデート】音声サービスの処理時間を調べてみた【Whisper・TTS・GPT3.5-Turbo-1106】

Clock Icon2023.11.07

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

新規事業部 生成AIチームの山本です。

今日(2023/11/7)の朝、OpenAI社のDevDayが開催され、様々な発表がありました。多くの革新的な新サービスの一つに、音声(Text-to-Speech、以下 TTS)のAPIが公開されるという発表がありました。

最近、音声でQAシステムを組むことを検討していたところに、ちょうどTTSも加わったため、音声での対話システムとして、どの程度の時間がかかりそうか調べてみました。

今回は、最低限の構成として、以下を調べました。

  • 入力:Whisper
  • 回答:GPT3.5-turbo-1106(※)
  • 出力:TTS

※ GPT4-Turboを利用したかったのですが、レート制限にかかり利用できませんでした(後述)

Whisper

以前からもAPIで利用することができた、音声を文字にしてくれるモデルです。

https://platform.openai.com/docs/guides/speech-to-text/quickstart

入力として使用する、日本語のサンプル音声を用意し、その音声の長さと処理にかかった時間を調べました。

結果

横軸に音声の長さを、縦軸に処理時間をとって、プロットした図です。

入力音声が長いほど、処理時間も長くなっている様子がわかります。散らばりが少し大きいですが、そもそも処理時間が短いので、少しの影響で大きく見えているように思えます。

直線で近似すると、以下のように表せそうです。

  • 処理時間 = 入力音声時間 * 0.07 + 0.78 [秒]

TTS(Text-to-Speech)

今回新しく発表された、文字を音声にしてくれる(Text-to-Speech)モデルです。

https://platform.openai.com/docs/guides/text-to-speech

実行した処理(測定方法)

テキストを音声にする処理を実行し、喋らせる音声の量を増やしながら、処理時間をそれぞれで計測しました。入力テキストは、日本語のものと英語のものを利用しました。

使用コードはこちらです。

クリックで開きます
```python
import time
from pathlib import Path

from mutagen.mp3 import MP3
from openai import OpenAI

client = OpenAI()

# speech_file_path = Path(__file__).parent / f"speech.mp3"
# text = "Today is a wonderful day to build something people love!"
# response = client.audio.speech.create(
#     model="tts-1",
#     voice="alloy",
#     input=text,
# )
# response.stream_to_file(speech_file_path)

n_retry = 5

for i_length in range(1, 21):
    for i_retry in range(n_retry):
        speech_file_path = (
            Path(__file__).parent / f"speech_{i_length:02d}_{i_retry:01d}_rev.mp3"
        )
        text = "Today is a wonderful day to build something people love!" * i_length
        # text = "こんにちは。こちらはクラスメソッド株式会社です" * i_length

        t0 = time.time()
        response = client.audio.speech.create(
            model="tts-1",
            voice="alloy",
            input=text,
        )
        response.stream_to_file(speech_file_path)
        t1 = time.time()

        # MP3オブジェクトを読み込む
        audio = MP3(speech_file_path)

        # 音声の長さ(秒)を取得
        audio_length = audio.info.length

        print(i_length, audio_length, t1 - t0)
```

結果

横軸に音声の長さを、縦軸に処理時間をとって、英語・日本語のテキストの両方のケースをプロットした図です。

散らばりが少し大きいですが、どちらの言語のテキストでも、同じ直線で近似できそうな様子です。

よって、処理時間は以下のように表せそうです。

  • 処理時間 = 0.164 * 出力音声時間 + 0.66 [秒]

補足

  • 同じテキストを入力しても、出力される音声のテキストは、リクエストごとに微妙に異なりまり、音声の長さや話し方が微妙に違いました。(通常の使い方をしている分には、全く気にならないレベルです)
  • client.audio.speech.createのパラメータにspeedという項目があります。この値は音声の再生スピードの率を表しており、1よりも大きくすると早く再生された(倍速再生のような)音声が出力され、1よりも小さくすると遅く再生された(スロー再生のような)音声が出力されます。この値を大きくしたほうが出力される音声が短くなり、処理時間も短くなり、この値を小さくしたほうが出力される音声が長くなり、処理時間も長くなりました。厳密な計測はしていませんが、おそらく上のグラフと同様の結果のようでした。

streaming

以下のページに掲載されている、ストリーミングでの再生も試しました。

https://platform.openai.com/docs/guides/text-to-speech/streaming-real-time-audio

非ストリーミングよりも、劇的に早くなることを期待していましたが、音声再生が開始されるまでの時間は、上記の処理時間とほとんど変わりませんでした。

GPT4-Turbo(レート制限のため、GPT3.5-turbo-1106で計測)

今回新しく発表された、GPTの新しいモデルです。

ですが、下のRate Limitのページにかかれている通り、100リクエスト/日と設定されており(2023/11/07現在)、社内で早速使われてしまったため(早い!)、自分は試すことができませんでした。

https://platform.openai.com/account/limits

※ 追記:10,000 RPD利用できるようになっていました(2023/11/09現在)

実行した処理(測定方法)

GPT4-Turboは後日計測するとして、この記事ではGPT3.5-turbo-1106の処理時間を計測します。以前の記事で、GPT3.5-turbo-0613の処理時間は試しましたので、同じ方法で計測します。

OpenAIのChatCompletion APIの処理時間は出力トークン数に比例してそうだった | DevelopersIO

※ 前回の結果、処理時間は出力トークンと線形(ほぼ比例)の関係にありそうで、Gpt3.5-turbo-0613は100出力トークンあたり4秒の処理時間がかかる、という結果でした。

結果

出力トークン数と、処理時間の関係は下図のとおりでした。

両者には線形の関係がある様子が見てとれます(GPT3.5-trubo-0613と同様)。

よって、処理時間は以下のように表せそうです。

  • 処理時間 = 出力トークン数 * 0.0062 + 0.35 [秒]

補足

GPT3.5-trubo-1106の出力スピードが、GPT3.5-trubo-0613よりも格段に早いという結果でした。具体的には、GPT3.5-trubo-0613では、100トークンあたり4秒でしたが、GPT3.5-trubo-1106では、100トークンあたり0.6秒でした。(今回、GPT3.5-turbo-0613を改めて測定し直しましたが、処理時間は以前の記事とほぼ同じでした)。

全体

上記3つのサービスを繋いだ場合を考えます。

例えば、以下のように、ちょっと長めの質問・回答をしたケースを想定します。

  • 入力音声:10秒程度
  • 回答生成:30単語程度(≒ 30トークン)
  • 出力音声:10秒程度

この場合、それぞれの処理時間は、以下のとおりです。

  • Whisper:1.48秒
  • GPT3.5-turbo-1106:0.54秒
  • TTS:2.30秒

合計は4.30秒です。

ユーザが喋り終わった後から回答の音声が流れ始めるまでに、このくらいの時間がかかるので、体験的には悪くないレベルのように思われます。

(実際には、オーバーヘッドなどがあるので、もう少し長くなると思われます)

まとめ

OpenAI社の新しいサービスのうち、音声によるQAシステムを作成する際に使うと思われる、3つのAPI(Whisper・Gpt3.5-turbo・TTS)について処理時間を計測しました。

補足

実行環境

以下のとおりでした。

  • 測定時刻:11/07 11:00~15:00
  • OS:Windows 10
  • 機器:Surface Laptop 4
  • ソフト:VSCode上で実行
  • 言語:Python 3.10.0
  • OpenAIモジュール:1.1.1

※ 処理時間は状況によって変わる可能性が十分考えられますので、ご注意ください

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.