web-dev-qa-db-ja.com

2つのフレーズ間の意味的類似性の測定

2つのフレーズ/文の間の意味的類似性を測定したい。直接かつ確実に使用できるフレームワークはありますか?

私はすでにチェックアウトしました この質問 、しかしそれはかなり古く、私はそこに本当に役立つ答えを見つけることができませんでした。 1つのリンク がありましたが、これは信頼できないことがわかりました。

例えば。:
私はフレーズを持っています:押しつぶされたと感じました
私にはいくつかの選択肢があります:内側に力を加える、粉砕する、感情的に破壊する、形を変えるなど。
最初のものと最も類似している用語/フレーズを見つけたい。
ここでの答えは、感情的に破壊されたということです。

全体像は次のとおりです。文での使用法に従って、FrameNetのどのフレームが特定の動詞に一致するかを特定したいと思います。

更新:私は このライブラリ 2つの単語間の類似性を測定するのに非常に役立つことがわかりました。また、ConceptNetの類似性メカニズムは非常に優れています。

および このライブラリ 文間の意味的類似性を測定するため

誰かが何か洞察を持っているなら、共有してください。

20
voidMainReturn

これは非常に複雑な問題です。

(より複雑なNLPプロセスに入る前に)私が考えることができる主な手法は、フレーズの各ペアにコサイン(または他のメトリック)の類似性を適用することです。明らかに、この解決策は、一致しない問題のために現時点では非常に非効率的です。文は、異なる単語で同じ概念を参照している可能性があります。

この問題を解決するには、各フレーズの初期表現をより「概念的な」意味に変換する必要があります。 1つのオプションは、各Wordをその同義語で拡張することです(つまり、 WordNet を使用します。別のオプションは、分散セマンティクスDS( http: //liawww.epfl.ch/Publications/Archive/Besanconetal2001.pdf )これは、各用語の表現を、それに出現する可能性の高い単語で拡張します。

例:ドキュメントの表現:{"car"、 "race"}は、同義語を使用して{"car"、 "automobile"、 "race"}に変換されます。一方、DSの場合、次のようになります:{"car"、 "wheel"、 "road"、 "pilot"、...}

明らかに、この変換はバイナリではありません。各用語には、いくつかの関連する重みがあります。

これがお役に立てば幸いです。

8
miguelmalvarez

たぶん cortical.io APIがあなたの問題を助けるかもしれません。ここでのアプローチは、すべての単語が16Kのセマンティック機能でその意味を特徴付けるセマンティックフィンガープリントに変換されることです。フレーズ、文、または長いテキストは、WordのフィンガープリントをOR処理することによってフィンガープリントに変換されます。この(数値)バイナリベクトル表現への変換後、意味的距離は、ユークリッド距離やコサイン類似度などの距離測度を使用して簡単に計算できます。必要なすべての変換関数と比較関数は、APIによって提供されます。

0