1. はじめに
翻訳および言語検出 API は、人間の言語間でテキストを翻訳し、そのようなテキストの言語を 検出する機能を公開します。これらは、この目的のためにブラウザーに組み込まれている UI 機能を補完するものであり、 Web 開発者に、これらの操作をプログラムから起動し、それらをアプリケーションに統合する能力を 与えます。これは、ユーザー入力やネットワークから取得したテキストを処理する場合に、特に役立ちます。
これらの API は、翻訳および言語検出のための高水準インターフェイスを提供するように設計されており、 基盤となる機械学習モデルとその管理の複雑さを抽象化します。異なる実装戦略や言語サポートに起因する 相互運用性の問題の可能性に対処するため、API 設計は、アプリケーションが依存する言語の可用性を確認し、 適切なエラー処理を含める方向へ開発者を導きます。
2. 依存関係
この仕様は Infra Standard に依存します。 [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 を実装するには、その 共有インフラストラクチャを実装し、それらのプライバシーおよびセキュリティ上の考慮事項に適合する必要があります。 ただし、実際の 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"] へテキストを翻訳するために、ユーザーエージェントが必要とするすべてのものについて、 ダウンロード処理を開始します。これには、基盤となる翻訳モデルと特定の言語アーク素材の両方、または中間言語が使用される場合には 複数の言語アーク用の素材が含まれる可能性があります。
-
何らかの理由でダウンロード処理を開始できない場合は、false を返します。
-
true を返します。
TranslatorCreateCoreOptions
options が与えられたとき、翻訳モデルを初期化するには:
-
options["
sourceLanguage"] から options["targetLanguage"] への翻訳に関するユーザーエージェントの能力を支える AI モデルについて、必要な初期化操作を実行します。これには、モデルをメモリにロードすること、または対象の特定のオプションをサポートするために 必要なファインチューニングをロードすることが含まれる可能性があります。
-
何らかの理由で初期化が失敗した場合は、DOMException エラー情報を返します。その name は "
OperationError" であり、その details には適切な詳細が含まれます。 -
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 のいずれかを返し、言語タグをその最良適合の一致に更新するために 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" を返します。
言語アークは、2 つの 文字列からなる タプル、 すなわち ソース言語および ターゲット 言語です。各項目は Unicode 正準化ロケール識別子です。
Availability
値への map、または null を返します。
-
ユーザーエージェントが、テキストの翻訳をサポートできる言語アークを判断しようとした際に何らかのエラーがあり、 ユーザーエージェントがそれを一時的なもの(再照会すればそのようなエラーが発生しなくなる可能性があるもの)と 考える場合は、null を返します。
-
言語アークから
Availability値への map を返します。各キーは、ユーザーエージェントがテキスト間の翻訳を サポートする 言語アークであり、次の制約に従って埋められます。-
ユーザーエージェントが、言語アークのソース言語からターゲット言語へのテキスト翻訳を 現在サポートしている場合、 map は、その 言語アークをキーとし、"
available" を 値とする entry を含まなければなりません。 -
ユーザーエージェントが、サポートできるようになると考えているが、 すでに進行中のダウンロードを完了した後に限る場合、つまり 言語アークの ソース言語から ターゲット言語へのテキスト翻訳については、 map は、その 言語アーク をキーとし、 "
downloading" を 値とする entry を含まなければなりません。 -
ユーザーエージェントが、サポートできるようになると考えているが、 現在進行中ではないダウンロードを実行した後に限る場合、つまり 言語アークの ソース言語から ターゲット言語へのテキスト翻訳については、 map は、その 言語 アークをキーとし、 "
downloadable" を 値とする entry を含まなければなりません。
-
-
("
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") » と
重複するため、ユーザーエージェントの 翻訳器言語アーク可用性は、これら両方の 言語
アークを同時に含むことはできません。
代わりに、典型的なユーザーエージェントは英語からフランス語への言語アークを 1 つだけ
(おそらく ("en", "fr"))サポートするか、または ("en",
"fr-FR")、("en",
"fr-CA")、および ("en", "fr-CH") のような、
複数の非重複の英語からフランス語への言語アークをサポートできます。
後者の場合、Web 開発者が ai
を使用して翻訳器の作成を要求したなら、LookupMatchingLocaleByBestFit アルゴリズムは、
使用する 3 つの可能な言語アークのうち 1 つ(おそらく ("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 正準化ロケール識別子 sourceLanguage、
-
Unicode 正準化ロケール識別子 targetLanguage、
-
数値 inputQuota、
-
文字列を受け取り何も返さないアルゴリズム chunkProduced、
-
引数を取らず何も返さないアルゴリズム done、
-
エラー情報を受け取り何も返さないアルゴリズム error、および
-
引数を取らずブール値を返すアルゴリズム 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) が同一性翻訳によって満たすことができる場合、 結果の翻訳は 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 を実行します。
-
Break します。
-
-
そうではなく、stopProducing が true を返す場合は、break します。
-
そうではなく、翻訳中にエラーが発生した場合:
-
エラーを、§ 3.4.3 エラーの指針に従った DOMException エラー 情報 errorInfo として表します。
-
errorInfo を与えて error を実行します。
-
Break します。
-
-
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 が与えられたとき、言語検出器オブジェクトを作成するには:
-
Assert: これらの手順は realm の surrounding agent の event loop 上で実行されています。
-
inputQuota を、将来の言語 検出操作のためにユーザーエージェントが利用できる入力クォータの量とします。(この値は 実装定義であり、ユーザーのメモリや JavaScript 文字列の制限などを超える 特定の制限がない場合には +∞ である可能性があります。)
-
realm 内に作成された新しい
LanguageDetectorオブジェクトを、次を伴って返します。- 期待される入力言語
-
options["
expectedInputLanguages"] が空でない場合は、それを与えて 凍結配列を作成する結果。そうでなければ null - 入力クォータ
-
inputQuota
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 を、this の 関連するグローバルオブジェクトとします。
-
global の 関連付けられた Document が 完全にアクティブでない場合は、"
InvalidStateError"DOMExceptionで拒否された promiseを返します。 -
signals を « this の 破棄中止 コントローラーの signal » とします。
-
compositeSignal を、signals、
AbortSignal、 および this の 関連する realm を用いて、依存中止シグナルを作成する結果とします。 -
compositeSignal が中止済みである場合は、 compositeSignal の中止理由で 拒否された promiseを返します。
-
promise を、this の 関連する realm 内に作成された新しい promiseとします。
-
abortedDuringOperation を false とします。
この変数は event loop から書き込まれますが、並列に読み取られます。
-
compositeSignal に次の中止手順を追加します:
-
並列に:
-
stopProducing を次の手順とします:
-
abortedDuringOperation を返します。
-
-
result を、input, inputQuota, および stopProducing を与えて 言語を検出する結果とします。
-
global を与えて、AI タスクソース上に グローバルタスクをキューに入れ、次の手順を実行します:
-
abortedDuringOperation が true である場合は、これらの手順を中止します。
-
そうではなく、result がエラー情報である場合は、result を与えて エラー情報を例外オブジェクトに変換する結果で promise を拒否します。
-
そうでなければ:
-
Assert: result は
LanguageDetectionResult辞書のリストです。(この場合 abortedDuringOperation が true であったはずなので、null ではありません。) -
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 を返します。
-
Assert: requested は数値です。
-
requested が inputQuota より大きい場合は、 requested の requested と inputQuota の quota を持つ クォータ超過エラー情報を返します。
実際には、実装は言語検出そのものと同じモデル呼び出しの一部として、 入力使用量をクォータに照らして確認すると想定しています。仕様では、理解しやすくするためだけに 手順を分離しています。
-
partition を、その言語で書かれたテキストを検出する目的を与えて 言語可用性パーティションを取得する結果とします。
-
currentlyAvailableLanguages を partition["
available"] とします。 -
次のガイドラインに従い、実装定義の方法で、rawResult および unknown を input の言語を検出した結果とします。
rawResult は、currentlyAvailableLanguages 内の各言語について キーを持つ mapでなければなりません。 そのような各キーの 値は、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 でスペイン語として検出され、 2 番目の部分は信頼度 1 で日本語として検出されるかもしれません。その結果の rawResult は «[ "en" → 0.25, "es" → 0.25, "ja" → 0.5 ]» (unknown は 0 に設定)になる可能性があります。これを、たとえば "
tacos"、"を"、および "食べる" の 3 つの部分ではなく 2 つの部分に分割する決定は、実装定義の選択でした。同様に、たとえば コード ポイント数で重み付けする代わりに、各部分を結果の「半分」に寄与するものとして扱う決定も 実装定義でした。(現実的には、ほとんどの言語検出モデルでは一般に 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 を、 entry a および b が与えられたとき、a の 値が b の 値より小さい場合に true を返す less than アルゴリズムでソートします。
-
results を空のリストとします。
-
cumulativeConfidence を 0 とします。
-
rawResult の各 key → value について 反復します:
-
value が 0 である場合は、break します。
-
value が unknown より小さい場合は、break します。
-
«[ "
detectedLanguage" → key, "confidence" → value ]» を results に追加します。 -
cumulativeConfidence を cumulativeConfidence + value に設定します。
-
cumulativeConfidence が 0.99 以上である場合は、break します。
-
-
Assert: 1 − cumulativeConfidence は unknown 以上です。
-
Assert: results の size が 0 より大きい場合、 results[results の size - 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 に適用されるように書かれています。