DBCLS

第五回統合牧場収穫祭

いよいよ大詰め、牧場での本年度の活動を簡単にですが、収穫祭にて発表させていただきました。 今年はあまりやれたことが多くなかったですし、技術開発部のメンバーも少ない中で、少しでも去年から改善できたところをご紹介できればと思い、LTをさせていただ…

今年度のまとめ

さて、統合牧場での仕事も終盤に差し掛かりました。ここで本年度やってきたことをまとめようと思います。 まずやったのは、PubMed APIを使用して、論文のアブストラクトを取得し、その英文から名詞を取り出す、という実装です。そもそもこれがしたかったのは…

GENIA taggerの動作確認

そろそろ牧場での仕事もまとめに入ろうと思い、今回は、今まで作ってきたPubMed検索結果から研究者ネットワーク図を作るRubyコードが、きちんと動くかどうか確認しました。 今まで牧場で使ってきたMacBook Pro(osx 10.5)から、新しく使用するマシン(osx 1…

PubMed検索から関連筆者をグラフ化

前回トピック解析を実装できましたので、今回はその結果を使って、筆者をトピックごとに分けてネットワークグラフを作成するところを実装しました。 使用するネットワークグラフ作成ライブラリは、以前と同じくGvizです。トピック解析では「トピック数がいく…

トピック解析の実行まで

前回取得した筆者ごとの単語リストから、トピック解析を行って良さそうなトピック数を調べるスクリプト「AuthorTopicExplorer.rb」を書きました。私のGitHubの方に追加しております。 このスクリプトでは、まず「著者ごとの単語リスト」を読込んで、LDAトピ…

検索語から筆者の単語リスト作成まで

前回で一通りのコードがかけたので、今回は実際に検索語を渡して、PubMedでサーチした時の筆者リストと、筆者ごとの使用した単語リストを取得してみました。 まず実行時に引っかかったのが、筆者名に「ø」などの文字が含まれているとき、open-uriではエラー…

筆者の出現頻度リストからAbstract中の単語リストを作成

GENIA taggerを走らせるクラスが簡単に扱えるようになったので、前回までに作っていた論文筆者リストから、それぞれの筆者の論文要旨を検索し、その中の英文を解析して単語頻度リストを作成する部分を作成しました。 以前までに完成していたのは、適当な検索…

GENIA taggerを使うクラスの見直し

GENIA taggerはC++で書かれた英文品詞解析ソフトですが、これをRubyで呼び出すため、今まではサーバプログラムとして起動していましたが、今回はこれを書き換えました。 いちいち別プログラムとして起動してから、本命のRubyコードを走らせるのも面倒だし、…

英文の単語出現頻度を計算するクラスの続き

前回に引き続き、英文から名詞を抜き出すRubyクラスの実装を行いました。 前回は英文の単語数で分類するところまで書いたので、今回は分類された英文ごとに、品詞解析にかけて名詞を抜き出し、その出現数をカウントするところを実装しました。 品詞解析はGEN…

英文から名詞を取り出し出現頻度を計算するクラス

英文の特徴抽出を行う際に、以前実装した英文から名詞を取り出す部分を、今回1つのクラスとしてまとめることにしました。 名詞の判定にはGENIA taggerを使用していて、これを別プロセスで起動し、ソケット通信でRubyスクリプト中で解析したい英文を送るよう…

PubMed APIを利用して、クエリから関連著者リストを作成

前回に続き、著者リストを作成するRubyスクリプトを書いています。今回は、検索ワードをクエリとしてPubMed APIにアクセスし、関連論文リストから著者名を抜き出し、全著者名の出現頻度を計算するところまで完成させました。 まず、検索ワードにヒットした論…

PubMedで検索した論文一覧から筆者の出現頻度リストを作る

前回までで、筆者ごとにまとめられた単語リストから、研究トピックと筆者のネットワーク図を作ることができるようになりました。なので、そのプログラムを使って何ができるかを試すため、簡単な応用先を考えることにしました。 そこで、自分の研究に近いこと…

グラフ作成クラスの公開

前回に続き、今回はトピック解析が終了して出力されるthetaファイルを元に、文章のネットワーク図を作成する「TopicGraph」クラスを修正し、GitHubにて公開しました。 このクラスはThetaファイルを読込んで、各文章のトピックへの分類確率に基づいて、ネット…

トピック解析後の有効トピック数決定のメソッド

前回に引き続き、「AuthorTopicExplorer」クラスの実装を行いました。 今回は実装したRubyクラスの実行動作確認も行い、軽くデバッグしました。RubyでLDAプログラムを起動するのは始めてでしたが、system()命令で実行でき、読込ませた単語リストファイルがあ…

トピック解析用にデータのパースとトピック解析までをクラス化

前回の構想を実装するのに、「トピック解析用にデータをパース・マージする」部分と「トピック解析を実行して解析結果をまとめる」という行程が、階層ごとに再帰的に何度も使い回されると思われるので、今回、これらのメソッドをまとめたクラスを作成しまし…

階層トピック分類の構想

前回までのポスター関連解析で扱った全ポスター数は56だったので、1枚のネットワーク図に収まりましたが、今度はもっと多くのポスターが発表される場合のポスター関連図をどのように作るか、前回までのネットワーク図の作り方をふまえて考え直してみました。…

トピック解析に用いる単語の選別

全ポスターからMeCabを用いて取得した名詞句を使ってトピック解析を行ってきましたが、トピックに特徴的だと判定された単語リストを見ると、全体的なトピックに関連しそうな単語だったり、「目的」とか「本研究」といった一般的すぎてあまり意味の無い単語が…

グラフの修正

前回作成したグラフを修正し、全てのポスターについて、各トピックへのエッジを分類確率に応じた長さでひいて、ポスターがグラフ全体でどのように配置されるのかを確認してみました。 各トピックを示すノードに向かってエッジをひくのですが、全てのトピック…

トピック分類確率から、各トピックを表すノードへのエッジをひいたグラフを作成

前回トピックの分類確率ベクトルから、ポスター間の距離を決めてグラフを作成したのですが、そのグラフを見てもらったところ、「何で繋がっているのか分からない」「ムリに繋げているように思われる、内容が近いとは思えない」といった意見をいただきまして…

トピック分類確率からポスター間距離を算出&Gvizでグラフ作成

LDAトピックモデルにより、各ポスターについてどのトピックに分類されると考えられるのか、その分類確率が算出されます。なので今回は、各ポスターごとにその分類確率をベクトルにまとめて、それらのユークリッド距離を算出することを考えました。 ベクトル…

トピックモデル解析とポスターの分類について

前回上手く行かなかった、RubyからのMeCabの呼び出しですが、Rubyの外部コマンド呼び出しに使うライブラリの「Open3」を用いた方法を紹介されていた、hirokan55の日記様の記事から参考にして、上手く呼び出すことができるようになりました。 def mecab_exec(…

日本語単語によるトピック解析

英単語によるトピック数調整を考えていて、各トピックごとにどれだけの筆者が分類されるのかを調べていたところ、トピック数6のときに、トピック0番により多くの筆者が分類されていることがわかりました。 その後、トピック数6でトピック0番での出現確率が高…

トピック数決定の基準

LDAによるトピックモデル解析についてさらに調査と考察を行いました。今回のトピック解析の目的は、数千件のポスターをいくつかのクラスタに分け、その中で文章間関連度解析を行おうとしていました。その中で、各トピッククラスタがどれだけの文章数を内包す…

単語リストの修正とLDAパラメータ調整

前回まで、ポスター筆者の単語リストを作成するとき、ポスターのアブストラクトとその筆者が発表した論文のアブストラクトをまとめて、単語リストとスコアを生成していました。しかしそれだと、そのポスター発表会における研究内容とはずれてきてしまうので…

単語リストのトピックモデル解析

ポスター著者ごとの単語リストを作成したのですが、これからどのように似た研究分野をクラスタリングすればいいのかを考えていました。 すると、牧場名産品である「PCRH(プーアル茶)」で利用されている、LDA(Latent Dirichlet Allocation)という、トピッ…

単語スコア計算の続き

前回、ポスター筆者の論文ごとに単語の出現頻度を計算し、さらに論文全体の単語スコアを計算する部分まで実装し、それを全筆者について実行した結果を確認しました。 まず気になったのは、筆者名で検索した論文が少なかった場合に、研究の特徴を表すような単…

論文間単語スコアの計算

GENIA taggerを使った単語数計算ができるようになったので、今回は、論文アブストラクトごとに計算した単語数から、全体の出現単語のスコアを算出する部分を実装しました。 あるポスターの筆者が過去に出した論文n本に対して、1つずつアブストラクトから英単…

GENIA taggerを使ってみる

今までは英語の品詞解析にEngTaggerを用いていましたが、名詞を抽出するだけでも複数形と単数形が別々に数えられてしまうので、各単語の原形を解析して返してくれるソフトを探しなおしました。 この条件を満たす形態素解析プログラムとして、「GENIA tagger…

データの整理と名詞出現頻度解析クラス作成の続き

前回の調整で、ほとんどのポスター著者の文献を回収することができていました。今回はそれらの出力ファイルを読み出して、文献の品詞解析と各名詞へのスコア付けを行う部分を実装しました。 まずは各ポスターIDからWebで検索した文献データをロードして、文…

さらに修正、名詞出現頻度解析クラスの作成

前回走らせたアブストラクト取得クラスですが、途中で何度かこけて、原因をみてみると筆者名のアルファベットにアクセント記号などがついてしまっているために、URLが良くないと怒られているようでした。 特殊なアルファベットを含む筆者名はそんなに多くな…