기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
트랜스크립션 메시지 이해
Amazon Chime SDK 서비스는 데이터 메시지로 TranscriptEvent
객체를 전송하여 참석자와 트랜스크립션 정보를 공유합니다. TranscriptEvent
는 Transcript
또는 TranscriptionStatus
를 전달합니다.
Transcript
에는 타임스탬프가 표시되고 사용자 속성이 지정된 단어 및 문장 부호를 포함한 결과가 있습니다. 결과는 ‘부분적’일 수 있으며, 이 경우 시스템은 보통 후속 TranscriptEvent
에서 이를 업데이트합니다. 이렇게 하면 트랜스크립션을 빠르게 확인하고 나중에 필요에 따라 인라인 업데이트를 적용할 수 있습니다.
TranscriptStatus
는 다음 섹션의 예제에 나열된 TranscriptionStatusType
이벤트 중 하나를 전달할 수 있습니다.
최신 버전의 Amazon Chime에는 일반적인 처리를 위한 추가 데이터 유형과 도우미 함수가 SDKs 포함되어 있습니다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
에는 항상 하나 이상의 항목이 포함됩니다. 항목이 두 개 이상 포함된 경우 가장 신뢰할 수 있는 항목은 목록의 첫 번째입니다. 대부분의 경우transcription.results[i].alternatives
의 첫 번째 항목을 취하고 나머지 항목을 무시할 수 있습니다.transcription.results[i].alternatives[j].items
에는 각 단어 또는 문장 부호에 대한 항목이 포함됩니다.transcription.results[i].alternatives[j].items[k].
의 콘텐츠는 말한 내용입니다.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
에서는 향후 일부 결과 업데이트에서 현재 단어를 변경할지 여부를 나타냅니다. 이 값은 요청에서EnablePartialResultsStabilization
을true
로 설정하여 일부 결과 안정화 기능을 활성화한 경우에만 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 에서 일관됩니다SDKs.
RealtimeController
및 RealtimeControllerFacade
의 TranscriptionController
에는 TranscriptionEvents
를 처리하는 핸들러를 추가하기 위한 특정 함수가 포함되어 있습니다.
/** * Returns the [[TranscriptionController]] for this real-time controller. */ readonly transcriptionController?: TranscriptionController;
TranscriptionController
에는 TranscriptionEvent
콜백에 대한 구독 및 구독 취소를 관리하는 두 가지 함수가 있습니다.
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
사용
DefaultTranscriptionController
라는 TranscriptionController
인터페이스의 기본 구현을 제공하고 있습니다. DefaultRealtimeController
및 DefaultAudioVideoFacade
에서의 기본 구현은 DefaultTranscriptionController
객체를 반환합니다.
/** get transcriptionController(): TranscriptionController { return this.realtimeController.transcriptionController; }
또한 DefaultRealtimeController
는 생성자에서 선택 사항인 TranscriptionController
객체를 가져옵니다. 그러면 DefaultTranscriptionController
동작을 덮어쓸 수 있습니다. 개발자 애플리케이션은 AudioVideoFacade
객체의 TranscriptionController
객체를 통해 하나 이상의 콜백을 구독 및 구독 취소합니다.
// Subscribe this.audioVideo.transcriptionController?.subscribeToTranscriptEvent(this.transcriptEventHandler); // Unsubscribe this.audioVideo.transcriptionController?.unsubscribeFromTranscriptEvent(this.transcriptEventHandler););