はじめに
自然言語処理(NLP)タスクを行う上で、トークナイザとボキャブラリは非常に重要な役割を果たします。この記事では、トークナイザとボキャブラリについて、初心者にもわかりやすいように丁寧に解説していきます。
コーパスとは
コーパスとは、自然言語処理におけるデータセットのことを指します。コーパスは通常、大量のテキストデータから構成されており、そのテキストデータを分析・処理することでNLPモデルを学習させます。コーパスの例としては、ウェブページのテキスト、ニュース記事、書籍、SNSの投稿などがあります。
コーパスは、以下のような特徴を持っています。
- 大量のテキストデータを含む
- 自然言語で書かれている
- 特定のドメインや目的に特化している場合がある(例:医療、金融、法律など)
- 言語、ジャンル、時代などによって分類される
NLPタスクを行う際は、タスクに適したコーパスを選択・準備することが重要です。
トークナイザとは
トークナイザは、テキストを単語やサブワードなどの小さな単位(トークン)に分割するツールです。例えば、次のような文があるとします。
text = "I love NLP!"
この文をトークナイズすると、以下のようなトークンに分割されます。
from transformers import AutoTokenizer
# トークナイザの初期化
tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")
# テキストのトークナイズ
tokens = tokenizer.tokenize(text)
print(tokens)
出力:
['i', 'love', 'nl', '##p', '!']
トークナイザは、単語の区切りを識別するためのルールを持っています。これにより、テキストを意味のある単位に分割することができます。
ボキャブラリとは
ボキャブラリは、コーパス内のすべてのユニークなトークンの集合です。上記の例では、ボキャブラリは以下のようになります。
vocab = tokenizer.vocab
print(set(tokens) <= set(vocab)) # トークンがボキャブラリに含まれているかチェック
出力:
True
ボキャブラリは、テキストをトークンに変換する際の参照として使用されます。各トークンには、ボキャブラリ内でのインデックス(ID)が割り当てられます。
トークナイズとボキャブラリの構築
トークナイズとボキャブラリの構築は、以下のようなステップで行われます。
- コーパスの準備
- トークナイザの選択・初期化
- コーパス内のテキストをトークナイズ
- トークンの出現頻度をカウント
- ボキャブラリの構築
以下は、transformersライブラリを使用したトークナイズとボキャブラリ構築の例です。
from transformers import AutoTokenizer
from collections import Counter
# コーパスの準備
corpus = [
"I love NLP!",
"NLP is awesome!",
"I enjoy learning about NLP."
]
# トークナイザの選択・初期化
tokenizer = AutoTokenizer.from_pretrained("google-bert/bert-base-uncased")
# コーパス内のテキストをトークナイズ
tokenized_corpus = [tokenizer.tokenize(text) for text in corpus]
# トークンの出現頻度をカウント
token_counts = Counter()
for tokens in tokenized_corpus:
token_counts.update(tokens)
# ボキャブラリの構築
vocab = tokenizer.vocab
print("Vocabulary size:", len(vocab))
print("Top 10 most common tokens:", token_counts.most_common(10))
出力:
Vocabulary size: 30522
Top 10 most common tokens: [('!', 2), ('i', 2), ('nl', 2), ('##p', 2), ('.', 1), ('love', 1), ('is', 1), ('awesome', 1), ('enjoy', 1), ('learning', 1)]
ここでは、コーパス内のテキストをトークナイズし、トークンの出現頻度をカウントしています。そして、事前学習済みのBERTトークナイザが持つボキャブラリを使用しています。
トークンのID化
構築したボキャブラリを使って、トークンをIDに変換することができます。以下は、transformersライブラリを使用したトークンのID化の例です。
# トークンのID化
token_ids = tokenizer.convert_tokens_to_ids(tokens)
print("Tokens:", tokens)
print("Token IDs:", token_ids)
出力:
Tokens: ['i', 'love', 'nl', '##p', '!']
Token IDs: [1045, 2293, 13486, 29623, 999]
各トークンに対応するIDが割り当てられていることがわかります。
まとめ
この記事では、トークナイザとボキャブラリについて詳しく解説しました。トークナイザはテキストを意味のある単位に分割し、ボキャブラリはコーパス内のユニークなトークンの集合を表します。これらは、自然言語処理タスクを行う上で重要な役割を果たします。
また、コーパスについても解説しました。コーパスは、自然言語処理におけるデータセットであり、大量のテキストデータから構成されています。適切なコーパスを選択・準備することがNLPタスクを成功させるカギとなります。
トークナイズ、ボキャブラリ構築、トークンのID化の基本的なステップを理解することで、自然言語処理の世界への第一歩を踏み出すことができます。これからも、NLPの様々な技術について学んでいきましょう!
コメント