我试图在一组句子中找到所有类似的句子,我想知道如何优化它。
我正在使用Word2Vec模型,所以为了找到相似的句子,我将第一句和第二句中的所有向量相加,然后对两者进行余弦,如果结果高于0.9,我将其添加到类似的句子列表。
问题是现在我正在将所有句子与其他句子进行比较,这意味着O(n ^ 2)的复杂性,如果我有一大堆句子,那就不太好了。
所以我的问题:有没有办法预处理这组句子以减少比较次数(并获得O(nlogn)复杂度)?
我无法理解这一点,因为我对这个Word2Vec表示很新,我真的没有办法以一种有用的方式对句子进行排序。
答案 0 :(得分:0)
不幸的是,由于高维空间中的问题(与“curse of dimensionality”相关),没有简单/简单的方法可以比批量,全对比较做得更好。
有一些预先建立近似指数的技术;例如,请参阅ANNOY库或Facebook的FAISS(此时仅限非商业许可)。有了这些,额外的时间前期和索引空间可以加快以后的最近邻查询 - 但代价是完全准确。
否则,你会陷入智能批处理的困境。缓存可以帮助您避免不必要的重新计算,或者在大型数据集中投入大量机器来减少感知的墙壁时间。
(另外:您可能不想使用绝对阈值,例如0.9
,而不是检查任何向量的前N.范围和人类判断相关的绝对相似性解释可能不会在模型元参数或空间区域中作为相对排名保持稳定。)