You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The text was updated successfully, but these errors were encountered:
jojonki
changed the title
🚧 2018: SentencePiece: A simple and language independent subword tokenizer and detokenizer for Neural Text Processing
2018: SentencePiece: A simple and language independent subword tokenizer and detokenizer for Neural Text Processing
Jan 17, 2019
SentencePiece: A simple and language independent subword tokenizer and detokenizer for Neural Text Processing
Taku Kudo, John Richardson
Accepted as a demo paper at EMNLP2018
https://arxiv.org/abs/1808.06226
著者本人の解説(日本語) https://qiita.com/taku910/items/7e52f1e58d0ea6e7859c
Github: https://github.com/google/sentencepiece
概要
言語に依存しないサブワードによるTokenizer/Detokenizer(トークン化/脱トークン化)であるSentencePieceの提案.NMTなどニューラルベースのNLPに利用することを想定としている.これまでのサブワードベースのTokenizerは,事前にトークン化された単語系列のデータを想定するのに対して,SentencePieceでは,そのような処理は不要で直接生の文をトークン化できるため,本当の意味でのend-to-endを実現できる.
評価として,日英機械翻訳で実験した.
C++とPythonで書かれており,OSSである.
イントロ
DNNはNLPでも大きなインパクトを与えており,特にNMT(Neural Machien Translation)はNLPにおいて,もっともメジャーなタスクである.シンプルなe2eで実現できる.しかし多くのNMTは,言語依存の事前・事後の処理が必要になっており,それらは伝統的な統計的機械翻訳(SMT)で利用されている.MosesはSMTのためのデファクトなツールではあるが,手作業で言語依存のルールで作られている.またそれらのツールはスペース区切りのヨーロッパ系の言語用にデザインされているが,非セグメンテーション言語である中国語,韓国語,日本語のような言語の場合,言語毎に事前・事後の処理が必要になってしまう.
本論ではシンプルで言語独立のテキストTokenizer/DetokenizerであるSentencePieceを提案.ニューラルモデルの学習の前に,語彙数が決まっている,ニューラルネットベースのテキスト生成システム(翻訳やNLG)を主なターゲットにしている.
SentencePieceは2つのサブワードセグメンテーションアルゴリズムを採用している
SentencePieceでは生の文から直接学習できるため,真のe2e学習が,言語独立でできる
システムオーバービュー
SentencePieceは4つのメインコンポーネント,Normalizer, Trainer, Encoder, Decoderから構成される.
意味的に等価なユニコード文字列を標準形式に正規化する
正規化コーパスから,サブワードのセグメンテーションを学習する.Trainerのパラメタとして,サブワードモデルのタイプを指定する
入力テキストをNormalizerを使って正規化し,Trainerで学習したモデルを利用して,サブワードにトークン化する.事前処理(トークン化)に対応.
サブワードの系列データを,正規化テキストに変換する.事後処理(脱トークン化)に対応.
SentencePieceでは,語彙とidの管理を行っており,テキスト列を入力してもよいし,idを入力しても良い.出力もテキストでもidでもどちらも対応.実行例を以下に示す.
ライブラリデザイン
この章では,SentencePieceの設計と実装の詳細を説明する
ロスなしトークン化
下記の例を考える.Detokenization(トークン化ー>生文への復元)を行うためには,言語依存の知識が必要となる.英語だと単語間は普通スペースがあるが,ピリオドとトークンの間には不要.日本語や中国語ではトークン間には基本的にスペース不要,など.こういったものはルールベースで作られており,人手でメンテされている.
SentencePieceでは,下記のように可逆的に変換できるようにしている.この設計を,ロスなしトークン化,と呼ぶことにする.
またSentencePieceでは,最初に空白文字をメタ文字"▁"(U+2581)で置き換えている.トークン化した際にも空白情報を損なわないので,Detokenizationしたときに, ▁と空白を全置換するだけで元の文字列に復元できる.
効率的なサブワード学習とセグメンテーション
既存のサブワード分割ツールは,事前にトークン化されているデータを用いてセグメンテーションを学習する.しかしその場合,ロスなしトークン化は難しい.
SentencePieceでは,ロスなしトークン化を実現するための,学習とセグメンテーションにおいて,いくつかの速度向上技術を採用している.
ある長さNの入力文を与えた場合,BPEによるセグメンテーションはO(N^2)と計算コストが高い一報,SentencePieceではO(N log(N))をバイナリヒープ(priority queue)で実現.大規模な生文から直接学習・分割が可能.更に,unigramモデルでの学習とセグメンテーションは,入力データに比例する.
語彙IDの管理
SentencePieceは語彙とIDのマッピングを双方向で管理できる.また語彙数は学習時に指定できる.subword-nmtではmerge数で指定する.
SentencePieceは特別なシンボルを予約済み:UNK, BOS, EOS, PAD.また仮想トークンとして,コンテキスト情報をエンコードするため,カスタムのシンボルも定義している.例として,<2ja>と<2de>はマルチ言語モデルのための,言語インジケーターになっている.
文字正規化のカスタマイズ
文字の正規化は,非常に重要な事前処理のステップ.というのも文字にはゆらぎがあり,その中には同意味のものも含んでいる.これまでは,NFCやNFKCという手作業でメンテされているツールがNLPで使われてきた(issue下部に正規化例の参考あり).
SentencePieceはデフォルトでは,NFKCを利用して正規化する.またユーザー定義の正規化ルールもtsvファイルで記述して取り込める.またSentencePieceのデフォルトの正規化ルール(tsv)もパッケージに含まれて確認できる
Self-contained models
最近の提案されているNMTモデルは,追試のために公開されている場合が多いが,僅かな設定の違いによりBLEUスコアが大きく変わる可能性があると提案されている.Mosesのようなツールを使う場合でも,パラメタはすべて明示的に公開されている必要がある.またNFKC正規化はUnicodeのバージョンによって異なる結果を生成する時がある.
理想的には,再現性のために,モデルはルールとパラメタをモデル内に埋め込みで持っているのが好ましい.
SentencePieceのモデルは,語彙とセグメンテーションのパラメタのみならず,文字正規化のための事前コンパイル済み有限状態トランスデューサーのパラメタも含んでいる.つまり,SentencePieceはself-containedにデザインされている.そのためSentencePieceの振る舞いは,外部ファイルなど不要で,そのモデルファイルのみで決定づけられる.また開発者はデフォルトの正規化ルールを書き換えることも可能である.SentencePieceのモデルはProtocol Bufferと呼ばれる形式で管理されており,安全に構造データをシリアライズできる.// Protocol BufferはGoogleが開発したスキーマ言語,らしい
on-the-fly処理のためのAPI
テキストの事前処理は通常オフラインで行われる.NMTの学習の前に,生文はidの時系列データするような処理である.このようなオフライン事前処理は2つの問題がある.
文の内部表現をランダムに変更することによる,入力文へのノイズ混入の研究はいくつかある.
オフライン事前処理において,このような動的サンプリングやノイズ注入は難しい
SentencePieceでは,オフライン事前処理のためのスタンドアローンのコマンドラインツールの提供だけでなく,on-the-fly処理のためのC++,Python,Tensorflowのライブラリも提供している.
Figure 6にはサブワード正則化のPythonコードを載せる.1つのサブワード列は,unigram言語モデルに従いサンプルされ,異なるトークン化列を確認できる.サブワード正則化についての詳細は(Kudo 2018)参照.
実験
異なる事前処理の比較
英語ー日本語の翻訳タスク,Kyoto Free Translation Task (KFTT)で実験(Wikipedia記事をベース).train/dev/testは,440k, 1166, 1160の文数.
NMTのシステムには,GNMT (Wu, 2016)を採用.比較手法は下記.評価メトリクスとして,case-sensitive BLEUスコア(Papineni, 2001)を採用.日本語出力は分割されていないので,BLEU計算前にKyTeaで分割.
結果はTable 1に.
セグメンテーションのパフォーマンス
Table 2に,学習とセグメンテーションのパフォーマンスを様々な設定下でまとめた.// 本来subword-nmtは事前トークン化が必要,SentencePieceは不要であるはずだが,事前トークン化のオプションでも実験している.勘違いしている可能性もあるが,subword-nmt (事前トークン化なし)は生文を入力,SentencePiece(事前トークン化あり)はトークン(単語とか)を入力,と本来のユースケースとは異なる設定で実験をしていると読み取った
結論
ニューラルテキスト処理のための,サブワードのTokenizer/Detokenizer,SentencePieceを紹介した.SentencePieceは生文を直接id列に変換し,事前トークン化を必要としないため言語にも依存しない.またモデルファイル内にパラメタを持つため,正規化とサブワード分割の完全な再現性を保証する.更にロスなしトークン化も実現している.我々は,SentencePieceが言語を扱う研究分野が,より言語に依存しないand多言語構造に向かう手助けをできることを願う.
コメント
参考
The text was updated successfully, but these errors were encountered: