2012-08-08 4 views
6

さて、私はちょっと混乱しています。しかしこれは単純な直接的な質問であるべきです。TF-IDF簡単な使い方 - NLTK/Scikit Learn

コーパス全体に対する文書のTF-IDF行列を算出した後、私はこれに非常に類似した結果を得る:

array([[ 0.85..., 0. ..., 0.52...], 
     [ 1. ..., 0. ..., 0. ...], 
     [ 1. ..., 0. ..., 0. ...], 
     [ 1. ..., 0. ..., 0. ...], 
     [ 0.55..., 0.83..., 0. ...], 
     [ 0.63..., 0. ..., 0.77...]]) 

はどのようにして、検索に対する最も類似した文書を取得するには、この結果を使用しますクエリ?基本的に私はWikipediaの検索バーを再作成しようとしています。検索クエリに基づいて、私はWikipediaから最も関連性の高い記事を返したいと思います。このシナリオでは、6つの記事(行)があり、検索クエリには3つの単語(列)が含まれています。

すべての結果を列に追加するか、すべての行を追加しますか?より大きな価値が最も関連性が高いのか、最も低い価値が最も関連性が高いのか?

答えて

4

あなたはcosine similarityをよく知っていますか?各記事(ベクトルA)に対して、クエリ(ベクトルB)に対する類似度を計算する。降順でランク付けし、上位の結果を選択します。リファクタリングをご希望の場合はgensimライブラリが優れています。

+1

私は実際にこのチュートリアルに従っています:http://pyevolve.sourceforge.net/wordpress/?p = 1589 ...元の記事と検索クエリの間にTF-IDF Vectorsを使用する方法。 – tabchas

+1

重み付けスキームとしてtf-idfを使用している場合は、依然としてクエリを正規化するだけです。あなたのマトリックスには3つの用語が含まれています。これらの用語はすべてクエリに表示されます。クエリの生の周波数ベクトルは(1,1,1)である。 sqrt((1^2)+(1^2)+(1^2))= 1.73,1/1.73 = 0.57となる。したがって、クエリベクトルは(0.57,0.57,0.57)です。これで、クエリを別のドキュメントとして扱うことができます。この照会ベクトルといくつかの他の文書ベクトルとのコサイン類似度は、その内積である。最初の記事について:(.57 * .85)+(.57 * 0)+(.57 * .52))= 0.2964。すべての記事と最高得点でこれを繰り返します。 – verbsintransit

+0

なので、ある種の分類器を訓練する必要はありませんか? – tabchas