トークナイザとボキャブラリの詳しい解説

自然言語処理

はじめに

自然言語処理(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)が割り当てられます。

トークナイズとボキャブラリの構築

トークナイズとボキャブラリの構築は、以下のようなステップで行われます。

  1. コーパスの準備
  2. トークナイザの選択・初期化
  3. コーパス内のテキストをトークナイズ
  4. トークンの出現頻度をカウント
  5. ボキャブラリの構築

以下は、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の様々な技術について学んでいきましょう!

ノートブック

Google Colab

参考サイト

Summary of the tokenizers
We’re on a journey to advance and democratize artificial intelligence through open source and open science.

コメント

タイトルとURLをコピーしました