Ahogrammer

Deep Dive Into NLP, ML and Cloud

TensorFlow Textを使ってテキストのトークン化をする

自然言語処理で欠かせない処理にテキストのトークン化があります。テキストをトークン化することで、その後のボキャブラリの構築や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']]

参考文献