0

使用 Spacy 在少数文本中查找相似性后,现在我正尝试在数百万个条目中(即时)查找相似文本。

我有一个包含数百万条文本的应用程序,如果他们要求,我想向用户展示类似的文本。

StackOverflow 之类的网站如何如此快速地找到类似问题?

我可以想象两种方法:

  1. 每次插入文本时,都会比较整个数据库并在两个问题之间建立链接(在具有两个外键的中间表中)
  2. 每次插入文本时,向量都会插入与该文本关联的字段中。每当用户要求相似的文本时,它都会“搜索”数据库中的相似文本。

我怀疑第二个选择。存储词向量是否足以快速搜索相似文本?

4

2 回答 2

1

每次收到新请求时都比较所有文本是不可行的。

为了在大型数据集上真正快速,我可以推荐 Locality-sensitive Hasing (LSH)。它为您提供高概率相似的条目。它显着降低了算法的复杂性。

然而,你必须训练你的算法一次——这可能需要时间——但之后它会非常快。

https://towardsdatascience.com/understanding-locality-sensitive-hashing-49f6d1f6134 https://en.wikipedia.org/wiki/Locality-sensitive_hashing

这是一个似乎接近您的应用程序的教程: https ://www.learndatasci.com/tutorials/building-recommendation-engine-locality-sensitive-hashing-lsh-python/

于 2019-06-13T22:22:01.367 回答
1

您需要一个可以从文本快速映射到多维空间的函数。您的文档集合应该相对于该空间进行索引,以便您可以快速找到文本与空间中的文本之间的最短距离匹配。

存在可以加快索引过程的算法 - 但可以像在较小粒度的基础上将空间子索引为碎片或块一样简单,并像这样缩小搜索范围。

定义这种空间的一种简单方法可能是词频(TF)、词频逆文档频率(TFIDF) ——但如果不定义词汇量的限制,这些可能会受到空间/准确性问题的影响——仍然,使用语料库中最具体的 100 个单词的词汇表,您应该能够获得一个合理的相似性指示,该指示可以扩展到数百万个结果。这取决于你的语料库。

您可能会考虑许多替代功能 - 但所有这些功能都将解决将文档转换为几何矢量的可靠方法,然后您可以查询相似性。

于 2019-06-14T15:00:10.583 回答