深入理解Embedding模型:文本向量化的原理、知识库构建与相似度检索实践
本文介绍了Embedding(嵌入)的概念及其应用。Embedding是将文本、图像等数据转换为高维向量的过程,便于计算机处理。文章涵盖Embedding的类型(文本、图像、声音)、优势(降维、高效比较)以及处理流程(收集、切块、嵌入、存储)。最后通过OpenAI API演示文本向量化及余弦相似度计算,并附上实战代码示例,展示如何实现文本检索匹配功能。
目录导航
-
-
- 1 什么是Embedding
-
- 2 为什么使用Embedding
- 3 数据向量化的处理流程
- 4 Embedding实战
-
1 什么是Embedding
- 在大模型中,"embedding"指的是将某种类型的输入数据(如文本、图像、声音等)转换成一个稠密的数值向量的过程。
- 这些向量通常包含较多维度,每一个维度代表输入数据的某种抽象特征或属性。
- Embedding 的目的是将实际的输入转化为一种格式,使得计算机能够更有效地处理和学习
- 文本Embedding
在自然语言处理(NLP)中,文本embedding是一个常见的概念。是将文字或短语转换成数值向量的过程。这些向量捕捉了单词的语义特征,例如意义、上下文关系等。比如,使用词嵌入技术(如Word2Vec、GloVe或BERT),模型可以将具有相似意义的词映射到向量空间中的相近位置。
- 图像Embedding
对于图像,embedding过程通常涉及使用卷积神经网络(CNN)等模型来提取图像中的特征,并将这些特征转换为一个高维向量。这样的向量可以代表图像的内容、风格、色彩等信息,从而用于图像识别、分类或检索任务。
- 声音Embedding
在声音处理领域,embedding通常指的是将音频信号转换为一个表示其特征的向量,这包括音调、节奏、音色等。通过这样的转换,可以进行声音识别、音乐生成等任务。
2 为什么使用Embedding
- Embedding的主要优势是能够将实体转换为计算机易于处理的数值形式,同时减少信息的维度和复杂度。
- 有助于提高处理效率,而且也使得不同实体之间的比较(如计算相似度)变得可行。
- embedding通常通过大量数据的训练而得到,能够捕捉到复杂的模式和深层次的关系,这是传统方法难以实现的
3 数据向量化的处理流程
1. 收集
这一步骤是数据收集阶段,涉及到从不同的来源(如数据库、网站、文档等)收集需要分析的文本数据。这些数据可以是文章、评论、报告等形式。重点是确定数据源,并确保数据的相关性和质量。
2. 切块
对于大型文档,直接处理可能会因为模型的输入限制(如Token数量限制)而变得不可行。在这种情况下,需要将大文档分割成更小的部分。这些部分应该尽可能保持语义的完整性,例如按段落或章节切分。切块的目的是确保每块文本的大小适合模型处理,同时尽量减少上下文信息的丢失。
3. 嵌入
在切块后,每个文本块将被转换为数值向量,即通过OpenAI的embedding API进行嵌入。这一步涉及调用API,将文本数据发送到OpenAI的服务器,服务器会返回文本的向量表示。这些向量捕捉了文本的深层语义特征,使得文本之间的比较、搜索和分析变得可能。
4. 结果存储
嵌入向量生成后,需要将它们存储起来以便于后续的检索和分析。对于大型数据集,推荐使用专门的向量数据库(如Faiss、Annoy、Elasticsearch等),这些数据库优化了向量的存储和相似性搜索操作。存储不仅要保证数据的可检索性,也要考虑查询效率和存储成本
4 Embedding实战
- 演示是通过OPENAI的embedding进行,根据最新的api测试
- 测试代码如下
response = openai.embeddings.create(
input="abc s da d asd a da d ",
model="text-embedding-ada-002" # 选择一个合适的模型,如ada
)
print("测试数据:",response.data[0].embedding)
- 文本转化向量
- 如何计算两个向量的相似度?
余弦相似度是一种用来衡量两个向量方向上的相似性的方法。在文本分析中,它常用于比较两段文本的语义相似性。当我们使用向量化模型(如OpenAI的text-embedding-ada-002模型)将文本转化为向量后,每个向量的维度表示某种语义特征,向量中的值反映了相应特征的强度。
余弦相似度的计算公式为:
其中, v e c 1 ⋅ v e c 2 \mathbf{vec1} \cdot \mathbf{vec2} vec1⋅vec2 表示两个向量的点积, ∣ v e c 1 ∣ |\mathbf{vec1}| ∣vec1∣ 和 ∣ v e c 2 ∣ |\mathbf{vec2}| ∣vec2∣ 分别是这两个向量的欧几里得范数(即向量的长度)。
这个比例的本质是测量两个向量之间夹角的余弦值,范围从-1到1:
当余弦值为1时,表示两个向量方向完全相同。
当余弦值为0时,表示两个向量正交,即在高维空间中不相关。
当余弦值为-1时,表示两个向量方向完全相反。
在文本相似度测量中,如果两个文本的向量化表示在方向上更接近,它们的余弦相似度就更高,这意味着它们在语义上更相似。因此,通过计算向量之间的余弦相似度,我们可以有效地评估两段文本的相似性。这种方法适用于处理高维空间中的数据,如自然语言处理中的文本数据。
- 整体实战代码 文本检索匹配
import time
from typing import List
import os
import pandas as pd
# 导入 tiktoken 库。Tiktoken 是 OpenAI 开发的一个库,用于从模型生成的文本中计算 token 数量。
import tiktoken
from openai import OpenAI
import numpy as np
os.environ['OPENAI_API_KEY']='sk-api-0REliWJkobjeqQlObLN0T3BlbkFJ0j4bHtDhEEQGEAboNYah'
openai = OpenAI()
def embed_text(text):
""" 使用OpenAI API将文本向量化 """
response =openai.embeddings.create(
input=text,
model="text-embedding-ada-002" # 选择一个合适的模型,如ada
)
return response.data[0].embedding
def cosine_similarity(vec1, vec2):
""" 计算两个向量之间的余弦相似度 """
return np.dot(vec1, vec2) / (np.linalg.norm(vec1) * np.linalg.norm(vec2))
def find_top_similar_texts(input_text, text_list, top_n=3):
""" 找出与输入文本最相似的top_n个文本 """
input_vec = embed_text(input_text)
similarities = []
for text in text_list:
text_vec = embed_text(text)
similarity = cosine_similarity(input_vec, text_vec)
similarities.append((text, similarity))
# 按相似度排序并返回最高的top_n个结果
similarities.sort(key=lambda x: x[1], reverse=True)
return similarities[:top_n]
# 示例文本库
text_corpus = [
"The quick brown fox jumps over the lazy dog.",
"A fast brown fox leaps over a sleepy dog.",
"Exploring the mountains of the moon.",
"Data science involves the analysis of large amounts of data.",
"The capital of France is Paris.",
"Programming in Python is fun and versatile."
]
# 输入文本
input_text = "Python is"
# 执行查找
top_similar_texts = find_top_similar_texts(input_text, text_corpus)
# 打印结果
for text, similarity in top_similar_texts:
print(f"Text: {text}\nSimilarity: {similarity:.2f}\n")
#
# # 示例文本
# text1 = "The quick brown fox jumps over the lazy dog."
# text2 = "A fast brown fox leaps over a sleepy dog."
# text3 = "Exploring the mountains of the moon."
#
# # 向量化文本
# vec1 = embed_text(text1)
# vec2 = embed_text(text2)
# vec3 = embed_text(text3)
#
# # 计算相似度
# similarity12 = cosine_similarity(vec1, vec2)
# similarity13 = cosine_similarity(vec1, vec3)
#
# print(f"Similarity between text 1 and text 2: {similarity12:.2f}")
# print(f"Similarity between text 1 and text 3: {similarity13:.2f}")
response = openai.embeddings.create(
input="abc s da d asd a da d ",
model="text-embedding-ada-002" # 选择一个合适的模型,如ada
)
print("测试数据:",response.data[0].embedding)
- 结果
- 最终检索到匹配度前三的文本向量 后续会使用到向量数据库 完成知识库的搭建
如何学习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%免费】🆓
更多推荐
所有评论(0)