12

質問を入力すると、stackoverflow は同じトピックを扱う可能性が高いと思われる質問のリストを表示します。他のサイトや他のプログラム (ヘルプ ファイル システムなど) でも同様の機能を見たことがありますが、自分でこのようなプログラムを作成したことはありません。今、私はそのためにどのようなアルゴリズムを使用するのか知りたいと思っています.

私の頭に浮かぶ最初のアプローチは、フレーズを単語に分割し、これらの単語を含むフレーズを探すことです。その前に、重要でない単語 ('the'、'a'、'does' など) を削除してから、結果をランク付けすることをお勧めします。

ちょっと待ってください。これを Web ページに適用してみましょう。それから ... watchamacallit ... - 「検索エンジン」を作成し、広告を販売することができます。

いいえ、真剣に、この問題を解決する一般的な方法は何ですか?

4

4 に答える 4

12

1 つのアプローチは、いわゆるバッグ オブ ワード モデルです。

お察しのとおり、まず、テキスト (通常、NLP 用語ではドキュメントと呼ばれます) に単語が出現する回数を数えます。次に、「the」、「a」、「or」などのいわゆるストップ ワードを捨てます。

単語と単語数が残ります。これをしばらく行うと、ドキュメントに表示される単語の包括的なセットが得られます。次に、これらの単語のインデックスを作成できます: "aardvark" は 1、"apple" は 2、...、"z-index" は 70092 です。

これで、単語バッグをベクトルに変換できます。たとえば、ドキュメントに aardvarks の参照が 2 つ含まれており、他には何も含まれていない場合、次のようになります。

[2 0 0 ... 70k zeroes ... 0].

この後、内積で 2 つのベクトル間の「角度」を数えることができます。角度が小さいほど、ドキュメントは近くにあります。

これは単純なバージョンで、他にもより高度なテクニックがあります。ウィキペディアがあなたと共にありますように

于 2008-09-16T09:18:01.147 に答える
3

@Hannoレーベンシュタイン距離アルゴリズムを試してみてください。入力文字列sと文字列tのリストを指定すると、 t内の文字列uごとに反復処理を行い、レーベンシュタイン距離が最小のものを返します。

http://en.wikipedia.org/wiki/Levenshtein_distance

http://www.javalobby.org/java/forums/t15908.htmlで Java 実装の例を参照してください。

于 2008-09-16T10:11:25.700 に答える
3

バッグオブワードのアイデアを補強するには:

n グラム (2 つ以上の単語を順番に並べた文字列) に注意を払う方法もいくつかあります。「スペースの複雑さ」の検索は、「スペース」と「複雑さ」を含むものを検索するよりもはるかに多いため、これを行う必要があります。このフレーズの意味は、その部分の合計以上のものであるためです。つまり、宇宙空間と宇宙の複雑さについて語る結果が得られた場合、これはおそらく「宇宙の複雑さ」の検索が実際に意味するものではありません。

ここでの自然言語処理の重要なアイデアは、相互情報量です。これにより、フレーズが実際に特定のフレーズ (「空間の複雑さ」など) であるか、偶然隣接する単なる単語であるかを (アルゴリズム的に) 判断できます。数学的には、主なアイデアは、これらの単語が頻度だけで推測するよりも頻繁に隣り合って現れるかどうかを確率的に尋ねることです。検索クエリで (またはインデックス作成中に) 高い相互情報量スコアを持つフレーズを見つけた場合は、これらの単語を順番に保つことで、より良い結果を得ることができます。

于 2008-09-16T13:08:38.300 に答える
2

全文検索エンジンを開発した私の(かなり小さい)経験から:クエリからいくつかの単語を含む質問を検索します(あなたの場合、クエリはあなたの質問です)。確かに、ノイズ ワードは無視する必要があります。検索範囲を絞り込むために、「ASP.Net」などの「強い」単語のクエリを確認することをお勧めします。http://en.wikipedia.org/wiki/Index_(search_engine)#Inverted_indices'>逆索引は、関心のある単語を含む質問を見つけるためによく使用されます。

クエリから単語を含む質問を見つけた後、質問で関心のある単語間の距離を計算したい場合があるため、「フレーズの類似性」テキストを含む質問は、「類似性について話し合うと、次のフレーズが聞こえます...」テキストを含む質問よりもランクが高くなります。

于 2008-09-16T09:26:40.253 に答える