【AI大模型应用开发】文本向量化与向量相似度(附Python代码)

本文介绍下文本向量化的概念,以及向量检索的原理,只是简单介绍,不会深入,所以不用担心看不懂,想要详细研究的,可以去搜相关论文,涉及到机器学习和模型训练等。

0. 文本向量

0.1 什么是文本向量

文本向量(Text Vector)是一种将文本数据转换为数值向量的技术,以便于机器学习和数据分析。通过将文本数据转换为数值向量,我们可以使用机器学习算法对文本数据进行处理和分析。

0.2 文本向量是怎么得到的

(1)构建相关(正立)与不相关(负例)的句子对儿样本
(2)训练双塔式模型,让正例间的距离小,负例间的距离大
参考:https://arxiv.org/pdf/1908.10084.pdf

1. 获取文本向量

前面已经说了文本向量是怎么得到的,其实也是训练了一个模型。使用这个训练的模型,给一个输入,就可以得到该输入的向量。
这里我们可以使用OpenAI开放的文本向量化接口embeddings.create来获取某个文本的向量值。

from openai import OpenAI  
import os  
# 加载环境变量  
from dotenv import load_dotenv, find_dotenv  
_ = load_dotenv(find_dotenv())  # 读取本地 .env 文件,里面定义了 OPENAI_API_KEY  client = OpenAI()  def get_embeddings(texts, model="text-embedding-3-small"):  '''封装 OpenAI 的 Embedding 模型接口'''  data = client.embeddings.create(input=texts, model=model).data  return [x.embedding for x in data]  

可以测试一下这个接口,看下这个接口输出的向量长什么样:

test_query = ["测试文本"]  
vec = get_embeddings(test_query)[0]  
print(vec[:10])  
print(len(vec))  

输出结果如下:

可以看到 “测试文本” 这四个字对应的输出是一个 1536 维的向量,这就是 “测试文本” 的向量表示。

注意相同的文本 使用 不同的向量化模型 获取的向量化结果是不同的,所以请保证你的RAG应用中使用的是同样的向量化模型和方式。

2. 向量间相似度计算

通过上面文本向量化,我们可以将一段文本转换成一串多维的数字,也就是数学上的向量。

2.1 向量间的距离

对于向量,相似度计算很简单,就是计算两个向量之间的距离。

距离的计算有多种,具体可看这篇文章: 向量距离计算的几种方式,这里面最常用的还是余弦距离和欧式距离。(下图来源网络,表示了欧式距离和余弦距离的样子。)

https://zhuanlan.zhihu.com/p/646601306

2.2 向量距离计算 Python代码

import numpy as np  
from numpy import dot  
from numpy.linalg import norm  def cos_sim(a, b):  '''余弦距离 -- 越大越相似'''  return dot(a, b)/(norm(a)*norm(b))  def l2(a, b):  '''欧式距离 -- 越小越相似'''  x = np.asarray(a)-np.asarray(b)  return norm(x)  

3. 向量相似度示例代码

# 能支持跨语言  
query = "global conflicts"  documents = [  "联合国就苏丹达尔富尔地区大规模暴力事件发出警告",  "土耳其、芬兰、瑞典与北约代表将继续就瑞典“入约”问题进行谈判",  "日本岐阜市陆上自卫队射击场内发生枪击事件 3人受伤",  "国家游泳中心(水立方):恢复游泳、嬉水乐园等水上项目运营",  "我国首次在空间站开展舱外辐射生物学暴露实验",  
]  query_vec = get_embeddings([query])[0] # 计算自身的向量  
doc_vecs = get_embeddings(documents) # 计算示例句子的向量  print("Cosine distance:")  
print(cos_sim(query_vec, query_vec)) # 首先打印自身与自身的余弦距离  
for vec in doc_vecs:  print(cos_sim(query_vec, vec)) # 打印自身与示例句子的余弦距离  print("\nEuclidean distance:")  
print(l2(query_vec, query_vec))  # 首先打印自身与自身的欧式距离  
for vec in doc_vecs:  print(l2(query_vec, vec)) # 打印自身与示例句子的欧式距离  

运行结果如下:

可以看出,余弦距离越大表示相似度越高。欧式距离约小,表示相似度越高。

向量检索,就是将相似度最高的k个检索结果召回

如果觉得本文对你有帮助,麻烦点个赞和关注呗 ~~~


如何学习AI大模型?

大模型时代,火爆出圈的LLM大模型让程序员们开始重新评估自己的本领。 “AI会取代那些行业?”“谁的饭碗又将不保了?”等问题热议不断。

不如成为「掌握AI工具的技术人」,毕竟AI时代,谁先尝试,谁就能占得先机!

想正式转到一些新兴的 AI 行业,不仅需要系统的学习AI大模型。同时也要跟已有的技能结合,辅助编程提效,或上手实操应用,增加自己的职场竞争力。

但是LLM相关的内容很多,现在网上的老课程老教材关于LLM又太少。所以现在小白入门就只能靠自学,学习成本和门槛很高

那么针对所有自学遇到困难的同学们,我帮大家系统梳理大模型学习脉络,将这份 LLM大模型资料 分享出来:包括LLM大模型书籍、640套大模型行业报告、LLM大模型学习视频、LLM大模型学习路线、开源大模型学习教程等, 😝有需要的小伙伴,可以 扫描下方二维码领取🆓↓↓↓

👉[CSDN大礼包🎁:全网最全《LLM大模型入门+进阶学习资源包》免费分享(安全链接,放心点击)]()👈

学习路线

在这里插入图片描述

第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;

第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;

第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;

第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;

第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;

第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;

第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。

在这里插入图片描述

👉学会后的收获:👈

• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;

• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;

• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;

• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。

在这里插入图片描述

1.AI大模型学习路线图
2.100套AI大模型商业化落地方案
3.100集大模型视频教程
4.200本大模型PDF书籍
5.LLM面试题合集
6.AI产品经理资源合集

👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

计算机三级网络技术总结(四)

路由刷新表报文主要内容是由若干(V、D)组成的表每一个区域OSPF拥有一个32位的区域标识符当链路状态发生变化时用洪泛法向所有路由器发送信息不能用于网络嗅探的是NS-2(NS-2是一种针对网络技术的源代码公开的、免费的软件模拟平台,…

Java项目实战II基于Java+Spring Boot+MySQL的洗衣店订单管理系统(开发文档+源码+数据库)

目录 一、前言 二、技术介绍 三、系统实现 四、论文参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者 一、前言 随着生活节奏的加快,现代人对便捷、高效服务的需求日益增长,洗衣店作为日常生…

力扣 中等 2300.咒语和药水的成功对数

文章目录 题目介绍解法 题目介绍 解法 class Solution {public int[] successfulPairs(int[] spells, int[] potions, long success){Arrays.sort(potions);int n spells.length, m potions.length;int[] pairs new int[n];for (int i 0; i < n; i) {int left 0, righ…

【如何使用Python操作Kafka】

如何使用Python操作Kafka 1、安装kafka pip install kafka2、直接编写Kafka工具脚本 kafka_tools.py # -*- coding: utf-8 -*-import json from kafka import KafkaConsumer, KafkaProducerclass KProducer:def __init__(self, username_ip, topic):"""kafk…

【算法篇】栈与队列类(笔记)

目录 一、用栈实现队列 二、用队列实现栈 三、有效的括号 四、删除字符串中的所有相邻重复项 五、逆波兰表达式求值 六、滑动窗口最大值 七、前 K 个高频元素 一、用栈实现队列 232. 用栈实现队列 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/proble…

[PTA]7-6 吃火锅

[PTA]7-6 吃火锅 以上图片来自微信朋友圈&#xff1a;这种天气你有什么破事打电话给我基本没用。但是如果你说“吃火锅”&#xff0c;那就厉害了&#xff0c;我们的故事就开始了。 本题要求你实现一个程序&#xff0c;自动检查你朋友给你发来的信息里有没有 chi1 huo3 guo1。 …

手写Spring

简单实现Spring基于注解配置 ComponentScan Target(ElementType.TYPE) Retention(RetentionPolicy.RUNTIME) public interface ComponentScan {String value() default ""; } 相当于component-scan HspSpringConfig ComponentScan(value "spring.write.com…

两个指令反过来说大模型就理解不了啦?或许该让第三者插足啦 -通过引入中间LLM预处理用户输入以提高多任务处理能力

今天就遇到有点儿dt的问题&#xff0c;利用大模型顺利通了自定义的工具调用&#xff08;并没有用到tools功能&#xff0c;而是通过prompt强制输出&#xff09;&#xff0c;单个单个的没问题哈&#xff0c;但是多个一起就出现问题了 我说“关闭电脑PC1, 打开第2台电脑” 它看不懂…

安卓实现导入Excel文件

使用简化版的jar包 api files(libs/poi-3.12-android-a.jar) api files(libs/poi-ooxml-schemas-3.12-a.jar) 导入遇到了两个兼容问题 1.build.gradle文件里面 android { 要添加 packagingOptions {exclude META-INF/INDEX.LIST } 2.加载大文件要在清单文件里面加androi…

网络变压器HR911130C的使用注意点

HR911130C的使用&#xff0c;需要2个注意点&#xff1a; 1&#xff09;数据线data0、data2、data3是相邻的引脚&#xff0c;但是data1是 不相邻的两个引脚&#xff0c;注意看下面的电路图&#xff0c;所以绘图时需要注意 2&#xff09;LED灯的连接 11脚、12脚&#xff0c;连…

快手可灵AI全球升级1.5模型:引入“运动笔刷”功能 画质大幅提升

9月19日&#xff0c;快手公司宣布其可灵AI模型进行了全球范围内的重磅升级&#xff0c;推出了1.5版本。新版本在多个方面实现了显著提升&#xff0c;包括视频画质、动态效果、美学表现、运动合理性以及语义理解等。 新升级的1.5模型支持在高品质模式下直接输出1080p高清视频&am…

【CSS】一行三个盒子 每个盒子都是16:9

padding-top 属性接受百分比值时,其百分比是基于父元素的宽度来计算的,而不是自身元素的宽度 aspect-ratio 更方便&#xff0c;但存在兼容性问题 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name&quo…

字符设备驱动 — 4 异常与中断

异常与中断 中断属于异常的一种 异常会直接打断 CPU 的运行&#xff0c;而各种中断会被传到中断控制器&#xff0c;由中断控制器来选择优先级最高的中断并通知 CPU 处理流程 arm 对异常&#xff08;中断&#xff09;处理流程&#xff1a; 初始化&#xff1a; 设置中断源&…

水经微图PC版5.0.0即将内测

让GIS更简单高效&#xff01; 水经微图&#xff08;以下称“微图”&#xff09;PC版5.0.0即将内测&#xff0c;这是一个基于WeMapEngine开发的全新版本。 关于什么是WeMapEngine&#xff0c;请从《WeMapEngine可快速构建的GIS应用功能》一文中了解。 微图5.0.0功能界面 水经…

【分享】“可恶”的运算放大器电容负载

他们说如果使用放大器驱动电容负载(图 1、CLOAD)&#xff0c;一个不错的经验是采用一个 50 或 100 欧的电阻器 (RISO) 将放大器与电容器隔开。这个附加电阻器可能会阻止运算放大器振荡。 图 1.支持电容负载的放大器可能需要在放大器输出与负载电容器之间连接一个电阻器。 使用…

STM32—I2C通信外设

1.I2C外设简介 STM32内部集成了硬件I2C收发电路&#xff0c;可以由硬件自动执行时钟生成、起始终止条件生成、应答位收发、数据收发等功能&#xff0c;减轻CPU的负担支持多主机模型&#xff08;可变多主机&#xff09;支持7位/10位地址模式&#xff08;11110......)支持不同的通…

JavaWeb JavaScript 11.XML —— 配置文件

生活想埋没我&#xff0c;没想到我是颗种子 —— 24.9.19 一、XML 1.什么是XML XML是EXtensible Markup Languge的缩写&#xff0c;翻译过来就是可扩展标记语言。所以很明显&#xff0c;XML和HTML一样都是标记语言&#xff0c;也就是说它们的基本语法都是标签 可扩展 三个字…

OpenCV基础入门30讲(Python)——第二讲 图像色彩转换

常见的几种颜色类型介绍 1、彩色图像&#xff08;Color Image&#xff0c;BGR&#xff09; 数据类型&#xff1a;uint8通道数&#xff1a;3&#xff08;BGR&#xff1a;蓝色、绿色、红色&#xff09;描述&#xff1a;彩色图像有三个通道&#xff0c;每个通道的值范围是 0 到 …

【图书推荐】《Autodesk Inventor 2024入门与案例实战(视频教学版)》

本书重点 配套示例文件、PPT课件、教学视频、电子教案、课程标准、骄婿大纲、模拟试题、作者微信群答疑服务。 内容简介 《Autodesk Inventor 2024入门与案例实战&#xff1a;视频教学版》以Autodesk Inventor 2024为平台&#xff0c;重点介绍Autodesk Inventor 2024中文版的…

洗衣机制造5G智能工厂物联数字孪生平台,推进制造业数字化转型

洗衣机制造业作为传统制造业的重要组成部分&#xff0c;通过引入5G智能工厂物联数字孪生平台&#xff0c;加速推进自身的数字化转型进程。这一创新模式不仅极大地提升了生产效率&#xff0c;还深刻改变了产品的设计、生产、管理及运维流程&#xff0c;为行业带来了前所未有的竞…