【问题标题】:Is it possible to use Google BERT to calculate similarity between two textual documents?是否可以使用 Google BERT 计算两个文本文档之间的相似度?
【发布时间】:2020-01-12 21:32:15
【问题描述】:

是否可以使用 Google BERT 计算两个文本文档之间的相似度?据我了解,BERT 的输入应该是有限大小的句子。一些作品使用 BERT 对句子进行相似度计算,例如:

https://github.com/AndriyMulyar/semantic-text-similarity

https://github.com/beekbin/bert-cosine-sim

是否有实现 BERT 以将其用于大型文档而不是句子作为输入(包含数千个单词的文档)?

【问题讨论】:

  • 是的,使用句子-bert。平均文档的句子嵌入。文档之间的余弦相似度。

标签: python text scikit-learn nlp word-embedding


【解决方案1】:

BERT 是一个句子表示模型。它被训练来预测一个句子中的单词,并决定两个句子在文档中是否相互跟随,即严格在句子级别。此外,BERT 需要关于输入长度的二次记忆,这对于文档来说是不可行的。

平均词嵌入以获得句子表示是很常见的做法。您可以尝试使用 BERT 做同样的事情,然后将来自 BERT 的 [CLS] 向量与文档中的句子进行平均。

有一些文档级嵌入。例如doc2vec 是一个常用的选项。

据我所知,在文档级别,基于频率的向量,例如 tf-idf(在 scikit-learn 中有一个很好的实现)仍然接近最先进的技术,所以我会毫不犹豫地使用它。或者至少值得尝试看看它与嵌入相比如何。

【讨论】:

    【解决方案2】:

    BERT 没有经过训练来确定一个句子是否跟随另一个句子。这只是GLUE tasks 中的一个,还有更多。所有 GLUE 任务(和强力胶)都被 ALBERT 淘汰了。

    BERT(以及 Albert)在自然语言理解方面绝对是最先进的。 Doc2Vec 没有接近。 BERT 不是词袋方法。这是一个基于 Transformer 的双向注意力编码器,它是 Google Brain 论文Attention is All you Need 的化身。另请参阅 Transformer 模型的 Visual breakdown

    这是一种看待自然语言的全新方式,它不使用 RNN 或 LSTM 或 tf-idf 或任何类似的东西。我们不再将单词或文档转换为向量。带有 LSTM 的 GloVes: Global Vectors for Word Representations 很旧。 Doc2Vec 是旧的。

    BERT 非常强大 - 就像轻松通过图灵测试一样强大。来看看

    参见刚刚发布的superGLUE。滚动到底部,看看这些任务有多疯狂。这就是 NLP 的所在。

    好的,既然我们已经放弃了 tf-idf 是最先进的想法 - 您想获取文档并查看它们的相似性吗?我会在 Databricks 上分两层使用 ALBERT:

    1. 执行提取或抽象摘要:https://pypi.org/project/bert-extractive-summarizer/(注意这些文本文档有多大 - 并将您的文档缩减为摘要。

    2. 在单独的步骤中,获取每个摘要并从第 3 页 GLUE 执行 STS-B 任务

    现在,我们在这里谈论的是绝对前沿的技术(Albert 是最近几个月才问世的)。你需要非常精通才能通过这个,但它可以做到,我相信你!

    【讨论】:

    • BERT 的一个训练目标确实是预测文档中的下一个句子。对您提出的摘要方法 -> 句子相似度是否有任何评估?
    • 这是一个很好的答案。不过我有一个评论:我想知道是否不是执行需要在每个摘要文本上重新运行那个小怪物的 STS-B 任务,而是在最终嵌入输出的欧几里得距离上使用一些现成的聚类技术BERT 也有用吗?我最近在尝试,我认为我得到了一些相当不错的结果。
    【解决方案3】:

    是的。您只需独立完成每个部分。对于摘要,您几乎不需要做太多事情。只需在pypi上查看summary,您就有几个包。甚至不需要训练。现在对于句子到句子的相似性,有一个相当复杂的方法来获取损失,但它在 GLUE 网站上有说明。它被认为是挑战的一部分(满足指标)。确定距离(sts)并非易事,我认为他们称之为“连贯性”,但我不确定。

    【讨论】:

      【解决方案4】:

      添加到@jindřich 答案中,BERT 旨在查找句子中缺失的单词并预测下一个句子。基于词嵌入的 doc2vec 仍然是衡量 docs 之间相似性的好方法。如果您想深入研究为什么每个最佳模型都不能成为用例的最佳选择,请阅读 this 帖子,其中清楚地解释了为什么不是每个最先进的模型都适合某项任务.

      【讨论】:

        猜你喜欢
        • 2012-02-12
        • 2019-04-27
        • 2012-02-12
        • 2011-03-27
        • 2019-10-23
        • 2022-01-08
        • 2017-09-23
        • 2020-07-09
        • 1970-01-01
        相关资源
        最近更新 更多