4

同じ意味の文章を見つけられるようになりたいです。クエリ文と、他の何百万もの文の長いリストがあります。文は単語、またはシンボルと呼ばれる特別な種類の単語であり、話題になっているオブジェクトを象徴する単語の一種です。

たとえば、私のクエリ文は次のとおりです。

例: (x) を (y) に足して (z) を与える

私のデータベースには、次のような文のリストが既に存在している可能性があります。 (y) は (z) と等しくない 4. (z) は (x) と (y) の合計

この例は、データベース 1、2、4 の文と一致する必要がありますが、3 とは一致しません。また、文の一致にはある程度の重みが必要です。

それは単なる数学の文ではなく、単語の意味に基づいて他の文と比較できる文です。文と他の多くの文を比較して、相対的な意味が近い文を見つける方法が必要です。つまり、意味に基づいて文をマッピングします。

ありがとう!(新しいタグを作成できなかったため、タグは言語設計です)

4

4 に答える 4

7

まず、あなたが解決しようとしているのは非常に難しい問題です。データセットの内容によっては、AI 完全な場合があります。

addplus、およびsumは同じ概念を指しているのに対し、multipliesは別の概念であることをプログラムが認識または学習する必要があります。WordNet/FrameNet で単語の synset 間の距離を測定することでこれを行うことができる場合がありますが、乗算を見つけたくない場合は、距離の計算をかなり洗練する必要があります。それ以外の場合は、単語と概念のマッピング ( など{'add' : 'addition', 'plus' : 'addition', 'sum' : 'addition', 'times' : 'multiplication'}) を手動で確立する必要がある場合があります。

完全な文のセマンティクスが必要な場合は、さらに文を解析し、解析ツリー/依存関係グラフから意味を導き出す必要があります。スタンフォード パーサーは、解析の一般的な選択肢です。

この問題のヒントは、質問応答の研究でも見つけることができます。そこでは、文を解析し、解析ツリーのフラグメントをインデックスに格納し、一般的な検索エンジン技術 (Lucene で実装されている tf-idf など) でそれらを検索するという一般的なアプローチがあります。これにより、各文のスコアも得られます。

于 2011-05-01T11:22:42.973 に答える
1

それほど簡単ではありません^^最初にストップワードフィルターを使用して、情報を含まない単語を取得する必要があります。ここにいくつかの良いものがあります

次に、同義語を処理します。それは実際には本当に複雑なテーマです。それを行うには、ある種の語義の曖昧性解消が必要だからです。そして、ほとんどの最先端の方法は、最も簡単な解決策よりもほんの少し優れています。つまり、あなたは単語の最もよく使われる意味をとることになります。WordNetでできること。すべての同義語が含まれている単語の類義語を取得できます。次に、その単語(上位語と呼ばれる)を一般化し、最もよく使用される意味を取り、検索語をそれに置き換えることができます。

言うまでもなく、NLPでは同義語の処理はかなり困難です。たとえば、加算や加算などのさまざまな単語形式を処理したい場合は、ステマーを使用できますが、加算から合計への移行に役立つステマーはありません(wsdが唯一の方法です)

そして、正確な答えが必要な場合は、文にさまざまな単語の順序がありますが、これも無視しないでください(x + y=zはx+z = yとは異なります)。したがって、単語の依存関係も必要です。これにより、どの単語が相互に依存しているかを確認できます。英語を使用したい場合は、スタンフォードパーサーが実際にそのタスクに最適です。

おそらく、文から名詞と動詞を取り出して、それらに対してすべての前処理を行い、検索インデックスで依存関係を尋ねる必要があります。依存関係は次のようになります

x (sum, y)
y (sum, x)
sum (x, y)

あなたがあなたの検索に使うことができる

したがって、結果を得るには、トークン化、一般化、依存関係の取得、重要でない単語のフィルタリングを行う必要があります。また、ドイツ語でそれを行いたい場合は、decompounderという単語も必要です。

于 2012-06-23T23:32:54.640 に答える
1

文中の単語を一般的な同義語に分類し、それらの語幹を比較し、文の語幹一致の比率(10語中5語)を使用して、文が一致するしきい値と比較する必要があります。たとえば、単語の一致が80%(または正確であるとみなすパーセンテージ)を超えるすべての文。少なくともそれはそれを行う一つの方法です。

于 2011-05-09T21:56:49.550 に答える
1

他の文のハッシュと比較して簡単な、文からある種のハッシュまたは「式」を作成する関数を作成します。

Cca:
1. 「(x) と (y) の合計は (z) です」=> x + y = z
4. 「(z) は (x) と (y) の合計です」=> z = x +y

変換のヒント: "the" 単語を省略し、2 単語の用語を 1 つの単語 "sum of" => "sumof" に変換し、演算子単語を見つけて "and" をそれに置き換えます。

于 2011-05-10T07:08:35.740 に答える