Eleven v4を発表これまでで最も感情豊かなモデル、Eleven v4をご紹介します。 10月12日まで、Creator+には3倍のクレジットが含まれます

コンテンツへ移動

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経由で行われ、話している間に返されます。たとえば「The cat is ...」と言うと、その単語がリアルタイムでストリーミング表示されます。

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

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

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

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

話している間、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に登録して、アプリケーションの開発を始めましょう!

関連記事

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