文字起こしとコミット戦略

このガイドでは、ElevenLabsリアルタイムスピーチtoテキストAPIで文字起こしとコミット戦略を扱う方法を紹介します。

ハウツーガイド · クライアント側または サーバー側 ストリーミングガイドを完了していることを前提としています。

概要

オーディオを文字起こしすると、部分的な文字起こしとコミット済みの文字起こしを受け取ります。

  • 部分的な文字起こし:文字起こしの中間結果
  • コミット済みの文字起こし:「commit」メッセージを受信した際に送信される、文字起こしセグメントの最終結果です。1つのセッションに複数のコミット済み文字起こしを含めることができます。

コミット済み文字起こしには、オプションで単語レベルのタイムスタンプを含められます。これは「include timestamps」オプションをtrueに設定した場合にのみ受信されます。

# Initialize the connection
connection = await elevenlabs.speech_to_text.realtime.connect(RealtimeUrlOptions(
model_id="scribe_v2_realtime",
include_timestamps=True, # Include this to receive the RealtimeEvents.COMMITTED_TRANSCRIPT_WITH_TIMESTAMPS event with word-level timestamps
))

コミット戦略

WebSocket経由でオーディオチャンクを送信する場合、文字起こしセグメントは手動コミットまたは音声アクティビティ検出(VAD)の2つの方法でコミットできます。

手動コミット

手動コミット戦略では、文字起こしセグメントをコミットするタイミングを制御できます。これはデフォルトで使用される戦略です。セグメントをコミットすると、コンテキストを失うことなく、処理済みの蓄積された文字起こしがクリアされ、新しいセグメントが開始されます。レイテンシーを改善するには、20〜30秒ごとにコミットすることをおすすめします。手動でコミットしない場合でも、蓄積されたオーディオが約36秒に達すると、モデルが自動的にコミットします。

最適な結果を得るには、無音の区間やターンモデルなどの論理的な区切りでコミットしてください。

文字起こしの処理は、最初の2秒間のオーディオが送信された後に開始されます。
await connection.send({
"audio_base_64": audio_base_64,
"sample_rate": 16000,
})
# When ready to finalize the segment
await connection.commit()

短時間に連続して何度も手動コミットすると、モデルのパフォーマンスが低下することがあります。

以前のテキストコンテキストを送信する

文字起こし用のオーディオを送信する際、最初のオーディオチャンクとともに以前のテキストコンテキストを送信すると、モデルが発話のコンテキストを理解しやすくなります。これは次のような場合に便利です。

  • 会話型AIのユースケースにおけるエージェントテキスト:モデルが会話のコンテキストをより理解しやすくなり、より良い文字起こしを生成できます。
  • ネットワークエラー後の再接続:以前のテキストを手がかりとして、モデルが文字起こしを継続できます。
  • 一般的なコンテキスト情報:文字起こしの内容についての短い説明は、モデルがコンテキストを理解するのに役立ちます。

previous_textコンテキストを送信できるのは、最初のオーディオチャンクを connection.send()で送信する場合のみです。後続のチャンクで送信するとエラーになります。以前のテキストは 50文字未満の場合に最も効果的です。

await connection.send({
"audio_base_64": audio_base_64,
"previous_text": "The previous text context",
})

音声アクティビティ検出(VAD)

VAD戦略では、文字起こしエンジンが音声と無音のセグメントを自動的に検出します。無音のしきい値に達すると、文字起こしエンジンが文字起こしセグメントを自動的にコミットします。

クライアント側インテグレーションでマイクからのオーディオを文字起こしする場合は、VAD戦略の使用をおすすめします。

import { Scribe, AudioFormat, CommitStrategy } from "@elevenlabs/client";
const connection = Scribe.connect({
token: "sutkn_1234567890",
modelId: "scribe_v2_realtime",
audioFormat: AudioFormat.PCM_16000,
commitStrategy: CommitStrategy.VAD,
vadSilenceThresholdSecs: 1.5,
vadThreshold: 0.4,
minSpeechDurationMs: 100,
minSilenceDurationMs: 100,
});

対応オーディオ形式

形式サンプルレート説明
pcm_80008 kHz16ビットPCM、リトルエンディアン
pcm_1600016 kHz16ビットPCM、リトルエンディアン(推奨)
pcm_2205022.05 kHz16ビットPCM、リトルエンディアン
pcm_2400024 kHz16ビットPCM、リトルエンディアン
pcm_4410044.1 kHz16ビットPCM、リトルエンディアン
pcm_4800048 kHz16ビットPCM、リトルエンディアン
ulaw_80008 kHz8ビットμ-lawエンコーディング

ベストプラクティス

オーディオ品質

  • 最適な品質と帯域幅のバランスを得るには、16kHzのサンプルレートを使用してください。
  • バックグラウンドノイズを最小限に抑えた、クリアなオーディオ入力を使用してください。
  • クリッピングを避けるため、適切なマイクゲインを使用してください。
  • 現時点ではモノラルオーディオのみ対応しています。

チャンクサイズ

  • スムーズなストリーミングのため、長さが0.1〜1秒のオーディオチャンクを送信してください。
  • チャンクが小さいほどレイテンシーは低くなりますが、オーバーヘッドは増加します。
  • チャンクが大きいほど効率は上がりますが、レイテンシーが生じることがあります。

次のステップ