"SubwordTokens" (ネットエンコーダ)
NetEncoder[{"SubwordTokens",{token1,token2,…}}]
テキストを与えられた語彙からの部分語に分割するエンコーダを表す.
NetEncoder[{"SubwordTokens",File["path"]}]
ファイルからSentencePiece BPEモデルをロードする.
NetEncoder[{"SubwordTokens",…,"param"value}]
追加のパラメータが指定されているエンコーダを表す.
詳細
- 部分語トークン化は,単語レベルのトークン化と文字レベルのトークン化の間の体系であり,そこではトークンは完全な単語または単語の一部である.
- エンコーダの出力は1から d までの整数列である.d はトークンリストの要素数である.
- NetEncoder[…][input]はエンコーダを,出力を生み出す文字列に適用する.
- NetEncoder[…][{input1,input2,…}]はエンコーダを,出力リストを生み出す文字列リストに適用する.
- エンコーダはネットを構築するときに"port"->NetEncoder[…]と指定することにより,ネットの入力ポートにエンコーダを付加することができる.
- NetDecoder[NetEncoder[{"SubwordTokens",…}]]は NetDecoder[{"SubwordTokens",…}]を指定のエンコーダから受け継いだ設定で作り出す.
- NetEncoder[{"SubwordTokens",{token1,token2,…},…}]において,各トークンは文字列またはこれらの特殊トークンの一つでなければならない.
-
StartOfString 文字列の前に現れるバーチャルトークン EndOfString 文字列の後に現れるバーチャルトークン _ 割当てなしの文字 - 慣例により,単語を開始するトークンは最初にスペースがある文字列 (" word"等) に対応し,単語内のトークンは最初に他の文字がある文字列 ("tion"等) に対応する.
- トークンのリストは,常に割り当てられていない記号「_」を含まなければならない.
- パラメータ"IncludeTerminalTokens"Trueのときは,StartOfStringとEndOfStringも含まれなければならない.
- 以下のパラメータが使用できる:
-
IgnoreCase False 文字列からトークンをマッチするときに大文字と小文字の違いを無視するかどうか "IncludeTerminalTokens" False StartOfStringとEndOfStringのトークンを出力に含むかどうか "InputType" "String" エンコーダへの各入力の形式 Method "BPE" テキストを部分語に分割するアルゴリズム "OutputProperties" "VocabularyIndex" それぞれの部分語についての出力特性 "TargetLength" All 刈込みまたは充填後の最終的な文字列の長さ "TextPreprocessing" None 他のエンコーダ操作が適用される前に,入力テキストを変換する関数 "UnicodeNormalization" None 使用するユニコード正規化体系 "Vocabulary" None エンコーダによって作り出されるトークンの集合 - Method の設定には以下が使用可能である:
-
"BPE" バイト対符号化 {"BPE","param"value} サブオプションの付いたバイト対符号化 "WordPiece" WordPiece手法 - Method{"BPE", …}で使用できるサブオプションには以下のようなものがある:
-
"CombineWhitespace" False - 連続する空白文字をまとめるかどうか
"WhitespacePadding" None 入力文字列への空白の挿入を制御する - パラメータ"WhitespacePadding"はLeftまたはRightに設定することで,符号化が行われる前に入力文字列の最初または最後に空白を加えることができる.デフォルト値がNoneであれば空白は追加されない.
- パラメータ"InputType"には以下の設定が使用できる:
-
"ListOfString" 各入力テキストは文字列のリストで表される "String" 各入力テキストは文字列で表される - パラメータ"OutputProperties"には以下の設定が使える:
-
"VocabularyIndex" トークンのリスト内のトークンのインデックス(デフォルト) "InputIndex" トークンを含む文字列のインデックス( "InputType""ListOfString"の1と異なる可能性あり) "StartPosition" テキスト中の最初のトークンの位置 "EndPosition" テキスト中の最後のトークンの位置 {prop1,prop2,…} 有効な特性のリスト - デフォルトのパラメータ設定"TargetLength"->Allでは,入力文字列内のすべてのトークンは符号化される.
- パラメータ"TargetLength"->n では,入力文字列内の最初の n 個のトークンは符号化され,もしトークンが n 個未満であれば,充填が適用される.トークンのリストに EndOfString がある場合,充填値はそれに関連する整数コードである.それ以外の場合は最後のトークンに関連するコードが使われる.
- "UnicodeNormalization"に使用可能な設定には,CharacterNormalizeのユニコード正規化形式が含まれる:
-
"NFD" 正準分解(D形式) "NFC" 正準分解後の正準合成(C形式) "NFKD" 互換分解(KD形式) "NFKC" 互換分解後の正準合成(KC形式) None 正規化なし - 語彙はトークン文字列のリストとして,オプション "Vocabulary"{token1,token2,…}を使って指定できる.語彙が指定されている場合,エンコーダは語彙に入っていないトークンの整数コードは作り出さない.Method"BPE"では,トークン化が語彙外のトークンを作り出す場合,そのトークンを作り出した操作は,トークンが語彙内のトークンまたは単一文字に分かれるまで逆戻しされる.
- SentencePieceライブラリからのBPEモデルファイルは,NetEncoder[{"SubwordTokens",File["path"],…}]を使ってインポートできる.
- SentencePieceライブラリからの語彙ファイルは,オプション"Vocabulary"File["path"]を使ってインポートできる.語彙トークンの受容の閾値は"Vocabulary"{File["path"],"Threshold"value]を使って指定できる.その際,value は数字である.閾値が指定されていない場合は語彙全体がインポートされる.
- SentencePiece BPE語彙ファイルは整数スコアを各トークンに関連付ける.各トークンのスコアは訓練データにおける頻度に関連付けられ,頻度が最も高いトークンのスコアがゼロで,他のトークンのスコアは負の整数となる.サブオプション"VocabularyThreshold"を n という数に設定することで,最小 n のスコアを持つトークンのみが語彙に受容される.
- SentencePiece BPEモデルファイルをインポートするとき,パラメータ指定がファイル(もしあれば)からの設定を上書きする.
パラメータ
SentencePieceからBPEモデルをインポートする
例題
すべて開くすべて閉じるパラメータ (10)
"CombineWhitespace" (1)
SentencePiece BPEモデルをインポートして,その"CombineWhitespace" 設定をオーバーライドする:
文字列を符号化する.複数のホワイトスペースは符号化する前に1つに結合されない:
このモデルのデフォルト設定は "CombineWhitespace"->Trueである:
"IncludeTerminalTokens" (1)
SentencePiece BPEモデルには,デフォルトにより終端トークンが含まれていない.モデルをインポートし,"IncludeTerminalTokens"が使えるようにする:
文字列を符号化する.StartOfStringとEndOfStringトークンが作成される:
"OutputProperties" (1)
"TargetLength" (1)
SentencePiece BPEモデルをインポートし,文字列が12要素の長さになるよう充填または刈込みされるよう指定する:
文字列を符号化する.要素が12未満の出力はEndOfStringトークンによって充填される:
"TextPreprocessing" (1)
"UnicodeNormalization" (1)
"Vocabulary" (2)
"WhitespacePadding" (1)
SentencePiece BPEモデルをインポートし,その"WhitespacePadding"設定を無効にする:
文字列を符号化する.最初の単語「great」は部分語に分割される:
このモデルのデフォルト設定は"WhitespacePadding"Leftだが,これは最初に空白を挿入し, 「great」というトークンとマッチするようにする:
アプリケーション (1)
映画のレビューの断片を"positive" (高評価)または "negative"(低評価)として分類する分類器を訓練する.
まず,訓練データとテストデータを得る:
NetModelを使って,Wolfram Neural Net Repositoryからの"SubwordTokens"エンコーダを使ったEmbeddingLayerを得る:
埋込みを使って単語の文字列を取り,"positive"(高評価)または"negative"(低評価)として返すネットワークを入力として定義する:
ネットワークを5ラウンドの訓練データで訓練する.EmbeddingLayerの重みはオプションLearningRateMultipliersを使って固定する:
特性と関係 (1)
与えられたエンコーダと類似の指定で"SubwordTokens" デコーダを作成する:
考えられる問題 (1)
エンコーダのパラメータのほとんどは,"SubwordTokens" デコーダでは必要ないため,往復すると設定は失われてしまう可能性がある.以下のエンコーダはUnicode正規化を行う: