クリーム色の背景、色付き表示、高コントラスト、大きな文字のほうが読みやすいですか?配色と文字を選ぶと、すべてのページに一度で反映されます。

無料レッスン

文章をトークンに分ける方法

このレッスンのあとで: 文章をトークンに分け、記号や書き方をそろえて整えることができる。

55分のレッスンコマンド1件JupyterLab データサイエンスラボ:pandas、Matplotlib、scikit-learn をブラウザーで

感想を読む前に、まず切り分ける

トークン化とは、文章をコンピュータが数えられる小さな単位に分ける作業です。自然言語処理(人間の言葉をコンピュータで扱う技術)は、すべてここから始まります。

レンタサイクル店に、毎日たくさんの感想が届きます。人がすべて読むのは大変です。まず文章を切り分けて、数えられる形にします。

このレッスンのゴール

メモ

文章をトークンに分け、記号や書き方をそろえて整えることができる。

キーワード

ことばいみれい
自然言語処理人間の言葉をコンピュータで扱う技術
トークン文章を切り分けた、数えるための1つの単位
トークン化文章をトークンに分ける作業
正規化書き方の違いをそろえることABC を ABC にする
ストップワードどの文にもあり、数えても役に立たない語は、の、です
文字バイグラム隣り合う2文字の組電車が → 電車・車が

学生が入力するセルは、このプレビューでは空白です。

日本語には単語の区切りがない

英語は空白で単語が分かれます。日本語には空白がないので、どこで切るかを決める必要があります。

辞書をもとに単語へ切る道具(形態素解析器)を使う方法があります。もっと単純に、決まった数の文字で切る方法もあります。

同じ文を3通りに切る

切り方「電車が遅れます」の結果トークンの数
1文字ずつ電・車・が・遅・れ・ま・す7
2文字ずつ(文字バイグラム)電車・車が・が遅・遅れ・れま・ます6
単語(辞書で切る)電車・が・遅れ・ます4

学生が入力するセルは、このプレビューでは空白です。

文字バイグラムを自分で作る

コード: python
sentence = "電車が遅れます"
# 2文字ずつに切ります。
pairs = []
for n in range(len(sentence) - 1):
    pairs.append(sentence[n:n + 2])
print(pairs)
print(len(pairs), "トークン")
# sentence を自分の一文に変えて、もう一度実行してください。

切る前に書き方をそろえる

同じ意味でも、書き方が違えば別のトークンになります。全角の「ABC」と半角の「ABC」は、別のものとして数えられます。大文字と小文字も同じです。

切る前に書き方をそろえることを、正規化と言います。記号や空白も、ここで取り除きます。

そろえずに切るとどうなるか

コマンド
docker exec jupyter python3 -c "print('Late Bus, LATE bus.'.lower().split())"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

例: そろえる前と後

そろえ方トークン種類の数
小文字にして空白で切るlate・bus,・late・bus.3
記号も取り除くlate・bus・late・bus2

学生が入力するセルは、このプレビューでは空白です。

記号を取り除いてそろえる

コード: python
import unicodedata

text = "ABC店は、月曜日が休みです!"
# 取り除きたい記号です。
marks = "、。!? "
result = ""
for ch in text:
    if ch not in marks:
        result = result + ch
# 全角の英数字を半角にそろえます。
result = unicodedata.normalize("NFKC", result)
print(result)
# marks に "店" を足すと、結果はどう変わりますか。

よくある間違い

注意

トークンは、いつも1つの単語のことだと考えがちです。実際は、仕事に合わせて決める単位です。単語のことも、1文字のことも、単語の一部のこともあります。

どの文にもある語は除くことがある

「は」「の」「です」は、どの文にも出てきます。数えても、文の中身は分かりません。このような語をストップワードと言い、数える前に除くことがよくあります。

ただし、除いてはいけない場合もあります。「行く」と「行かない」では、「ない」が意味を変えます。

例: ストップワードを除く

段階「自転車はとても乗りやすいです」のトークン
切った後自転車・は・とても・乗り・やすい・です
ストップワードを除く自転車・とても・乗り・やすい

学生が入力するセルは、このプレビューでは空白です。

さらに挑戦: 3文字ずつに切る

課題の bigrams を書きかえて、3文字ずつ(文字トライグラム)に切る関数を作ってください。「電車が遅れます」は、いくつのトークンになりますか。

2文字と3文字で、同じ文の似ている度合いがどう変わるかを、次の回で測ります。

このラボとソースについて: JupyterLab データサイエンスラボ:pandas、Matplotlib、scikit-learn をブラウザーで

授業で使いますか?このモジュールを学生に割り当てると、教員用ガイド、自動採点つきの課題、学生ごとのラボを使えます。