Мы внедряем Систему рекомендаций, основанную на локально-чувствительном хешировании (LSH) , использующую реализацию MinHash LSH Forest
от Datasketch
.
После анализа результатов мы обнаружили, что MinHash LSH Forest
(Datasketch)
не рекомендует самое близкое совпадение для данного запроса.
Мы проанализировали предсказанное совпадение и фактическое ближайшее совпадение, используя MinHash LSH
от Datasketch
(Примечание: MinHash LSH
отличается от MinHash LSH Forest
) и обнаружили, что, хотя MinHash LSH
работает достаточно хорошо MinHash LSH Forest
дает неверный результат.
def get_forest(df, permutations, p_trees):
lemmatizer = WordNetLemmatizer()
minhash = []
for i in range(len(df)):
text = df.iloc[i,8]
tokens = process_text(text, lemmatizer)
if tokens is None:
pass
m = MinHash(num_perm = perms)
for s in tokens:
m.update(s.encode('utf8'))
minhash.append(m)
forest = MinHashLSHForest(num_perm = perms, l = p_trees)
for i,m in enumerate(minhash):
forest.add(i,m)
forest.index()
return forest
Например,
Предположим, есть 3 предложения,
Предложение A: Текст запроса.
Предложение B: ближайшее совпадение.
Предложение C: Предсказанный матч.
J_AB = 0.38,
J_MinHash_AB = 0.39,
J_AC = 0.2,
J_MinHash_AC = 0.2
Где,
J_AB
: фактическое сходство Жакара между предложением A и предложением B.
J_AC
: Фактическое сходство с Жакаром между предложением А и предложением С.
J_MinHash_AB
: Жаккард Сходство между предложением A и предложением B
рассчитывается MinHash LSH.
J_MinHash_AC
: Жаккард Сходство между предложением А и предложением С
рассчитывается MinHash LSH.
У нас есть два вопроса,
Почему Datasketch MinHash LSH Forest
предлагает предложение С в качестве ближайшего соседа предложения А вместо предложения В?
Учитывая, что MinHash LSH Forest
приведет к нескольким сходствам Джакарта, т.е. J_MinHash_AB
, J_MinHash_AC
, J_MinHash_AD
, …………, J_MinHash_AN
можно ли получить доступ ко всем из них?