対話型AIサービス「ChatGPT」で使われている自然言語モデルの核になっている技術が「Transformer」だ。自然言語処理を例に、Transformerの仕組みを解説する。
ニューラルネットワークの基礎を理解したところで、ここからは自然言語処理(NLP)の基礎を解説することにしましょう。お待たせしました。いよいよChatGPTの仕組みに近づいてきました。
最初は、単語の意味をコンピュータに理解させる仕組みの説明をします。
自然言語処理は、文章の分割から
ここに、ある文章があったとします。この文章の意味や、単語の意味をコンピュータに理解させるには、どのようにしたらよいでしょうか? そう、まずは前述の画像認識と同様ですね。文章を細かく分割して、どこが単語なのかをわかるようにするのです。
では、前処理として、入力された文章を単語に分割します(図7の(1))。次に、分割した単語を列挙します。その際、もし1つの文章に同じ単語が複数個含まれているようでしたら、同じ単語は重複しないように列挙します(図7の文章では重複はありません)。
そして、列挙した単語に対して、連番を振ります。図7の(2)では例として、1から始まる整数を振っています。コンピュータは数値しか扱えないため、各単語に識別のための連番(ID)を振り、その連番の数値で単語を扱えるようにします。
図7は1つの文章だけですが、同じ作業をほかの複数の文章に対しても行うことで、“ボキャブラリー一覧表”のようなかたちで管理します。
なお、文章を単語に分割した単位を「トークン」と呼びます。実際には分割単位は単語だけではなく、例えば英語なら現在進行形の「ing」や過去形の「ed」などのサブワードでも分割します。本稿では説明を簡略化するために、単語単位でのみ分割することとします。
単語の意味を数値の組み合わせで表す
コンピュータが単語を扱えるようにするには、連番(ID)に加え、単語の意味も数値を使って理解させる必要があります。その方法の原理は、単語の意味を「単語の特徴を表す複数の数値の組み合わせで表す」ことです。
簡単な例で解説しましょう。
3種類の野菜の単語「トマト」「キュウリ」「ピーマン」があるとします。それらの野菜それぞれの特徴を表す項目として、形状の「細長さ」と、色の「緑の度合い」の2種類があることとします。「細長さ」の項目では数値が大きいほど細長く、小さいほど丸いとします。「緑の度合い」の項目では数値が大きいほど緑色で、小さいほど赤色(緑の反対色)とします。数値は最大が10、最小が-10とします。
これら2つの項目の特徴の数値で、前述の3種類の野菜の単語を表した例が図8です。右側のグラフでは、縦軸を「細長さ」、横軸を「緑」として、3種類の野菜をプロットしています。
これで、「細長さ」と「緑の度合い」という2種類の項目での特徴を表す数値の組み合わせによって、3つの野菜の単語の意味を表せました。
単語の意味を数値で表す方法の基本的な原理は以上です。あとは特徴の項目を増やしたり、取り得る数値の幅を広げたりすれば、単語の意味をもっと複雑に表せるでしょう。このような方法を、自然言語処理では「分散表現」と呼びます。
分散表現が重要なのは、意味を数値の組み合わせで表しているので、「単語の足し算や引き算」を行うことで、「意味の足し算や引き算」が可能である、という点です。例えば以下の計算を見てください。
王 - 男性 + 女性 = 女王
単語の「王」から「男性」を引き、「女性」を足すと「女王」になるという計算です。ここでは特徴の項目に「性別」があることとしています。単語「王」から「男性」を引くと、性別の特徴の数値が0になります。その状態に「女性」を足すと、性別の特徴の数値が女性の数値に変わります。特徴「性別」の数値が「男性」から「女性」の変わったため、単語「王」の性別が女性に変り、「女王」という計算結果が得られたのです。
分散表現は単語をプログラミングや数学で表す際に、非常に重要なポイントとなっています。