【发布时间】:2019-08-29 00:06:41
【问题描述】:
我正在研究文档相似性。我的第一种方法是使用 Sklearn 的 TFIDF 算法实现。结果很好,但是对于许多文档搜索很慢。
然后我设置了 Elasticsearch,在 Python 中使用 elasticsearch_dsl。我知道我的查询也在使用 TFIDF:
s = s.query(MoreLikeThis(like=string,
fields=fields,
min_doc_freq=100,
max_doc_freq=175000))
但是,结果非常不同!我刚刚实现了vector-based search,这是 Elasticsearch 7.3 中允许的。这让我可以获取 Sklearn 向量并在 Elasticsearch 中使用它们。我的结果不完全相同,但非常接近(正如预期的那样,类似于我希望通过 Elasticsearch MoreLikeThis 查询看到的结果!)。因此,显然 Elasticsearch 中的 TFIDF 不像在 Sklearn 中那样工作。
此图像显示查询的分数。左侧是 Elasticsearch 中 Sklearn 与 Sklearn 向量的得分。右图,Sklearn vs Elasticsearch 使用我上面的查询(当然,我使用了相同的参数,以及对不同参数的彻底探索以寻求更好的匹配)。
这是意料之中的吗?还是我应该认为这是我的错?
【问题讨论】:
标签: python elasticsearch scikit-learn