翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
文字起こしメッセージ
Amazon Chime SDK サービスは、データメッセージで TranscriptEvent
オブジェクトを送信することにより、文字起こし情報を参加者と共有します。TranscriptEvent
は Transcript
または TranscriptionStatus
を配信します。
Transcript
には、タイムスタンプとユーザー属性が付いた単語および句読点を含む結果が含まれます。結果が「部分的」なものになることもありますが、その場合は通常、後続の TranscriptEvent
で更新されます。これにより、文字起こしをすばやく確認することができ、必要に応じて後でインラインで更新を適用することもできます。
TranscriptStatus
は、次のセクションの例にリストされている TranscriptionStatusType
イベントのいずれかを配信します。
新しいバージョンの Amazon Chime SDK には、TranscriptEvent
の一般的な処理に使用する追加のデータ型とヘルパー関数が含まれています。
TranscriptEvent
この例は、典型的な文字起こしイベントを示しています。
type TranscriptEvent = Transcript | TranscriptionStatus; export class TranscriptEventConverter { static from(dataMessage: DataMessage): TranscriptEvent[] { // convert DataMessage to TranscriptEvents return ... } } export default class TranscriptionStatus { type: TranscriptionStatusType; eventTimeMs: number; transcriptionRegion: string; transcriptionConfiguration: string; message?: string; } enum TranscriptionStatusType { STARTED = 'started', INTERRUPTED = 'interrupted', RESUMED = 'resumed', STOPPED = 'stopped', FAILED = 'failed', } export default class Transcript { results: TranscriptResult[]; // at least one } export class TranscriptResult { resultId: string; isPartial: boolean; startTimeMs: number; endTimeMs: number; alternatives: TranscriptAlternative[]; // most confident first } export default class TranscriptAlternative { items: TranscriptItem[]; // in start time order transcript: string; //concatenated transcript items entities?: TranscriptEntity[]; } export default class TranscriptItem { type: TranscriptItemType; startTimeMs: number; endTimeMs: number; attendee: Attendee; content: string; vocabularyFilterMatch?: boolean; confidence?: number; stable?: boolean; } enum TranscriptItemType { PRONUNCIATION = 'pronunciation',// content is a word PUNCTUATION = 'punctuation',// content is punctuation } export default class TranscriptEntity { category: string; confidence: number; content: string; endTimeMs: number; startTimeMs: number; type?: string; } // This is an existing SDK model export default class Attendee { attendeeId: string; externalUserId: string; }
データのガイドライン
これらのガイドラインに留意しながら作業を進めてください。
transcription.results
には複数の結果が含まれる場合があります。transcription.results[i].isPartial = true
の場合、結果全体が更新される可能性があります。更新される可能性は高いですが、確実に更新されるわけではありません。更新後もtranscript.result[i].resultId
は同じです。信頼度の低い文字起こしを回避したい場合は、部分的な結果を完全にスキップできます。低レイテンシーの結果が必要な場合は、いったん部分的な結果を表示してから、後で更新が到着したときに完全に上書きすることができます。transcription.results[i].alternatives
には、常に少なくとも 1 つのエントリが含まれます。複数のエントリが含まれる場合は、最も信頼度の高いエントリがリストの先頭に表示されます。ほとんどの場合、transcription.results[i].alternatives
の最初のエントリを採用し、その他のエントリは無視できます。transcription.results[i].alternatives[j].items
には、各単語または句読点のエントリが含まれます。transcription.results[i].alternatives[j].items[k].
content には、発言内容が含まれます。transcription.results[i].alternatives[j].items[k].attendee
は、コンテンツのユーザー属性 (誰) です。transcription.results[i].alternatives[j].items[k].startTimeMs
は、コンテンツの「いつ」です。これにより、単語が話された順序で、異なるユーザー間でユーザー属性の文字起こしを word-by-word レンダリングできます。transcription.results[i].alternatives[j].items[k].endTimeMs
フィールドは通常は無視して構いませんが、誰がいつ何を言ったかを完全に把握できるように提供されています。transcription.results[i].alternatives[j].items[k].vocabularyFilterMatch
は、コンテンツがフィルター内の単語と一致した場合は true、それ以外の場合は false です。transcription.results[i].alternatives[j].items[k].confidence
は、0~1 の値です。これは、項目のコンテンツが発言と正しく一致しているというエンジンの信頼度を示します。0 が最も低い信頼度、1 が最も高い信頼度を示します。transcription.results[i].alternatives[j].items[k].stable
は、現在の単語が部分的な結果の更新によって将来的に変更されるかどうかを示します。この値が true になるのは、リクエストでEnablePartialResultsStabilization
をtrue
に設定して部分的な結果の安定化機能を有効にした場合だけです。transcription.results[i].alternatives[j].entities
には、コンテンツ識別またはリダクション機能によって検出された各エンティティのエントリが含まれます。このリストには、コンテンツ識別またはリダクションを有効にした場合にのみ値が入ります。エンティティは、個人情報や個人の健康情報などのデータである可能性があります。エンティティを使用して、文字起こし中に関心のある単語に対して、強調表示したり、アクションを実行したりすることができます。transcription.results[i].alternatives[j].entities[k].category
はエンティティのカテゴリです。これは、リクエストで提供されたコンテンツ識別またはリダクションのタイプ (「PII」や「PHI」などの) と同じです。transcription.results[i].alternatives[j].entities[k].confidence
は、特定のコンテンツが本当にエンティティであることに対するエンジンの信頼度を示します。これは、単語そのものの正確さに対するエンジンの信頼度を示す項目レベルの信頼度とは異なることに注意してください。transcription.results[i].alternatives[j].entities[k].content
は、エンティティを構成する実際のテキストです。これは、複数の項目 (住所など) である場合もあります。transcription.results[i].alternatives[j].entities[k].startTimeMs
は、当該エンティティの発言が開始された時刻をキャプチャします。transcription.results[i].alternatives[j].entities[k].endTimeMs
は、当該エンティティの発言が終了した時刻をキャプチャします。transcription.results[i].alternatives[j].entities[k].type
は、文字起こしエンジンでのみサポートされ、エンティティのサブタイプを提供します。これらは、`ADDRESS`、`CREDIT_DEBIT_NUMBER` などの値です。
のイベントハンドラーの登録 TranscriptEvents
次の例では、 の Amazon Chime SDK クライアントライブラリを使用します JavaScript。ただし、パターンはすべての Amazon Chime SDK で一貫しています。
RealtimeController
および RealtimeControllerFacade
の TranscriptionController
には、TranscriptionEvents
を処理するハンドラーを追加するための特定の関数が含まれています。
/** * Returns the [[TranscriptionController]] for this real-time controller. */ readonly transcriptionController?: TranscriptionController;
TranscriptionController
には、TranscriptionEvent
コールバックのサブスクライブとサブスクライブ解除を管理する 2 つの関数があります。
import TranscriptEvent from './TranscriptEvent'; export default interface TranscriptionController { /** * Subscribe a callback to handle received transcript event */ subscribeToTranscriptEvent(callback: (transcriptEvent: TranscriptEvent) => void): void; /** * Unsubscribe a callback from receiving transcript event */ unsubscribeFromTranscriptEvent(callback: (transcriptEvent: TranscriptEvent) => void): void; }
オプションの TranscriptionController
を使用する
TranscriptionController
インターフェイスのデフォルト実装 (DefaultTranscriptionController
という名前) が用意されています。DefaultRealtimeController
および DefaultAudioVideoFacade
のデフォルト実装では、DefaultTranscriptionController
オブジェクトが返されます。
/** get transcriptionController(): TranscriptionController { return this.realtimeController.transcriptionController; }
DefaultRealtimeController
では、そのコンストラクターにオプションの TranscriptionController
オブジェクトを指定することもできます。これにより、DefaultTranscriptionController
の動作をオーバーライドできます。デベロッパーアプリケーションは、AudioVideoFacade
オブジェクトの TranscriptionController
オブジェクトを通じて、1 つ以上のコールバックをサブスクライブまたはサブスクライブ解除します。
// Subscribe this.audioVideo.transcriptionController?.subscribeToTranscriptEvent(this.transcriptEventHandler); // Unsubscribe this.audioVideo.transcriptionController?.unsubscribeFromTranscriptEvent(this.transcriptEventHandler););