假设你和我相同在预备24年的春招,在前端全栈外,再预备一些AI的内容对错常有必要的。24年是AI盈利年,AIGC+各种岗位大厂机会会多些,赞同的请点赞。也欢迎朋友们加我微信shunwuyu, 一起沟通。
前语
年前几天,把吴恩达AI系列的Building Applications with Vector Databases – DeepLearning.AI刷完了,并写了系列学习文章。将Pinecone向量数据库用于Semantic Search
、RAG
、Recommend System
、Hybrid 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,或嵌入,通常指的是将文本数据(如单词、短语或整个文档)转换为数值向量的进程。这些数值向量捕捉了文本的语义特征,使得计算机能够了解和处理言语数据。
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社区,有各种开源大模型、数据集,而且能够云运转这些模型,再也不用为显卡忧愁了….
在上图中,源句是That is a happy person
, 比较的语句中That is a happy person
得分最高(0.943分),Today is a sunny day
得分最低,语句简直什么相同的。而That is a happy dog
在句式上除了最后一个词外,简直相同。但是person
和dog
仍是天差地别的, 感觉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
- text-embedding-ada-002
在Retrieval Augmented Generation(RAG)安全中,咱们运用的嵌入模型是text-embedding-ada-002
。它的维度是1536
,相比sentence-transformers
的384
,搜集的数据特征值更多,适合商业化、更专业的知识库打造。
运用流程如下
- 装置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 Search
、RAG
、Recommend System
、Hybrid Search
、Facial Similarity Search
使命的学习,开端关注不同nlp使命选择相应的模型。