【Rで自然言語処理】単語の出現パターンをクラスタリングする。

前回、前々回とトピックモデルに関する話題を扱いました。
wanko-sato.hatenablog.com
wanko-sato.hatenablog.com
トピックモデルは嫌いじゃない、むしろ好きなんですが、結果の解釈が面倒なのと、やっぱり確率分布を使うため、結果にどこかふわっとした感じが残るあたり、どうにもモヤってしまうのです。もちろん、そういうのを織り込み済みであることを分かってもらえれば良いのですが、LDAはどうにも説明がややこしいところがございまして、簡便な方法で、細かい説明をしなくてもすぐにわかってもらえる指標ってないのかなぁ、とあれこれ考えているところでございます。
その中でも、最近思いついた中で個人的にヒットしているのが「単語の出現パターン」でございまして。今日はそのお話をしようと思います。

続きを読む

【Rで自然言語処理】トピックモデルによる文書分類結果の妥当性を検証する。

前回、トピックモデルのLDAを用いて文書を分類し、その結果をjavascriptで可視化する、ということをやりました。
wanko-sato.hatenablog.com
ただ、その結果が本当に妥当なのか、正直自信がありませんでした。一応は3Dプロットで、検索ワードと文書分類がほどほどかみ合っていることは確認しましたが、あまりにざっくりしすぎてきちんとした検証を行っていませんでした。
というわけで、前回使ったデータと結果をもとに、得られた結果が実際のところどんなものなのか、じっくり見ていきたいと思います。

続きを読む

【Rで自然言語処理】トピックモデルの階層構造をどうにか可視化したい。

もう7月ですね。
統計検定、終わっちゃいましたね。
結果云々を一切書いてないってことはお察しということで。
※というか、6月末だと思い込んでいて、余裕ぶっこいていたら申し込みすらすっかり忘れていた、というオチです。

はい、というわけで、今回はトピックモデルのお話です。
ふと思ったらトピックモデルを本来の用途で使った記事を書いたことがなかったなぁ、と。
wanko-sato.hatenablog.com
こんなのは書いたけれども、扱ったのは数字の集合だったわけで、さすがにこれで「トピックモデルやりました」とは言いづらいかなぁ、と。

続きを読む

【Rで機械学習】LSTM-RNNの予測結果を考察する。

前回、sinカーブを学習データとしたLSTM-RNNによる学習と予測の実験を行いました。

wanko-sato.hatenablog.com

その結果、比較的良好な予測結果が得られたわけなんですが、果たして本当にそれだけで満足して良いのだろうか?とふと疑問に思いました。というのも、そもそもLSTM-RNNの予測は学習されたモデルから確率分布を用いてサンプリングしてくるものなので、どうしても確率的な振る舞いが混入してきます。その確率的な振る舞いがどのようなものであるのか、きちんと把握した上でないと、予測結果の良しあしは判断できないのではないか、と考えたのです。

続きを読む

【Rで機械学習】LSTM-RNNを仮想数列で実験してみる。

前からなんとなく気になっていたLSTM-RNN。
LSTM-RNN(Long short-term memory Recurrent Neural Network)とは・・・なんて話をしだすときりがないので、以下のリンク先をみてください。

qiita.com

qiita.com

要は時系列データを学習するニューラルネットワークの一種なんだけれども、学習させるデータが長すぎたりするといろいろ問題が起こるので、「忘れる」という状態も組み込んだ学習モデルにしよう、というもの。リンク先にもあるように、近年、機械翻訳など、自然言語処理の分野で目覚ましい成果を挙げているそうで、テキストマイニングでごにょごにょやっている人間としてはいつか手をだしてみよう、と思っていたものです。
で、ようやく時間ができたのであれこれ試してみよう、と思い立ち、いつも参考にさせてもらっているこちらを見ながらあれこれ考えてみました。

tjo.hatenablog.com

ひとまず例示にあるような、文章を学習させるモデルを考えたのですが、すでに実験されているように、夏目漱石の上記の例でもなかなか良い予測ができず、自前で宮沢賢治の文章を用意してやってみたりしたのですが、それもいまいち。やっぱり大量に学習データがないとだめなのかなぁ、と考えていたところ、ふと、余計なことをひらめきました。

というわけで今日のお題です。

続きを読む

【Rで自然言語処理】Term-co-occurrence matrixから距離行列とグラフをつくる実験

前にこんな記事を書きました。

wanko-sato.hatenablog.com

構文解析の結果から語のつながりを抽出して意味あるいは概念のネットワークを構築しよう!というアイディアです。が、進んでいません。というのも。

KNPの結果の解析がめんどくさい。

というごくごくしょーもない理由だったりするわけです。
じゃあ、別の入り口はなかろうか?と考えていたときに、お気に入りパッケージ"text2vec"のTerm-co-occurance matrixが面白いことに使えそうな気がしてきたので、ちょっと実験してみた、という話です。

続きを読む

【R】数字の集合をトピックモデルで分析したらなかなか良くてびっくりした話。

前回、疎行列をクラスタリングする話を書きました。

wanko-sato.hatenablog.com

そこでふと思いついたのが、「数字の羅列を単語の集合とみなして自然言語処理のスキームに当てはめられるんじゃね?」ということです。どういうことかというと、

[[1]]
 [1] 246 308 149 170 161 233 291 218 260 171 155 151

[[2]]
[1] 383 331 353

[[3]]
[1] 310 333

[[4]]
[1] 255 247 223 284

こんな感じのデータがあるとします。個々の数字はなんでも良いのですが、例えばこれがある消費者の買った商品IDの集合だとします。通常は、前回書いたとおり、これを主成分分析にかけたり、クラスタリングしたり、あるいはあらかじめ属性がわかっていれば教師あり学習させてみたり、といろいろ思いつくわけなんです。が、じゃあ、この商品IDを「単語」とみなしてトピックモデルで分析したらうまくクラスタリングできるのだろうか?というのが今回のモチベーションです。
そもそも、トピックモデルは自然言語処理のスキームの中に位置づけられるわけなんですが、トピックモデルって大きく考えれば「カテゴリカルデータの分析」なわけで、カテゴリカルデータで良いのなら単語である必要もなく、ならば上記のような消費者の購買データのようなものでも良いよね、となるわけです。

続きを読む