4

私が求めているのは、具体的な解決策ではなく方法論です。まず、難しいと感じた状況を説明してから、質問に進みます。このようにすることがより理にかなっていることを願っています。

自然言語から抽出したデータを扱っています。このデータは、後で一種の「ナレッジ ベース」に対して分析する必要があります (実際にはナレッジ ベースではないため引用されています。後で説明します)。ナレッジ ベースは、これまでのところ理論的には大きく、そのボリュームですが、メモリ内に格納できる量をすぐに実際に超えることになります。私の2つの懸念は次のとおりです。

  • データをデータベース サーバーに移動すると、1 分の 1 に速度が低下することになります...まあ、何の要因かはわかりませんが、簡単に数桁になる可能性があります。つまり、メモリ内にあるランタイムにネイティブなオブジェクト内のデータの一部を見つけるタスクは、データベースにクエリを実行するよりもはるかに高速です。

  • 一度に膨大な量のデータ全体が必要になるわけではありません。実際、ごく一部しか使用されていないため、キャッシングを行うと問題が解決する可能性があります。実際、誰かがすでにこの問題に直面しており、キャッシングが正しい答えだったことを願っています。

「知識ベース」は、これまでのところ単なる複雑なデータ構造であり、クエリ言語を使用してデータベースにクエリを実行する場合と同様の方法でクエリを実行できます。つまり、キー操作による単純な検索値ではありません。指定された基準に一致するオブジェクトを識別するには、複数のサブクエリが必要です。

私がやろうとしていることのより具体的な例を挙げてください。ようではないlangutils、私は「予測パーサー」と呼んでいるパーサーを考え出そうとしています。用語がすでに使用されていて、別の意味である場合は申し訳ありません:)主なアイデアは、単語にPOSタグを割り当てる代わりに、一連のルールを推論された情報に適用することにより、元の仮定を繰り返し修正します。特定のプレフィックスを指定すると、エンジンが「学習した知識」に基づいて継続を生成する方法でそれを実行しようとしています。つまり、接頭辞 "I could" の後に動詞句が続くことをナレッジ ベースが学習したとします。そのため、パーサーは動詞句を想定し、エラーが発生しない限り、そのように解析します。難しい部分は、適切なプレフィックスを見つけることです。悪い点は、「I will」や「Thou shalt」などの前置きが同等の優先順位になることです。e. それらは、ランダム、アルファベット順など、同じ順序で一致するかどうかがチェックされます。アイデアは、知識の取得中に、知識ベースがそのような方法で情報を保存および検索することを学習し、最も可能性の高いプレフィスが最初に検索され、最も可能性が低いプレフィクスは最初にロードされませんでした。

これは、CPU キャッシュの仕組みと似た概念です。したがって、私が書いたものが長すぎる場合: CPU キャッシュのように機能するデータ構造を探しています。現在キャッシュされているものはメモリに存在し、キャッシュされていないものはデータベースに保存されるか、ファイルなどとして保存されます。

PS。タグ集めですみません。私の質問を実際に説明していないように感じます。質問がどこに属するかわかっている場合は、自由に調整してください。

4

1 に答える 1

1

この部分だけを考えると:

ただし、知識の取得中に、知識ベースは、最も可能性の高いプレフィスが最初に検索され、最も可能性の低いプレフィスが最初に読み込まれないような方法で情報を保存および検索することを学習するというものです。

では、私の理解が正しければ、あなたは n-gram を処理するタスクを扱っていることになります。あなたの状況では、接頭辞に明示的な制限を設けていないため、一般的に妥当な制限が適用され、それらは4〜5単語のnグラムであると想定できます。このような n-gram はたくさんあります。実際のコーパスから、ギガバイト単位のデータを簡単に取得できます。ただし、3 グラムのみに制限しても、「適切な」n グラムを何らかの方法で分離する巧妙な前処理を実行しない限り、少なくとも数ギガバイトは得られます。(適切なスムージングと相まって、これは実行可能な解決策になる可能性があります)。

サイズ以外の n-gram に関する悪いニュースは、それらがZipf の法則によって配布されることです。これは基本的に、キャッシングがあまり役に立たないことを意味します。

したがって、データをローカル マシン上の高速なデータベース (おそらくdbmのバリアント) に入れるだけです。すべてをメモリに収めることができれば、おそらく Memcached または Redis の方が高速になるでしょう。

于 2012-12-10T05:05:00.317 に答える