2011-07-06 8 views
17

私は過去2時間の間、SOのnlpタグを見てきました。何も見逃していないと確信していますが、もし私がしたら、私に質問してください。センテンス間の「近似」意味類似度を推定する良い方法は何ですか?

しかし、私は何をしようとしているのかを説明します。私が多くの記事で見た共通の概念は、意味の類似性が難しいということです。例えば、thisポストから、受け入れられた解決策は、次のことを示唆している:

First of all, neither from the perspective of computational 
linguistics nor of theoretical linguistics is it clear what 
the term 'semantic similarity' means exactly. .... 
Consider these examples: 

Pete and Rob have found a dog near the station. 
Pete and Rob have never found a dog near the station. 
Pete and Rob both like programming a lot. 
Patricia found a dog near the station. 
It was a dog who found Pete and Rob under the snow. 

Which of the sentences 2-4 are similar to 1? 2 is the exact 
opposite of 1, still it is about Pete and Rob (not) finding a 
dog. 

私のハイレベルな要件は、k平均クラスタリングを利用し、セマンティックの類似性に基づいてテキストを分類するので、私が知る必要があるすべては彼らかどうかですおおよその一致です。たとえば、上記の例では、1,2,4,5を1つのカテゴリに分類し、3つを別のカテゴリに分類することでOKです(もちろん、3つはより類似した文章でバックアップされます)。何かのように、関連記事を見つけるが、100%関連する必要はありません。

私は、最終的には各指紋のような種類のベクター表現を構築する必要があると考えていますが、このベクターに含めるべき内容はまだ私にとっては未解決の問題です。それはnグラムなのでしょうか、それともワードネットからのものなのでしょうか?

Thisスレッドは、すべての関連技術を列挙する素晴らしい仕事をしましたが、不幸にも投稿が私が望むものになったときに停止しました。このエリアの最新の最先端技術は何ですか?

答えて

5

Latent Semantic Modelingが役に立ちます。基本的にはSingular Value Decompositionの別のアプリケーションです。 SVDLIBCは、このアプローチのかなり良いC実装です。これはoldieでもgoodieですが、sparsesvdという形でPythonバインディングさえあります。

+0

スパース行列用のSVDのPython実装は、[scikits-learn](http://scikit-learn.sourceforge.net/)に 'scikits.learn.utils.extmath.fast_svd'としても提供されています。 –

2

潜在的なディリクレ割り当て(LDA)のようなトピックモデリングフレームワークを試すことをお勧めします。考えられるのは、潜在的な(隠れた)トピックの集合から文書(問題であると思われるあなたの文で)が生成されているということです。 LDAはそれらのトピックをワードクラスタで表現して検索します。

implementation of LDA in Pythonは、無料のGensimパッケージの一部として入手できます。あなたはあなたの文章にそれを適用してから、kを実行することができます。

+0

はい、私はLDAが今や大流行していると思います。 –

関連する問題