当前位置: 首页 > article >正文

使用bert_base_chinese实现文本语义相似度计算

本文选择将模型下载到本地,进行离线分析计算,也可以使用在线下载,但本文略过

1 下载bert_base_chinese

下载地址:https://huggingface.co/google-bert/bert-base-chinese/tree/main
在这里插入图片描述
下载图上红框内的四个文件,并按照下图的目录结构放置
在这里插入图片描述
bert-base-chinese文件夹里放
在这里插入图片描述

2 代码

import torch
from transformers import BertTokenizer, BertModel
from torch.nn.functional import cosine_similarity

# 初始化分词器和模型
vocab_file = 'D:/code/python/rpa/vocab.txt'
tokenizer = BertTokenizer.from_pretrained(vocab_file)
model = BertModel.from_pretrained('D:/code/python/rpa/bert-base-chinese')

def get_bert_embeddings(text):
    # 对文本进行分词
    inputs = tokenizer(text, return_tensors="pt", padding=True, truncation=True, max_length=512)
    # 获取BERT的输出
    with torch.no_grad():
        outputs = model(**inputs)
    # 获取最后一层的隐藏状态
    last_hidden_states = outputs.last_hidden_state
    # 取[CLS]标记的输出作为句子的表示
    sentence_embedding = last_hidden_states[:, 0, :]
    return sentence_embedding

# 计算两个文本的语义相似度
def calculate_similarity(text1, text2):
    emb1 = get_bert_embeddings(text1)
    emb2 = get_bert_embeddings(text2)
    
    # 计算余弦相似度
    # 将emb1和emb2调整为(batch_size, 1, embedding_dim),以便使用cosine_similarity
    similarity = cosine_similarity(emb1.unsqueeze(1), emb2.unsqueeze(1), dim=2)
    return similarity.item()

# 主函数
def main(text1, text2):
    similarity = calculate_similarity(text1, text2)
    print(f"The semantic similarity between the texts is: {similarity}")

text1 = '我的身体很健康'
text2 = '我没有生病'
main(text1, text2)
# result
The semantic similarity between the texts is: 0.8934338092803955

http://www.kler.cn/news/294255.html

相关文章:

  • Spring Boot-自定义banner
  • 视频提取字幕的软件有哪些?高效转录用这些
  • react的useRef作用是什么怎么使用
  • Android Camera系列(一):SurfaceView+Camera
  • 数据结构,单向链表
  • 【2024高教社杯全国大学生数学建模竞赛】B题完整解析(含论文、代码分享)
  • 7个 C# 高阶用法详解:从基础到实战
  • 微信小程序实践案例
  • Kafka Broker处于高负载状态(例如消息处理量大或系统资源不足),无法及时响应消费者的请求
  • 智能工厂程序设计 之1 智能工厂都本俱的方面(Facet,Aspect和Respect)即智能依赖的基底Substrate 之1
  • 机械学习—零基础学习日志(概率论总笔记4)
  • JAVA基础:JVM中方法的执行过程和方法的重载,递归,可变参数的含义
  • MySQL——视图(一)视图概述
  • 59.以太网数据回环实验(2)硬件资源梳理及系统框图
  • 桶排序【算法 14】
  • OpenCV结构分析与形状描述符(8)点集凸包计算函数convexHull()的使用
  • java设计模式day02--(创建型模式:工厂模式、原型模式、建造者模式)
  • 【python】python指南(三):使用正则表达式re提取文本中的http链接
  • 【Netty】netty中都是用了哪些设计模式
  • BIO、NIO、AIO 有什么区别?
  • 进程间通信-进程池
  • 《Cloud Native Data Center Networking》(云原生数据中心网络设计)读书笔记 -- 09部署OSPF
  • 前向代理和反向代理的区别是什么?
  • JWT详解:一种轻量级的身份验证和授权机制
  • 2024年AI芯片峰会——边缘端侧AI芯片专场
  • 力扣172.阶乘后的0
  • elasticsearch文档Delete By Query API(一)
  • 蚂蚁数科独立后首度公布业务进展和战略布局
  • 已经30岁了,想转行从头开始现实吗?什么样的工作算好工作?
  • 网页时装购物系统:Spring Boot框架的高效实现