0

かなり長くなり、申し訳ありません。

第 3 章で説明した Minhash LSH アルゴリズムを、Spark (Java) を使用して実装しようとしています。私はこのようなおもちゃの問題を使用しています:

+--------+------+------+------+------+
|element | doc0 | doc1 | doc2 | doc3 |
+--------+------+------+------+------+
|   d    |   1  |  0   |  1   |  1   |
|   c    |   0  |  1   |  0   |  1   |
|   a    |   1  |  0   |  0   |  1   |
|   b    |   0  |  0   |  1   |  0   |
|   e    |   0  |  0   |  1   |  0   |  
+--------+------+------+------+------+

目標は、これら 4 つのドキュメント ( doc0doc1doc2およびdoc3) の中で、どのドキュメントが互いに類似しているかを特定することです。そして明らかに、可能な唯一の候補ペアはdoc0doc3です。

Spark のサポートを使用して、次の「特性マトリックス」を生成することは、現時点で到達できる範囲です。

+----+---------+-------------------------+
|key |value    |vector                   |
+----+---------+-------------------------+
|key0|[a, d]   |(5,[0,2],[1.0,1.0])      |
|key1|[c]      |(5,[1],[1.0])            |
|key2|[b, d, e]|(5,[0,3,4],[1.0,1.0,1.0])|
|key3|[a, c, d]|(5,[0,1,2],[1.0,1.0,1.0])|
+----+---------+-------------------------+

コードスニペットは次のとおりです。

CountVectorizer vectorizer = new CountVectorizer().setInputCol("value").setOutputCol("vector").setBinary(false);
Dataset<Row> matrixDoc = vectorizer.fit(df).transform(df);

MinHashLSH mh = new MinHashLSH()
  .setNumHashTables(5)
  .setInputCol("vector")
  .setOutputCol("hashes");

MinHashLSHModel model = mh.fit(matrixDoc);

現在、MinHashLSHModel model使用できる には 2 つの主要な呼び出しがあるようです:model.approxSimilarityJoin(...)model.approxNearestNeighbors(...). これら 2 つの呼び出しの使用例は次のとおりです: https://spark.apache.org/docs/latest/ml-features.html#lsh-algorithms

一方、model.approxSimilarityJoin(...)2 つのデータセットを結合する必要があります。私は 4 つのドキュメントを持つデータセットを 1 つしか持っていません。これら 4 つのドキュメントのどれが互いに類似しているかを調べたいので、2 つ目のデータセットはありません。結合... 試してみるために、実際に唯一のデータセットをそれ自体に結合しました。結果に基づいて、model.approxSimilarityJoin(...)ペアワイズ Jaccard 計算を行ったようで、ハッシュ関数などの数を変更しても影響は見られず、minhash 署名が正確にどこで計算され、バンド/行がどこで計算されたのか疑問に思いました。分割が発生しました...

もう 1 つの呼び出し はmodel.approxNearestNeighbors(...)実際に比較ポイントを要求し、モデルはこの指定されたポイントに最も近いものを識別します... 明らかに、これも私が望んでいたものではありません。余分な基準点はありません。

アイデアが尽きたので、Spark API を使用して独自のバージョンのアルゴリズムを実装しましたが、からのサポートがあまりなくMinHashLSHModel model、本当に気分が悪くなりました。私は何かを逃したにちがいないと思っています... ??

どんな考えでも聞きたいです、本当に謎を解きたいです。

よろしくお願いします!

4

1 に答える 1