言語AIの進化史⑦トークン化とTF-IDF
前回は、クロード・シャノンのn-gramを紹介しました。今回は、トークン化とTF-IDFについて解説します。
本題に入る前に、次の2つの文章を比べて下さい。
男は犬を撫でた。
男は犬を噛んだ。
この2つの文章は、最初の部分が同じですが、後半の単語の選択により意味が大きく異なります。これを確率的に理解してみましょう。
両方とも「男は犬を」という同じ文字列で始まりますが、1番目の文章と比べると、2番目の文章はかなり出現確率が低い(珍しい)でしょう。これは「男は犬を」に「噛」が続く確率(可能性)が低いからです。
ただし、我々は何の文脈も持たずに判断しています。
仮に、「犬に襲われて倒れたが必死に抵抗して」という文脈があるならばどうでしょうか。
次の2つの文章を比べて下さい。
犬に襲われて倒れたが必死に抵抗して、男は犬を撫でた。
犬に襲われて倒れたが必死に抵抗して、男は犬を噛んだ。
「(襲われている)男」が「犬を撫でた」としたら、ちょっと変な感じがします。
よって、この文脈を与えられた条件下では、2番目の文章の方の確率が高くなるでしょう。逆に、1番目の文章の方の確率は低くなるべきです。
つまり、前のテキストを条件となって、その後に続くテキストの出現確率が変化しています。
このようなテキスト間の依存関係は、シャノンのn-gramによる条件確率のアプローチを使えばモデル化できそうです。そして、あらゆる条件(複数の文字)の次に来る文字の確率分布を学習できれば、文章の生成や分類が可能になるでしょう。
実際に、n-gramのアプローチはその後の確率的言語モデルの発展に貢献しました。前回の記事で紹介したように、n-gram的なアプローチがスパム・フィルタリングやテキスト分類などに応用されました。
しかし、シャノンのn-gramは文字(アルファベット)単位での処理を行います。これは、彼の目的はテキストの文字列の情報量の計算して効率よく伝達するためにn-gramを使用していたからです。つまり、文章の意味の理解は関係ありません。
一方、言語モデルの目的は言語の理解や生成なので、ある程度の意味を持つ要素を使って文章の確率分布を解析する方が効率が良くなります。
例えば、「dog」をアルファベットに分解し、「d」と「o」と「g」が並んだシーケンスと捉えるのと、「dog」を一つの意味的な塊として処理することの違いを考えて下さい。前者は一文字をシンボルとしていますが、後者は意味のある要素をシンボルとしています。意味を理解するためなら後者の方が効率的でしょう。
ただし、ここで文章を単位要素に分解するルールの必要性が生じます。
また、この単位要素はさまざまな文書や文章に渡って共通のものであるべきです。さもなければ、テキストの分類や比較などに一貫性を持たせることができません。
このため、まずは大量のテキストを集めてデータベース化します。このようなテキストのデータセットをコーパス(Corpus)と呼びます。そして、コーパス内のテキストを単位要素に分割します。この単位要素をトークンと呼び、テキストを処理してトークンへと分割する処理のことをトークン化(Tokenization)と呼びます。
トークン化によってコーパスからの大量のテキストはトークンのシーケンス(順番に並べたもの)へと変換されます。そうして得られたトークンの集まり対して統計的な処理を行うことで、文書や文章の特徴を数値化して表現するTF-IDF(Term Frequency-Inverse Document Frequency)という手法が1970年代ごろに発展しました。
この記事が気に入ったらサポートをしてみませんか?