Sentencepieceは公開から約6年経ち、月間のpipダウンロード数が1000万を超え、開発者として嬉しい限りです。ただ、Sentencepieceを使用する際にMeCabなどの形態素解析器を前処理に使うケースが散見されます。単語分割をしたいというニーズは理解できますが、作者としてはあまり満足していません。多言語処理が一般的になり、しかもSentencepieceは言語非依存のシステムであるにもかかわらず、なぜベタな日本語処理に依存するのでしょうか。このような使い方は、精度が向上するかもしれませんが、以下のようなデメリットもあります。
- 形態素解析が入力した空白と、元からある空白を区別できないため、分割されたデータから元の文を復元することができません。(可逆処理ではない)。
- 形態素解析システムに依存するため、メンテナンス性や可搬性が低下します。正しいバージョンの辞書を維持し、管理することは非常に面倒です(世に出回っているBERTモデルのほとんどがどの辞書のバージョンを使用しているかを明記していません。)。
- 多言語処理が困難になります。
ここでは、Sentencepieceの語彙選択にのみ MeCabを使用する方法を紹介します。これにより、以下の利点が生まれます。
- MeCabの分割箇所がSentencepieceで再現されやすくなります。(サブワード分割であるため、形態素を再分割することはありますが、形態素境界を結合する状況が減ります)
- 分割時にMeCabを使用する必要がなく、Sentencepieceのモデルファイルだけで動作可能になるため、可搬性が高まります。
まず、MeCabの分割箇所を学習データに出現しないユニークなデリミタ文字列でエンコードします。例えば、デリミタとして||||
を使用してみます。MeCabの出力フォーマット機能を使用して、形態素(%M
)を出力した後に||||
を出力します。ここでは例として wikipedia のデータを使いました。
mecab -F"%M||||" -E"\n" -b 100000 < wiki.txt > wiki.txt.tok
wiki.txt.tok 中の ||||
を空文字列に置換すると wiki.txt
に戻っていれば学習データとして適切です。
- 元の学習データ
形態素の一般的な性質や、形態素間の結びつきなどを明らかにする言語学の領域は、形態論と呼ばれる。
- 分割制約付き学習データ
形態素||||の||||一般||||的||||な||||性質||||や||||、||||形態素||||間||||の||||結び||||つき||||など||||を||||明らか||||に||||する||||言語||||学||||の||||領域||||は||||、||||形態||||論||||と||||呼ば||||れる||||。||||
次にサブワードモデルを学習します。
spm_train
の --pretokenization_delimiter
フラグでデリミタを指定します。(この機能は v0.1.98以降で有効です。)
spm_train --input=wiki.txt.tok --vocab_size=32000 --model_prefix=model --pretokenization_delimiter="||||"
学習ができたら実際に分割してみましょう。
▁ 形態素 の 一般 的 な 性質 や 、 形態素 間 の 結びつき など を 明らか に する 言語 学 の 領域 は 、 形態 論 と 呼ば れる
MeCab の分割が再現できています。
ちなみに、制約なしで学習した場合は以下のようになります。より少ないトークンでエンコードできていてデータ圧縮的には良いのですが、形態素境界とは異なる分割が多くなります。
▁ 形態 素 の 一般的な 性質 や 、 形態 素 間の 結びつき など を明らかにする 言語学 の領域 は 、 形態 論 と呼ばれる
他の例ではどうでしょう。
- 制約あり
▁ 1843 年 の 暮れ 、 サンクトペテルブルク を 訪問 した ナッサウ 公 アドルフ と 初めて 出会っ た 。
▁ 絵画 、 グラフィック 、 ガラス 作品 : 。
▁ スポーツ 分野 の 写真 を 得意 に し 、 海外 取材 など 精力 的 に こなす 。
▁ 兄 に フィン ゴン 、 妹 に アレ ゼル 。
▁ 代表 的 な 教材 研究 の 手法 を 以下 に 示す 。
▁その 点 で 日本 の 書籍 再 販 制度 と は 大きく 異なる 。
▁ 元 200 m 日本 チャンピオン の 土 江 良 吉 は 実父 。
▁ 総 面積 の 6 . 01 % が 水域 とな って いる 。
▁その後 、 楊 氏 は 北 魏 初期 に 武 川 鎮 へ と 移住 し 、 楊 堅 の 父 の 楊 忠 に 至る という 。
▁ 『 黒部 の 太陽 』 は 1968 年 の 最大 の ヒット 作品 と なる 。
- 制約なし
▁ 18 4 3 年 の 暮れ 、 サンクトペテルブルク を訪問した ナッ サウ 公 アドルフ と 初めて 出会った 。
▁ 絵画 、 グラフィック 、 ガラス 作品 : 。
▁ スポーツ 分野 の写真 を 得意 に し 、 海外 取材 など 精力的に こなす 。
▁ 兄 に フィン ゴン 、 妹 に アレ ゼル 。
▁ 代表的な 教材 研究 の 手法 を 以下に示す 。
▁ その 点 で 日本の 書籍 再 販 制度 と は 大きく異なる 。
▁ 元 200 m 日本 チャンピオン の 土 江 良 吉 は 実父 。
▁ 総面積 の 6.0 1% が 水域 となっている 。
▁その後 、 楊 氏 は 北魏 初期に 武 川 鎮 へと 移住 し 、 楊 堅 の 父の 楊 忠 に至る という 。
▁ 『 黒部 の 太陽 』 は 1968 年 の 最大の ヒット 作品 となる 。
それっぽく動作していますね。
注意点としては、MeCabの分割が完全に再現されるわけではありません。サブワードのアルゴリズム (Unigram/BPE) でMeCabの分割を無理やり再現しようとしているだけなので、モデルの表現能力的に不可能な分割がどうしても存在することに留意してください。
▁ す も も も も も も も も のうち
さらに、形態素解析分割が文脈依存して一貫性がない場合も、高頻度の分割が好まれます。先程の例の結びつき
がそれに該当します。
事前分割制約の機能は、sentencepieceの初期バージョンから導入されていました。しかし、事前分割器のインターフェースのみが提供されていただけで、実際に動かすには分割器をC++で実装し、実体をインジェクトする必要がありました。v0.1.98で、デリミタを指定する機能が導入され、より簡単に使用できるようになりました。 ぜひ使ってみてください。