如何在数百万个条目中查找文本相似性?

时间:2019-06-13 22:11:26

标签: python python-3.x machine-learning spacy sentence-similarity

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

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

像StackOverflow这样的网站如何快速找到类似的问题?

我可以想象2种方法:

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

我的疑问是第二选择。存储单词向量足以快速搜索相似文本吗?

2 个答案:

答案 0 :(得分:1)

在每次收到新请求时都无法比较所有文本。

要真正快速处理大型数据集,我建议使用局部性敏感的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/

答案 1 :(得分:1)

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

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

定义这种空间的一种简单方法可能是在term-frequency (TF), term-frequency-inverse document frequency (TFIDF)上-但是没有定义词汇量的限制,这些方法可能会遭受空间/准确性问题的困扰-仍然使用最具体的100个单词的词汇量在语料库中,您应该能够合理地了解相似度,并将其扩展到数百万个结果。这取决于你的语料。

您可能会考虑很多替代功能-但是所有这些功能都将致力于采用一种可靠的方法将文档转换为几何向量,然后可以对其进行查询以求相似性。