词向量及向量知识库介绍
词向量
词向量定义
在机器学习和自然语言处理(NLP)中,词向量(Embeddings)是一种将非结构化数据,如单词、句子或者整个文档,转化为实数向量的技术。这些实数向量可以被计算机更好地理解和处理。
嵌入背后的主要想法是,相似或相关的对象在嵌入空间中的距离应该很近。
词向量优势
在RAG(Retrieval Augmented Generation,检索增强生成)方面词向量的优势主要有两点:
-
词向量比文字更适合检索。当我们在数据库检索时,如果数据库存储的是文字,主要通过检索关键词(词法搜索)等方法找到相对匹配的数据,匹配的程度是取决于关键词的数量或者是否完全匹配查询句的;但是词向量中包含了原文本的语义信息,可以通过计算问题与数据库中数据的点积、余弦距离、欧几里得距离等指标,直接获取问题与数据在语义层面上的相似度;
-
词向量比其它媒介的综合信息能力更强,当传统数据库存储文字、声音、图像、视频等多种媒介时,很难去将上述多种媒介构建起关联与跨模态的查询方法;但是词向量却可以通过多种向量模型将多种数据映射成统一的向量形式。
这里补充一下RAG的介绍
RAG(Retrieval Augmented Generation,检索增强生成)是一种结合了检索(Retrieval)和生成(Generation)的人工智能模型架构,旨在提高文本生成任务的性能和相关性。这种方法通过先检索相关信息,然后基于这些信息生成文本,从而允许模型在生成回答、文章或其他类型的文本内容时,利用大量的外部知识。RAG模型通常用于需要广泛背景知识的任务,如问答系统、内容推荐、文章撰写等。
一般构建词向量的方法
在搭建 RAG 系统时,我们往往可以通过使用嵌入模型来构建词向量,我们可以选择:
-
使用各个公司的 Embedding API;
-
在本地使用嵌入模型将数据构建为词向量。
向量数据库
向量数据库定义
向量数据库是用于高效计算和管理大量向量数据的解决方案。向量数据库是一种专门用于存储和检索向量数据(embedding)的数据库系统。它与传统的基于关系模型的数据库不同,它主要关注的是向量数据的特性和相似性。
在向量数据库中,数据被表示为向量形式,每个向量代表一个数据项。这些向量可以是数字、文本、图像或其他类型的数据。向量数据库使用高效的索引和查询算法来加速向量数据的存储和检索过程。
使用Embedding API(OpenAI)
我这里使用的是OpenAI的API,
GPT embedding mode使用的是text-embedding-3-small
def openai_embedding(text: str, model: str=None):
# 获取环境变量 OPENAI_API_KEY
api_key=os.environ['OPENAI_API_KEY']
client = OpenAI(api_key=api_key)
# embedding model:'text-embedding-3-small', 'text-embedding-3-large', 'text-embedding-ada-002'
if model == None:
model="text-embedding-3-small"
response = client.embeddings.create(
input=text,
model=model
)
return response
response = openai_embedding(text='要生成 embedding 的输入文本,字符串形式。')
API返回格式为json,除object
向量类型外还有存放数据的data
、embedding model 型号model
以及本次 token 使用情况usage
等数据,具体如下所示:
{
"object": "list",
"data": [
{
"object": "embedding",
"index": 0,
"embedding": [
-0.006929283495992422,
... (省略)
-4.547132266452536e-05,
&nbs