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

检索模型bi-encoder笔记

文章目录

        • 基础示例
        • 使用python和transform从零实现

bi-encoder的核心是独立编码(向量),然后计算相似度。
基础示例
fromsentence_transformersimportSentenceTransformer,util# 1. 加载预训练的 Bi-Encoder 模型# 'all-MiniLM-L6-v2' 是一个速度快、效果好的轻量级模型model=SentenceTransformer('all-MiniLM-L6-v2')# 2. 定义两个句子sentence1="深度学习模型在自然语言处理中的应用"sentence2="NLP领域如何使用深度神经网络技术"# 3. 分别将句子编码为向量# Bi-Encoder 的核心:两个句子是独立编码的embedding1=model.encode(sentence1,convert_to_tensor=True)embedding2=model.encode(sentence2,convert_to_tensor=True)# 4. 计算两个向量的余弦相似度cosine_score=util.cos_sim(embedding1,embedding2)print(f"句子1: '{sentence1}'")print(f"句子2: '{sentence2}'")print(f"语义相似度得分:{cosine_score.item():.4f}")

输出结果:

句子1:'深度学习模型在自然语言处理中的应用'句子2:'NLP领域如何使用深度神经网络技术'语义相似度得分:0.3555

解读:
可以看到,过程为将语句1和语句2分别编码,然后计算相似度。

实际业务中,大概是如下方式:
1、语句2对应数据库数据,会提前向量化并保存。
2、语句1对应查询数据,会实时向量化。
3、然后拿查询的向量和数据库向量比对,这个是非常快的。

使用python和transform从零实现
importtorchfromtransformersimportAutoModel,AutoTokenizerclassSimpleBiEncoder(torch.nn.Module):def__init__(self,model_name="bert-base-chinese"):super().__init__()# 加载一个预训练的 Transformer 模型作为编码器self.encoder=AutoModel.from_pretrained(model_name)self.tokenizer=AutoTokenizer.from_pretrained(model_name)defencode(self,text):"""将文本编码为向量"""# 对文本进行分词inputs=self.tokenizer(text,return_tensors="pt",padding=True,truncation=True)withtorch.no_grad():# 获取模型输出outputs=self.encoder(**inputs)# 使用平均池化(Mean Pooling)将序列转换为一个句向量# 这是获取句子表示的常用方法之一returntorch.mean(outputs.last_hidden_state,dim=1)defforward(self,text_a,text_b):"""计算两个文本的相似度"""# 分别独立编码两个文本emb_a=self.encode(text_a)emb_b=self.encode(text_b)# 计算余弦相似度returntorch.nn.functional.cosine_similarity(emb_a,emb_b)# --- 使用示例 ---if__name__=="__main__":bi_encoder=SimpleBiEncoder()text1="深度学习模型架构"text2="神经网络结构设计"similarity=bi_encoder(text1,text2)print(f"文本相似度:{similarity.item():.4f}")
http://www.jsqmd.com/news/556000/

相关文章:

  • 保姆级教程:手把手教你用LoRA微调通义千问3.5-2B模型,代码即用,小白也能轻松入门!
  • 文脉定序系统一键部署教程:基于Ubuntu 20.04的快速环境搭建
  • GemPy:重新定义三维地质建模的数学引擎与行业变革
  • OpenVoice语音合成技术全解析:从痛点突破到多场景落地实践
  • 如何零代码搭建专业Web直播系统?Jessibuca完全指南
  • 中药执业药师四科老师实力排名榜(2026版) - 医考机构品牌测评专家
  • 大模型训练崩了怎么办?Python调试3步定位法:从CUDA错误到梯度爆炸一网打尽
  • 2步实现格式自由:Save Image as Type让网页图片转换体验升级10倍
  • Firedrake实战指南:如何用有限元方法高效求解复杂偏微分方程
  • 用友U8 API开发实战:手把手教你使用API资源管理器完成单据操作
  • AMD ROCm开发实战指南:从环境搭建到异构计算应用
  • 从UDS协议到CANoe实操:深入理解诊断负响应码(NRC)的优先级设计逻辑
  • 备考2026执业药师考试机构选择指南_零基础、在职、二战考生速看 - 医考机构品牌测评专家
  • 开源可部署!mPLUG-Owl3-2B多模态交互工具镜像免配置快速上手指南
  • 二叉树 / 满二叉树 / 完全二叉树 / 二叉查找树
  • 数据库中的“哈希函数与布隆过滤器”
  • SEO优化软件在移动端网站优化中的应用有哪些
  • PyTorch 2.5镜像使用指南:从环境搭建到模型训练完整流程
  • 轻松掌握jq:命令行JSON处理的终极解决方案
  • Phi-3 Forest Laboratory处理复杂指令效果展示:多步骤规划与任务分解
  • 差分隐私不是调参游戏,是数学防线!Python配置必须掌握的7个拉普拉斯/高斯噪声关键参数,否则数据已裸奔
  • 大模型入门必看:从零到精通_大模型零基础教程(非常详细)
  • 2026 年 GEO 服务商综合技术实力深度测评:五家机构实战能力全景对比
  • 不止是地图:拆解天地图图层代码,看懂国产地理信息服务的命名逻辑
  • 别再乱选了!给PLC选模拟量传感器,0-10V、4-20mA、1-5V到底用哪个?
  • Windows系统依赖难题的终极解法:VisualCppRedist AIO一站式运行库管理方案
  • nli-distilroberta-base效果展示:Entailment/Contradiction/Neutral三类判别置信度热力图
  • DataX保姆级安装教程:从下载到第一个数据同步任务(避坑指南)
  • 谷歌安卓侧载应用新规:平衡安全与用户体验的新探索
  • OpenCV实战:利用glob实现多格式图片的高效批量处理