入力: フレーズ 1、フレーズ 2
出力: 意味的類似度値 (0 と 1 の間)、またはこれら 2 つのフレーズが同じことについて話している確率
このペーパーをチェックすることをお勧めします。
セマンティックネットとコーパス統計に基づく文の類似性 (PDF)
説明したアルゴリズムを実装しました。私たちの文脈は非常に一般的で (事実上、任意の 2 つの英文)、採用されたアプローチが遅すぎて、結果は期待できるものではありましたが、十分ではありませんでした (または、かなりの余分な努力がなければそうなる可能性が高い)。
あなたは多くの文脈を与えていないので、必ずしもこれをお勧めすることはできませんが、論文を読むことは問題に取り組む方法を理解するのに役立ちます.
よろしく、
マット。
これには短い答えと長い答えがあります。
簡単な答え:
WordNet ::SimilarityPerlパッケージを使用します。Perlが選択した言語でない場合は、PrincetonのWordNetプロジェクトページを確認するか、Googleでラッパーライブラリを確認してください。
長い答え:
単語の類似性を判断することは複雑な問題であり、この分野での研究はまだ非常に熱いです。類似性を計算するには、単語の意味を適切に表現する必要があります。しかし、たとえば「椅子」の意味を表すものは何でしょうか。実際、「椅子」の正確な意味は何ですか?あなたがこれについて長くそして一生懸命考えるならば、それはあなたの心をねじり、あなたは少し怒って、そして最終的に哲学または計算言語学の研究キャリアを取り、真実™を見つけるでしょう。哲学者と言語学者の両方が文字通り何千年もの間答えを考え出そうとしました、そして、終わりは見えません。
したがって、この問題をもう少し詳しく調べることに興味がある場合は、ジュラフスキーとマーティンによる音声と言語の処理の第20.7章を読むことを強くお勧めします。その一部はGoogleブックスから入手できます。これは、単語の共起統計を使用して単語の類似性の尺度を定義する、最先端の配布方法の非常に優れた概要を示します。ただし、これらを実装しているライブラリはほとんどありません。
これに来たばかりの人には、SEMILAR - http://www.semanticsimilarity.org/をご覧になることをお勧めします。彼らは、単語と文の類似性を計算するための多くの最新の研究方法を実装しています。Javaで書かれています。
SEMILAR API には、Wordnet、Latent Semantic Analysis (LSA)、Latent Dirichlet Allocation (LDA)、BLEU、Meteor、Pointwise Mutual Information (PMI)、依存性ベースの方法、Quadratic Assignment に基づく最適化された方法などに基づくさまざまな類似性方法が付属しています。類似性メソッドは、単語から単語、文から文、またはより大きなテキストなど、さまざまな粒度で機能します。
プリンストン大学のWordNetプロジェクトを調べてみてください。これに対する 1 つの考えられるアプローチは、最初に各フレーズをストップワード リストに通して実行することです (「a」、「to」、「the」などの「一般的な」単語を削除するため)。 WordNet に基づく距離測定を使用して、他のフレーズの各単語間のセマンティックな「類似性」を計算できます。距離の測定値は次のようなものです: word1 から word2 に到達するために WordNet で通過しなければならない円弧の数。
レベルが高くてすみません。私は明らかにこれを試したことがない. ちょっと考えただけです。
このための潜在意味索引付けを調べます。ベクトル空間検索インデックスに似たものを作成できると思いますが、意味的に関連する用語は互いに接近しています。つまり、それらの間の角度は小さくなっています。詳細については、こちらに投稿します。
6年前の質問を掘り下げて申し訳ありませんが、今日この投稿に出くわしたので、他の誰かが同様のものを探している場合に備えて回答を投げます.
cortical.io は、2 つの表現の意味的類似性を計算するプロセスを開発し、Web サイトでデモを公開しています。機能へのアクセスを提供する無料の API を提供しているため、アルゴリズムを自分で実装しなくても、独自のアプリケーションで使用できます。
簡単な解決策の 1 つは、文字 n-gram ベクトルの内積を使用することです。これは、順序変更 (多くの編集距離メトリックはそうではありません) に対して堅牢であり、ステミングに関する多くの問題を捉えます。また、完全なセマンティック理解という AI の完全な問題を防ぎます。
n-gram ベクトルを計算するには、n の値 (たとえば 3) を選択し、フレーズ内のすべての 3 単語シーケンスをベクトルにハッシュします。ベクトルを単位長に正規化し、異なるベクトルの内積をとって類似性を検出します。
上位 n 個の類似単語とフレーズ類似度を計算するサービスを提供するSimServiceを試してください。
各単語が文内に出現する確率を考慮した統計的手法を検討したいと思います。これにより、「and」、「or」、「the」などの一般的な単語の重要性を低くし、あまり規則的に表示されない単語の重要性を高めることができるため、より優れた識別要素になります。たとえば、次の 2 つの文があるとします。
1) smith-waterman アルゴリズムは、2 つの文字列間の類似度を測定します。2) smith-waterman アルゴリズムを見直したところ、私たちのプロジェクトには十分であることがわかりました。
2 つの文が「smith-waterman」という単語と「algorithms」という単語 (「and」、「or」などほど一般的ではない) を共有しているという事実から、2 つの文が実際に同じ話題について話している。
要約すると、以下をご覧になることをお勧めします。1) 文字列の類似性測定。2) 統計的方法;
お役に立てれば。
これには、アルゴリズムが実際に話していることを知っている必要があります。単語を比較して同義語を探すなどの初歩的な形で行うことができますが、正確な結果を得るには何らかの形の知性が必要です。
http://mkusner.github.io/publications/WMD.pdfをご覧ください。この論文では、意味の類似性を明らかにしようとする Word Mover 距離と呼ばれるアルゴリズムについて説明しています。これは、word2vec によって決定される類似度スコアに依存します。これを GoogleNews-vectors-negative300 と統合すると、望ましい結果が得られます。