메인 콘텐츠로 건너뛰기

화자 다이어라이제이션

개요

화자 다이어라이제이션이란

화자 다이어라이제이션(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 / WebSocketsegmenterPropertiesuseDiarizer=1 설정segmenterPropertiesdiarizerTransitionBias, diarizerAlpha
비동기 HTTPspeakerDiarization=True 설정diarizationMinSpeaker, diarizationMaxSpeaker
노트

요청 시 지정하는 옵션 파라미터는 인터페이스에 따라 다르므로 주의해 주십시오. 얻을 수 있는 결과는 인터페이스와 관계없이 동일한 형식입니다.

요청 파라미터가 다른 이유는 동기 HTTP나 WebSocket 인터페이스와 비동기 HTTP 인터페이스에서 화자 다이어라이제이션의 방식이 다르기 때문입니다. 동기 HTTP나 WebSocket 인터페이스에서는 음성 스트림에 대해 발화 구간을 검출할 때 화자 다이어라이제이션을 수행합니다. 따라서 발화 구간 검출 파라미터segmenterProperties에 대한 설정을 합니다.

반면 비동기 HTTP 인터페이스의 경우 음성 파일 전체가 수중에 있는 상태에서 화자 다이어라이제이션을 수행합니다. 설정은 비동기 HTTP 고유의 파라미터로 수행합니다.

이 섹션에서는 먼저 화자 다이어라이제이션을 활성화하는 방법을 인터페이스별로 설명하고, 그 후 정확도를 개선하기 위한 파라미터에 대해 설명합니다.

요청

화자 다이어라이제이션을 활성화하여 요청하는 방법을 인터페이스별로 설명합니다.

동기 HTTP 인터페이스

화자 다이어라이제이션을 활성화하려면 segmenterPropertiesuseDiarizer=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 인터페이스

화자 다이어라이제이션을 활성화하려면 segmenterPropertiesuseDiarizer=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. 음성 인식 작업 생성하기를 참조하십시오.

응답

화자 다이어라이제이션을 활성화했을 때의 응답에 대해 설명합니다. 화자 다이어라이제이션의 결과는 단어 단위의 결과인 tokenlabel로 얻어집니다. 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 속성의 두 가지 파라미터를 사용하여 화자 검출 감도를 조정할 수 있습니다.

파라미터지정 가능한 값대략적인 범위기본값설명
diarizerAlpha0 이상1e-100~1e501새로운 화자의 출현 용이성
diarizerTransitionBias0 이상 1 미만1e-150~1e-101e-40
8k의 경우는 1e-20
화자 전환 용이성
노트

1e는 10의 거듭제곱을 나타냅니다. 예를 들어, 1e-100은 1010010^{-100}을 나타냅니다. diarizerAlpha=1e-100과 같이 설정하십시오. 아래의 요청 샘플도 참고해 주십시오.

diarizerAlpha

새로운 화자의 출현 용이성을 제어하는 파라미터입니다. 큰 값을 지정할수록 새로운 화자가 출현하기 쉬워지고, 작은 값을 지정할수록 새로운 화자가 출현하기 어려워집니다.

diarizerAlpha=0은 특별한 경우로, 1e0, 즉 1이 지정된 것으로 처리됩니다. 아무것도 설정하지 않으면 diarizerAlpha=0이 지정된 것으로 간주됩니다.

  • 결과의 화자 수가 실제보다 너무 많은 경우, diarizerAlpha를 기본값(1e0)에서 1e-10, 1e-20 등으로 줄여보고 개선되는지 확인하십시오.
  • 결과의 화자 수가 실제보다 너무 적은 경우, diarizerAlpha를 기본값(1e0)에서 1e10, 1e20 등으로 늘려보고 개선되는지 확인하십시오.
diarizerTransitionBias

화자 전환 용이성을 제어하는 파라미터입니다. 큰 값을 지정할수록 화자가 전환되기 쉬워지고, 작은 값을 지정할수록 화자가 전환되기 어려워집니다.

diarizerTransitionBias=0은 특별한 경우로, 1e-40이 지정된 것으로 처리됩니다. 단, 8kHz 음성에 대응하는 엔진, 예를 들어 범용 엔진(-a-general)을 사용하고 샘플링 레이트가 8k인 음성을 전송한 경우에는 1e-20이 지정된 것으로 처리됩니다. 아무것도 설정하지 않으면 diarizerTransitionBias=0이 지정된 것으로 간주됩니다.

  • 실제로는 같은 사람이 계속 말하고 있음에도 불구하고 여러 화자로 검출되는 경향이 있는 경우, diarizerTransitionBias를 기본값에서 1e-50, 1e-60 등으로 줄여보고 개선되는지 확인하십시오.
  • 여러 사람이 말하고 있음에도 불구하고 한 명의 화자가 계속되는 경우, diarizerTransitionBias를 기본값에서 1e-10 등으로 늘려보고 개선되는지 확인하십시오.
설정 예

화자 다이어라이제이션을 활성화하고 diarizerAlpha를 1e-20, diarizerTransitionBias를 1e-10으로 설정한 예입니다. segmenterProperties에 여러 파라미터를 설정하므로 각 파라미터는 공백으로 구분합니다.

curl 명령어를 사용한 동기 HTTP 인터페이스 설정 예
curl https://acp-api.amivoice.com/v1/recognize \
-F u={APP_KEY} \
-F d="grammarFileNames=-a-general segmenterProperties=useDiarizer=1%20diarizerAlpha=1e-20%20diarizerTransitionBias=1e-10" \
-F a=@test.wav

segmenterProperties에 설정한 파라미터의 공백을 %20으로 URL 인코딩합니다.

WebSocket 인터페이스 설정 예
s 16K -a-general authorization={APPKEY} segmenterProperties="useDiarizer=1 diarizerAlpha=1e-20 diarizerTransitionBias=1e-10"

segmenterProperties에 설정한 파라미터 전체를 "..."와 같이 큰따옴표로 둘러싸야 합니다.

화자 수 지정

비동기 HTTP 인터페이스를 사용하는 경우, 음성에 포함된 화자 수의 범위를 좁힘으로써 화자 다이어라이제이션의 정확도를 개선할 수 있습니다.

파라미터지정 가능한 값기본값설명
diarizationMinSpeaker1~201예상되는 최소 화자 수
diarizationMaxSpeaker1~2010예상되는 최대 화자 수
diarizationMinSpeaker

음성에 포함될 것으로 예상되는 최소 인원 수입니다.

diarizationMaxSpeaker

음성에 포함될 것으로 예상되는 최대 인원 수입니다.

만약 음성에 포함된 화자의 수를 사전에 알 수 있다면, 정확하게 설정해 두는 것으로 추정의 정확도를 상당히 향상시킬 수 있습니다. 예를 들어, 곧 시작할 회의에 참가하는 인원이 5명이라는 것을 알고 있다면, 요청 시 d 파라미터에 diarizationMinSpeaker=5diarizationMaxSpeaker=5를 추가합니다.

설정 예

화자 다이어라이제이션을 활성화하고 diarizationMinSpeakerdiarizationMaxSpeaker를 5로 설정한 예입니다.

curl 명령어를 사용한 비동기 HTTP 인터페이스 설정 예
curl https://acp-api-async.amivoice.com/v1/recognitions \
-F u={APP_KEY} \
-F d="grammarFileNames=-a-general speakerDiarization=True diarizationMinSpeaker=5 diarizationMaxSpeaker=5" \
-F a=@test.wav

정확도 향상을 위한 팁

화자 다이어라이제이션의 정확도를 개선하기 위한 팁입니다.

화자 수 설정

비동기 HTTP 인터페이스의 경우 화자 수 지정이 가능합니다. 가능하다면 음성에 포함된 화자의 수를 사전에 설정해 두는 것으로 정확도를 향상시킬 수 있습니다.

음질 개선

화자 다이어라이제이션도 음질이 나빠질수록 정확도가 떨어지는 경향이 있습니다. 노이즈나 에코가 들어가지 않도록 하는 등 녹음 환경을 개선함으로써 정확도를 개선할 수 있는 가능성이 있습니다.

여러 화자의 동시 발화 피하기

여러 화자가 동시에 발화하면 화자를 추정하기가 어려워집니다. 애플리케이션의 용도에 따라 어려울 수 있지만, 사용자가 동시에 말하지 않도록 공들일 수 있다면 정확도는 개선됩니다.

주의 사항

여러 화자가 동시에 발화한 경우

여러 화자가 동시에 발화하는 구간에 대해서는 특정 단일 화자를 추정하지 않는 것이 정답으로 여겨지지만, 어느 하나의 화자 라벨 "speakerN"을 반환합니다.

노이즈

음성 파일에 대해 먼저 발화인지 여부를 판단하고, 발화로 감지된 구간에 대해 음성 인식과 화자 다이어라이제이션이 수행됩니다. 만약 발화 감지 시 노이즈 등이 잘못 발화 구간으로 간주된 경우에 대해서는 어느 하나의 화자 라벨 "speakerN"을 반환합니다.

화자 라벨은 요청마다 독립적

화자 라벨은 요청마다 독립적입니다. 예를 들어, 어떤 회의에서 녹음한 음성을 전반부와 후반부로 나누어 2회의 요청을 하면 2개의 응답을 얻게 되지만, 각 응답에 포함된 화자 라벨이 같은 화자를 가리키는 것은 아닙니다. 애플리케이션은 서로 다른 요청으로 얻은 응답마다 화자 라벨과 화자의 대응을 수행해야 합니다. 또는 하나의 요청이 되도록 음성을 전송하십시오.

제한 사항

구분할 수 있는 최대 인원 수

화자는 최대 20명까지 구분할 수 있습니다.

비동기 HTTP의 경우

화자 다이어라이제이션을 활성화하면 전송할 수 있는 음성의 길이가 최대 3시간이 됩니다. 그보다 긴 음성 데이터를 전송하면 요청 시 오류를 받게 됩니다.

화자 다이어라이제이션을 사용하지 않는 경우, 비동기 HTTP 인터페이스로 전송할 수 있는 음성은 크기로 제한되며, 약 2.14GB의 음성 데이터까지 전송할 수 있습니다.

샘플 프로그램

AmiVoice API의 비동기 HTTP 인터페이스에서 화자 다이어라이제이션을 사용한 Windows 애플리케이션

위의 샘플 애플리케이션 작성 방법을 AmiVoice Tech Blog에서 해설하고 있습니다. 【HttpClient】C#에서 AmiVoice의 화자 다이어라이제이션을 사용하는 방법을 참조하십시오.