意味空間
意味空間
「単語の意味、例えば『吾輩』とか、『猫』のような単語をベクトル(実数の列)で表現できるということです。そして、その内積をとることによって、二つの単語が、どの程度似た使われ方をされるか、ということを測ることができます」
「まあ、やろうと思えばできるかも」
「まず、内積に関して復習しましょう。話を簡単にするために、これから少しの間、ベクトルは、すべて単位ベクトル、つまり長さ1のベクトルとします。v1の成分を(1,0)とし、v2を(0,1)とします」
「v1はx軸上の長さ1、v2はy軸上の長さ1のベクトル、ということね」
「そうです。内積はどうなるでしょう。『足し算プログラム』の時の積和計算で計算できます」
「 1*0 + 0*1 でゼロだな」
「はい、もしv2の成分が(-1, 0) ならばマイナス1です」
「二つのベクトルの向きが近ければ、内積が大きくなり、直角だとゼロ、逆向きだとマイナスになるのか」
「そうです、2つのベクトルの向きがどれくらい近いか測る道具になるという事です」
「それは、そうだろうな」
「でも、単語なんで無限にでてくるものじゃないの」
「次元を増やせばいいんです。いまxy平面を考えましょう。2次元です。単位円の回りにx軸からの角度を1度ずつとするベクトルを左回りに360個置くことができます。1度刻みというのはかなり荒い粒度ですが、それでも驚くべき結果になります」
「まあ、それぞれ向きは違うベクトルがつくれるでしょうね」
「次に立体に行きます。z軸を加えます。3次元ですね。ベクトルで表すと(1, 0, 0)と実数が1つ増えるだけです」
「どうなるの」
「360^2=360×360よりちょっと少ない数になります。129000くらいですね。『ちょっと少ない』といったのは、z軸とーz軸のところで360本のベクトルが1本にまとまってしまいますから」
「数字を一つ増やしただけで、ずいぶん増えたわね。いまの『生成AI』は一つの単語にいくつの数字を割り当てているの」
「8192個です。つまり8192次元です」
■筆者注 2026年時点では、モデルにより異なりますが数千次元くらいだそうです。
「360^8192もの矢印ができるというわけね。とんでもない量になることは分かったわ」
「そうです。それに対して、『生成AI』が持っている語彙自体は意外と少ないです」
「どれくらいなの」
「トークン語彙の数はトークナイザーという仕組みで上限を定めています。だいたい20万くらいですね」
■筆者注 2026年時点でのGPT5でも、だいたい20万くらいだそうです。
「そんなに少ないのに、色々なことを答えられるの」
「答えられます。トークン語彙を大きくすることはできるのですが、増やすと計算量が大きくなってしまうので一定程度に抑えてあります。この30年程、20万くらいのままです」
「どうやって、そんなことができるのかしら」
「はい、トークナイザーは、文章をトークンという単位に分割します。よく使われる文字列が一つのトークンになることもありますが、珍しい単語は複数のトークンに分割されることがあります」
「たとえば、『料理』とか『天気』などはよく出てくる単語なので、1トークンとして登録されているでしょう。しかし『吾輩』は現代の日本語では、あまり見られないので、おそらく『吾』『輩』と二つに分割されているはずです」
「それで、20万語で足りるの」
「はい、よく使われる例を出しましょう。こちらの方がわかりやすいです」
「どんな」
「今年は2060年です。なので2060という数字はいたるところで使われているでしょう」
「そうでしょうね、2059、2058なんかもネット上にたくさんあるでしょうね」
「なので、今年実行されるトークナイザーは、2060という数字を一つのトークンとして登録する可能性が高いです」
「まあ、そうでしょうね。あらゆる行政文書や民間の契約書、領収書その他、いたるところに2060はでてくるでしょうからね」
「そうです。ところが来年の西暦2061年、これはどうでしょう。めったに出てこない数字となりますよね」
「まあ、そうでしょうね」
「そうするとトークナイザーは、例えば、このようにトークンを登録するでしょう『20』『6』『1』です」
「トークンの数が増えると、計算量がふえるんじゃないの」
「一般的に、語彙を増やすよりは軽いのです。語彙は『生成AI』の計算のいたるところに出てくるからです」
「ともかく、生成AIは高次元のベクトル空間を使って、単語やトークンの使われ方、文脈上の関係などを数値として表現するのです。そのベクトル表現や、ベクトルを変換するためのパラメーターを学習することで、さまざまな情報を扱えるようになります」




