Eleven v4を発表これまでで最も感情豊かなモデル、Eleven v4をご紹介します。

コンテンツへ移動

Scribe v2 Realtimeの仕組み

執筆者
Tadas Petra
公開日
最終更新日

聴くこの記事を聴く

Scribe v2 Realtimeは、非常に高速なスピーチtoテキストモデルです。ライブ文字起こしに利用でき、速度と品質の組み合わせにより、これまで不可能だったユースケースを実現します。

たとえば、Scribe v2 RealtimeとChrome Translator APIを使って、このリアルタイム言語翻訳ツールを構築できました。

Live transcription on the left and committed transcripts on the right in a list

このデモのステップごとのチュートリアルは、こちらでご覧いただけます。このガイドでは、Scribe v2 Realtimeの仕組みを高レベルで解説します。

モデル

ElevenLabsでは、オーディオの文字起こし向けにScribe v2とScribe v2 Realtimeの2つのモデルを提供しています。

Optimized For
Scribe v2
Accuracy
Scribe v2 Realtime
Ultra low latency
Use Case
Scribe v2
Batch transcription, subtitling, and captioning at scale.
Scribe v2 Realtime
Voice agents, meeting notetakers, and other live applications.

Scribe v2は非同期で行える文字起こしに最適です。一方、文字起こしをライブで行う必要がある場合はScribe v2 Realtimeを使用します。

ライブ言語翻訳アプリケーションには、Scribe v2 Realtimeが最適です。

API

このモデルを使用するには、スピーチtoテキストAPIを使用する必要があります。開始するには、次の2つの手順を実行します。

  1. Scribeインスタンスを初期化する
  2. APIに接続する

このAPIを呼び出す場所によって、初期化方法は異なります。サーバーサイドから呼び出す場合は、APIキーで直接初期化し、そのインスタンスを使ってScribe v2 Realtimeに接続できます。

ただし、APIキーをクライアントに公開することは、大きなセキュリティリスクです。そのため、クライアントサイドでストリーミングする場合は、使い捨てトークンで初期化する必要があります。

APIキーを保護するため、このトークンはサーバーサイドで生成する必要があります。

今回はReactアプリケーションを構築するため、トークン方式を使用します。このトークンは接続時に渡されるため、Scribeインスタンスの作成は簡単です。

import { useScribe } from "@elevenlabs/react";

function MyComponent() {
  const scribe = useScribe({
    modelId: "scribe_v2_realtime",
  });
  
  //...
}

Scribe v2 Realtimeへの接続

適切に初期化できたら、Scribe v2 Realtimeに接続できます。React言語翻訳プロジェクトではクライアントサイドストリーミングを使用したため、バックエンドから使い捨てトークンを取得する必要がありました。このトークンは、APIに接続するたびに生成して渡す必要があります。

const handleStart = async () => {
  const token = await fetchTokenFromServer();

  await scribe.connect({
    token,
    microphone: {
	  echoCancellation: true,
	  noiseSuppression: true,
    },
  });
};


コミット戦略

Scribe v2 Realtimeでは、文字起こしには部分文字起こしとコミット済み文字起こしの2種類があります。

部分文字起こしは「ライブ文字起こし」です。WebSocket経由で文字起こしが行われ、話している間に結果が返されます。たとえば「猫は…」と言うと、その言葉がリアルタイムでストリーミング表示されます。

もう一方は、コミット済み文字起こしです。文字起こしはセグメント単位で処理されます。いつ、どのように文字起こしをコミットするかによって、文字起こしのセグメント分けが決まります。そのため、コミット戦略を定義する必要があります。

コミット戦略には2つの選択肢があります。1つ目は手動で、文字起こしをいつコミットするかを完全に制御できます。無音時や、ターンモデルのような論理的な区切りでコミットするのがベストプラクティスです。

もう1つは、Scribe v2 Realtimeに音声アクティビティ検出(VAD)を使って、適切なセグメントを自動判定させる方法です。このアプローチでは、発話区間と無音区間を自動的に検出します。無音のしきい値に達すると、文字起こしエンジンが文字起こしセグメントを自動的にコミットします。

なぜコミット戦略が必要なのでしょうか?

話している間、Scribe v2 Realtimeは単語ごとに文字起こしを行います。そのため、「I scream...」と言うと、「Ice cream...」と認識される場合があります。しかし、「I scream every time I see a spider in the bathroom,」というセグメント全体の文脈があれば、出力はより正確になります。

つまり、部分文字起こしはリアルタイムで表示でき、コミット済み文字起こしは会話履歴をより正確に文字起こししたものになります。

文字起こしを表示する

Scribe v2 Realtimeに接続すると、文字起こしが開始されます。partialTranscriptプロパティとcommittedTranscriptsプロパティを使って、文字起こしにアクセスできます。

<div>
  <button onClick={handleStart} disabled={scribe.isConnected}>
	Start Recording
  </button>
  <button onClick={scribe.disconnect} disabled={!scribe.isConnected}>
	Stop
  </button>

  {scribe.partialTranscript && <p>Live: {scribe.partialTranscript}</p>}

  <div>
	{scribe.committedTranscripts.map((t) => (
	  <p key={t.id}>{t.text}</p>
	))}
  </div>
</div>

partialTranscriptは、現在文字起こし中のセグメントのリアルタイム文字起こしです。committedTranscriptは会話履歴で、Scribe v2 Realtimeへの接続中にコミットされたセグメントのリストです。

AIで翻訳する

これだけで、会話のリアルタイム文字起こしを取得できます。ここから、優れたUIを追加したり、ライブ言語翻訳などの機能を加えたりできます。

デモのリアルタイム言語翻訳ツールを作成するには、文字起こしをChrome AI Translator APIに渡し、出力をリアルタイムで表示します。

構築を始める

お読みいただき、ありがとうございました!ElevenLabsに登録して、アプリケーションの構築を始めましょう!

執筆者

Tadas Petraは、ElevenLabsのプロダクトスイートを使った開発をサポートするデベロッパーリレーションズエンジニアです。また、デベロッパー向け教育プラットフォーム「Hungrimind」の創設者でもあります。以前はAgoraでリードデベロッパーアドボケイト、Zero To Masteryでインストラクターを務めていました。

関連記事

最高品質のAIオーディオで創造する