【问题标题】:Train doc2vec for company name similarity针对公司名称相似性训练 doc2vec
【发布时间】:2018-01-21 09:28:55
【问题描述】:

我正在尝试使用名称相似性对大量公司(40M+)进行重复数据删除。我有 500K 的公司名称对标记为相同/不同(例如 I.B.M.=International Business Machines)。通过对名称对向量差异的逻辑回归建立的模型具有很高的 f 值 (0.98),但推理(找到最相似的名称)太慢(每个名称几乎 2 秒)。

是否可以使用名称相似度对(正负)来训练 doc2vec 模型,从而使相似的名称具有相似的向量,以便我可以使用像 Annoy 这样的快速向量相似度算法?

【问题讨论】:

    标签: word2vec doc2vec sentence-similarity


    【解决方案1】:

    在高维空间中搜索前 N 个最近邻是很困难的。要获得完全准确的 top-N 通常需要进行详尽的搜索,这可能是您的表现令人失望的原因。

    当可以应用某些索引时,例如 ANNOY 库,需要一些额外的索引时间和索引存储,并且会牺牲准确性,因为可能会丢失一些真正的前 N ​​个邻居。

    您还没有提到您现有的向量是如何创建的。您不需要采用新的矢量创建方法(如 doc2vec)来使用索引;您可以将索引库应用于现有向量。

    如果您现有的向量是稀疏的(例如,如果它们是大袋字符 n-gram 表示,具有许多维度但大多数为 0.0),您可能需要查看 Facebook 的 PySparNN 库。

    如果比较密集,除了你提到的ANNOY,还可以考虑FacebookFAISS

    而且,即使是穷举搜索邻居也是高度可并行化的:将数据分成 M 个不同系统上的 M 个分片,在每个分片上找到前 N 个通常接近相同操作时间的 1/N在完整索引上,然后相对快速地合并 M 个 top-N 列表。因此,如果找到最相似的是您的关键瓶颈,并且您需要在 100 毫秒内找到最相似的前 N ​​个,那么将 20 台机器扔到 20 个问题的分片上。

    (同样,top-N 的结果可能值得批量计算。如果你使用云资源,租用 500 台机器进行 4000 万次 2 秒的操作,两天之内就可以完成.)

    【讨论】:

    • Gojomo,感谢您的努力。是的,我确实有一个庞大的 n-gram 表示,它是稀疏的 (40434120,487654)。最慢的部分是从语料库矩阵(csr_matrix)中减去查询向量,为逻辑回归做准备。这就是为什么我正在寻找一些向量表示,这将使一些 ANN 搜索能够获得前 n 个结果(然后我可以在其上进行精确搜索)
    猜你喜欢
    • 2019-03-02
    • 2020-06-02
    • 1970-01-01
    • 2017-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-03
    相关资源
    最近更新 更多