投稿

ラベル(Windows)が付いた投稿を表示しています

自分のツイートを word2vec で学習させて遊ぶ

イメージ
全ツイートの内容を word2vec に放り込んで遊んだ。 数年前から word2vec はスゴいらしいという話を聞いていたが、なんとなくスルーしていた。 Python の gensim パッケージで手軽に word2vec を使えるようなので、試してみた。 今回使った環境 Windows 10 (64bit) Python 3.6.0 (Anaconda 4.3.0) MeCab 0.996 word2vec は、2014年に Google で開発された自然言語処理の手法。比較的計算量が少ないところが特徴らしい。 ざっくりとした流れ word2vec という名前の由来は、おそらく "word to vector" の略だと思う(出典はない)。単語 (word) からベクトル (vector) を学習する。 word2vec は、大量の文章を渡されると、単語の前後関係から、各単語をよく表すn次元のベクトルを学習する。 一見すると機械的な方法だが、なぜか単語どうしの意味的な関連性まで学習できてしまう(ことがある)らしい。 ベクトルの次元数 n は、自由に設定できる。ネット上のサンプルを見ていると n=100 くらいに設定していることが多かった。 細かい話 学習には2層のニューラルネットワーク (入力層、隠れ層、出力層からなる。ふつう出力層はカウントしないので2層といっている) を使っているらしい。意外と少ない! 学習時の「前後の単語を見る」処理として、 CBOW (Continuous Bag-of-words) と skip-gram の2種類が提案されている。どちらを使うかによって、NNの構造がすこし異なる。 Python の gensim パッケージではどちらも使えるが、今回は性能が良いらしい skip-gram を使うことにする。 参考: Word2vec - Wikipedia 絵で理解するWord2vecの仕組み 【論文シリーズ】CBOWとSkip-gramについて データの準備 さて、word2vec の学習には、大きめの文章データが必要となる。 なにか良さそうなものはないかと考えて、約12万ツイートある  mogesystem の投稿内容を使う...

アセンブラでWin32APIを使ってみる(MessageBox編)

RubyやPython、JavaScriptのような高級なプログラミング言語が浸透してだいぶ経ちました。 たくさんの便利なライブラリが整っていますし、少ないコード量で面倒な処理ができるところが魅力的です。 とはいえ、こういった言語ばかり触っていると低水準な言語でゴリゴリと書きたくなってきませんか?ほら、なってきましたね。 そんなわけで、もっとも低水準なプログラミング環境といえるであろう アセンブラでWin32APIを使ったアプリケーション を作ります。 今回使うツールは以下の通り。 NASM (アセンブラ) -  http://sourceforge.net/projects/nasm/ ALINK (リンカ) -  http://alink.sourceforge.net/download.html ちなみに最初はMASMを使おうと思ったのですが、Microsoft純正だけありWin32APIのサポートがしっかりされていてつまらないので、今回はNASMを使って縛りプレイをしてみます。 ALINKは。 上記のALINKのサイトの 「Download my Win32 Import library(win32.lib)」 からALINK用のWin32APIライブラリをダウンロードしておきます。 NASM、ALINK、win32.libは同じフォルダに入れてソースコードと同じフォルダに置きます。 まずはお決まりの Hello world を作ってみます。 ウィンドウ表示をすると複雑になるので、MessageBox関数で表示させることにします。 以下のようなプログラムを test.asm などのファイル名で保存します。 bits 32 extern MessageBoxA extern ExitProcess section .text global winmain winmain: push dword 0 push dword title push dword string push dword 0 call MessageBoxA push dword 0 call ExitProcess ret section .data ti...