3

LinkedIn のような検索エンジン プロジェクトで、すべてに 1 つの検索ボックス モデルを提供することを目指しています。

類推を使用して自分の問題を表現しようとしました。

各結果が記事であり、著者、トピック、会議 (出版物の場合)、ホストされた Web サイトなどの複数の次元があると仮定しましょう。

いくつかのサンプル クエリ:

  • 「authorXYZ による IEEE での情報検索論文」: 3 つの次元 {topic, conf-name, authorname}

  • 「デザインパターンに関するauthoABCによるACMペーパー」:3次元{conf-name、author、topic}

  • 「javaranch でのマルチスレッド プログラミング」: 2 つの次元 {トピック、ウェブサイト}

データベースから最終結果を取得する前に、大きなクエリでこれらのディメンションと対応するキーワードを特定する必要があります。

ポイント

  • すべてのディメンションのすべての可能な値にアクセスできます。たとえば、私はすべての会議名、著者名などを持っています.
  • ディメンション間での用語の重複はほとんどありません。

私のアプローチ(素朴)

  • Lucene を使用して、「dimension」と呼ばれる専用フィールドと実際の値を持つ別のフィールドを使用して、各ディメンションのすべてのキーワードにインデックスを付けます。元:

    1) {名前:IEEE、次元:会議}など

    2) {name:ooad, ディメンション:topic} など

    3) {name:xyz, dimension:author} など

  • クエリをそのまま使用してインデックスを検索します。
  • 結果をある程度反復し、新しい次元の最初のドキュメントを認識します。

問題

  • 結果セットからのディメンションの認識を停止するタイミングがわからない。たとえば、クエリには 2 つのディメンションしか含まれていなくても、結果は 3 つのディメンションに一致する場合があります。
  • スペル チェックも含めたい場合は、より複雑になり、結果の精度が低下する傾向があります。

論文、記事への参照、または問題のドメインを説明する適切な用語の指摘などは、確かに役立ちます。

どんなガイダンスでも大歓迎です。

4

2 に答える 2

2

解決策 1 : 自然言語処理の名前付きエンティティ認識 (NER) を使用して問題を解決するのはどうですか。現在、NER は単純な正規表現を使用して実行できます (データが静的すぎる場合)。または、隠れマルコフ モデルなどの機械学習手法を使用して、シーケンス データ セット内の名前付きエンティティを実際に把握することができます。他の機械学習教師ありアルゴリズムと比較して HMM を強調する理由は、各状態が前または次の状態に依存する連続データがあるためです。NER は、対応する名前とともにディメンションを出力します。その後、検索は垂直検索の問題になり、さまざまな Solr/Lucene フィールドで特定された単語を検索し、それに応じてブーストを設定することができます。

実装の部分では、Lucene を使用しているので Java を知っていると想定しているため、Mahout を選択することをお勧めします。Mahout には HMM が組み込まれており、データセットでモデルをトレーニングおよびテストできます。また、大規模なデータセットがあると想定しています。

解決策 2 : この問題をプロパティ グラフの問題としてモデル化してみてください。Neo4j のようなものをチェックしてください。問題がスキーマのないドメインに該当するため、これをお勧めします。スキーマは固定されておらず、問題は、各ノードがキーと値のペアのセットであるグラフとしてモデル化できます。

解決策 3 : ディメンションのすべての可能な値があると述べたように、正規表現を使用してすべての非構造化データをテキストから構造化データに単純に変換しないでください。固定スキーマがないため、データを保存します。任意の NoSQL キー値データベース。それらのほとんどは、全文検索用の Lucene 統合を提供し、それらのデータベースで検索するだけです。

于 2013-10-10T07:57:29.123 に答える