是否可以使用Google BERT来计算两个文本文档之间的相似度?

问题描述 投票:0回答:5

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

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

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

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

python text scikit-learn nlp word-embedding
5个回答
15
投票

BERT 没有经过训练来确定一个句子是否在另一个句子后面。这只是GLUE 任务 之一,还有无数其他任务。所有 GLUE 任务(和强力胶)都被 ALBERT 淘汰了。

BERT(以及 Albert)是自然语言理解领域绝对最先进的。 Doc2Vec 还差得很远。 BERT 不是词袋方法。它是一个基于 Transformer 的双向注意力编码器,它是 Google Brain 论文Attention is All you Need的化身。另请参阅 Transformer 模型的视觉分解

这是一种看待自然语言的全新方式,它不使用 RNN、LSTM、tf-idf 或任何类似的东西。我们不再将单词或文档转换为向量。 GloVes:带有 LSTM 的单词表示的全局向量 已经很旧了。 Doc2Vec 已经过时了。

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

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

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

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

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

现在,我们在这里谈论绝对前沿的技术(阿尔伯特在过去几个月才出现)。你需要非常熟练才能完成这个任务,但这是可以完成的,我相信你!!


11
投票

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

对词嵌入进行平均以获得句子表示是很常见的做法。您可以使用 BERT 尝试同样的操作,并对文档中句子中的 BERT 的 [CLS] 向量进行平均。

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

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


1
投票

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


0
投票

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


0
投票

为此使用句子转换器:https://www.sbert.net/

from sentence_transformers import SentenceTransformer, util
model = SentenceTransformer('all-MiniLM-L6-v2')

#Sentences are encoded by calling model.encode()
emb1 = model.encode("This is a red cat with a hat.")
emb2 = model.encode("Have you seen my red cat?")

cos_sim = util.cos_sim(emb1, emb2)
print("Cosine-Similarity:", cos_sim)

您还可以将嵌入存储在像 Milvus 这样的矢量数据库中,然后对文档嵌入运行查询。

© www.soinside.com 2019 - 2024. All rights reserved.