2024年AI春招必备:Pinecone向量数据库及大模型应用总结

释放双眼,带上耳机,听听看~!
2024年春招备战,学习Pinecone向量数据库和大型模型应用,抓住AIGC方向的机会。了解如何利用all-MiniLM-L6-v2等模型进行语义搜索和文本嵌入,助力未来AI应用发展。加我微信shunwuyu,一起交流。

假如你和我一样在准备24年的春招,在前端全栈外,再准备一些AI的内容是非常有必要的。24年是AI红利年,AIGC+各种岗位大厂机会会多些,同意的请点赞。也欢迎朋友们加我微信shunwuyu, 一起交流。

前言

年前几天,把吴恩达AI系列的Building Applications with Vector Databases – DeepLearning.AI刷完了,并写了系列学习文章。将Pinecone向量数据库用于Semantic SearchRAGRecommend SystemHybrid Search等实战,收获挺多的。

今天是大年初三,新年好。先预祝各位春招都去大厂,去的岗位都偏AIGC方向,把握未来最大机会。写篇Pinecone系列总结,顺便给大家拜个年。

Pinecone

Building Applications with Vector Databases – DeepLearning.AI是吴恩达与Pinecone合作的课程,向量数据库使用的是Pinecone。之前也用过chromadb、Fasis等,Pinecone最近提供了ServerlessSpec云服务,注册就送100$体验金。绝非广告,单纯薅了羊毛感谢下,可以访问Pinecone

模型

我想大部分和我一样从前端因AIGC跨到人工智能的同学,对大模型的理解大概会是从OpenAI一些文本生成(text-davinci-00X)、文本嵌入(text-embedding-ada-002)API式的学习开始,到后面接触到Hugging Face里的开源模型,再到GPT4、Gemini等最新模型,以及DALL-E等多模态模型。各家大厂几乎都推出了自家的大模型,且与OpenAI的不相上下。24年,我们做AI应用,在项目中同时使用多种大模型的能力是非常重要的。

我们来看下Pinecone系列用到了哪些模型:

嵌入模型

在自然语言处理(NLP)中,”embedding” 是一个非常关键的概念。Embedding,或嵌入,通常指的是将文本数据(如单词、短语或整个文档)转换为数值向量的过程。这些数值向量捕捉了文本的语义特征,使得计算机能够理解和处理语言数据。

2024年AI春招必备:Pinecone向量数据库及大模型应用总结

  • all-MiniLM-L6-v2

Semantic Search 一节中,我们使用了HuggingFace 社区开源的all-MiniLM-L6-v2来做embedding

这是一个由微软提供的轻量级句子转换器Sentence Transformer模型,它将句子和段落映射到384维的密集向量空间,可用于聚类或语义搜索等任务。它基于 MiniLM 架构并进行了优化以生成高质量的文本向量表示。MiniLM 系列模型是为高效、快速且资源占用较小的场景设计的预训练语言模型。我们可以到它在Hugging Face上的模型页面去理解,玩下它的Examples就清楚什么叫基于句子的Transformer。如果您还没有怎么用过Hugging Face, 建议立马行动起来。它是目前最火的AI社区,有各种开源大模型、数据集,而且可以云运行这些模型,再也不用为显卡发愁了…,可用于聚类或语义搜索等任务。我们可以到它在Hugging Face上的模型页面去理解,玩下它的Examples就清楚什么叫基于句子的Transformer。如果您还没有怎么用过Hugging Face, 建议立马行动起来。它是目前最火的AI社区,有各种开源大模型、数据集,而且可以云运行这些模型,再也不用为显卡发愁了….

2024年AI春招必备:Pinecone向量数据库及大模型应用总结

在上图中,源句是That is a happy person, 比较的句子中That is a happy person得分最高(0.943分),Today is a sunny day得分最低,句子几乎什么相同的。而That is a happy dog 在句式上除了最后一个词外,几乎一样。但是persondog还是天差地别的, 感觉0.695的相似度太高了。或许这就是它被称为Sentence Tramsformer的原因,维度也只有384,把它做为从文本匹配类搜索过渡到Semantic Search的免费大模型方案还是可以的。

# 安装依赖
pip install -U sentence-transformers
# 引入SentenceTransformer
from sentence_transformers import SentenceTransformer
# cuda 即显卡判断,如果有,运行会快一些,否则,慢一些
device = 'cuda' if torch.cuda.is_available() else 'cpu'
if device != 'cuda':
    # 我穷,我被sorry
    print('Sorry no cuda.')
# 实例化SentenceTransformer
model = SentenceTransformer('all-MiniLM-L6-v2', device=device)
# 向量生成
query = 'which city is the most populated in the world?'
# 向量嵌入
xq = model.encode(query)
xq.shape
xq

2024年AI春招必备:Pinecone向量数据库及大模型应用总结

  • text-embedding-ada-002

在Retrieval Augmented Generation(RAG)安全中,我们使用的嵌入模型是text-embedding-ada-002。它的维度是1536,相比sentence-transformers384,收集的数据特征值更多,适合商业化、更专业的知识库打造。

使用流程如下

  • 安装OpenAI
!pip install openai
  • 实例化
from openai import OpenAI
openai_client = OpenAI(api_key=OPENAI_API_KEY)
  • 封装embedding函数
def get_embeddings(articles, model="text-embedding-ada-002"):
   return openai_client.embeddings.create(input = articles, model=model)
  • 调用
query = "what is the berlin wall?"
embed = get_embeddings([query])
  • clip-ViT-B-32

我们在Hybrid Search项目中,使用到了sentence-transformers/clip-ViT-B-32。数据集ashraq/fashion-product-images-small里每行记录都包含一张图片,为优化搜索效果,我们对数据集进行了密集编码(Dense Vector)。

all-MiniLM-L6-v2是一个文本嵌入模型,而clip-ViT-B-32是跨模态的。它们专注于不同的自然语言处理任务和多模态学习领域。相同点是都基于Sentence Transformers库实现。

clip-ViT-B-32使用了Vison Transformer(ViT)架构作为视觉编码部分,将图像分割为小块并转化为序列进行处理。它的主要目标是将统一文本和图像表示空间,使得可以通过文本准确地检索或分类图像。

  • BM25

BM25是一种用于信息检索的排名算法,它基于词频(TF)、逆文档频率(IDF)以及其他统计特性来估计一个文档对于给定查询的相关性。

当我们将稀疏向量与BM25结合,比如在构建搜索引擎时,先用稀疏向量表示文档集合,然后利用MB25算法对这些稀疏向量进行打分,从而高效地找出与用户查询相关的文档。

我们会去安装一个pinecone叫做pinecone-text的库,用于创建稀疏向量。

from pinecone_text.sparse import BM25Encoder
bm25 = BM25Encoder()
bm25.fit(metadata['productDisplayName'])
  • Facenet

Facial Similarity Search实例中,面部识别我们用到了DeepFace的Facenet

该框架在人脸识别任务上表现优秀,能够进行人脸检测、对齐、特征提取以及人脸识别匹配等操作,并且支持不同场景下的身份验证和人脸识别应用。通过将多个顶级人脸识别模型集成在一起,Deepface 可以根据不同的需求和数据集选择最佳模型或策略,从而实现高达 97% 的高精度识别率。

!pip install deepface
from deepface import DeepFace
embedding = DeepFace.represent(img_path=child_base, model_name=MODEL)[0]['embedding']
print(embedding)

生成模型

  • gpt-3.5-turbo-instruct

RAG实力中,当我们拿到检索结果后,交给gpt-3.5-turbo-instruct 生成了一篇文章。

首先,调用上面封装好的get_embeddings方法,拿到查询结果。再组织prompt,装载查询结果,交由生成类的 gpt-3.5-turbo-instruct模型完成文章编写。

query = "write an article titled: what is the berlin wall?"

res = index.query(vector=embed.data[0].embedding, top_k=3, include_metadata=True)

contexts = [
    x['metadata']['text'] for x in res['matches']
]

prompt_start = (
    "Answer the question based on the context below.nn"+
    "Context:n"
)

prompt_end = (
    f"nnQuestion: {query}nAnswer:"
)

prompt = (
    prompt_start + "nn---nn".join(contexts) + 
    prompt_end
)

print(prompt)

总结

在吴恩达AI系列的Building Applications with Vector Databases – DeepLearning.AI中,确实帮助我构建起来了多种不同用途大模型的概念和使用经验。以前对于大模型,理解是OpenAI或其它,在参数层面、模态层面、开闭源的不同。通过与嵌入向量相关的Semantic SearchRAGRecommend SystemHybrid SearchFacial Similarity Search任务的学习,开始关注不同nlp任务挑选相应的模型。

参考资料

本网站的内容主要来自互联网上的各种资源,仅供参考和信息分享之用,不代表本网站拥有相关版权或知识产权。如您认为内容侵犯您的权益,请联系我们,我们将尽快采取行动,包括删除或更正。
AI教程

通义千问开源全家桶新模型Qwen-72B发布,性能超越商用闭源模型

2024-2-18 14:27:00

AI教程

GPT-5:多模态AI模型的革新与未来发展

2024-2-18 18:27:00

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索