申し訳ありませんが、私の質問がばかげているように聞こえる場合は:)JavaでのLSI実装のための擬似コードまたは適切なアルゴリズムを教えてください。私は数学の専門家ではありません。ウィキペディアや他のウェブサイトでLSI(潜在意味索引付け)に関するいくつかの記事を読んでみましたが、それらは数学でいっぱいでした。LSIは数学でいっぱいです。しかし、ソースコードやアルゴが表示された場合。私は物事をより簡単に理解します。だからここに聞いたのは、たくさんのグルがここにいるからです!前もって感謝します
2 に答える
LSAの考え方は、1つの仮定に基づいています。つまり、同じドキュメントに2つの単語が含まれているほど、それらは類似しています。実際、「プログラミング」と「アルゴリズム」という言葉は、「プログラミング」と「犬の繁殖」よりもはるかに頻繁に同じドキュメントで使用されることが予想されます。
ドキュメントについても同じです。2つのドキュメントの単語が一般的/類似しているほど、ドキュメント自体も類似しています。したがって、ドキュメントの類似性を単語の頻度で表すことができ、その逆も可能です。
これを知っていると、共起行列を作成できます。ここで、列名はドキュメントを表し、行名は単語であり、それぞれがドキュメント内cells[i][j]
の単語の頻度を表します。頻度はさまざまな方法で計算できます。IIRC、元のLSAはtf-idfインデックスを使用します。words[i]
documents[j]
このようなマトリックスがある場合、対応する列を比較することにより、2つのドキュメントの類似性を見つけることができます。それらを比較する方法は?繰り返しますが、いくつかの方法があります。最も人気のあるのはコサイン距離です。学校の数学から覚えておく必要があります。行列は一連のベクトルとして扱われる可能性があるため、各列は多次元空間の単なるベクトルです。そのため、このモデルは「ベクトル空間モデル」と呼ばれています。VSMとコサイン距離の詳細については、こちらをご覧ください。
しかし、そのようなマトリックスには1つの問題があります。それは、大きいということです。とてもとても大きいです。それを扱うには計算コストがかかりすぎるので、どうにかしてそれを減らす必要があります。LSAは、SVD手法を使用して、最も「重要な」ベクトルを保持します。リダクションマトリックスを使用する準備ができたら。
したがって、LSAのアルゴリズムは次のようになります。
- すべてのドキュメントとそれらからすべてのユニークな単語を収集します。
- 頻度情報を抽出し、共起行列を作成します。
- SVDで行列を減らします。
LSAライブラリを自分で作成する場合は、Lucene検索エンジンを開始することをお勧めします。これにより、手順1と2がはるかに簡単になり、ParallelColtやUJMPなどのSVD機能を備えた高次元行列の実装が可能になります。
Random Indexingなど、LSAから生まれた他の手法にも注意してください。RIは同じアイデアを使用し、ほぼ同じ結果を示しますが、完全なマトリックスステージを使用せず、完全にインクリメンタルであるため、計算効率が大幅に向上します。
これは少し遅いかもしれませんが、私はいつも Sujit Pal のブログhttp://sujitpal.blogspot.com/2008/09/ir-math-with-java-tf-idf-and-lsi.htmlが好きでした。興味があれば私のサイト。
プロセスは、よく書かれているよりもはるかに複雑ではありません。実際に必要なのは、行列の単一値分解を実行できるライブラリだけです。
興味があれば、いくつかの簡単なヒントを説明できます。
1)さまざまなドキュメントの単語数を含むマトリックス/データセット/などを作成します-さまざまなドキュメントが列になり、行が個別の単語になります。
2) 行列を作成したら、Jama (Java 用) や SmartMathLibrary (C# 用) などのライブラリを使用して、単一値分解を実行します。これは、元のマトリックスを取得し、基本的にドキュメント、単語、およびベクトルと呼ばれる乗数 (シグマ) の種類を表す 3 つの異なる部分/マトリックスに分割するだけです。
3) 単語、ドキュメント、シグマ ベクトルを取得したら、ベクトル/行列の小さな部分をコピーしてそれらを掛け合わせて、それらを均等に (k) 縮小します。それらを縮小することで、データを一種の正規化します。これが LSI です。
ここにいくつかのかなり明確なリソースがあります:
http://lsa.colorado.edu/papers/JASIS.lsi.90.pdf http://www.soe.ucsc.edu/classes/cmps290c/Spring07/proj/Flynn_talk.pdf
これが少し役立つことを願っています。
エリック