音声入力・音声会話に関するChatGPTのAPI「Speech to Text API」の使い方!

第1章 「Speech to Text API」の概要

1-1 「Speech to Text API」とは

Open AIのAPIを使えば、音声情報をテキストに変換することもできます。音声テキスト化の機能を持ったAPIのことをSpeech to Text APIと言います。OpenAIのSpeech to Text APIのことを特にWhisperと言います。

1-2 「Speech to Text API」にできること

Speech to Text APIは、最先端のオープンソース large-v2 Whisperモデルに基づいて、2つの音声テキスト化エンドポイント、トランスクリプショントランスレーションを提供します。これらは以下の用途に使用できます:

・トランスクリプション:あらゆる言語の音声をテキストに書き換える

・トランスレーション:音声を英語に翻訳する

ただし、ファイルのアップロードは現在25MBに制限されており、以下の入力ファイルタイプがサポートされています:mp3mp4mpegmpgam4awavwebm

🔼「AITech」がオススメする初心者〜上級者まで学べるAIスクールです!🔼

第2章 「Speech to Text API」の使い方

2-1 トランスクリプション

トランスクリプションでは、トランスクリプションしたい音声ファイルと、音声のトランスクリプションに必要な出力ファイル形式を入力として受け取ります。現在、複数の入力および出力ファイル形式をサポートしています。

実際にAPIにトランスクリプションを命令すると以下のようになります。

from openai import OpenAI
client = OpenAI()

audio_file= open("/path/to/file/audio.mp3", "rb")
transcript = client.audio.transcriptions.create(
model="whisper-1",
file=audio_file
)

model=の部分にはwhisper-1などの使用する音声テキスト化のモデルを入力しましょう。

デフォルトでは、レスポンス・タイプはテキストを含むjsonとなります。

{ “text”: “Imagine the wildest idea that you’ve ever had, and you’re curious about how it might scale to something that’s a 100, a 1,000 times bigger. …. }

Speech to Text APIでは、リクエストに追加のパラメータを設定することもできます。例えば、response_formatをtextに設定したい場合、リクエストは以下のようになります:

from openai import OpenAI
client = OpenAI()

audio_file = open("speech.mp3", "rb")
transcript = client.audio.transcriptions.create(
model="whisper-1",
file=audio_file,
response_format="text"
)

2-2 トランスレーション

トランスレーションでは、サポートされている言語の音声ファイルを入力として受け取り、必要に応じて音声を英語に書き起こします。出力は元の入力言語ではなく、英語のテキストに翻訳されるため、トランスクリプション エンドポイントとは異なります。

実際にChatGPT APIにトランスクリプションを命令すると以下のようになります。

from openai import OpenAI
client = OpenAI()

audio_file= open("/path/to/file/german.mp3", "rb")
transcript = client.audio.translations.create(
model="whisper-1",
file=audio_file
)

この場合、入力された音声はドイツ語で、出力されたテキストは次のようになります。

Hello, my name is Wolfgang and I come from Germany. Where are you heading today?

現在は、英語への翻訳のみが可能です。

2-3 対応可能言語

現在、トランスクリプションとトランスレーションの両方のエンドポイントで、以下の言語が対応可能です。

アフリカーンス語、アラビア語、アルメニア語、アゼルバイジャン語、ベラルーシ語、ボスニア語、ブルガリア語、カタロニア語、中国語、クロアチア語、チェコ語、デンマーク語、オランダ語、英語、エストニア語、フィンランド語、フランス語、ガリシア語、ドイツ語、ギリシャ語、ヘブライ語、ヒンディー語、ハンガリー語、アイスランド語、インドネシア語、イタリア語、日本語、カンナダ語、 カザフ語、韓国語、ラトビア語、リトアニア語、マケドニア語、マレー語、マラーティー語、マオリ語、ネパール語、ノルウェー語、ペルシア語、ポーランド語、ポルトガル語、ルーマニア語、ロシア語、セルビア語、スロバキア語、スロベニア語、スペイン語、スワヒリ語、スウェーデン語、タガログ語、タミル語、タイ語、トルコ語、ウクライナ語、ウルドゥー語、ベトナム語、ウェールズ語

基礎となるモデルは98の言語でトレーニングされましたが、音声テキスト化モデルの精度の業界標準ベンチマークである50%未満の単語誤り率(WER)を超えた言語のみをリストアップしています。上記以外の言語でもモデルは結果を返しますが、品質は低くなります

2-4 長い入力

デフォルトでは、Speech to Text API25MB以下のファイルのみサポートしています。それ以上の長さの音声ファイルをお持ちの場合は、25MB以下に分割するか、圧縮された音声形式を使用する必要があります。

最高のパフォーマンスを得るためには、文脈が失われる可能性があるため、音声を文の途中で分割しないことをお勧めします。

これを処理する一つの方法は、PyDubオープンソースPythonパッケージを使用して音声を分割することです。

Pydubとは、オーディオファイルをPythonを使って読み込み、音声処理を実装できるモジュールです。

実際にPyDubオープンソースPythonパッケージで音声を分割すると以下のようになります。

from pydub import AudioSegment

song = AudioSegment.from_mp3("good_morning.mp3")

# PyDub handles time in milliseconds
ten_minutes = 10 * 60 * 1000

first_10_minutes = song[:ten_minutes]

first_10_minutes.export("good_morning_10.mp3", format="mp3")

OpenAIは、PyDubのようなサードパーティソフトウェアの使い勝手やセキュリティについて保証するものではありません。

2-5 プロンプティング

Speech to Text APIが生成するトランスクリプトの品質を向上させるために、プロンプトを使用することができます

モデルはプロンプトのスタイルに合わせようとするため、プロンプトが大文字や句読点を使用している場合、モデルも大文字や句読点を使用する可能性が高くなります。

以下は、プロンプトが役立つ状況の例です。

誤認識される単語の修正: 音声認識モデルが特定の単語や略語を誤って認識してしまうことがあります。そのような場合、モデルに対して正しい形で単語を認識させるようなプロンプトを提供することで、認識の正確性を向上させることができます。

つまり、プロンプトは、音声の中でモデルが誤認識する特定の単語や略語を修正するのに非常に役立ちます。

文脈の維持: 長い音声ファイルを分割して処理する際、それぞれの段落の間で文脈を維持することは難しいです。セグメントに分割されたファイルの文脈を保持するために、直前のセグメントのトランスクリプトをモデルに表示させることができます。こうすると、モデルが前の音声の関連情報を使用するため、トランスクリプトの精度が高くなります。

句読点の認識: 音声認識モデルは句読点を見落とすことがあります。プロンプトを使用して句読点を含めることで、モデルがより正確な文法と構造を持つトランスクリプトを生成するのに役立ちます。

フィラー単語の書き起こし: 通常の会話では「えーと」「あのう」といったフィラー単語がよく使われますが、モデルはこれらを無視することがあります。特にフィラー語を書き起こしたい場合は、フィラー語を含むプロンプトを使うことができます:”Umm, let me think like, hmm… Okay, here’s what I’m, like, thinking.”

書字体系の選択: 異なる言語で書字体系が複数ある場合(例えば中国語の簡体字と繁体字)、モデルが自動的に選択する書字体系がユーザーの要望と一致しないことがあります。プロンプトを使用して希望する書字体系を指定することで、モデルが正しい形式でトランスクリプトを生成するのを助けることができます。

上記のような状況においてはプロンプトを活用すると良いでしょう。

2-6 信頼性の向上

Whisperを使用する際の最も一般的な問題は、モデルがたまに、一般的でない単語や略語を認識しないことです。

これに対処するため、このようなケースでWhisperの信頼性を向上させる様々なテクニックを紹介します。

2-6-1 プロンプトパラメータの使用

最初の方法は、オプションの prompt パラメータを使って正しい綴りの辞書を渡す方法です。

Whisperが考慮するのは、プロンプトの最初の244トークンのみであることを覚えておくことが重要です。

以下が入力の例です。

transcribe(filepath, prompt="ZyntriQix, Digique Plus, CynapseFive, VortiQore V8, EchoNix Array, OrbitalLink Seven, DigiFractal Matrix, PULSE, RAPT, B.R.I.C.K., Q.U.A.R.T.Z., F.L.I.N.T.")

信頼性は高まるが、この手法は244文字に限られるため、拡張性のあるソリューションとするには、SKUのリストが比較的小さい必要があります。

2-6-2 GPT-4による後処理

2つ目の方法は、GPT-4またはGPT-3.5-Turboを使用した後処理ステップです。

まず、system_prompt変数を通してGPT-4の指示を与えます。先ほどの prompt パラメーターと同様に、会社名と商品名を定義します。

system_prompt = "You are a helpful assistant for the company ZyntriQix. Your task is to correct any spelling discrepancies in the transcribed text. Make sure that the names of the following products are spelled correctly: ZyntriQix, Digique Plus, CynapseFive, VortiQore V8, EchoNix Array, OrbitalLink Seven, DigiFractal Matrix, PULSE, RAPT, B.R.I.C.K., Q.U.A.R.T.Z., F.L.I.N.T. Only add necessary punctuation such as periods, commas, and capitalization, and use only the context provided."

def generate_corrected_transcript(temperature, system_prompt, audio_file):
response = client.chat.completions.create(
model="gpt-4",
temperature=temperature,
messages=[
{
"role": "system",
"content": system_prompt
},
{
"role": "user",
"content": transcribe(audio_file, "")
}
]
)
return response['choices'][0]['message']['content']

corrected_text = generate_corrected_transcript(0, system_prompt, fake_company_filepath)

あなたはZyntriQix社の役に立つアシスタントです。あなたの仕事は、書き起こされたテキストの綴りの不一致を修正することです。以下の製品名が正しく綴られていることを確認してください:ZyntriQix、Digique Plus、CynapseFive、VortiQore V8、EchoNix Array、OrbitalLink Seven、DigiFractal Matrix、PULSE、RAPT、B.R.I.C.K.、Q.U.A.R.T.Z.、F.L.I.N.T.。必要な句読点(ピリオド、カンマ、大文字化など)のみを加え、提供されたコンテキストのみを使用してください。

GPT4に上記のような役割を設定することで、書き起こし文の修正を行ってくれます。

入力できる文章量が多いので、この方法はWhisperのプロンプトパラメータを使うより拡張性があり、GPT-4Whisperでは不可能な指示やガイドができるので、より便利です。

第3章 「Speech to Text API」の料金

Speech to Text APIの特徴として、料金が安価であることが挙げられます。

料金は音声データ1分あたり0.006ドルです。日本円にして1円にも満たないです。もし60分の音声ファイルだったとしても、たったの60円です。

他の日本語対応の文字起こしサービスだと60分で2,000~3,000円かかるケースもありますが、Open AIのサービスはそれと比べると圧倒的に安価で文字起こしができます。

第4章 まとめ

この記事ではOpenAIのSpeech to Text APIの概要と使い方を詳しく解説しました。

エンジニアでなくてもSpeech to Text APIの概要を知り、Speech to Text APIを使いこなすことができることは非常に大きい事だと思います。

今後GPT Storeが登場すれば収益化も見込めるので今のうちにとことん研究するのが良いかと思います!

執筆者:尾形悠太

サービス紹介資料

【資料無料ダウンロード】

・AI業務活用お役立ち資料

・用途別のおすすめAIをご紹介

・生成AIの業務導入事例も掲載

この記事は役に立ちましたか?

もし参考になりましたら、下記のボタンで教えてください。

関連記事

コメント

この記事へのコメントはありません。