web-dev-qa-db-ja.com

特定のドメインのセマンティック検索を構築する方法

データセットに対してセマンティック検索を実行する場所で解決しようとしている問題があります。つまり、ドメイン固有のデータがあります(例:自動車について話す文章)

私たちのデータは単なる文の集まりであり、私たちが欲しいのは、フレーズを与えて次のような文を取り戻すことです。

  1. そのフレーズに似ています
  2. フレーズに似た文の一部がある
  3. 文脈的に類似した意味を持つ文


「Buying Experience」というフレーズを検索した場合の例を挙げてみましょう。次のような文を取得する必要があります。

  • 自動車の購入に署名して購入するのに30分もかからないとは思っていませんでした。
  • 私が好きな車を見つけ、購入プロセスは
    まっすぐで簡単

  • 私は絶対に車で買い物をするのが嫌いでしたが、今日は私がやったことがうれしいです


私は文脈的類似性を探しているだけでなく、力ずくの単語検索ではないことを強調したいと思います。

文が別の単語を使用している場合は、それも見つけることができるはずです。

私たちがすでに試したこと:

  1. Open Semantic Search ここで直面した問題は、私たちが持っているデータからオントロジーを生成すること、またはそのために、関心のあるさまざまなドメインから利用可能なオントロジーを検索することです。

  2. Elastic Search(BM25 + Vectors(tf-idf))、これを試してみましたが、数文しかありませんでしたが、精度はそれほど高くありませんでした。精度も悪かったです。人間が精選したデータセットに対して試したところ、文の約10%しか取得できませんでした。

  3. sentence-transformers で一度言及したようなさまざまな埋め込みを試し、さらに example を試して、人間が精選したセットに対して評価を試みたところ、精度も非常に低かった。

  4. [〜#〜] elmo [〜#〜] を試しました。これは優れていましたが、予想よりも精度が低く、コサイン値を決定するための認知的負荷があり、それを下回ると文を考慮すべきではありません。これはポイント3にも当てはまります。

どんな助けでもありがたいです。事前に助けてくれてありがとう

20
Jickson

この問題の解決に役立つ Weaviate を調べてみてください。 データオブジェクトのベクトル化 に基づくスマートグラフです。

ドメイン固有の言語(略語など)がある場合は、Weaviateを custom concepts で拡張できます。

セマンティック検索機能で問題を解決できる可能性があります(つまり、Explore{})または自動分類機能。

探索機能

すべてのデータオブジェクトがベクトル化されるため、次のようなセマンティック検索を実行できます(この例は ドキュメントから 、試してみることができます ここ GraphQLを使用して):

{
  Get{
    Things{
      Publication(
        explore: {
          concepts: ["fashion"],
          certainty: 0.7,
          moveAwayFrom: {
            concepts: ["finance"],
            force: 0.45
          },
          moveTo: {
            concepts: ["haute couture"],
            force: 0.85
          }
        }
      ){
        name
      }
    }
  }
}

たとえば、クラス名「Sentence」に基づいて グラフスキーマ を構造化すると、同様のクエリは次のようになります。

{
  Get{
    Things{
      Sentence(
        # Explore (i.e., semantically) for "Buying Experience"
        explore: {
          concepts: ["Buying Experience"]
        }
        # Result must include the Word "car" 
        where: {
          operator: Like
          path: ["content"]
          valueString: "*car*"
        }
      ){
        content
      }
    }
  }
}

注意:
また、全体として意味的に グラフを調べる を使用できます。

自動分類

別の方法として、 contextual または [〜#〜] knn [〜#〜] 分類機能を使用することもできます。

あなたの場合、クラスSentenceを使用して、それらをExperienceと呼ばれるクラスに関連付けることができます。これには、プロパティbuyingがあります(もちろん、他にも多くの構成と戦略から選択できます)。

PS:
このビデオ 必要に応じて、もう少しコンテキストを提供します。

1
Bob van Luijt

私の知る限り、セマンティック検索エンジンを構築するための理論的なモデルは存在しないと思います。ただし、セマンティック検索エンジンは、特定の要件に対応できるように設計する必要があると思います。そうは言っても、ユーザーの意図や検索用語のコンテキストを正常に理解できるすべてのセマンティック検索エンジンは、自然言語処理(NLP)と機械学習をビルディングブロックとして使用する必要があります。

検索エンジンは検索ツールとは動作が異なりますが、エンタープライズ検索ツールを参照して、機能するセマンティック検索モデルについてのアイデアを得ることができます。 3RDi Searchのような新しい時代のプラットフォームは、セマンティック検索の原則に基づいており、企業が処理する必要がある非構造化データの理想的なソリューションであることが証明されています。 Googleは、検索エンジンに高度なセマンティクスを導入するモデルに取り組んでいる可能性が非常に高いです。

0
Solo987