ニューラルネットワークこの前は自然言語処理の基本を勉強していました。tsunotsuno.hatenablog.com今回は、今どきの自然言語処理で普通に使われているword2vecについて勉強していきます。今回もこちらの本を使って勉強しました。見る細かい数式や概念については、上の本をぜひご参照ください。感想word2vec元論文word2vecの本家の論文はこちら。arxiv.org解説論文はこちら。arxiv.orgシソーラス/カウントベースの問題点シソーラスやカウントベースでは下記のような問題がありました。シソーラス手作業が多い新しく単語を追加する手間が多いカウントベースコーパスのサイズに応じて共起行列のサイズも大きくなるこのように、どちらもうまく使えるとは言い難いものでした。推論ベースのイメージシソーラス/カウントベースの単語の意味の取得とは異なり、word2vecは推論ベースの手法です。word2vecでの単語の推定は、CBOWモデルかskip-gramモデルの2種類あり、それぞれ微妙に違いますが大体こんな感じです。CBOWモデルskip-gramモデルある単語の隣になんの単語が来るかを推論することで、単語のベクトル表現を得るというやり方です。単語2つから近傍の単語を推論するか、単語1つから両側の単語を推論するかの違いですね。詳しいことはあんまりわからなかったですが、skip-gramモデルの方が良いらしいです。Word2Vecひとめぐりネットワークword2vecでは、CBOWでは下記のような2層NNを使用します。ベクトル)を表していて、出力層が着目する単語ベクトルになっています。ついて確認するとこんな感じになっています。この行列において、横ベクトルが各単語のベクトル表記(ベクトルは中間層でのベクトルと同じ長さ)になっています。学習させたネットワークを単語のベクトルとして扱うところがトリッキーですね。上のやり方でも間違いではないんですが、コーパスのサイズが大きくなるとNNで使用するデータ量が大きくメモリに乗り切らなくなる問題があります。そこで改良を加えていきます。レイヤまず、コーパスの単語をone-hotベクトルで表現していたのを、インデックスで表現するように変換します。変換のイメージはこんな感じです。こんな感じに小さくなります。そのため、こちらの行列を小さくすることを考えます。多値推定(one-hotベクトルを推論)を2値推定(yes/no問題)にすり替えます。これだけだと、コーパスに登場する単語全てに2値推定することになってしまうので、コーパスから不正解データ(Negative)をいくつかサンプリングして使用することを考えます。コーパスから単語の登場回数を予め計算しておき、その分布に基づいてサンプリングしてやることで登場頻度に応じた単語のサンプリングが可能になります。このようにして、2値推定する母集団自体を圧縮し、メモリ使用量を削減します。最終的にはこんな感じになっているかと思います。word2vecの特徴word2vecを含めた単語の分散表現の特徴として、概念の加減算ができることが挙げられます。イメージとしてはこんな感じです。この例だとKINGに複数形の概念を加えたらKINGSだし、女性の概念を加えたらqueenになるといいます。このように、単語それぞれが持つベクトルの加算結果が指し示すベクトルを、概念の足し算引き算にすり替えることが可能のようです。詳しくは本買っていただければと。そのうちなんかやるんで、コードについてはその時まとめて勉強します。概念だけお勉強します。記事を書くにあたり、こちらも参考にさせていただきました。qiita.comありがとうございます。非常にわかりやすかったです。理解はなんとかできますが、やはりまだまだ難しいですね。次回、RNNを勉強して基本的な部分については終了したいと思います。18:34自然言語処理について勉強してみた(その2:word2vec)Tweet関連記事2019-09-22推薦システム入門(その1:古典的手法)最近こちらの本を購入しました。ニュースコーパスで遊んでみる(3回目)この前はこんな感じにやってました。絶賛勉強中なので、その兼ね合いでちょっ...2019-02-17自然言語処理で遊んでみる(その2:テキストデータの解析)この前はこんなことをやっていました。(1)月別アーカイブはてなブログをはじめよう!nogawanogawaさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。