기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
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
에는 항상 하나 이상의 항목이 포함됩니다. 항목이 두 개 이상 포함된 경우 가장 신뢰할 수 있는 항목은 목록의 첫 번째입니다. 대부분의 경우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
는 콘텐츠의 ‘시기’입니다. 이를 통해 여러 사용자 참여한 사용자 속성이 지정된 트랜스크립션을 말한 단어 순서에 맞게 글자 그대로 렌더링할 수 있습니다. -
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에 이벤트 핸들러 등록
다음 예제는 JavaScript용 Amazon Chime SDK 클라이언트 라이브러리를 사용합니다. 하지만 패턴은 모든 Amazon Chime SDK에서 동일합니다.
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););