コンピュータは文字を直接扱うことはできないので、文章とか文字をコンピュータで処理しようとするときは数字に置き換えてやる必要があります。「すべての文字に番号を振ってやればいいんじゃないの」と思うかもしれませんが、これではダメなんです。
なぜかというと、例えば山代温泉の番号が0001、お隣の山中温泉の番号が0010とすると、コンピュータは山中温泉は山代温泉の10倍何かがある、あるいは山中温泉は山代温泉の9だけ余計に何かがあると理解してしまいます。数字というのは、その大きさに意味がある数字ということになります。山代温泉の0001は数字ではなくて識別のための記号です。
単語分散表現というのは1語1語をベクトル化することです。簡単にxyの2次元空間(平面だけど)でいうと、それぞれの語にxy空間上の特定の位置(ベクトル)をあたえることです。そうすると類似の語は同じような位置にまとまって存在することになります。
学習中の「機械学習・深層学習による自然言語処理入門」の8章に出てきたFacebookが公開している分散表現を見てみます。
ここからダウンロードできます(10分くらいかかる)。圧縮ファイルがダウンロードされるのですが、アプリのダウンロードではないので、これだけでは何もできません。
読み込んだファイルをgensimというpythonのパッケージヲ使ってmodelを作ります。
このモデルを使って、山代温泉と類似する単語(300次元のベクトル空間上の同じような位置に存在する単語)を上位から10個見てみます。
県内のその他の温泉や旅館の名前が出てきました。
不動産鑑定士は弁護士、公認会計士と並ぶ三大国家試験と昔言われていました。弁護士の類似単語を見ると、確かに弁護士の業務に関連しそうな類似の語が並びます。
公認会計士はどうか?
「そんな語はボキャブラリーの中にないよ」とエラーが返ってきた。「会計士」ならどうだ。
税理士、財務諸表、監査など、なんとなく関連のありそうな語が並びます。
では、いよいよ「不動産鑑定士」
「不動産鑑定士」では予想通りエラー。では「鑑定士」ではどうだ。
エラー。つまり「鑑定士」というボキャブラリーはない。最後の手段の「鑑定」でどうだ。
まあ、出るには出たけど。なんだよこの胡散臭い単語の集団。「フラアレ」とか「バビロ」ってなんだよ。
公認会計士は「公認会計士」ではボキャブに含まれないが、「会計士」ではちゃんとその業務を表しそうな語が類似単語が出てくる。
これに対して「不動産鑑定士」って、いったい.....
日本語で一般的に「鑑定」から頭に浮かぶ語は、茶碗であったり、手相であったり、骨董であったりするわけで、不動産の鑑定なんて誰も考えもしないということなのね。
ところで「単語分散表現」なんて何に使うの?ということですが、単語自体をどうのということではなくて、一つの文(レビューなど)とか一つの文章(小説など)の特徴を数字で表現するために使います。つまり「こういう単語がこれだけ含まれている」ということをもって、その文や文章の特徴とすることが目的になります。
Comments