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

句子相似度计算

文章目录


https://huggingface.co/sentence-transformers/all-MiniLM-L6-v2

这里使用预训练的 nreimers/MiniLM-L6-H384-uncased 模型,并在 1B 句对数据集上微调。


如果你使用 sentence-transformers

pip install -U sentence-transformers

可以这样使用模型


import os ,sys from sentence_transformers import SentenceTransformer, utilmodel = SentenceTransformer('sentence-transformers/all-MiniLM-L6-v2')def count(sent0, sent1):embeddings = model.encode([sent0, sent1])# print(embeddings)emb0 = embeddings[0]emb1 = embeddings[1]cosine_score = util.cos_sim(emb0, emb1) # tensor([[0.4046]])return float(cosine_score) # 0.4046

如果不使用 sentence-transformers

首先,将输入 传给 transformer 模型,然后使用 在上下文化的单词嵌入之上 应用正确的池操作。

from transformers import AutoTokenizer, AutoModel
import torch
import torch.nn.functional as F#Mean Pooling - Take attention mask into account for correct averaging
def mean_pooling(model_output, attention_mask):token_embeddings = model_output[0] #First element of model_output contains all token embeddingsinput_mask_expanded = attention_mask.unsqueeze(-1).expand(token_embeddings.size()).float()return torch.sum(token_embeddings * input_mask_expanded, 1) / torch.clamp(input_mask_expanded.sum(1), min=1e-9)# Sentences we want sentence embeddings for
sentences = ['This is an example sentence', 'Each sentence is converted']# Load model from HuggingFace Hub
tokenizer = AutoTokenizer.from_pretrained('sentence-transformers/all-MiniLM-L6-v2')
model = AutoModel.from_pretrained('sentence-transformers/all-MiniLM-L6-v2')# Tokenize sentences
encoded_input = tokenizer(sentences, padding=True, truncation=True, return_tensors='pt')# Compute token embeddings
with torch.no_grad():model_output = model(**encoded_input)# Perform pooling
sentence_embeddings = mean_pooling(model_output, encoded_input['attention_mask'])# Normalize embeddings
sentence_embeddings = F.normalize(sentence_embeddings, p=2, dim=1)print("Sentence embeddings:")
print(sentence_embeddings)

http://www.lryc.cn/news/249416.html

相关文章:

  • 高级IO select 多路转接实现思路
  • C++学不会?一篇文章带你快速入门
  • 【加密相册】 隐私协议
  • 超越基础:释放 Systemd 的全部潜力【systemd 二】
  • Flask学习二:项目拆分、请求与响应、cookie
  • 6、Qt延时的使用
  • 《Effective C++》条款26
  • np.random.uniform() 采样得到的是一个高维立方体,而不是球体,为什么?
  • 1 时间序列模型入门: LSTM
  • 1-Python与设计模式--单例模式
  • Rust之构建命令行程序(一):接受命令行参数
  • Go 谈论了解Go语言
  • 《C++PrimerPlus》第9章 内存模型和名称空间
  • uniapp上架app store详细攻略
  • 面试:线上问题处理
  • Vue3中快速Diff算法
  • ROS2+STM32小车红外对射光电计数器模块资料
  • Android设计模式--桥接模式
  • 1、分布式锁实现原理与最佳实践(一)
  • Autosar通信实战系列03-NM模块要点及其配置介绍
  • Golang模块管理功能
  • 从零构建属于自己的GPT系列1:文本数据预处理、文本数据tokenizer、逐行代码解读
  • scipy 笔记:scipy.spatial.distance
  • java video audio encoder
  • TypeScript 中声明类型的方法
  • 显示器校准软件BetterDisplay Pro mac中文版介绍
  • Element UI 走马灯 实现鼠标滚动切换页面
  • 在Docker上部署Springboot项目
  • 2024中国眼博会,全国眼康与眼镜品牌加盟展会,北京眼健康展
  • C++学习 --谓词