自然言語処理で欠かせない処理にテキストのトークン化があります。テキストをトークン化することで、その後のボキャブラリの構築やID化の処理を行うことができるようになります。本記事では、トークン化をTensorFlow Textの機能を使って実現する方法について紹介します。
準備
本記事ではTensorFlow Textを使ってテキストのトークン化を行います。TensorFlow TextはTensorFlow 2.0向けにテキスト操作のためのクラスや関数を提供してくれるパッケージです。その中のメインの機能として、テキストのトークン化をするための機能を提供しています。使い始めるために、以下のようにしてTensorFlow Textをインストールしておく必要があります。
$ pip install tensorflow-text
方法
本記事では以下の2つのトークナイザーについて紹介します。
- WhitespaceTokenizer
- UnicodeScriptTokenizer
WhitespaceTokenizer
WhitespaceTokenizer
は、最もシンプルなトークナイザーであり、スペースやタブ、改行記号といった空白記号によってテキストを分割します。
import tensorflow_text as text tokenizer = text.WhitespaceTokenizer() tokens = tokenizer.tokenize(['everything not saved will be lost.', u'Sad☹'])
トークン化した結果はRaggedTensor
で得られます。RaggedTensor
は可変長テンソルを表しており、テキストを表すのに適したテンソルです。詳細は、RaggedTensorsを参照してください。
>>> tokens <tf.RaggedTensor [[b'everything', b'not', b'saved', b'will', b'be', b'lost.'], [b'Sad\xe2\x98\xb9']]>
RaggedTensor
ではなく、Pythonリストが欲しい場合もあります。そのような場合は、to_list
メソッドを使って、テンソルをリストに変換することができます。
>>> tokens.to_list() [[b'everything', b'not', b'saved', b'will', b'be', b'lost.'], [b'Sad\xe2\x98\xb9']]
UnicodeScriptTokenizer
UnicodeScriptTokenizer
は、Unicodeスクリプトの境界でテキストを分割するトークナイザーです。スクリプト)というのは文字の集合のことであり、たとえば、ラテン文字の集合やアラビア文字の集合などがあります。UnicodeScriptTokenizer
はこれらの境界でテキストを分割するわけです。
tokenizer = text.UnicodeScriptTokenizer() tokens = tokenizer.tokenize(['everything not saved will be lost.', u'Sad☹'])
トークン化した結果は以下のようになります。WhitespaceTokenizer
の場合と比べると、"Sad"の後の絵文字でテキストが分割されていることを確認できます。
>>> tokens.to_list() [[b'everything', b'not', b'saved', b'will', b'be', b'lost', b'.'], [b'Sad', b'\xe2\x98\xb9']]