web-dev-qa-db-ja.com

2つの文が類似していることを検出する方法は?

2つの任意の文が互いにどれほど類似しているかを計算したいと思います。例えば:

  1. 数学者が問題の解決策を見つけました。
  2. この問題は若い数学者によって解決されました。

タガー、ステマー、パーサーを使用できますが、これらの文が類似していることをどのように検出するかわかりません。

22
SahelSoft

これらの2つの文は類似しているだけでなく、ほとんど 言い換え 、つまり同じ意味を表現する2つの代替方法です。これは言い換えの非常に単純なケースでもあり、一方がアクティブ形式で他方がパッシブであるという唯一の例外を除いて、両方の発話が同じ単語を使用します。 (2番目の文では数学者が「若い」ため、2つの文は正確に言い換えられていません。この追加情報により、2つの文間の意味関係が非対称になります。これらの場合、2番目の発話 "含意 " 最初のもの、言い換えれば、最初のものは2番目のものから推測することができます)。

この例からは、言い換えの検出、テキスト含意、または一般的な文の類似性に実際に関心があるかどうかを理解することはできません。これはさらに広範で曖昧な問題です。たとえば、「人は食べ物を食べる」は「人はパンを食べる」や「男性は食べ物を食べる」に似ていますか?

言い換えの検出とテキストの類似性はどちらも、自然言語処理における複雑で未解決の研究問題であり、研究者の大規模で活発なコミュニティがそれらに取り組んでいます。このトピックへのあなたの関心の程度は明らかではありませんが、多くの優秀な研究者がそれを破るために全キャリアを費やしてきたとしても、私たちはまだ一般的に機能する健全な解決策を見つけるにはほど遠いことを考慮してください。

特定の場合にのみ機能し、構文の変更をキャプチャしない(この場合のように)非常に表面的な解決策に興味がない限り、テキストの類似性の問題をより深く調べることをお勧めします。良い出発点は本 "統計的自然言語処理の基礎" であり、これはほとんどの統計的自然言語処理トピックの非常によく組織化されたプレゼンテーションを提供します。要件を明確にしたら(たとえば、どのような条件下でメソッドが機能するのか、どのレベルの適合率/再現率を求めているのか、どのような現象を安全に無視できるのか、どの現象を考慮する必要があるのか​​など)、次のことができます。最近の研究作業に飛び込むことによって、特定のアプローチを検討し始めます。ここで開始するのに適した場所は、 計算言語学会(ACL)のオンラインアーカイブ です。これは、この分野のほとんどの研究結果の発行元です。

実用的な操作を提供するために、文の類似性の非常に大まかなベースラインは、文を単語の袋として表す2つのバイナリベクトル間の コサイン類似性 です。単語の袋は、テキストの非常に単純化された表現であり、一般に情報検索に使用されます。構文を完全に無視し、文を語彙のサイズ(つまり、言語の単語数)であるベクトルとしてのみ表現します。 )およびそのコンポーネント「i」は、語彙の位置「i」にある単語が文に含まれている場合は「1」、それ以外の場合は「0」と評価されます。

30
masterpiga

場合によっては、文を自動的に 談話表現構造 に変換して意味を表すことができます。 2つの文が同じ談話表現構造を生成する場合、それらは類似した意味を持っている可能性があります。

1
Anderson Green

それがあなたの質問の内容であるかどうかは完全にはわかりませんが、 Levenshtein Edit Distance alghoritmを使用して、記号のシーケンス(この場合は単語)の類似性を計算できます。

0
abecadel