質問: ストックした文章をもとに指定された語句と文章内で共起する語を表示するというものをやりたいと思っています。 そこでまず、gensimを用いてコーパスを作成し、指定語が存在するドキュメントを発見したら、そのドキュメントの各単語のtfをキープ、それを全てにおいて実行し、各単語の加算値が高い順にソート、表示するというものをやってみました。 結果としては出来たのですが、とにかく遅いです。同じコーパスを用いた word2vec のモジュールでは(内部構造がしっかりしているから、私には理解できませんでした)コーパスを莫大な量に増やしてみても、秒単位で処理結果が出ているので、(ベクトル表現と共起分析は違うとはいえ)共起分析もなんとかしてそれなりの速さでできないかと思っています。 以下ためしたことです。 ・計算に強いと言われるnumpyでやろうとした。 →コーパスでは要素数が一致していないので、利用は難しかった。 ・pandasで文章数をインデックス、単語idをカラムとするデータフレームを作成、欠損値をNan埋めし、行列演算?を試みた。 →欠損値が多すぎて、データが肥大化、結局遅い。さらには処理落ちが起きる。 ・scipyでスパース行列を作成し、低容量データでの演算を試みた。 →日本語ドキュメントが限りなく少なく、未だ使いこなせていない。そもそも行列とは何かという哲学に直面 ↓ こうした過程を辿り今に至っています。 pythonそのものを最近勉強し始めたため、根本的な部分で欠陥があるかと思います。またこんな遠回りなことをせずとももっとあっさりできるという可能性もあるかと思い、この場で質問させていただきました。 有効打を知っている方がいらっしゃいましたらお力添えをお願い致します。
回答: まずはこの辺りがとっかかりになるのではないでしょうか。 http://qiita.com/yuku_t/items/483b56be83a3a5423b09 どの程度の知識がベースにあるのかによるかと思いますが、上記のページにあるキーワードに関連する論文を読みあさると、様々な考え方や具体的な手法などが見えてくるかと思います。