1. 引言
翻译器和语言检测器 API 暴露了在人类语言之间翻译文本、 以及检测此类文本语言的能力。它们补充了浏览器为这些目的内置的任何 UI 功能, 使 Web 开发者能够以编程方式触发这些操作,并将其集成到他们的应用中。 这对于处理用户输入,或从网络检索到的文本特别有用。
这些 API 旨在为翻译和语言检测提供高级接口, 抽象掉底层机器学习模型及其管理的复杂性。为了处理由不同实现策略或语言支持引起的潜在互操作性问题, API 设计引导开发者检查其应用所依赖语言的可用性, 并包含适当的错误处理。
2. 依赖项
本规范依赖 Infra 标准。[INFRA]
与 Web 平台的其余部分一样,在这些 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 需要实现该 共享基础设施,并符合这些隐私和安全考虑。但这并不要求 实现或暴露实际的写作辅助 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"] 所需的一切内容。这可能同时包括基础翻译模型和特定的语言弧材料,或者如果使用中间语言, 也可能包括多个语言弧的材料。
-
如果由于任何原因无法启动下载过程,则返回 false。
-
返回 true。
TranslatorCreateCoreOptions
options 的情况下初始化翻译模型:
-
为支持用户代理从 options["
sourceLanguage"] 翻译到 options["targetLanguage"] 能力的 AI 模型,执行任何必要的初始化操作。这可能包括将模型加载到内存中,或加载为支持相关特定选项而必要的任何微调。
-
如果初始化由于任何原因失败,则返回一个 DOMException 错误信息,其 name 为 "
OperationError", 并且其 details 包含适当的细节。 -
返回 null。
TranslatorCreateCoreOptions
options 的情况下创建
翻译器对象:
-
令 inputQuota 为用户代理可用于未来翻译 操作的输入配额量。(此值是由实现定义的,并且如果除了例如用户内存或 JavaScript 字符串限制之外 没有特定限制,则可以为 +∞。)
-
返回一个新的
Translator对象,它在 realm 中创建,具有- 源语言
-
options["
sourceLanguage"] - 目标语言
-
options["
targetLanguage"] - 输入配额
-
inputQuota
3.2. 可用性
availability(options) 方法步骤为:
-
返回在给定 options、"
translator"、 验证并规范化 翻译器选项、以及 计算翻译器选项 可用性的情况下,计算 AI 模型可用性的结果。
TranslatorCreateCoreOptions
options 的情况下计算翻译器选项可用性,
执行以下步骤。它们返回一个 Availability
值或 null,并且会就地改变 options,以将语言标签更新为它们的最佳匹配。
-
令 availabilities 为用户代理的翻译器语言弧 可用性。
-
如果 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"]) 可由 恒等翻译满足,则返回 "available"。如果用户代理在其翻译器语言弧 可用性中为给定语言弧有特定条目, 则由于上述步骤,此类情况也可以返回 "
downloadable"、 "downloading"、 或 "available"。 但是,恒等翻译始终可用,因此此步骤确保我们绝不会为这类情况返回 "unavailable"。一个语言弧 (
"en-US","en-GB") 可由恒等翻译 满足。可以设想,某个实现可能支持用于此翻译的专用模型, 它会出现在翻译器语言弧 可用性中。另一方面,实现具有用于 语言弧 ("
en-x-asdf", "en-x-xyzw") 的任何专用模型是相当不可能的。 在这种情况下,此步骤会接管, 并且之后对 translate 算法的调用将使用恒等翻译。请注意,当此步骤接管时,options["
sourceLanguage"] 和 options["targetLanguage"] 不会被修改,因此如果此算法是从create()调用的, 这意味着生成的Translator对象的sourceLanguage和targetLanguage属性将返回原始输入,而不是某种规范化形式。 -
返回 "
unavailable"。
语言弧是由两个 字符串构成的元组, 即一个源语言和一个 目标 语言。每一项都是一个 Unicode 规范化语言环境标识符。
Availability
值的映射,或返回 null。
-
如果尝试确定用户代理可支持哪些语言弧之间的文本翻译时出现某些错误, 并且用户代理认为该错误是暂时性的(使得重新查询可能不再产生此类错误), 则返回 null。
-
返回一个从语言弧到
Availability值的映射,其中每个键都是用户代理支持在其之间翻译文本的 语言弧,并按以下约束填充:
-
("
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 将最佳匹配到 zh-Hans await a( "en" , "zh-TW" ) === "downloadable" ; // zh-TW 将最佳匹配到 zh-Hant await a( "en" , "zh-HK" ) === "available" ; // zh-HK 将最佳匹配到 zh-Hans await a( "en" , "zh-CN" ) === "available" ; // zh-CN 将最佳匹配到 zh-Hans await a( "en-US" , "zh-Hant" ) === "downloadable" ; // en-US 将最佳匹配到 en await a( "en-GB" , "zh-Hant" ) === "downloadable" ; // en-GB 将最佳匹配到 en // 即使非常意外的子标签也会最佳匹配到 en 或 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") »
重叠,因此
用户代理的翻译器语言弧可用性不能
同时包含这两个语言
弧。
相反,典型的用户代理要么只支持一个英语到法语语言弧(大概是
("en", "fr")),要么可以支持多个不重叠的英语到法语
语言弧,例如 ("en", "fr-FR")、("en",
"fr-CA") 和 ("en", "fr-CH")。
在后一种情况下,如果 Web 开发者请求使用 ai
创建翻译器,LookupMatchingLocaleByBestFit 算法会
选择三个可能语言弧之一来使用(大概是 ("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)
方法步骤为:
3.4. 翻译
3.4.1. 算法
-
一个字符串 input,
-
一个 Unicode 规范化语言环境标识符 sourceLanguage,
-
一个 Unicode 规范化语言环境标识符 targetLanguage,
-
一个数字 inputQuota,
-
一个接受字符串并且不返回任何内容的算法 chunkProduced,
-
一个不接受参数并且不返回任何内容的算法 done,
-
一个接受错误信息并且不返回任何内容的算法 error,以及
-
一个不接受参数并返回布尔值的算法 stopProducing,
执行以下步骤:
-
令 requested 为在给定 input、sourceLanguage、targetLanguage 和 stopProducing 的情况下测量翻译器输入用量的结果。
-
如果 requested 为 null,则返回。
-
如果 requested 是错误信息,则:
-
使用 requested 执行 error。
-
返回。
-
-
断言:requested 是一个数字。
-
如果 requested 大于 inputQuota,则:
实际上,我们预计实现会将输入用量与配额的检查 作为与翻译本身相同的模型调用的一部分来完成。规范中分离这些步骤只是为了便于理解。
-
以由实现定义的方式,在遵循以下指南的前提下, 开始将 input 从 sourceLanguage 翻译为 targetLanguage 的过程。
如果 input 是空字符串,或以其他方式不包含可翻译内容(例如, 只包含空白字符或控制字符),则生成的翻译应为 input。在这种情况下,sourceLanguage 和 targetLanguage 应 被忽略。
如果 (sourceLanguage, targetLanguage) 可由 恒等翻译满足,则生成的翻译应为 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 时:
-
等待下一块翻译文本产生、翻译过程完成、或调用 stopProducing 的结果变为 true。
-
如果成功产生了这样一个块:
-
令它表示为一个字符串 chunk。
-
使用 chunk 执行 chunkProduced。
-
-
否则,如果翻译过程已经完成:
-
执行 done。
-
中断。
-
-
否则,如果 stopProducing 返回 true,则中断。
-
否则,如果翻译期间发生错误:
-
令该错误按照 § 3.4.3 错误 中的指南表示为一个 DOMException 错误 信息 errorInfo。
-
使用 errorInfo 执行 error。
-
中断。
-
-
3.4.2. 用量
-
一个字符串 input,
-
一个 Unicode 规范化语言环境标识符 sourceLanguage,
-
一个 Unicode 规范化语言环境标识符 targetLanguage,以及
-
一个不接受参数并返回布尔值的算法 stopMeasuring,
执行以下步骤:
-
令 inputToModel 为为了将 input 从 sourceLanguage 翻译到 targetLanguage 而会发送给底层模型的由实现定义的字符串。
如果 sourceLanguage 和 targetLanguage 在初始化期间已加载到模型中,这可能只是 input 本身。或者它可能包含更多内容,例如用于编码相关语言的适当配额用量, 或某种给语言模型的包装提示词。
如果在此过程中 stopMeasuring 开始返回 true,则返回 null。
如果在此过程中发生错误,则根据 § 3.4.3 错误 中的指南, 返回适当的 DOMException 错误信息。
-
返回在给到底层模型时表示 inputToModel 所需的输入用量。 精确的计算过程是由实现定义的,但受以下约束。
返回的输入用量必须是非负且有限的。如果翻译过程没有用量配额 (也就是说,如果输入配额为 +∞), 则它必须为 0。否则,它必须为正,并且应大致与 inputToModel 的长度成比例。
这可能是用语言模型 分词方案表示 input 所需的令牌数量,或者可能是 input 的长度。 它也可能是这些方式的某种变体,还会计入为了给模型而必要的任何前缀或后缀的用量。
如果在此过程中 stopMeasuring 开始返回 true,则改为返回 null。
如果在此过程中发生错误,则改为根据 § 3.4.3 错误 中的指南 返回适当的 DOMException 错误信息。
3.4.3. 错误
当翻译失败时,以下可能原因可以暴露给 Web 开发者。此表列出了
可能的 DOMException
name,以及实现应使用它们的情况:
DOMException
name
| 场景 |
|---|---|
"NotAllowedError"
|
由于用户选择或用户代理策略,翻译被禁用。 |
"NotReadableError"
|
翻译输出被用户代理过滤,例如因为它被检测为 有害、不准确或无意义。 |
"UnknownError"
|
所有其他场景,包括用户代理认为它无法翻译并同时满足 Writing Assistance APIs § 6 Privacy considerations 和 Writing Assistance APIs § 7 Security considerations 中给出的要求的情况。 或者,用户代理不想披露失败原因的情况。 |
此表并未给出翻译器 API 可暴露的完整异常列表。 它只包含那些可能来自某些由实现定义步骤的异常。
3.5. 权限策略集成
对翻译器 API 的访问受策略控制特性 "translator" 保护,
它具有
'self'
的默认允许列表。
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"] 中所标识语言的特定微调或其他材料。 -
如果由于任何原因无法启动下载过程,则返回 false。
-
返回 true。
LanguageDetectorCreateCoreOptions
options 的情况下初始化语言检测器模型:
-
为支持用户代理检测输入文本语言能力的 AI 模型执行任何必要的初始化操作。
这可能包括将模型加载到内存中,或加载为支持 options["
expectedInputLanguages"] 中所标识语言而必要的任何微调。 -
如果初始化由于任何原因失败,则返回一个 DOMException 错误信息,其 name 为 "
OperationError", 并且其 details 包含适当的细节。 -
返回 null。
LanguageDetectorCreateCoreOptions
options 的情况下创建语言检测器对象:
4.2. 可用性
availability(options) 方法步骤
为:
-
返回在给定 options、"
language-detector"、 验证并规范化 语言检测器选项、以及 计算语言检测器 选项可用性的情况下,计算 AI 模型可用性的结果。
LanguageDetectorCreateCoreOptions
options 的情况下计算语言检测器选项可用性,
执行以下步骤。它们返回一个 Availability
值或 null,并且会就地改变 options,以将语言标签更新为它们的最佳匹配。
-
如果尝试确定用户代理可支持哪些语言检测能力时出现某些错误, 并且用户代理认为该错误是暂时性的(使得重新查询可能不再产生此类错误),则返回 null。
-
令 partition 为在给定检测以该语言书写文本的目的的情况下,获取语言可用性 分区的结果。
-
返回在给定 options["
expectedInputLanguages"] 和 partition 的情况下,计算语言可用性的结果。
4.3.
LanguageDetector
类
每个 LanguageDetector
都有一个预期输入语言,它是
或 null,在创建期间设置。
FrozenArray<DOMString>
每个 LanguageDetector
都有一个输入配额,它是一个数字,在创建期间设置。
expectedInputLanguages getter 步骤
是返回 this 的预期输入语言。
inputQuota getter 步骤是返回 this 的输入配额。
detect(input, options) 方法
步骤为:
-
如果 global 的关联 Document 不是完全活动的,则返回以 "
InvalidStateError"DOMException拒绝的 promise。 -
令 compositeSignal 为使用
AbortSignal并给定 signals 和 this 的相关 realm,创建依赖中止信号的结果。 -
如果 compositeSignal 已中止,则返回以 compositeSignal 的中止原因拒绝的 promise。
-
令 abortedDuringOperation 为 false。
-
向 compositeSignal 添加以下中止步骤:
-
并行地:
-
令 stopProducing 为以下步骤:
-
返回 abortedDuringOperation。
-
-
令 result 为在给定 input、 inputQuota 和 stopProducing 的情况下检测语言的结果。
-
在给定 global 的情况下,将一个全局任务排入AI 任务源,以执行以下步骤:
-
如果 abortedDuringOperation 为 true,则中止这些步骤。
-
否则,如果 result 是错误信息,则用在给定 result 的情况下将 错误信息转换为异常对象的结果拒绝 promise。
-
否则:
-
断言:result 是一个由
LanguageDetectionResult字典组成的列表。(它不是 null,因为在那种情况下 abortedDuringOperation 本应为 true。) -
用 result 兑现 promise。
-
-
-
measureInputUsage(input, options)
方法步骤为:
-
令 measureUsage 为一个算法步骤,它接受参数 stopMeasuring, 并返回在给定 input 和 stopMeasuring 的情况下测量语言检测器输入 用量的结果。
-
返回在给定 this、options 和 measureUsage 的情况下,测量 AI 模型输入用量的结果。
4.4. 语言检测
4.4.1. 算法
LanguageDetectionResult
字典组成的列表。
-
令 requested 为在给定 input 和 stopProducing 的情况下测量语言检测器输入 用量的结果。
-
如果 requested 为 null 或错误信息,则返回 requested。
-
断言:requested 是一个数字。
-
如果 requested 大于 inputQuota,则返回一个配额超出错误信息,其 requested 为 requested,其 quota 为 inputQuota。
实际上,我们预计实现会将输入用量与配额的检查 作为与语言检测本身相同的模型调用的一部分来完成。这些步骤在规范中分离只是为了便于理解。
-
令 partition 为在给定检测以该语言书写文本的目的的情况下,获取语言可用性 分区的结果。
-
令 currentlyAvailableLanguages 为 partition["
available"]。 -
以由实现定义的方式,在遵循以下指南的前提下, 令 rawResult 和 unknown 为检测 input 语言的结果。
rawResult 必须是一个映射, 它为 currentlyAvailableLanguages 中的每种语言都有一个键。 每个此类键的值必须是 0 到 1 之间的数字。该 值必须表示实现对 input 是以该语言书写的置信度。
unknown 必须是一个 0 到 1 之间的数字,它表示实现对 input 不是以 currentlyAvailableLanguages 中任何语言书写的置信度。
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 个码 点。)
如果在此过程中的任何时刻 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。
-
令 results 为空列表。
-
令 cumulativeConfidence 为 0。
-
对于 rawResult 的每个 key → value:
-
如果 value 为 0,则中断。
-
如果 value 小于 unknown,则中断。
-
将 «[ "
detectedLanguage" → key, "confidence" → value ]» 追加到 results。 -
将 cumulativeConfidence 设为 cumulativeConfidence + value。
-
如果 cumulativeConfidence 大于或等于 0.99,则中断。
-
-
断言:1 − cumulativeConfidence 大于或 等于 unknown。
-
断言:如果 results 的大小大于 0,则 results[results 的大小 - 1]["
confidence"] 大于或等于 unknown。 -
将 «[ "
detectedLanguage" → "und", "confidence" → unknown ]» 追加到 results。 -
返回 results。
概率低于 1%、 或对文本贡献少于 1% 的语言,被认为更可能是噪声,因此不值得 返回给 Web 开发者。类似地,如果实现对某种语言的把握低于它对文本不属于其已知任何语言的把握, 那种语言很可能也不值得返回给 Web 开发者。
由于此类被省略的低概率结果, 返回给 Web 开发者的所有置信度值之和可能小于 1。
4.4.2. 用量
-
令 inputToModel 为为了在给定 input 的情况下检测语言而会发送给底层模型的由实现定义的字符串。
这可能只是 input 本身,或者 它可能包含某种给语言模型的包装提示词。
如果在此过程中 stopMeasuring 开始返回 true,则返回 null。
如果在此过程中发生错误,则根据 § 4.4.3 错误 中的指南, 返回适当的 DOMException 错误信息。
-
返回在给到底层模型时表示 inputToModel 所需的输入用量。 精确的计算过程是由实现定义的,但受以下约束。
返回的输入用量必须是非负且有限的。如果翻译过程没有用量配额 (也就是说,如果输入 配额为 +∞),则它必须为 0。否则,它必须为正,并且应大致与 inputToModel 的长度成比例。
这可能是用语言模型 分词方案表示 input 所需的令牌数量,或者可能是 input 的长度。 它也可能是这些方式的某种变体,还会计入为了给模型而必要的任何前缀或后缀的用量。
如果在此过程中 stopMeasuring 开始返回 true,则改为返回 null。
如果在此过程中发生错误,则改为根据 § 4.4.3 错误 中的指南 返回适当的 DOMException 错误信息。
4.4.3. 错误
当语言检测失败时,以下可能原因可以暴露给 Web 开发者。此表列出了可能的 DOMException
name,以及实现应使用它们的情况:
DOMException
name
| 场景 |
|---|---|
"NotAllowedError"
|
由于用户选择或用户代理策略,语言检测被禁用。 |
"UnknownError"
|
所有其他场景,包括用户代理认为它无法检测并同时满足 Writing Assistance APIs § 6 Privacy considerations 和 Writing Assistance APIs § 7 Security considerations 中给出的要求的情况。 或者,用户代理不想披露失败原因的情况。 |
此表并未给出语言检测器 API 可暴露的完整异常列表。 它只包含那些可能来自某些由实现定义步骤的异常。
4.5. 权限策略集成
对语言检测器 API 的访问受策略控制特性 "language-detector" 保护,它具有
'self'
的默认允许列表。
5. 隐私考虑
有关翻译器和语言检测器 API 的隐私考虑讨论,请参见 Writing Assistance APIs § 6 Privacy considerations。如 § 2 依赖项 所述, 该文本是为适用于共享同一基础设施的所有 API 而编写的。
6. 安全考虑
有关翻译器和语言检测器 API 的安全考虑讨论,请参见 Writing Assistance APIs § 7 Security considerations。如 § 2 依赖项 所述, 该文本是为适用于共享同一基础设施的所有 API 而编写的。