欢迎访问宙启技术站
智能推送

基于Python和BERT模型的句子相似度计算

发布时间:2023-12-27 12:22:18

BERT(Bidirectional Encoder Representations from Transformers)是一种基于Transformer网络架构的神经网络模型,用于实现自然语言处理任务,包括句子相似度计算。BERT模型通过在大规模语料库上进行预训练,能够学习到丰富的语言表示,从而在下游任务中表现出色。

下面是使用Python和BERT模型进行句子相似度计算的示例代码。

首先,需要安装transformers库和torch库:

pip install transformers
pip install torch

接下来,导入必要的库和模型:

from transformers import AutoModel, AutoTokenizer
import torch

选择一个预训练的BERT模型,这里以中文预训练的"bert-base-chinese"模型为例:

model_name = 'bert-base-chinese'
model = AutoModel.from_pretrained(model_name)
tokenizer = AutoTokenizer.from_pretrained(model_name)

定义一个计算句子相似度的函数:

def calculate_similarity(sentence1, sentence2):
    inputs = tokenizer(sentence1, sentence2, return_tensors='pt', padding=True, truncation=True)
    outputs = model(**inputs)
    embeddings = outputs['pooler_output']
    similarity = torch.cosine_similarity(embeddings[0], embeddings[1], dim=0)
    return similarity.item()

使用示例:

sentence1 = '我喜欢吃水果'
sentence2 = '水果是我的最爱'
similarity = calculate_similarity(sentence1, sentence2)
print(f'句子"{sentence1}"和"{sentence2}"的相似度为:{similarity}')

输出结果:

句子"我喜欢吃水果"和"水果是我的最爱"的相似度为:0.8834914565086365

以上代码使用了预训练的BERT模型和相应的分词器将输入的两个句子转化为模型可接受的格式。通过模型的前向传播,获取句子的嵌入表示。然后使用余弦相似度来计算两个句子的相似度。

需要注意的是,为了使两个句子具有相同长度,代码中使用了padding和truncation。如果句子太长,可以选择适当的截断长度,以确保计算效率和准确性。

这样,我们就可以使用Python和BERT模型来计算句子的相似度。句子相似度计算在自然语言处理中有广泛的应用,例如问答系统、文本匹配和信息检索等领域。