magicスマートフォン用の表示で見るスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。magic機械学習と統計とプログラミングについてちょっとずつ勉強していきます。LDAを(pythonで)実装する機会がありました。サンプリングを用いる実装だったので、Python等のスクリプト言語だとどうしても計算時間が問題になってしまいます(特に大規模なデータに対して)。コンパイル系の言語であるJavaで実装し直し、ついでに日本語PDFファイル(というか日本語論文)をLDAで分析してみました。特徴語(今回は名詞)の選択ストップワードの除去LDAで分析となっています。分析に使ったLDAの実装やスクリプトはGithubにあります。LDAのJava実装https://github.com/breakbee/LDA4JPDF分析のスクリプトhttps://github.com/breakbee/PDFAnalysisPython(>3)Java(>1.6)shmecabを使用しました。Allocation)は、簡単に言うと自然言語処理における確率的なクラスタリング手法です。クラスタのことを「トピック」と読んでいます。属する、という形でクラスタリングします。オーバーヘッド」などサッカーに関する単語が頻出する、という結果が得られます。どのトピックが選ばれるかについての確率(トピック分布の確率)と、そのトピック内での単語の選ばれやすさ(単語分布の確率)があり、それを見ることによって分析の概略を掴むことができます。いうライブラリを使用しました。PDFBoxhttps://pdfbox.apache.org/使用方法はこんな感じです(公式より)。file]参考https://pdfbox.apache.org/commandline/#extractText楽にテキストを抽出できますが結構エラー吐きます。出力されたテキストはPDFでの改行位置で文章が途切れているので、そこらへんをうまく処理する必要があるかと思います。分析テキスト抽出後、一度整形し、日本語のみを抽出し、形態素解析し、名詞だけをとりだして特徴量とし、LDAで分析します。自分ではこんな感じで実験してみました。実験結果はこんな感じになりました。トピック分布の確率(のパラメータ)が0.1以上のトピックについて、頻出単語上位10個を表示しました。completed.今回用意した論文は半分くらいは統計的機械学習について、あとは自然言語処理、データマイニング、ニューラルネットワーク等となっています。自然言語処理に対応していると考えられます。表示されてはいませんが、ニューラルネットワークに対応するトピックもあったので、用意したPDFファイルの傾向を掴めていると言っていいのではないかと思います。実際には、自分の持っているPDFファイルを適当に突っ込んだので、分析結果が出たあとに何となく眺めてみて「確かにこんな感じだなー」と思いました。マイライブラリ等が使えそう?)。プログラミング言語の使い分け今回の試みとして、テキストの整形等はPythonやシェルスクリプト、計算の重い部分はJava、と役割分担をしてみました。Javaでの機械学習の実装は面倒でしたが、Pythonでの実装より大幅に高速化されているのを確認しました(少なくとも倍近く)。今回は26時間とかなりかかっていますが、サンプリング回数とトピック数が多いためであり、特にトピック数を減らせば計算時間が大幅に減らせます。トピック数が一桁だと数秒から数分でした(まあトピック数なんて事前にわからないんですけれども...)。サンプリング回数はできるだけ多い方が良いと思います(本当はburn-inとかやらなきゃいけないんですがやってないです...)。Javaに比べて手軽な処理やテキスト整形等はスクリプト言語であるPythonが便利でした。結論として、前処理や特徴抽出に関しては、スクリプト言語で手軽に行うのが楽で良いと思います。機械学習の手法に関しては、PythonやMatlab、Rで実装してみて、精度や計算時間を考慮してからC++やJavaで実装し直すのが良いのかな、と思いました。PDFファイルからのテキスト抽出は結構ノイズが入るので、前処理でしくじると結果も悲惨なことになりました。正規表現やユニコードなど色々と勉強し直しました。特徴抽出も、最初は全単語を用いていたのですが、収拾がつかなくなってしまったので、用いる品詞を限定することにしました。今まで私は分析手法ばかりに目が行っていたのですが、データの収集や前処理、実験結果の分析なども同じ位大切ということだと思います。分析手法とは違いあまり定式化されていないので、自分なりのアプローチを確立し、問題ごとに良く考える必要があると感じました。»プロフィールid:breakbee機械学習とプログラミングについてちょっとずつ。Blog|ブログを報告する。