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

简介: 【AI大模型应用开发】【补充知识】文本向量化与向量相似度(含Python代码)

在上篇文章【AI大模型应用开发】3. RAG初探 - 动手实现一个最简单的RAG应用 中,我们动手实现了一个RAG基本流程。里面涉及到向量数据库和向量检索。对于没接触过的人可能比较懵。本文介绍下文本向量化的概念,以及向量检索的原理,只是简单介绍,不会深入,所以不用担心看不懂,想要详细研究的,可以去搜相关论文,涉及到机器学习和模型训练等。

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 向量间的距离

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

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

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个检索结果召回

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


  • 大家好,我是同学小张
  • 欢迎 点赞 + 关注 👏,促使我持续学习持续干货输出
  • +v: jasper_8017 一起交流💬,一起进步💪。
  • 微信公众号也可搜【同学小张】 🙏
  • 踩坑不易,感谢关注和围观

本站文章一览:

相关文章
|
4天前
|
人工智能 数据库 决策智能
Archon – 开源 AI 智能体框架,自主生成代码构建 AI 智能体
Archon 是一个开源的 AI 智能体框架,能够自主生成代码并优化智能体性能,支持多智能体协作、领域知识集成和文档爬取等功能,适用于企业、教育、智能家居等多个领域。
73 10
Archon – 开源 AI 智能体框架,自主生成代码构建 AI 智能体
|
12天前
|
人工智能 安全 API
容器化AI模型的安全防护实战:代码示例与最佳实践
本文基于前文探讨的容器化AI模型安全威胁,通过代码示例展示如何在实际项目中实现多层次的安全防护措施。以一个基于TensorFlow的图像分类模型为例,介绍了输入验证、模型加密、API认证和日志记录的具体实现方法,并结合最佳实践,如使用安全容器镜像、限制权限、网络隔离等,帮助构建更安全的AI服务。
|
12天前
|
人工智能 数据可视化 数据处理
PySpur:零代码构建AI工作流!开源可视化拖拽平台,支持多模态与RAG技术
PySpur 是一款开源的轻量级可视化 AI 智能体工作流构建器,支持拖拽式界面,帮助用户快速构建、测试和迭代 AI 工作流,无需编写复杂代码。它支持多模态数据处理、RAG 技术、文件上传、结构化输出等功能,适合非技术背景的用户和开发者快速上手。
143 5
|
12天前
|
人工智能 自然语言处理 前端开发
Flame:开源AI设计图转代码模型!生成React组件,精准还原UI+动态交互效果
Flame 是一款开源的多模态 AI 模型,能够将 UI 设计图转换为高质量的现代前端代码,支持 React 等主流框架,具备动态交互、组件化开发等功能,显著提升前端开发效率。
261 1
|
14天前
|
数据采集 供应链 API
实战指南:通过1688开放平台API获取商品详情数据(附Python代码及避坑指南)
1688作为国内最大的B2B供应链平台,其API为企业提供合法合规的JSON数据源,直接获取批发价、SKU库存等核心数据。相比爬虫方案,官方API避免了反爬严格、数据缺失和法律风险等问题。企业接入1688商品API需完成资质认证、创建应用、签名机制解析及调用接口四步。应用场景包括智能采购系统、供应商评估模型和跨境选品分析。提供高频问题解决方案及安全合规实践,确保数据安全与合法使用。立即访问1688开放平台,解锁B2B数据宝藏!
|
15天前
|
API 开发工具 Python
【Azure Developer】编写Python SDK代码实现从China Azure中VM Disk中创建磁盘快照Snapshot
本文介绍如何使用Python SDK为中国区微软云(China Azure)中的虚拟机磁盘创建快照。通过Azure Python SDK的Snapshot Class,指定`location`和`creation_data`参数,使用`Copy`选项从现有磁盘创建快照。代码示例展示了如何配置Default Azure Credential,并设置特定于中国区Azure的`base_url`和`credential_scopes`。参考资料包括官方文档和相关API说明。
|
14天前
|
人工智能 Java API
Java也能快速搭建AI应用?一文带你玩转Spring AI可落地性
Java语言凭借其成熟的生态与解决方案,特别是通过 Spring AI 框架,正迅速成为 AI 应用开发的新选择。本文将探讨如何利用 Spring AI Alibaba 构建在线聊天 AI 应用,并实现对其性能的全面可观测性。
|
8天前
|
人工智能 弹性计算 Ubuntu
从零开始即刻拥有 DeepSeek-R1 满血版并使用 Dify 部署 AI 应用
本文介绍了如何使用阿里云提供的DeepSeek-R1大模型解决方案,通过Chatbox和Dify平台调用百炼API,实现稳定且高效的模型应用。首先,文章详细描述了如何通过Chatbox配置API并开始对话,适合普通用户快速上手。接着,深入探讨了使用Dify部署AI应用的过程,包括选购云服务器、安装Dify、配置对接DeepSeek-R1模型及创建工作流,展示了更复杂场景下的应用潜力。最后,对比了Chatbox与Dify的输出效果,证明Dify能提供更详尽、精准的回复。总结指出,阿里云的解决方案不仅操作简便,还为专业用户提供了强大的功能支持,极大提升了用户体验和应用效率。
616 18
从零开始即刻拥有 DeepSeek-R1 满血版并使用 Dify 部署 AI 应用
|
1天前
|
人工智能 前端开发 JavaScript
AI程序员:通义灵码 2.0应用VScode前端开发深度体验
AI程序员:通义灵码 2.0应用VScode前端开发深度体验,在软件开发领域,人工智能技术的融入正深刻改变着程序员的工作方式。通义灵码 2.0 作为一款先进的 AI 编程助手,与广受欢迎的代码编辑器 Visual Studio Code(VScode)相结合,为前端开发带来了全新的可能性。本文将详细分享通义灵码 2.0 在 VScode 前端开发环境中的深度使用体验。
49 2
|
12天前
|
人工智能 边缘计算 运维
容器化浪潮下的AI赋能:智能化运维与创新应用
近年来,容器技术以其轻量、高效、可移植的特性成为云原生时代的基石,推动应用开发和部署方式革新。随着容器化应用规模扩大,传统运维手段逐渐力不从心。AI技术的引入为容器化生态带来新活力,实现智能监控、自动化故障诊断与修复及智能资源调度,提升运维效率和可靠性。同时,AI驱动容器化创新应用,如模型训练、边缘计算和Serverless AI服务,带来更多可能性。未来,AI与容器技术的融合将更加紧密,推动更智能、高效的运维平台和丰富的创新应用场景,助力数字化转型。

热门文章

最新文章