音声区間検出(VAD)は、ユーザーが話し始めたタイミングや話し終えたタイミングを自動的に検出する Realtime API の機能です。
音声変換の Realtime セッションではデフォルトで有効になっていますが、任意の機能であり、無効にすることもできます。
文字起こしの Realtime セッションでは、ターン検出に対応しているかどうかは文字起こしモデルによって異なります。VAD に対応するモデルではデフォルトで server_vad が使用されますが、gpt-realtime-whisper ではターン検出の設定を省略するか、null に設定する必要があります。
概要
VAD が有効な場合、音声は自動的にチャンクに分割され、Realtime API はユーザーが話し始めたタイミングや話し終えたタイミングを示すイベントを送信します。
input_audio_buffer.speech_started:発話ターンの開始input_audio_buffer.speech_stopped:発話ターンの終了
これらのイベントを使って、アプリケーションで発話ターンを処理できます。たとえば、会話の状態を管理したり、文字起こし結果をチャンク単位で処理したりできます。
session.update クライアントイベントで session.audio.input.turn_detection を設定することで、VAD を構成できます。
VAD には次の 2 つのモードがあります。
server_vad:無音区間に基づいて音声を自動的にチャンクに分割します。semantic_vad:ユーザーが話した内容に基づいて、モデルが発話を終えたと判断した時点で音声をチャンクに分割します。
VAD に対応するセッションとモデルでは、デフォルト値は server_vad です。
各モードの詳細については、以下を参照してください。
サーバー VAD
サーバー VAD は、音声変換セッション、およびターン検出に対応するモデルの文字起こしセッションで使用されるデフォルトのモードです。無音区間を利用して、音声を自動的にチャンクに分割します。
次のプロパティを調整して、VAD の設定を微調整できます。
threshold:モデルが反応するしきい値(0~1)です。しきい値を高くすると、モデルが反応するためにより大きな音量が必要になるため、騒音の多い環境で性能が向上する可能性があります。prefix_padding_ms:VAD が発話を検出した時点より前の音声を含める長さ(ミリ秒)silence_duration_ms:発話の終了を検出するために必要な無音の長さ(ミリ秒)です。値を短くすると、ターンをより早く検出できます。
VAD の設定例を以下に示します。
{
"type": "session.update",
"session": {
"type": "realtime",
"audio": {
"input": {
"turn_detection": {
"type": "server_vad",
"threshold": 0.5,
"prefix_padding_ms": 300,
"silence_duration_ms": 500,
"create_response": true, // only in conversation mode
"interrupt_response": true // only in conversation mode
}
}
}
}
}
文字起こしセッションでも、同じ session.audio.input.turn_detection フィールドを使用します。gpt-realtime-whisper の場合は、ターン検出の設定を省略するか、null に設定してください。
create_response フィールドと interrupt_response フィールドは、音声変換による会話でのみ使用されます。文字起こしセッションでは、VAD は音声のチャンク分割方法だけを制御します。
セマンティック VAD
セマンティック VAD は、意味に基づく分類器を使い、ユーザーが話した内容から発話の終了を検出する新しいモードです。 この分類器は、ユーザーが話し終えた確率に基づいて入力音声をスコアリングします。確率が低い場合、モデルはタイムアウトまで待機しますが、高い場合は待機する必要がありません。 たとえば、ユーザーの音声が「えーと…」と言いよどんで途切れた場合は、明確に言い切った場合よりもタイムアウトが長くなります。
このモードでは、音声変換による会話中にモデルがユーザーの発話を遮ったり、ユーザーが話し終える前に文字起こし結果をチャンクに分割したりする可能性が低くなります。
session.audio.input.turn_detection.type を semantic_vad に設定すると、セマンティック VAD を有効にできます。
次のように設定できます。
{
"type": "session.update",
"session": {
"type": "realtime",
"audio": {
"input": {
"turn_detection": {
"type": "semantic_vad",
"eagerness": "low" | "medium" | "high" | "auto", // optional
"create_response": true, // only in conversation mode
"interrupt_response": true, // only in conversation mode
}
}
}
}
}
文字起こしセッションでも、同じ session.audio.input.turn_detection フィールドを使用します。create_response フィールドと interrupt_response フィールドは会話専用です。
任意の eagerness プロパティでは、タイムアウトまでの最大待機時間を調整して、モデルがユーザーの発話に割り込む積極性を制御できます。文字起こしモードでは、モデルが応答しなくても、音声のチャンク分割方法に影響します。
autoがデフォルト値で、mediumと同じです。lowでは、ユーザーが時間をかけて話せます。highでは、できるだけ早く音声をチャンクに分割します。
会話モードでモデルの応答頻度を上げたい場合や、文字起こしモードで文字起こしイベントをより早く返したい場合は、eagerness を high に設定できます。
一方、会話モードでユーザーが遮られずに話せるようにしたい場合や、文字起こしモードで文字起こし結果のチャンクを大きくしたい場合は、eagerness を low に設定できます。