最近の自然言語処理では、単語の分散表現は当たり前のように使われています。単語分散表現では、各単語が高次元ベクトル空間に配置され、加減乗除等の演算を行えるようになります。これらのベクトルは、意味の近い単語に対しては同じようなベクトルになることがわかっています。本記事では、単語分散表現のベクトルをクラスタリングし、意味が近い単語のクラスタを作ってみたいと思います。これらのクラスタは、眺めて楽しむだけでなく、機械学習の素性として使うこともできます。イメージ的には、以下のような感じで単語をクラスタにまとめます。単語分散表現をクラスタリングして、単語のクラスタを作ってみましょう。準備まずは、作業用のディレクトリを作成しておきましょう。仮想環境も用意します。以下のコマンドを実行することで、ディレクトリを用意します。workspace以降では、このディレクトリの中で作業を進めていきます。単語分散表現のダウンロード次に、クラスタリングに使う単語分散表現を用意します。分散表現は自分で学習させて用意してもいいのですが、今回はクラスタリングが目的なので、手間を減らすために学習済みの分散表現を使いましょう。以下のコマンドを実行して、分散表現をダウンロードします。分かち書きして用意した文書に対して学習されています。用い、分散表現の次元数は50次元です。詳細は、以下のサイトを確認してください。Builderこれで必要なデータは揃いました。単語分散表現をクラスタリングしてみましょう。単語分散表現のクラスタリングここでは、用意した単語分散表現をクラスタリングします。いうアルゴリズムなのかは以前に以下の記事を書いたので、そちらを参照してください。機械学習を使って画像の圧縮をしてみたまずは、必要なモジュールをインポートします。実装を使うことにしましょう。scikit-learnでインストールしてください。用いて単語分散表現を読み込みます。vocab]ここで、単語数は30000語に制限しています。単語数に制限をかけているのは、単語数が多すぎると、クラスタリングの際のメモリ消費量が非常に増え、計算時間もかかるためです。分散表現を読み込んだ後、あとで使うために語彙とベクトルを取り出しています。クラスタリングを行います。n_jobs=-1)kmeans_model.fit(vectors)ここで、クラスタ数n_clustersは1000に設定しています。このクラスタ数の設定がなかなか難しく、クラスタ数を決定する方法がいくつか提案されています。今回は、そのような方法は用いず、適当に設定しました。単語分散表現のクラスタリングが終了したら、クラスタリングして割り当てたクラス情報を使って単語をまとめ上げます。cluster_to_words[cluster_id].append(word)ここでは、各クラスタIDに属する単語をまとめています。以上で単語分散表現のクラスタリングは終了です。結果を確認してみましょう。よって生成された各クラスタの単語を見てみましょう。print(words[:10])以下のようなクラスタが得られました。これなら、機械学習の素性として使うことができそうです。おわりに本記事では、日本語の単語分散表現をクラスタリングする方法を紹介しました。クラスタリングした結果を機械学習の素性として使うことも考えられそうです。本記事が皆様のお役に立てば幸いです。私のTwitterアカウントでも機械学習や自然言語処理に関する情報をつぶやいています。@Hironsanこの分野にご興味のある方のフォローをお待ちしています。2019より以下の論文。2019より以下の論文を紹介。(3)ARCHIVEはてなブログをはじめよう!Hironsanさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。