bert提取词向量比较两文本相似度

使用 bert-base-chinese 预训练模型做词嵌入(文本转向量)

模型下载:bert预训练模型下载-CSDN博客

参考文章:使用bert提取词向量

下面这段代码是一个传入句子转为词向量的函数

from transformers import BertTokenizer, BertModel
import torch# 加载中文 BERT 模型和分词器
model_name = "../bert-base-chinese"
tokenizer = BertTokenizer.from_pretrained(model_name)
model = BertModel.from_pretrained(model_name)def get_word_embedding(sentence):# 分词tokens = tokenizer.tokenize(sentence)# 添加特殊标记 [CLS] 和 [SEP]tokens = ['[CLS]'] + tokens + ['[SEP]']# 将分词转换为对应的编号input_ids = tokenizer.convert_tokens_to_ids(tokens)# 转换为 PyTorch tensor 格式input_ids = torch.tensor([input_ids])# 获取词向量outputs = model(input_ids)# outputs[0]是词嵌入表示embedding = outputs[0]# 去除头尾标记的向量值word_embedding = embedding[:, 1:-1, :]return word_embedding

embedding[:, 1:-1, :] 这一行的意是以下,数据类型张量

[batch_size, sequence_length, hidden_size],其中:

  • batch_size 是输入文本的批次大小,即一次输入的文本样本数量。
  • sequence_length 是输入文本序列的长度,即编码器输入的词的数量。
  • hidden_size 是隐藏状态的维度大小,是 BERT 模型的超参数,通常为 768 或 1024。

比较两文本相似度

def compare_sentence(sentence1, sentence2):# 分词tokens1 = tokenizer.tokenize(sentence1)tokens2 = tokenizer.tokenize(sentence2)# 添加特殊标记 [CLS] 和 [SEP]tokens1 = ['[CLS]'] + tokens1 + ['[SEP]']tokens2 = ['[CLS]'] + tokens2 + ['[SEP]']# 将分词转换为对应的词表中的索引input_ids1 = tokenizer.convert_tokens_to_ids(tokens1)input_ids2 = tokenizer.convert_tokens_to_ids(tokens2)# 转换为 PyTorch tensor 格式input_ids1 = torch.tensor([input_ids1])input_ids2 = torch.tensor([input_ids2])# 获取词向量outputs1 = model(input_ids1)outputs2 = model(input_ids2)# outputs[0]是词嵌入表示embedding1 = outputs1[0]embedding2 = outputs2[0]# 提取 [CLS] 标记对应的词向量作为整个句子的表示sentence_embedding1 = embedding1[:, 0, :]sentence_embedding2 = embedding2[:, 0, :]# 计算词的欧氏距离# 计算p范数距离的函数,其中p设置为2,这意味着它将计算的是欧几里得距离(L2范数)euclidean_distance = torch.nn.PairwiseDistance(p=2)distance = euclidean_distance(sentence_embedding1, sentence_embedding2)# 计算余弦相似度# dim=1 表示将在第一个维度(通常对应每个样本的特征维度)上计算余弦相似度;eps=1e-6 是为了数值稳定性而添加的一个很小的正数,以防止分母为零cos = torch.nn.CosineSimilarity(dim=1, eps=1e-6)similarity = cos(sentence_embedding1, sentence_embedding2)print("句1: ", sentence1)print("句2: ", sentence2)print("相似度: ", similarity.item())print("欧式距离: ", distance.item())compare_sentence("黄河南大街70号8门", "皇姑区黄河南大街70号8门")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/439948.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

防御保护----防火墙基本知识

一.防火墙的基本知识--------------------------------------------------------- 防火墙:可以想象为古代每个城市的城墙,用来防守敌军的攻击。墙,始于防,忠于守。从古至今,墙予人以安全之意。 防火墙的主要职责在于&…

【第七在线】数字化转型:智能商品计划管理的核心要素

随着科技的快速发展,数字化转型已经成为企业适应市场变化、提高运营效率的必由之路。尤其在服装行业,快速的市场反应和精准的供应链管理显得尤为重要。其中,智能商品计划管理作为数字化转型的核心要素,正在重塑整个行业的竞争格局…

vite 脚手架搭建 vue3 项目

一、版本 node 版本:18.11.0 二、创建前准备 如果还未安装 vite 需先安装: 1、winr,输入 cmd 进入命令提示符窗口,输入以下命令全局安装vite npm install -g vite2、查看安装成功后的 vite 版本 npm list vite三、步骤 1、…

添加了gateway之后远程调用失败

前端提示500,后端提示[400 ] during [GET] to [http://userservice/user/1] 原因是这个,因为在请求地址写了两个参数,实际上只传了一个参数 解决方案:加上(required false)并重启所有相关服务

老铁,公网访问局域网,一起游戏远程联机

下载地址 Windows 64位 (切勿直接在压缩文件中操作,全部解压到一处后再操作,请关闭某60(会胡乱拦截),可用其他任意安全软件)Mac OS X 64位 (给fastnat执行权限 chmod x ./fastnat.. 终端运行二进制,自行百度)Linux 64位 (给fastnat执行权限 chmod x ./fastnat..)Linux/ARM 32位…

inode生命周期

1.添加inode到inode cache链表 当inode的引用计数器i_count为0后,会调用iput_final去释放 static void iput_final(struct inode *inode) {struct super_block *sb inode->i_sb;const struct super_operations *op inode->i_sb->s_op;unsigned long sta…

Flask 入门1

1. 关于 Flask Flask诞生于2010年, Armin Ronacher的一个愚人节玩笑。不过现在已经是一个用python语言基于Werkzeug工具箱编写的轻量级web开发框架,它主要面向需求简单,项目周期短的小应用。 Flask本身相当于一个内核,其他几乎所…

提升工作效率,畅享便捷PDF编辑体验——Adobe Acrobat Pro DC 2023

作为全球领先的PDF编辑软件,Adobe Acrobat Pro DC 2023将为您带来前所未有的PDF编辑体验。无论您是个人用户还是企业用户,Adobe Acrobat Pro DC 2023将成为您提高工作效率、简化工作流程的得力助手。 一、全面编辑功能 Adobe Acrobat Pro DC 2023提供了…

FPGA光纤Aurora_8B_10B

本章基于Vivado开发工具中Aurora的IP核进行验证。 本章包括了光纤眼图的验证、单个Aurora核下板验证、两个Aurora核下板验证。 光纤接口眼图验证 在协议的选项中,本次实验采用的是 Custom (自定义模式)。 Line Rate (行速率)选项在 QPLL/CPLL 都支持的情况下带…

数字图像处理(实践篇)三十六 OpenCV-Python 使用ORB和BFmatcher对两个输入图像的关键点进行匹配实践

目录 一 涉及的函数 二 实践 ORB(Oriented FAST and Rotated BRIEF)是一种特征点检测和描述算法,它结合了FAST关键点检测和BRIEF描述子。ORB算法具有以下优势: ①实时性:能够在实时应用中进行快速的特征点检测和描述。 ②

对鸢尾花进行分类预测-----pycharm

项目说明 #项目: 对鸢尾花进行分类预测 #实例数量150个(3类各50个) #属性数量:4(数值型,数值型,帮助预测的属性和类) #特征:花萼长度,花萼宽度,花瓣长度,花瓣宽度 单位&#xff1…

【C++】类和对象(一)

💗个人主页💗 ⭐个人专栏——C学习⭐ 💫点击关注🤩一起学习C语言💯💫 目录 导读1. 面向对象2. 类2.1 类的定义 3. 类的访问限定符4. class与struct定义类的区别5. 类的封装6. 类的作用域7.类的实例化8. 类的…