1. 소개
번역기 및 언어 감지기 API는 인간 언어 간 텍스트를 번역하고, 그러한 텍스트의 언어를 감지하는 기능을 노출한다. 이들은 이러한 목적을 위한 브라우저 내장 UI 기능을 보완하며, 웹 개발자가 이러한 작업을 프로그래밍 방식으로 트리거하고 이를 애플리케이션에 통합할 수 있는 기능을 제공한다. 이는 사용자 입력이나 네트워크에서 가져온 텍스트를 처리할 때 특히 유용할 수 있다.
이 API들은 번역과 언어 감지를 위한 고수준 인터페이스를 제공하도록 설계되었으며, 기반 머신 러닝 모델과 그 관리의 복잡성을 추상화한다. 서로 다른 구현 전략이나 언어 지원에서 발생할 수 있는 상호운용성 문제를 다루기 위해, API 설계는 개발자가 애플리케이션이 의존하는 언어의 가용성을 확인하고 적절한 오류 처리를 포함하도록 안내한다.
2. 의존성
이 명세는 Infra Standard에 의존한다. [INFRA]
웹 플랫폼의 나머지 부분과 마찬가지로, 인간 언어는 이 API들에서 BCP 47 언어 태그,
예를 들어 "ja", "en-US", "sr-Cyrl", 또는
"de-CH-1901-x-phonebk-extended"로 식별된다. 유효성 검사, 정규화,
언어 태그 매칭에 사용되는 구체적인 알고리즘은 ECMAScript Internationalization API Specification의
알고리즘이며, 이는 다시 처리 일부를 Unicode Locale Data Markup Language (LDML)에 위임한다. [BCP47] [ECMA-402] [UTS35].
이 API들은 머신 러닝 모델로 구동될 것으로 예상되는 API군의 일부이며, 공통적인 API 표면 관용구와 명세 패턴을 공유한다. 현재 이러한 공유 부분의 명세 텍스트는 Writing Assistance APIs § 5 Shared infrastructure에 있으며, 공통 프라이버시 및 보안 고려사항은 Writing Assistance APIs § 6 Privacy considerations 및 Writing Assistance APIs § 7 Security considerations에서 논의된다. 이 API들을 구현하려면 해당 공유 인프라를 구현하고, 그 프라이버시 및 보안 고려사항을 준수해야 한다. 그러나 실제 writing assistance API를 구현하거나 노출할 필요는 없다. [WRITING-ASSISTANCE-APIS]
3. 번역기 API
[Exposed =Window ,SecureContext ]interface {Translator static Promise <Translator >create (TranslatorCreateOptions );options static Promise <Availability >availability (TranslatorCreateCoreOptions );options Promise <DOMString >translate (DOMString ,input optional TranslatorTranslateOptions = {} );options ReadableStream translateStreaming (DOMString ,input optional TranslatorTranslateOptions = {} );options readonly attribute DOMString sourceLanguage ;readonly attribute DOMString targetLanguage ;Promise <double >measureInputUsage (DOMString ,input optional TranslatorTranslateOptions = {} );options readonly attribute unrestricted double inputQuota ; };Translator includes DestroyableModel ;dictionary {TranslatorCreateCoreOptions required DOMString ;sourceLanguage required DOMString ; };targetLanguage dictionary :TranslatorCreateOptions TranslatorCreateCoreOptions {AbortSignal ;signal CreateMonitorCallback ; };monitor dictionary {TranslatorTranslateOptions AbortSignal ; };signal
3.1. 생성
create(options) 메서드 단계는 다음과 같다:
-
options, "
translator", 번역기 옵션을 유효성 검사하고 정규화, 번역기 옵션 가용성 계산, 번역 모델 다운로드, 번역 모델 초기화, 그리고 번역기 객체 생성이 주어졌을 때 AI 모델 객체 생성의 결과를 반환한다.
TranslatorCreateCoreOptions
options가 주어졌을 때
번역기 옵션을 유효성 검사하고 정규화하려면
다음 단계를 수행한다. 이 단계들은 언어 태그를 정규화하기 위해 options를 제자리에서 변경하며,
어느 하나라도 유효하지 않으면 예외를 던진다.
-
options 및 "
sourceLanguage"가 주어졌을 때 언어 태그를 유효성 검사하고 정규화한다. -
options 및 "
targetLanguage"가 주어졌을 때 언어 태그를 유효성 검사하고 정규화한다.
TranslatorCreateCoreOptions
options가 주어졌을 때
번역
모델을 다운로드하려면:
-
options["
sourceLanguage"]에서 options["targetLanguage"]로 텍스트를 번역하기 위해 사용자 에이전트가 필요로 하는 모든 것에 대한 다운로드 과정을 시작한다.여기에는 기본 번역 모델과 특정 언어 arc 자료가 모두 포함될 수 있으며, 중간 언어가 사용되는 경우 여러 언어 arc에 대한 자료가 포함될 수도 있다.
-
어떤 이유로든 다운로드 과정을 시작할 수 없으면 false를 반환한다.
-
true를 반환한다.
TranslatorCreateCoreOptions
options가 주어졌을 때
번역 모델을
초기화하려면:
-
options["
sourceLanguage"]에서 options["targetLanguage"]로 번역하기 위한 사용자 에이전트의 기능을 뒷받침하는 AI 모델에 필요한 초기화 작업을 수행한다.여기에는 모델을 메모리에 로드하거나, 해당 특정 옵션을 지원하는 데 필요한 fine-tuning을 로드하는 것이 포함될 수 있다.
-
어떤 이유로든 초기화에 실패하면, 그 name이 "
OperationError"이고 그 details에 적절한 세부 정보가 포함된 DOMException 오류 정보를 반환한다. -
null을 반환한다.
TranslatorCreateCoreOptions
options가 주어졌을 때
번역기
객체를 생성하려면:
-
Assert: 이 단계들은 realm의 surrounding agent의 event loop에서 실행 중이다.
-
inputQuota를 향후 번역 작업을 위해 사용자 에이전트에서 사용할 수 있는 입력 할당량의 양으로 한다. (이 값은 구현 정의이며, 예를 들어 사용자의 메모리나 JavaScript 문자열 한계 외에 특정 제한이 없다면 +∞일 수 있다.)
-
realm에서 생성된 새
Translator객체를 다음과 함께 반환한다- 출발 언어
-
options["
sourceLanguage"] - 목표 언어
-
options["
targetLanguage"] - 입력 할당량
-
inputQuota
3.2. 가용성
availability(options) 메서드 단계는 다음과 같다:
-
options, "
translator", 번역기 옵션을 유효성 검사하고 정규화, 그리고 번역기 옵션 가용성 계산이 주어졌을 때 AI 모델 가용성 계산의 결과를 반환한다.
TranslatorCreateCoreOptions
options가 주어졌을 때
번역기
옵션 가용성을 계산하려면
다음 단계를 수행한다. 이 단계들은 Availability
값 또는 null을 반환하며, 언어 태그를 best-fit 매치로 갱신하기 위해 options를 제자리에서
변경한다.
-
availabilities를 사용자 에이전트의 번역기 언어 arc 가용성으로 한다.
-
availabilities가 null이면 null을 반환한다.
-
availabilities의 각 languageArc → availability에 대해 순회한다:
-
sourceLanguageBestFit를 LookupMatchingLocaleByBestFit(« languageArc의 출발 언어 », « options["
sourceLanguage"] »)로 한다. -
targetLanguageBestFit를 LookupMatchingLocaleByBestFit(« languageArc의 목표 언어 », « options["
targetLanguage"] »)로 한다. -
sourceLanguageBestFit와 targetLanguageBestFit가 둘 다 undefined가 아니면:
-
options["
sourceLanguage"]를 sourceLanguageBestFit.[[locale]]로 설정한다. -
options["
targetLanguage"]를 targetLanguageBestFit.[[locale]]로 설정한다. -
availability를 반환한다.
-
-
-
(options["
sourceLanguage"], options["targetLanguage"])가 identity translation으로 충족될 수 있으면, "available"을 반환한다.사용자 에이전트가 주어진 언어 arc에 대해 자체 번역기 언어 arc 가용성에 특정 항목을 가지고 있다면, 위 단계들 때문에 이러한 경우는 "
downloadable", "downloading", 또는 "available"도 반환할 수 있다. 그러나 identity translation은 항상 사용 가능하므로, 이 단계는 이러한 경우에 결코 "unavailable"을 반환하지 않도록 보장한다.언어 arc 중 identity translation으로 충족될 수 있는 하나는 (
"en-US","en-GB")이다. 구현이 이 번역을 위한 특수 모델을 지원할 가능성도 있으며, 이는 번역기 언어 arc 가용성에 나타날 것이다.반면 구현이 언어 arc ("
en-x-asdf", "en-x-xyzw")에 대한 특수 모델을 가지고 있을 가능성은 꽤 낮다. 그런 경우 이 단계가 적용되며, 이후 translate 알고리즘 호출은 identity translation을 사용한다.이 단계가 적용될 때 options["
sourceLanguage"] 및 options["targetLanguage"]는 수정되지 않는다. 따라서 이 알고리즘이create()에서 호출되고 있다면, 결과Translator객체의sourceLanguage및targetLanguage속성은 어떤 정규화된 형식이 아니라 원래 입력을 반환한다는 뜻이다. -
"
unavailable"을 반환한다.
언어 arc는 두 문자열의 튜플이며, 출발 언어와 목표 언어로 이루어진다. 각 항목은 Unicode 정규화 locale 식별자이다.
Availability
값으로 반환하거나, null을 반환한다.
-
사용자 에이전트가 어떤 언어 arc 사이의 텍스트 번역을 지원할 수 있는지 판단하려는 중에, 사용자 에이전트가 일시적이라고 믿는 오류(다시 질의하면 그러한 오류가 더 이상 발생하지 않을 수 있는 오류)가 있으면 null을 반환한다.
-
맵을 언어 arc에서
Availability값으로 반환한다. 여기서 각 키는 사용자 에이전트가 그 사이의 텍스트 번역을 지원하는 언어 arc이며, 다음 제약에 따라 채워진다:-
사용자 에이전트가 언어 arc의 출발 언어에서 목표 언어로의 텍스트 번역을 현재 지원한다면, 맵은 그 언어 arc를 키로 하고 "
available"을 값으로 하는 항목을 포함해야 한다. -
사용자 에이전트가 언어 arc의 출발 언어에서 목표 언어로의 텍스트 번역을 지원할 수 있을 것이라고 믿지만, 이미 진행 중인 다운로드가 끝난 뒤에만 가능하다면, 맵은 그 언어 arc를 키로 하고 "
downloading"을 값으로 하는 항목을 포함해야 한다. -
사용자 에이전트가 언어 arc의 출발 언어에서 목표 언어로의 텍스트 번역을 지원할 수 있을 것이라고 믿지만, 현재 진행 중이 아닌 다운로드를 수행한 뒤에만 가능하다면, 맵은 그 언어 arc를 키로 하고 "
downloadable"을 값으로 하는 항목을 포함해야 한다.
-
-
("
en", "zh-Hans") → "available" -
("
en", "zh-Hant") → "downloadable"
LookupMatchingLocaleByBestFit의 사용은 availability()가
아마도 다음과 같은 답을 줄 것임을 의미한다:
function a( sourceLanguage, targetLanguage) { return ai. translator. availability({ sourceLanguage, targetLanguage}) : } await a( "en" , "zh-Hans" ) === "available" ; await a( "en" , "zh-Hant" ) === "downloadable" ; await a( "en" , "zh" ) === "available" ; // zh will best-fit to zh-Hans await a( "en" , "zh-TW" ) === "downloadable" ; // zh-TW will best-fit to zh-Hant await a( "en" , "zh-HK" ) === "available" ; // zh-HK will best-fit to zh-Hans await a( "en" , "zh-CN" ) === "available" ; // zh-CN will best-fit to zh-Hans await a( "en-US" , "zh-Hant" ) === "downloadable" ; // en-US will best-fit to en await a( "en-GB" , "zh-Hant" ) === "downloadable" ; // en-GB will best-fit to en // Even very unexpected subtags will best-fit to en or zh-Hans await a( "en-Braille-x-lolcat" , "zh-Hant" ) === "downloadable" ; await a( "en" , "zh-BR-Kana" ) === "available" ;
-
LookupMatchingLocaleByBestFit(sourceLanguages, « arc의 출발 언어 »)가 undefined가 아니면 true를 반환한다.
-
LookupMatchingLocaleByBestFit(targetLanguages, « arc의 목표 언어 »)가 undefined가 아니면 true를 반환한다.
-
false를 반환한다.
en", "fr")는 « ("en", "fr-CA") »와
겹치므로, 사용자
에이전트의 번역기 언어 arc 가용성은
이 두 언어
arc를 동시에 포함할 수 없다.
대신 일반적인 사용자 에이전트는 영어-프랑스어 언어 arc 하나만(아마도
("en", "fr")) 지원하거나, ("en", "fr-FR"),
("en", "fr-CA"), 그리고 ("en", "fr-CH")와 같은
서로 겹치지 않는 여러 영어-프랑스어 언어 arc를 지원할 수 있다.
후자의 경우, 웹 개발자가 ai를
사용하여 번역기 생성을 요청하면,
LookupMatchingLocaleByBestFit 알고리즘은 사용할 수 있는 세
언어 arc 중 하나를 선택할 것이다(아마도 ("en",
"fr-FR")).
-
LookupMatchingLocaleByBestFit(« arc의 출발 언어 », « arc의 목표 언어 »)가 undefined가 아니면 true를 반환한다.
-
LookupMatchingLocaleByBestFit(« arc의 목표 언어 », « arc의 출발 언어 »)가 undefined가 아니면 true를 반환한다.
-
false를 반환한다.
3.3. Translator
클래스
모든 Translator는
생성 중 설정되는 문자열인
출발 언어를 가진다.
모든 Translator는
생성 중 설정되는 문자열인
목표 언어를 가진다.
모든 Translator는
생성 중 설정되는 숫자인 입력 할당량을 가진다.
sourceLanguage getter 단계는
this의 출발
언어를 반환하는 것이다.
targetLanguage getter 단계는
this의 목표
언어를 반환하는 것이다.
inputQuota getter 단계는
this의 입력
할당량을 반환하는 것이다.
translate(input, options) 메서드
단계는 다음과 같다:
translateStreaming(input, options)
메서드 단계는 다음과 같다:
measureInputUsage(input, options)
메서드 단계는 다음과 같다:
-
measureUsage를 인수 stopMeasuring를 받는 알고리즘 단계로 하고, input, this의 출발 언어, this의 목표 언어, 및 stopMeasuring이 주어졌을 때 번역기 입력 사용량 측정의 결과를 반환하게 한다.
-
this, options, 및 measureUsage가 주어졌을 때 AI 모델 입력 사용량 측정의 결과를 반환한다.
3.4. 번역
3.4.1. 알고리즘
-
문자열 input,
-
Unicode 정규화 locale 식별자 sourceLanguage,
-
Unicode 정규화 locale 식별자 targetLanguage,
-
숫자 inputQuota,
-
문자열을 받아 아무것도 반환하지 않는 알고리즘 chunkProduced,
-
인수를 받지 않고 아무것도 반환하지 않는 알고리즘 done,
-
오류 정보를 받아 아무것도 반환하지 않는 알고리즘 error, 및
-
인수를 받지 않고 boolean을 반환하는 알고리즘 stopProducing,
다음 단계를 수행한다:
-
requested를 input, sourceLanguage, targetLanguage, 및 stopProducing이 주어졌을 때 번역기 입력 사용량 측정의 결과로 한다.
-
requested가 null이면 반환한다.
-
requested가 오류 정보이면:
-
requested가 주어졌을 때 error를 수행한다.
-
반환한다.
-
-
Assert: requested는 숫자이다.
-
requested가 inputQuota보다 크면:
-
errorInfo를 requested의 requested와 inputQuota의 quota를 가진 할당량 초과 오류 정보로 한다.
-
errorInfo가 주어졌을 때 error를 수행한다.
-
반환한다.
실제로는 구현이 번역 자체와 동일한 모델 호출의 일부로 입력 사용량을 할당량과 대조할 것으로 예상한다. 이 단계들은 명세에서 이해를 돕기 위해서만 분리되어 있다.
-
-
구현 정의 방식으로, 다음 지침에 따라, input을 sourceLanguage에서 targetLanguage로 번역하는 과정을 시작한다.
input이 빈 문자열이거나, 그 밖에 번역 가능한 내용이 없는 경우(예: 공백 문자나 제어 문자만 포함하는 경우), 결과 번역은 input이어야 한다. 이러한 경우 sourceLanguage와 targetLanguage는 무시되어야 한다.
(sourceLanguage, targetLanguage)가 identity translation으로 충족될 수 있으면, 결과 번역은 input이어야 한다.
번역 과정은 Writing Assistance APIs § 6 Privacy considerations 및 Writing Assistance APIs § 7 Security considerations에 제공된 지침을 준수해야 하며, 특히(이에 국한되지 않고) Writing Assistance APIs § 6.4 User input 및 Writing Assistance APIs § 7.2 Runtime shared resources를 포함한다.
-
true인 동안:
-
번역된 텍스트의 다음 chunk가 생성되거나, 번역 과정이 완료되거나, stopProducing 호출 결과가 true가 될 때까지 기다린다.
-
그러한 chunk가 성공적으로 생성되면:
-
그것을 문자열 chunk로 표현한다.
-
chunk가 주어졌을 때 chunkProduced를 수행한다.
-
-
그렇지 않고 번역 과정이 완료되었다면:
-
done을 수행한다.
-
중단한다.
-
-
그렇지 않고 stopProducing이 true를 반환하면 중단한다.
-
그렇지 않고 번역 중 오류가 발생했다면:
-
오류를 § 3.4.3 오류의 지침에 따라 DOMException 오류 정보 errorInfo로 표현한다.
-
errorInfo가 주어졌을 때 error를 수행한다.
-
중단한다.
-
-
3.4.2. 사용량
-
문자열 input,
-
Unicode 정규화 locale 식별자 sourceLanguage,
-
Unicode 정규화 locale 식별자 targetLanguage, 및
-
인수를 받지 않고 boolean을 반환하는 알고리즘 stopMeasuring,
다음 단계를 수행한다:
-
inputToModel을 input을 sourceLanguage에서 targetLanguage로 번역하기 위해 기반 모델에 보내질 구현 정의 문자열로 한다.
이는 초기화 중에 sourceLanguage와 targetLanguage가 모델에 로드되었다면 단지 input 자체일 수 있다. 또는 더 많은 것, 예를 들어 해당 언어 인코딩을 위한 적절한 할당량 사용량이나 언어 모델에 대한 일종의 wrapper prompt로 구성될 수 있다.
이 과정 중 stopMeasuring이 true를 반환하기 시작하면 null을 반환한다.
이 과정 중 오류가 발생하면 § 3.4.3 오류의 지침에 따라 적절한 DOMException 오류 정보를 반환한다.
-
기반 모델에 제공될 때 inputToModel을 표현하는 데 필요한 입력 사용량을 반환한다. 정확한 계산 절차는 다음 제약에 따른 구현 정의이다.
반환되는 입력 사용량은 음수가 아니고 유한해야 한다. 번역 과정에 대한 사용량 할당량이 없으면(즉, 입력 할당량이 +∞이면) 0이어야 한다. 그렇지 않으면 양수여야 하며 inputToModel의 길이에 대략 비례해야 한다.
이는 언어 모델 토큰화 방식에서 input을 표현하는 데 필요한 토큰 수일 수 있고, 또는 input의 길이일 수 있다. 또한 모델에 제공하는 데 필요한 접두사나 접미사의 사용량도 계산하는 이러한 방식의 변형일 수도 있다.
이 과정 중 stopMeasuring이 true를 반환하기 시작하면 대신 null을 반환한다.
이 과정 중 오류가 발생하면 대신 § 3.4.3 오류의 지침에 따라 적절한 DOMException 오류 정보를 반환한다.
3.4.3. 오류
번역이 실패하면, 다음과 같은 가능한 이유가 웹 개발자에게 노출될 수 있다. 이 표는 가능한 DOMException
이름과 구현이 이를 사용해야 하는 경우를 나열한다:
DOMException
name
| 시나리오 |
|---|---|
"NotAllowedError"
|
번역이 사용자 선택 또는 사용자 에이전트 정책에 의해 비활성화되어 있다. |
"NotReadableError"
|
번역 출력이 사용자 에이전트에 의해 필터링되었다. 예를 들어 해롭거나, 부정확하거나, 무의미한 것으로 감지되었기 때문이다. |
"UnknownError"
|
사용자 에이전트가 번역할 수 없으며 동시에 Writing Assistance APIs § 6 Privacy considerations 및 Writing Assistance APIs § 7 Security considerations에 제시된 요구사항도 충족할 수 없다고 믿는 경우를 포함한 모든 기타 시나리오. 또는 사용자 에이전트가 실패 이유를 공개하지 않기를 원하는 경우. |
이 표는 translator API에서 노출될 수 있는 예외의 전체 목록을 제공하지 않는다. 특정 구현 정의 단계에서 나올 수 있는 것만 포함한다.
3.5. 권한 정책 통합
translator API에 대한 접근은 정책 제어 기능 "translator"
뒤에 게이트되어 있으며, 이는
'self'의
기본 allowlist를 가진다.
4. 언어 감지기 API
[Exposed =Window ,SecureContext ]interface {LanguageDetector static Promise <LanguageDetector >create (optional LanguageDetectorCreateOptions = {} );options static Promise <Availability >availability (optional LanguageDetectorCreateCoreOptions = {} );options Promise <sequence <LanguageDetectionResult >>detect (DOMString ,input optional LanguageDetectorDetectOptions = {} );options readonly attribute FrozenArray <DOMString >?expectedInputLanguages ;Promise <double >measureInputUsage (DOMString ,input optional LanguageDetectorDetectOptions = {} );options readonly attribute unrestricted double inputQuota ; };LanguageDetector includes DestroyableModel ;dictionary {LanguageDetectorCreateCoreOptions sequence <DOMString >; };expectedInputLanguages dictionary :LanguageDetectorCreateOptions LanguageDetectorCreateCoreOptions {AbortSignal ;signal CreateMonitorCallback ; };monitor dictionary {LanguageDetectorDetectOptions AbortSignal ; };signal dictionary {LanguageDetectionResult DOMString ;detectedLanguage double ; };confidence
4.1. 생성
create(options) 메서드 단계는 다음과 같다:
-
options, "
language-detector", 언어 감지기 옵션을 유효성 검사하고 정규화, 언어 감지기 옵션 가용성 계산, 언어 감지기 모델 다운로드, 언어 감지기 모델 초기화, 그리고 언어 감지기 객체 생성이 주어졌을 때 AI 모델 객체 생성의 결과를 반환한다.
LanguageDetectorCreateCoreOptions
options가 주어졌을 때
언어 감지기 옵션을 유효성 검사하고 정규화하려면
다음 단계를 수행한다. 이 단계들은 언어 태그를 정규화하기 위해 options를 제자리에서 변경하며,
어느 하나라도 유효하지 않으면 예외를 던진다.
-
options 및 "
expectedInputLanguages"가 주어졌을 때 언어 태그를 유효성 검사하고 정규화한다.
LanguageDetectorCreateCoreOptions
options가 주어졌을 때
언어 감지기
모델을 다운로드하려면:
-
options["
expectedInputLanguages"]의 모든 언어를 포함하여, 입력 텍스트의 언어를 감지하기 위해 사용자 에이전트가 필요로 하는 모든 것에 대한 다운로드 과정을 시작한다.여기에는 기본 언어 감지 모델과 options["
expectedInputLanguages"]에서 식별된 언어를 돕기 위한 특정 fine-tuning 또는 기타 자료가 모두 포함될 수 있다. -
어떤 이유로든 다운로드 과정을 시작할 수 없으면 false를 반환한다.
-
true를 반환한다.
LanguageDetectorCreateCoreOptions
options가 주어졌을 때
언어
감지기 모델을 초기화하려면:
-
입력 텍스트의 언어를 감지하기 위한 사용자 에이전트의 기능을 뒷받침하는 AI 모델에 필요한 초기화 작업을 수행한다.
여기에는 모델을 메모리에 로드하거나, options["
expectedInputLanguages"]에서 식별된 언어를 지원하는 데 필요한 fine-tuning을 로드하는 것이 포함될 수 있다. -
어떤 이유로든 초기화에 실패하면, 그 DOMException 오류 정보를 반환한다. 그 name은 "
OperationError"이고, 그 details에는 적절한 세부 정보가 포함되어야 한다. -
null을 반환한다.
LanguageDetectorCreateCoreOptions
options가 주어졌을 때
언어 감지기
객체를 생성하려면:
-
Assert: 이 단계들은 realm의 surrounding agent의 event loop에서 실행 중이다.
-
inputQuota를 향후 언어 감지 작업을 위해 사용자 에이전트에서 사용할 수 있는 입력 할당량의 양으로 한다. (이 값은 구현 정의이며, 예를 들어 사용자의 메모리나 JavaScript 문자열 한계 외에 특정 제한이 없다면 +∞일 수 있다.)
-
realm에서 생성된 새
LanguageDetector객체를 다음과 함께 반환한다- 예상 입력 언어
-
options["
expectedInputLanguages"]가 비어 있지 않으면, 그것이 주어졌을 때 frozen array 생성의 결과; 그렇지 않으면 null - 입력 할당량
-
inputQuota
4.2. 가용성
availability(options) 메서드 단계는
다음과 같다:
-
options, "
language-detector", 언어 감지기 옵션을 유효성 검사하고 정규화, 그리고 언어 감지기 옵션 가용성 계산이 주어졌을 때 AI 모델 가용성 계산의 결과를 반환한다.
LanguageDetectorCreateCoreOptions
options가 주어졌을 때
언어 감지기 옵션 가용성을 계산하려면
다음 단계를 수행한다. 이 단계들은 Availability
값 또는 null을 반환하며, 언어 태그를 best-fit 매치로 갱신하기 위해 options를 제자리에서
변경한다.
-
사용자 에이전트가 지원할 수 있는 언어 감지 기능을 판단하려는 중에, 사용자 에이전트가 일시적이라고 믿는 오류(다시 질의하면 그러한 오류가 더 이상 발생하지 않을 수 있는 오류)가 있으면 null을 반환한다.
-
텍스트가 해당 언어로 작성되었는지를 감지하는 목적이 주어졌을 때 언어 가용성 partition 얻기의 결과를 partition으로 한다.
-
options["
expectedInputLanguages"] 및 partition이 주어졌을 때 언어 가용성 계산의 결과를 반환한다.
4.3.
LanguageDetector
클래스
모든 LanguageDetector는
생성 중 설정되는
또는 null인 예상 입력 언어를 가진다.
FrozenArray<DOMString>
모든 LanguageDetector는
생성 중 설정되는 숫자인 입력 할당량을 가진다.
expectedInputLanguages getter 단계는
this의 예상 입력 언어를 반환하는 것이다.
inputQuota getter 단계는 this의 입력 할당량을 반환하는 것이다.
detect(input, options) 메서드
단계는 다음과 같다:
-
global의 연결된 Document가 fully active가 아니면, "
InvalidStateError"DOMException으로 거부된 promise를 반환한다. -
signals를 « this의 destruction abort controller의 signal »로 한다.
-
signals,
AbortSignal, 및 this의 관련 realm을 사용하여 dependent abort signal 생성의 결과를 compositeSignal로 한다. -
compositeSignal이 aborted이면, compositeSignal의 abort reason으로 거부된 promise를 반환한다.
-
abortedDuringOperation을 false로 한다.
이 변수는 event loop에서 쓰이지만, 병렬로 읽힌다.
-
compositeSignal에 다음 abort 단계들을 추가한다:
-
abortedDuringOperation을 true로 설정한다.
-
promise를 compositeSignal의 abort reason으로 거부한다.
-
-
병렬로:
-
stopProducing을 다음 단계들로 한다:
-
abortedDuringOperation을 반환한다.
-
-
input, inputQuota, 및 stopProducing이 주어졌을 때 언어 감지의 결과를 result로 한다.
-
global이 주어졌을 때 AI task source에서 전역 task를 큐에 넣어 다음 단계를 수행한다:
-
abortedDuringOperation이 true이면 이 단계들을 중단한다.
-
그렇지 않고 result가 오류 정보이면, result가 주어졌을 때 오류 정보를 예외 객체로 변환한 결과로 promise를 거부한다.
-
그렇지 않으면:
-
Assert: result는
LanguageDetectionResultdictionary의 리스트이다. (null은 아니다. 그 경우에는 abortedDuringOperation이 true였을 것이기 때문이다.) -
promise를 result로 해결한다.
-
-
-
measureInputUsage(input, options)
메서드 단계는 다음과 같다:
-
measureUsage를 인수 stopMeasuring를 받는 알고리즘 단계로 하고, input 및 stopMeasuring이 주어졌을 때 언어 감지기 입력 사용량 측정의 결과를 반환하게 한다.
-
this, options, 및 measureUsage가 주어졌을 때 AI 모델 입력 사용량 측정의 결과를 반환한다.
4.4. 언어 감지
4.4.1. 알고리즘
LanguageDetectionResult
dictionary의 리스트를
반환한다.
-
input 및 stopProducing이 주어졌을 때 언어 감지기 입력 사용량 측정의 결과를 requested로 한다.
-
requested가 null 또는 오류 정보이면 requested를 반환한다.
-
Assert: requested는 숫자이다.
-
requested가 inputQuota보다 크면, requested의 requested와 inputQuota의 quota를 가진 할당량 초과 오류 정보를 반환한다.
실제로는 구현이 언어 감지 자체와 동일한 모델 호출의 일부로 입력 사용량을 할당량과 대조할 것으로 예상한다. 이 단계들은 명세에서 이해를 돕기 위해서만 분리되어 있다.
-
텍스트가 해당 언어로 작성되었는지를 감지하는 목적이 주어졌을 때 언어 가용성 partition 얻기의 결과를 partition으로 한다.
-
currentlyAvailableLanguages를 partition["
available"]로 한다. -
구현 정의 방식으로, 다음 지침에 따라, rawResult 및 unknown을 input의 언어를 감지한 결과로 한다.
rawResult는 currentlyAvailableLanguages의 각 언어에 대해 키를 가진 맵이어야 한다. 이러한 각 키의 값은 0과 1 사이의 숫자여야 한다. 이 값은 input이 해당 언어로 작성되었다는 구현의 신뢰도를 나타내야 한다.
unknown은 input이 currentlyAvailableLanguages의 어떤 언어로도 작성되지 않았다는 구현의 신뢰도를 나타내는 0과 1 사이의 숫자여야 한다.
rawResult의 값들과 unknown의 합은 1이어야 한다. 각각의 값이나 unknown은 0일 수 있다.
구현이 input이 여러 언어로 작성되었다고 믿는 경우, rawResult 및 unknown의 값을 감지된 각 언어로 작성된 input의 양에 비례하도록 나누려 시도해야 한다. input을 나누는 정확한 방식은 구현 정의이다.
input이 "
tacosを食べる"이면, 구현은 이를 "tacos"와 "を食べる"로 나누고 각각의 언어를 별도로 감지할 수 있다. 첫 번째 부분은 신뢰도 0.5의 영어와 신뢰도 0.5의 스페인어로 감지될 수 있고, 두 번째 부분은 신뢰도 1의 일본어로 감지될 수 있다. 그러면 결과 rawResult는 «[ "en" → 0.25, "es" → 0.25, "ja" → 0.5 ]»일 수 있다(unknown은 0으로 설정).이를 예를 들어 세 부분 "
tacos", "を", 그리고 "食べる"가 아니라 두 부분으로 나누기로 한 결정은 구현 정의 선택이었다. 마찬가지로, 각 부분을 예를 들어 코드 포인트 수로 가중하지 않고 결과의 "절반"에 기여하는 것으로 취급하기로 한 결정도 구현 정의였다.(현실적으로 대부분의 언어 감지 모델에는 일반적으로 4-5개 이상의 코드 포인트가 필요하므로, 구현은 이보다 더 큰 chunk에서 분할할 것으로 예상한다.)
이 과정 중 어느 시점에서든 stopProducing이 true를 반환하면 null을 반환한다.
언어 감지 중 오류가 발생하면 § 4.4.3 오류의 지침에 따라 오류 정보를 반환한다.
감지 과정은 Writing Assistance APIs § 6 Privacy considerations 및 Writing Assistance APIs § 7 Security considerations에 제공된 지침을 준수해야 하며, 특히(이에 국한되지 않고) Writing Assistance APIs § 6.4 User input 및 Writing Assistance APIs § 7.2 Runtime shared resources를 포함한다.
-
rawResult를 항목 a 및 b가 주어졌을 때 a의 값이 b의 값보다 작으면 true를 반환하는 less than 알고리즘으로 내림차순 정렬한다.
-
results를 빈 리스트로 한다.
-
cumulativeConfidence를 0으로 한다.
-
rawResult의 각 key → value에 대해 순회한다:
-
value가 0이면 중단한다.
-
value가 unknown보다 작으면 중단한다.
-
«[ "
detectedLanguage" → key, "confidence" → value ]»를 results에 append한다. -
cumulativeConfidence를 cumulativeConfidence + value로 설정한다.
-
cumulativeConfidence가 0.99 이상이면 중단한다.
-
-
Assert: 1 − cumulativeConfidence는 unknown 이상이다.
-
Assert: results의 크기가 0보다 크면, results[results의 크기 - 1]["
confidence"]는 unknown 이상이다. -
«[ "
detectedLanguage" → "und", "confidence" → unknown ]»를 results에 append한다. -
results를 반환한다.
가능성이 1% 미만인 언어, 또는 텍스트에 1% 미만으로 기여하는 언어는 노이즈일 가능성이 더 높다고 간주되어 웹 개발자에게 반환할 가치가 없다. 마찬가지로, 구현이 어떤 언어에 대해 확신하는 정도보다 텍스트가 자신이 아는 어떤 언어도 아니라는 점에 더 확신한다면, 그 언어는 웹 개발자에게 반환할 가치가 없을 가능성이 높다.
이렇게 낮은 확률의 결과가 생략되기 때문에, 웹 개발자에게 반환되는 모든 confidence 값의 합은 1보다 작을 수 있다.
4.4.2. 사용량
-
inputToModel을 input이 주어졌을 때 언어를 감지하기 위해 기반 모델에 보내질 구현 정의 문자열로 한다.
이는 단지 input 자체일 수 있고, 또는 언어 모델에 대한 일종의 wrapper prompt를 포함할 수 있다.
이 과정 중 stopMeasuring이 true를 반환하기 시작하면 null을 반환한다.
이 과정 중 오류가 발생하면 § 4.4.3 오류의 지침에 따라 적절한 DOMException 오류 정보를 반환한다.
-
기반 모델에 제공될 때 inputToModel을 표현하는 데 필요한 입력 사용량을 반환한다. 정확한 계산 절차는 다음 제약에 따른 구현 정의이다.
반환되는 입력 사용량은 음수가 아니고 유한해야 한다. 번역 과정에 대한 사용량 할당량이 없으면(즉, 입력 할당량이 +∞이면) 0이어야 한다. 그렇지 않으면 양수여야 하며 inputToModel의 길이에 대략 비례해야 한다.
이는 언어 모델 토큰화 방식에서 input을 표현하는 데 필요한 토큰 수일 수 있고, 또는 input의 길이일 수 있다. 또한 모델에 제공하는 데 필요한 접두사나 접미사의 사용량도 계산하는 이러한 방식의 변형일 수도 있다.
이 과정 중 stopMeasuring이 true를 반환하기 시작하면 대신 null을 반환한다.
이 과정 중 오류가 발생하면 대신 § 4.4.3 오류의 지침에 따라 적절한 DOMException 오류 정보를 반환한다.
4.4.3. 오류
언어 감지가 실패하면, 다음과 같은 가능한 이유가 웹 개발자에게 노출될 수 있다. 이 표는 가능한 DOMException
이름과 구현이 이를 사용해야 하는 경우를 나열한다:
DOMException
name
| 시나리오 |
|---|---|
"NotAllowedError"
|
언어 감지가 사용자 선택 또는 사용자 에이전트 정책에 의해 비활성화되어 있다. |
"UnknownError"
|
사용자 에이전트가 감지할 수 없으며 동시에 Writing Assistance APIs § 6 Privacy considerations 및 Writing Assistance APIs § 7 Security considerations에 제시된 요구사항도 충족할 수 없다고 믿는 경우를 포함한 모든 기타 시나리오. 또는 사용자 에이전트가 실패 이유를 공개하지 않기를 원하는 경우. |
이 표는 language detector API에서 노출될 수 있는 예외의 전체 목록을 제공하지 않는다. 특정 구현 정의 단계에서 나올 수 있는 것만 포함한다.
4.5. 권한 정책 통합
language detector API에 대한 접근은 정책 제어 기능 "language-detector" 뒤에 게이트되어 있으며, 이는
'self'의
기본 allowlist를 가진다.
5. 프라이버시 고려사항
translator 및 language detector API의 프라이버시 고려사항에 대한 논의는 Writing Assistance APIs § 6 Privacy considerations를 참조하라. 그 텍스트는 § 2 의존성에서 언급한 것처럼, 동일한 인프라를 공유하는 모든 API에 적용되도록 작성되었다.
6. 보안 고려사항
translator 및 language detector API의 보안 고려사항에 대한 논의는 Writing Assistance APIs § 7 Security considerations를 참조하라. 그 텍스트는 § 2 의존성에서 언급한 것처럼, 동일한 인프라를 공유하는 모든 API에 적용되도록 작성되었다.