所以我知道有几种方法可以找到文档语料库中最相似或最相似的三个文档。我知道可能会出现扩展问题,现在我有大约一万个文档,并且已经在大约三十个子集上运行测试。这是我现在得到的,但正在考虑研究elasticsearch或doc2vec,如果这证明是不可能的或低效的。为术语文档矩阵添加一个新文档以进行相似度计算
到目前为止,脚本工作得非常好,他们使用spaCy标记文本和Sklearn TfidfVectorizer以适应所有文档,并找到非常相似的文档。我注意到流水线中出现的NumPy对象的形状是(33,104354),这可能意味着104354词汇表不包括所有33个文档中的停用词。这一步需要20分钟的时间才能运行,但下一步是计算所有余弦相似度的矩阵乘法非常快,但我知道它可能会减慢,因为该矩阵会得到数千而不是30行。
如果您可以高效地将新文档添加到矩阵,那么如果您保存了该计算的结果,则初始计算是否花费了十个小时甚至几天也无所谓。
- 当我按下标签后。似乎在矢量器上有一种方法叫做
vectorizer.fixed_vocabulary_
。我无法在Google或SKlearn中找到此方法。无论如何,当我运行该方法时,它将返回False
。有人知道这是什么吗?我认为在可能的情况下修正词汇可能会有帮助,否则在术语文档矩阵中添加一个新文档可能会很麻烦,尽管我不知道该怎么做。
有人问了一个similar question这里被投票了,但没有人回答。
他写道:
新文档 当我得到一个新的文档DOC(K),我该怎么办?那么,我必须计算这个文档与以前所有文档的相似性,而不需要构建一个完整的矩阵。我可以将doc(k)dot doc(j)的内积代入前面所有的j,并且得到S(k,j),这很好。
- 没有人确切地理解他的意思在这里是什么或者有这个地方默默无闻的话题进行了说明任何良好的联系?他对吗?我以某种方式认为,如果他是对的,用这个内在产品添加新文档的能力将取决于如上所述的固定词汇。
[fixed_vocabulary_](https://github.com/scikit-learn/scikit-learn/blob/14031f6/sklearn/feature_extraction/text.py#L270)对应于构造函数中的'vocabulary'参数。它只会告知是否发送了一个自定义词汇表,或者从提供的数据中学习了它。 –
谢谢,我看到:_vocabulary:映射或可迭代,可选。无论是键是词和值的映射(例如,词典)都是特征矩阵中的索引,或者是可迭代的术语。如果没有给出,则从输入文件中确定一个词汇表。必须找到一个_vocabulary_然后给它一个。 – cardamom