사용자 지정 음성 표시 텍스트 서식 학습 데이터를 준비하는 방법

Azure AI Speech Service는 음성 인식과 표시 텍스트 서식의 두 가지 구성 요소로 볼 수 있습니다. 음성 인식은 오디오를 어휘 텍스트로 기록한 다음 어휘 텍스트를 변환하여 텍스트를 표시합니다.

텍스트를 표시하는 어휘로 음성 인식 흐름의 다이어그램

표시 텍스트 서식 기능을 지원하는 로캘은 da-DK, de-DE, en-AU, en-CA, en-GB, en-HK, en-IE, en-IN, en-NG, en-NZ, en-PH, en-SG, en-US, es-ES, es-MX, fi-FI, fr-CA, fr-FR, hi-IN, it-IT, ja-JP, ko-KR, nb-NO, nl-NL, pl-PL, pt-BR, pt-PT, sv-SE, tr-TR, zh-CN, zh-HK입니다.

기본 표시 텍스트 서식

표시 텍스트 파이프라인은 표시 서식 작성기의 시퀀스로 구성됩니다. 각 작성기는 ITN, 대문자 표시, 욕설 필터링과 같은 표시 서식 작업에 해당합니다.

  • ITN(역 텍스트 정규화) - 음성 양식 번호의 텍스트를 표시 양식으로 변환합니다. 예: "I spend twenty dollars" -> "I spend $20"
  • 대문자 표시 - 대문자 엔터티 이름, 약어 또는 문장의 첫 글자입니다. 예: "she is from microsoft" -> "She is from Microsoft"
  • 욕설 필터링 - 문장에서 욕설 단어를 마스킹하거나 제거합니다. 예를 들어 "abcd"가 욕설 단어라고 가정하면, 이 단어는 욕설 마스킹("I never say abcd" -> "I never say ****")으로 마스킹됩니다.

Microsoft는 범용 표시 처리 작업을 수행하기 위해 표시 텍스트 파이프라인의 기본 작성기를 유지 관리합니다. 기본적으로 Speech Service를 사용할 때 기본 작성기를 가져옵니다. 기본 서식에 대한 자세한 내용은 표시 텍스트 서식을 참조하세요.

사용자 지정 표시 텍스트 서식

Microsoft에서 유지 관리하는 기본 작성기 외에도 사용자 지정 표시 텍스트 서식 규칙을 정의하여 특정 시나리오에 표시 텍스트 서식 파이프라인을 사용자 지정할 수 있습니다. 사용자 지정 표시 텍스트 서식 규칙은 사용자 지정 표시 텍스트 서식 파일에 정의됩니다.

이 다이어그램에는 표시 텍스트 서식 파이프라인의 순서가 나와 있습니다.

표시 형식 작성기의 다이어그램

사용자 지정 ITN

패턴 기반 사용자 지정 ITN의 철학은 보고 싶은 최종 출력을 지정할 수 있다는 것입니다. Speech Service는 단어를 어떻게 발음할 수 있는지 파악하고 예측된 음성 식을 지정된 출력 형식에 매핑합니다.

사용자 지정 ITN 모델은 ITN 규칙 세트에서 빌드됩니다. ITN 규칙은 다음을 설명하는 패턴 문자열과 같은 정규식입니다.

  • 일치하는 입력 문자열 패턴
  • 원하는 출력 문자열 형식

Microsoft에서 제공하는 기본 ITN 규칙이 먼저 적용됩니다. 기본 ITN 모델의 출력은 사용자 지정 ITN 모델의 입력으로 사용됩니다. 사용자 지정 ITN 모델 내 일치 알고리즘은 대/소문자를 구분하지 않습니다.

사용자 지정 ITN 규칙과 일치하는 패턴의 범주는 네 가지가 있습니다.

리터럴을 사용하는 패턴

예를 들어 개발자에게는 영숫자 형식(JO:500)으로 명명된 항목(예: 제품)이 있을 수도 있습니다. Speech Service는 사용자가 문자 부분을 J Ojoe로 말할 수도 있고, 숫자 부분을 five hundredfive zero zero, five oh oh 또는 five double zero로 말할 수도 있음을 파악한 후 이러한 모든 가능성을 다시 JO:500(콜론 삽입 포함)으로 매핑하는 모델을 빌드합니다.

표시 텍스트 서식 파일에서 줄당 한 가지 규칙을 지정하여 패턴을 병렬로 적용할 수 있습니다. 다음은 두 가지 규칙을 지정하는 표시 텍스트 서식 파일의 예제입니다.

JO:500
MM:760

와일드카드를 사용하는 패턴

여러 가지 방법으로 모든 가능성을 상세히 설명하지 않아도 일련의 모든 영숫자 항목(예: JO:500, JO:600 JO:700)을 참조할 수 있습니다.

문자 범위는 [...] 표기법으로 지정할 수 있으므로, JO:[5-7]00은 세 가지 패턴을 작성하는 것과 같습니다.

사용할 수 있는 와일드카드 항목 세트도 있습니다. 이 중 하나가 임의의 숫자를 의미하는 \d입니다. 따라서 JO:\d00JO:000, JO:100JO:900까지의 다른 항목을 포함합니다.

정규식과 마찬가지로 ITN 규칙에 미리 정의된 문자 클래스가 여럿 있습니다.

  • \d - '0'부터 '9'까지 숫자를 일치시키고 바로 출력
  • \l - 문자(대/소문자 구분 안 함)를 일치시켜서 소문자 변환
  • \u - 문자(대/소문자 구분 안 함)를 일치시켜서 대문자로 변환
  • \a - 문자(대/소문자 구분 안 함)를 일치시켜서 바로 출력

그 외 특별한 구문적 의미를 지닌 문자를 참조하는 이스케이프 식도 있습니다.

  • \\ - char 일치 및 출력 \
  • \(\)
  • \{\}
  • \|
  • \+, \?, \*

regex 스타일 표기법을 사용하는 패턴

패턴 작성의 유연성을 향상시키기 위해 정규식과 유사한 대안 및 Kleene 클로저 구문 구조가 지원됩니다.

  • 구문은 (...)처럼 괄호로 표시되며, 괄호는 문자 그대로 일치하는 문자로 계산되지 않습니다.
  • (AB|CDE) 같이 | 문자를 사용하여 구문 내에서 대안을 나타낼 수 있습니다.
  • 선택 사항임을 나타내는 ?, 반복할 수 있음을 나타내는 + 또는 둘 다를 나타내는 *를 사용하여 구문에 접미사로 붙일 수 있습니다. 개별 문자가 아닌 이러한 문자만 사용해서 구문에 접미사로 붙일 수 있습니다(대부분의 정규식 구현보다 더 제한적임).

(AB|CD)-(\d)+ 등의 패턴 "AB-9"나 "CD-22" 같은 구문을 나타내고 A B nineC D twenty two(또는 C D two two) 같은 음성으로 확장됩니다.

명시적 대체를 사용하는 패턴

일반적인 철학은 "어떻게 출력되어야 하는지 보여 주고 Speech Service를 통해 사람들이 어떻게 말하는지 파악하는 것"입니다. 그러나 일부 시나리오에는 예측할 수 없는 기발한 표현 방식이 있거나 Speech Service 백그라운드 규칙에 차이가 있을 수도 있기 때문에 이 철학이 항상 작동하지는 않습니다. 예를 들면 이니셜과 약어의 구어적인 발음이 있을 수 있습니다. ZPIzippy로 발음될 수도 있습니다. 이 경우 사용자가 zippy twenty two라고 말하면 ZPI-\d\d와 같은 패턴이 작동하지 않을 수 있습니다. 이런 상황에 대비하기 위해 {spoken>written} 표시 텍스트 서식 표기법이 있습니다. 이 특별한 경우는 {zippy>ZPI}-\d\d로 쓸 수 있습니다.

이는 음성 매핑 규칙이 적용되지만 아직 지원하지 않는 항목을 처리하는 데 유용할 수 있습니다. 예를 들면 "-"가 범위를 의미할 수 있고, twenty to thirty에서와 같이 to로 발음되어야 한다는 것을 시스템이 이해하기를 바라면서 \d0-\d0 패턴을 쓸 수도 있습니다. 하지만 아마도 그렇지 않을 것입니다. 따라서 \d0{to>-}\d0처럼 보다 명시적인 패턴을 쓰고 대시를 읽는 방법을 알려줄 수 있습니다.

또한 > 및 다음에 나오는 쓰기 양식을 생략해서 인식하되 무시해야 하는 단어를 나타낼 수 있습니다. 따라서 {write} (\u.)+ 같은 패턴은 write A B C를 인식하고 A.B.C를 출력하며 write 부분을 삭제합니다.

사용자 지정 ITN 예제

그룹 숫자

6자리 숫자를 두 그룹으로 그룹화하고 그 사이에 '-' 문자를 추가하려면 다음을 수행합니다.

ITN 규칙: \d\d\d-\d\d\d 샘플: "cadence one oh five one fifteen" -> "cadence 105-115"

필름 이름 서식 지정

Space: 1999는 이를 지원하는 유명한 영화입니다.

ITN 규칙: Space: 1999 샘플: "watching space nineteen ninety nine" -> "watching Space: 1999"

대체를 사용하는 패턴

ITN 규칙: \d[05]{ to >-}\d[05] 샘플: fifteen to twenty -> 15-20

사용자 지정 다시 쓰기

일반적으로 입력 문자열의 경우 다시 쓰기 모델은 입력 문자열의 original phrase를 각 다시 쓰기 규칙에 해당하는 new phrase로 바꾸려고 합니다. 다시 쓰기 모델은 다시 쓰기 규칙의 컬렉션입니다.

  • 다시 쓰기 규칙은 두 구문, 즉 원래 구문과 새 구문의 쌍입니다.
  • 두 구문은 TAB 문자로 구분됩니다. 예로 original phrase{TAB}new phrase를 들 수 있습니다.
  • 원래 구문은 일치(대/소문자 구분 안 함)하며 새 구문(대/소문자 구분)으로 바뀝니다. 원래 구문의 문법 문장 부호 문자는 일치 중에 무시됩니다.
  • 다시 쓰기 규칙이 충돌하는 경우 original phrase가 더 긴 규칙이 일치 항목으로 사용됩니다.

다시 쓰기 모델은 기본적으로 문법 대문자 표시를 지원하며, 로캘과 같은 en-US 문장의 첫 번째 문자를 대문자로 표시합니다. 음성 인식 요청에서 표시 텍스트 서식 지정의 대문자 표시 기능을 비활성화하면 이 기능이 비활성화됩니다.

문법 문장 부호

문법 문장 부호 문자는 문장이나 구문을 구분하고, 문장이나 구문을 읽는 방법을 명확히 하는 데 사용됩니다.

. , ? 、 ! : ; ? 。 , ¿ ¡ । ؟ ،

문법 문장 부호 규칙은 다음과 같습니다.

  • 지원되는 부호 문자는 뒤에 공백이 있거나 문장 또는 문구의 맨 앞이나 맨 뒤에 있는 경우 문법 문장 부호에 사용됩니다. 예를 들면 x. y(.y 사이에 공백 포함)에 있는 .가 문법 문장 부호입니다.
  • 단어 중간에 있는 문장 부호 문자(zh-cn, ja-jp 제외)는 문법 문장 부호가 아닙니다. 이 경우에는 일반 문자에 해당합니다. 예를 들어 x.y에 있는 .는 문법 문장 부호가 아닙니다.
  • zh-cnja-jp(공백 없는 로캘)의 경우 문장 부호 문자가 문자 사이에 있더라도 항상 문법 문장 부호로 사용됩니다. 예를 들어 中.文에 있는 .는 문법 문장 부호입니다.

사용자 지정 다시 쓰기 예제

맞춤법 수정

COVID-19라는 이름은 covered 19로 인식될 수 있습니다. covered 19 is a virus가 아닌 COVID-19 is a virus가 표시되도록 하려면 다음과 같은 다시 쓰기 규칙을 사용합니다.

#rewrite
covered 19{TAB}COVID-19

이름 대문자 표시

Gottfried Wilhelm Leibniz는 독일의 수학자였습니다. Gottfried Wilhelm Leibniz가 대문자로 표시되도록 하려면 다음과 같은 다시 쓰기 규칙을 사용합니다.

#rewrite
gottfried leibniz{TAB}Gottfried Leibniz

사용자 지정 욕설

사용자 지정 욕설 문구 목록을 사용한다는 점을 제외하고, 사용자 지정 욕설 모델은 기본 욕설 모델과 동일하게 작동합니다. 또한 사용자 지정 욕설 모델은 표시 텍스트 서식 파일에 정의된 모든 욕설 문구를 일치시키려고 합니다(대/소문자 구분 안 함).

  • 욕설 문구가 일치합니다(대/소문자 구분 안 함).
  • 욕설 구문 규칙이 충돌하는 경우 가장 긴 구문이 일치 항목으로 사용됩니다.
  • 욕설 구문에 . , ? 、 ! : ; ? 。 , ¿ ¡ । ؟ ، 문장 부호 문자는 지원되지 않습니다.
  • zh-CNja-JP 로캘의 경우 영어 욕설 구문은 지원되지 않습니다. 영어 욕설 단어는 지원됩니다. zh-CNja-JP 로캘의 욕설 구문은 지원됩니다.

음성 인식 요청 설정에 따라 욕설이 제거되거나 마스킹됩니다.

욕설이 표시 텍스트 서식 규칙 파일에 추가되고 사용자 지정 모델이 학습되면 일괄 처리 음성 텍스트 변환 및 실시간 음성 텍스트 변환의 기본 출력에 사용됩니다.

사용자 지정 욕설 예제

다음은 표시 텍스트 서식 파일에서 욕설 단어와 구문을 마스킹하는 방법의 몇 가지 예제입니다.

단일 욕설 단어 마스킹의 예제

xyz가 욕설 단어라고 가정해 보겠습니다. 추가하려면 다음을 수행합니다.

#profanity
xyz

테스트 샘플은 다음과 같습니다. Turned on profanity masking to mask xyz -> Turned on profanity masking to mask ***

욕설 구문 마스킹

abc lmn이 욕설 구문이라고 가정해 보겠습니다. 추가하려면 다음을 수행합니다.

#profanity
abc lmn

테스트 샘플은 다음과 같습니다. Turned on profanity masking to mask abc lmn -> Turned on profanity masking to mask *** ***

다음 단계