機械学習はじめに前回の記事で、Wikipediaの全行に対してループを回せるような環境を用意しました。Projectorを使って可視化してみたいと思います。前回の記事でWikipediaの全記事が分かち書きされたようなファイルを用意しました。実はあの形式は、gensimでword2vecを学習させるときの入力としてそのまま使用できます。models.word2vec.Word2Vecクラスを使用すると簡単に学習させることができます。入っているとすると、なんとたったのこれだけでモデルの学習・保存が完了します。workers=6)self.model.save(model_filename)Word2Vecに渡す引数はひとまずよく見かけた200次元のベクトルを学習、Wikipedia全体での出現回数が5回以上の単語のみを扱う、という設定にしてみました。最後のworkersは学習に使うワーカーの数です。環境に合わせて適宜変更してください。学習時間は環境によると思うのですが、数十分から数時間くらいでしょうか。学習した単語数は498928語と、かなりの量でした。Projectorというのが使えそうでした。Projectorなどと呼ばれ、簡単に試すことのできるWebサイトも用意されているようです。上記サイトをクリックしてみると、既にWord2Vecのサンプルデータが表示されています。左のDATAというメニューからサンプルのデータセットを変更すると、英語のWord2Vecの学習結果やMNISTの学習結果などの可視化のサンプルを見ることができます。dataというボタンをクリックすると、なんと任意のデータをアップロードして試すことができるようになっています。Projectorで可視化できそうです。Projector用に整形してあげればよいだけです。必要なファイルは2つです。1行にベクトルが1つ並んだTSV1行にメタデータ(ベクトルのラベルなど)が並んだTSVメタデータは1列目がラベルとして表示されるようなので、ベクトルファイルと同じ順番で1行に1単語を並べたものを用意すればよいでしょう。メタデータのTSVのみヘッダが必要なので注意です。これも実装は簡単で、self.modelに学習済みモデルが入っているとすると、たったのこれだけのコードでOKです。'\n')このメソッドを実装してあるクラス全体はWordEmbedding.pyという名前でGitHubにあげてあります。学習したベクトルの分布はこのようになりました。点の数がものすごい量ですが、空間上に散らばって存在している様子がわかります。ベクトル空間上で近くに存在している単語データ量が多いので少し動きがもたついたのですが、この点をクリックしたり単語ラベルを検索したりすると、200次元のベクトル空間上で近くにあるほかの単語を確認することができます。いくつか確認してみましょう。「ブログ」という単語の近くに存在している単語を調べてみました。...とSNSやブログに関連した単語がたくさん並んでいます。なんの正規化処理もしないでそのままデータを使用したので、TwitterやFacebookが大文字と小文字のものが2つ登場してしまっています。次は「Google」を見てみました。...Googleのサービスや、ライバル企業・サービスの名前が並んでいるようです。...岩出ってなんだ?最後にYouTuberの「HIKAKIN」も見てみました。...ミュージシャンの名前が目立つでしょうか。ボイスパーカッションで有名になっているので、他のミュージシャンと同じような文脈で使われているのかもしれないですね。ブラザーズは、スーパーマリオブラザーズの一部のようです。HIKAKINさんの有名な動画の一つがマリオのBGMをボイスパーカッションで再現したものです。コード今回のコードは下記GitHubにおいてあります。Projectorを試した時の記事です。アーカイブおすすめの本はてなブログをはじめよう!kanohkさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。