화자 다이어라이제이션
개요
화자 다이어라이제이션이란
화자 다이어라이제이션(Speaker Diarization)은 여러 사람이 말하는 음성에서 "어느 부분을 누가 말하고 있는지"를 추정하는 기능입니다. 예를 들어, 여러 사람이 참여하는 회의를 한 대의 마이크로 녹음했을 때, 발언마다 화자를 구분하는 데 도움이 됩니다.
다음 그림은 다나카 씨와 야마다 씨가 회의에서 대화하는 모습을 하나의 마이크로 녹음한 예시입니다. 이 음성에는 두 사람의 발언이 하나의 트랙에 기록되어 있습니다.
AmiVoice API의 화자 다이어라이제이션 기능을 사용하면, 아래 그림과 같이 "이 구간은 '스피커0'의 발언", "이 구간은 다른 화자인 '스피커1'의 발언"과 같이 각 발언을 화자별로 구분할 수 있습니다.
이 기능은 개인을 특정하는 것이 아닙니다. 따라서 "스피커0"이 야마다 씨에 해당하고, "스피커1"이 다나카 씨에 해당한다는 점은 애플리케이션 측에서 처리해야 합니다.
API에 대해
화자 다이어라이제이션을 사용하려면 음성 인식 요청 시 옵션 파라미터를 지정합니다. 화자 다이어라이제이션의 결과는 단어 단위로 얻을 수 있습니다. 음성 인식 응답 내의 단어 단위 결과에 label
이 추가되어 "speaker0"나 "speaker1"과 같은 화자를 구분하기 위한 라벨이 설정됩니다.
화자 다이어라이제이션 결과의 예:
"tokens": [
{
"written": "アドバンスト・メディア",
"confidence": 1,
"starttime": 522,
"endtime": 1578,
"spoken": "あどばんすとめでぃあ",
"label": "speaker0"
},
{
"written": "は",
"confidence": 1,
"starttime": 1578,
"endtime": 1834,
"spoken": "は",
"label": "speaker0"
},
{
"written": "、",
"confidence": 0.95,
"starttime": 1834,
"endtime": 2010,
"spoken": "_",
"label": "speaker0"
},
/* 이하 생략 */
사용 방법
화자 다이어라이제이션을 사용하려면 음성 인식 요청 시 다음 표에 있는 요청 파라미터를 설정합니다.
표. 화자 다이어라이제이션의 요청 파라미터
인터페이스 | 활성화를 위한 파라미터 | 조정을 위한 파라미터 |
---|---|---|
동기 HTTP / WebSocket | segmenterProperties 에 useDiarizer=1 설정 | segmenterProperties 의 diarizerTransitionBias , diarizerAlpha |
비동기 HTTP | speakerDiarization=True 설정 | diarizationMinSpeaker , diarizationMaxSpeaker |
요청 시 지정하는 옵션 파라미터는 인터페이스에 따라 다르므로 주의해 주십시오. 얻을 수 있는 결과는 인터페이스와 관계없이 동일한 형식입니다.
요청 파라미터가 다른 이유는 동기 HTTP나 WebSocket 인터페이스와 비동기 HTTP 인터페이스에서 화자 다이어라이제이션의 방식이 다르기 때문입니다. 동기 HTTP나 WebSocket 인터페이스에서는 음성 스트림에 대해 발화 구간을 검출할 때 화자 다이어라이제이션을 수행합니다. 따라서 발화 구간 검출 파라미터인 segmenterProperties
에 대한 설정을 합니다.
반면 비동기 HTTP 인터페이스의 경우 음성 파일 전체가 수중에 있는 상태에서 화자 다이어라이제이션을 수행합니다. 설정은 비동기 HTTP 고유의 파라미터로 수행합니다.
이 섹션에서는 먼저 화자 다이어라이제이션을 활성화하는 방법을 인터페이스별로 설명하고, 그 후 정확도를 개선하기 위한 파라미터에 대해 설명합니다.
요청
화자 다이어라이제이션을 활성화하여 요청하는 방법을 인터페이스별로 설명합니다.
동기 HTTP 인터페이스
화자 다이어라이제이션을 활성화하려면 segmenterProperties
에 useDiarizer=1
을 설정합니다. 동기 HTTP에서는 segmenterProperties
를 요청 파라미터의 d
파라미터에 설정합니다.
예를 들어 설명하겠습니다. 화자 다이어라이제이션을 사용하지 않을 경우, AmiVoice API의 샘플 프로그램에 동봉된 음성을 curl 명령을 사용하여 범용 엔진으로 음성 인식할 때는 다음과 같이 명령을 실행합니다.
curl https://acp-api.amivoice.com/v1/recognize \
-F u={APP_KEY} \
-F d="grammarFileNames=-a-general" \
-F a=@test.wav
화자 다이어라이제이션을 활성화하려면 다음과 같이 합니다.
curl https://acp-api.amivoice.com/v1/recognize \
-F u={APP_KEY} \
-F d="grammarFileNames=-a-general segmenterProperties=useDiarizer=1" \
-F a=@test.wav
이때 파라미터의 순서는 중요하지 않습니다. 또한 다른 파라미터도 함께 설정할 수 있습니다. 동기 HTTP 인터페이스의 요청 방법에 대한 자세한 내용은 음성 인식 요청 보내기를 참조하십시오.
WebSocket 인터페이스
화자 다이어라이제이션을 활성화하려면 segmenterProperties
에 useDiarizer=1
을 설정합니다. WebSocket 인터페이스에서는 segmenterProperties
를 WebSocket으로 연결한 후 처음에 전송하는 s
명령에 설정합니다.
예를 들어 설명하겠습니다. 화자 다이어라이제이션을 사용하지 않을 경우, 범용 엔진으로 음성 인식하려면 다음과 같이 요청합니다.
s 16K -a-general authorization={APPKEY}
화자 다이어라이제이션을 활성화하려면 다음과 같이 파라미터를 추가합니다.
s 16K -a-general authorization={APPKEY} segmenterProperties=useDiarizer=1
s
명령은 음성 형식, 엔진 이름을 반드시 설정해야 하지만, 그 뒤에 따르는 파라미터의 순서는 변경해도 상관없습니다. 또한 다른 파라미터도 함께 설정할 수 있습니다. WebSocket 인터페이스를 사용한 요청 방법에 대해서는 인식 요청 시작을 참조하십시오.
비동기 HTTP 인터페이스
화자 다이어라이제이션을 활성화하려면 요청 파라미터의 d
파라미터에 speakerDiarization=True
를 추가합니다.
예를 들어 설명하겠습니다. 화자 다이어라이제이션을 사용하지 않는 경우, AmiVoice API의 샘플 프로그램에 포함된 음성을 curl 명령을 사용하여 범용 엔진으로 음성 인식하는 경우 다음과 같이 명령을 실행합니다.
curl https://acp-api-async.amivoice.com/v1/recognitions \
-F u={APP_KEY} \
-F d="grammarFileNames=-a-general" \
-F a=@test.wav
화자 다이어라이제이션을 활성화하려면 다음과 같이 합니다.
curl https://acp-api-async.amivoice.com/v1/recognitions \
-F u={APP_KEY} \
-F d="grammarFileNames=-a-general speakerDiarization=True" \
-F a=@test.wav
이때 파라미터의 순서는 중요하지 않습니다. 또한 다른 파라미터도 함께 설정할 수 있습니다. 비동기 HTTP 인터페이스의 요청 방법에 대해서는 1. 음성 인식 작업 생성하기를 참조하십시오.
응답
화자 다이어라이제이션을 활성화했을 때의 응답에 대해 설명합니다.
화자 다이어라이제이션의 결과는 단어 단위의 결과인 token
에 label
로 얻어집니다. label
은 speaker0, speaker1, speaker2 ... speakerN과 같이 speaker에 이어 번호로 화자를 구분하는 문자열입니다.
화자 라벨의 번호는 결번할 수도 있습니다. 예를 들어, 3명의 화자 라벨로 speaker0, speaker1, speaker3과 같이 출력될 수 있습니다. 번호가 0부터 순서대로 나타나는 것을 전제로 하지 마십시오.
화자 다이어라이제이션 결과의 예:
"tokens": [
{
"written": "アドバンスト・メディア",
"confidence": 1,
"starttime": 522,
"endtime": 1578,
"spoken": "あどばんすとめでぃあ",
"label": "speaker0"
},
{
"written": "は",
"confidence": 1,
"starttime": 1578,
"endtime": 1834,
"spoken": "は",
"label": "speaker0"
},
{
"written": "、",
"confidence": 0.95,
"starttime": 1834,
"endtime": 2010,
"spoken": "_",
"label": "speaker0"
},
/* 이하 생략 */
음성 인식 결과의 형식에 대해서는 음성 인식 결과를 참조하십시오.
화자 다이어라이제이션을 활성화하면 응답에 시간이 걸릴 수 있습니다. 화자 라벨을 사용하지 않는 경우에는 비활성화해 두십시오.
정확도를 향상시키기 위한 조정 파라미터
화자 다이어라이제이션의 결과를 조정하기 위한 파라미터를 설명합니다. 앞서 언급한 "표. 화자 다이어라이제이션의 요청 파라미터"에 요약한 대로 인터페이스에 따라 조정할 수 있는 파라미터가 다릅니다.
화자 검출 감도 조정
동기 HTTP와 WebSocket 인터페이스를 사용하는 경우, segmenterProperties
속성의 두 가지 파라미터를 사용하여 화자 검출 감도를 조정할 수 있습니다.
파라미터 | 지정 가능한 값 | 대략적인 범위 | 기본값 | 설명 |
---|---|---|---|---|
diarizerAlpha | 0 이상 | 1e-100~1e50 | 1 | 새로운 화자의 출현 용이성 |
diarizerTransitionBias | 0 이상 1 미만 | 1e-150~1e-10 | 1e-40 8k의 경우는 1e-20 | 화자 전환 용이성 |
1e는 10의 거듭제곱을 나타냅니다. 예를 들어, 1e-100은 을 나타냅니다. diarizerAlpha=1e-100
과 같이 설정하십시오. 아래의 요청 샘플도 참고해 주십시오.