Embedding models

Embedding models · Ollama Blog

嵌入模型

2024年4月8日


Ollama 支持嵌入模型,使得构建结合文本提示与现有文档或其他数据的检索增强生成(RAG)应用成为可能。

什么是嵌入模型?

嵌入模型是专门训练以生成向量嵌入的模型:这些是代表给定文本序列语义含义的长数组:

生成的向量嵌入数组可以存储在数据库中,该数据库会进行比较以搜索语义相似的数据。

示例嵌入模型

ModelParameter Size
mxbai-embed-large334MView model
nomic-embed-text137MView model
all-minilm23MView model

使用方法

要生成向量嵌入,首先拉取模型:

ollama pull mxbai-embed-large

接下来,使用REST APIPythonJavaScript库来从模型生成向量嵌入:

REST API

curl http://localhost:11434/api/embeddings -d '{
  "model": "mxbai-embed-large",
  "prompt": "Llamas are members of the camelid family"
}'

Python 库

ollama.embeddings(
  model='mxbai-embed-large',
  prompt='Llamas are members of the camelid family',
)

JavaScript 库

ollama.embeddings({
    model: 'mxbai-embed-large',
    prompt: 'Llamas are members of the camelid family',
})

Ollama 还集成了流行工具,支持嵌入工作流,例如 LangChain 和 LlamaIndex

示例

本示例演示了如何使用 Ollama 和嵌入模型构建一个检索增强生成(RAG)应用。

步骤 1:生成嵌入

pip install ollama chromadb

创建一个名为 example.py 的文件,内容如下:

import ollama
import chromadb

documents = [
  "Llamas are members of the camelid family meaning they're pretty closely related to vicuñas and camels",
  "Llamas were first domesticated and used as pack animals 4,000 to 5,000 years ago in the Peruvian highlands",
  "Llamas can grow as much as 6 feet tall though the average llama between 5 feet 6 inches and 5 feet 9 inches tall",
  "Llamas weigh between 280 and 450 pounds and can carry 25 to 30 percent of their body weight",
  "Llamas are vegetarians and have very efficient digestive systems",
  "Llamas live to be about 20 years old, though some only live for 15 years and others live to be 30 years old",
]

client = chromadb.Client()
collection = client.create_collection(name="docs")

# 将每个文档存储在向量嵌入数据库中
for i, d in enumerate(documents):
  response = ollama.embeddings(model="mxbai-embed-large", prompt=d)
  embedding = response["embedding"]
  collection.add(
    ids=[str(i)],
    embeddings=[embedding],
    documents=[d]
  )

步骤 2:检索

接下来,添加代码以根据示例提示检索最相关的文档:

# 一个示例提示
prompt = "What animals are llamas related to?"

# 生成提示的嵌入并检索最相关的文档
response = ollama.embeddings(
  prompt=prompt,
  model="mxbai-embed-large"
)
results = collection.query(
  query_embeddings=[response["embedding"]],
  n_results=1
)
data = results['documents'][0][0]

步骤 3:生成

最后,使用提示和上一步检索到的文档来生成答案!

# 生成结合我们在步骤2中检索到的数据和提示的响应
output = ollama.generate(
  model="llama2",
  prompt=f"Using this data: {data}. Respond to this prompt: {prompt}"
)

print(output['response'])

然后,运行代码:

python example.py

Llama 2 将使用数据来回答提示 “What animals are llamas related to?”:

Llamas are members of the camelid family, which means they are closely related to two other animals: vicuñas and camels. All three species belong to the same evolutionary lineage and share many similarities in terms of their physical characteristics, behavior, and genetic makeup. Specifically, llamas are most closely related to vicuñas, with which they share a common ancestor that lived around 20-30 million years ago. Both llamas and vicuñas are members of the family Camelidae, while camels belong to a different family (Dromedary).

即将推出的功能

更多支持涉及嵌入工作流的功能将陆续推出:
- 批量嵌入:同时处理多个输入数据提示
- OpenAI API 兼容性:支持与 OpenAI 兼容的 /v1/embeddings 端点
- 更多嵌入模型架构:支持 ColBERT、RoBERTa 及其他嵌入模型架构

腾讯元宝

  • 1. 神经网络算法 —— Embedding(嵌入)!!-腾讯云开发者 ...
  • 2. M3E: 文本嵌入模型入门
  • 3. 什么是嵌入?– 机器学习中的嵌入简介 – AWS
  • 4. 神经网络算法 —— Embedding(嵌入)!! - CSDN博客
  • 5. 什么是Embedding Model(嵌入模型)?-今日头条
  • 6. 【大模型开发】 一文搞懂Embedding工作原理 - CSDN博客
  • 7. 大白话!神经网络Embedding的原理及作用-CSDN博客
  • 8. embedding模型的原理
  • 9. 基于 Go 语言实现的 Ollama 大语言模型框架
  • 10. 使用 ollama 部署本地模型-今日头条
  • 11. ChatOllama | 基于Ollama实现100%本地化RAG应用

嵌入模型是一种将文本、单词、短语或其他类型的数据转换为数值向量的技术,这些向量能够捕捉到原始数据的重要特征。在自然语言处理(NLP)领域,嵌入模型特别重要,因为它们能够捕捉词汇的语义特征,如单词的含义、用法、上下文关系等。语义上相似的词汇在向量空间中会彼此接近,这有助于提高文本分类、情感分析、机器翻译等任务的准确性15。

嵌入模型的工作原理

嵌入模型通过神经网络中的Embedding层,训练得到数据的向量表示。这个过程将离散的高维数据(如文字、图片、音频)映射到低纬度的连续向量空间。这些向量通常由实数构成,用于捕捉原始数据的潜在关系和结构4。

嵌入模型在Ollama中的应用

Ollama作为一个轻量级且可扩展的框架,支持多种大型语言模型,包括嵌入模型。这使得开发者能够在本地机器上构建和运行这些模型,结合文本提示与现有文档或其他数据,构建检索增强生成(RAG)应用。例如,ChatOllama是基于Ollama实现的一个100%本地化的RAG应用,它利用了Ollama支持的本地文本嵌入模型,如nomic-embed-text,来实现基于知识库的聊天功能911。

通过Ollama,开发者可以轻松地探索嵌入模型在构建复杂NLP应用中的潜力,如RAG应用,这些应用能够结合文本提示与现有数据,提供更丰富、更准确的生成内容。

Claude3 Opus

嵌入模型(Embedding Model)是一种用于将输入数据映射到连续向量空间的机器学习模型。它将离散的、高维的输入数据(如文本、图片、音频等)转换为低维的稠密向量表示,这些向量通常被称为"嵌入向量"或"嵌入特征"。
嵌入模型的目标是将输入数据的语义信息进行编码,从而使得相似的输入数据在嵌入空间中具有相似的向量表示。具体来说,嵌入模型通过学习将输入数据映射到嵌入空间,使得具有相似语义的数据在该空间中的距离更近,而语义上不相关的数据则在该空间中的距离更远。这种低维的、稠密的表示形式可以更好地捕捉数据的语义信息,方便进行进一步的分析和应用。
嵌入模型在自然语言处理领域特别常见,例如将单词、句子、文档等文本数据映射到嵌入空间中的向量表示。这些向量可以被用于计算词语相似性、句子相似性、文档分类等任务,以及在生成模型中作为输入产生更具语义一致性的输出。
在结合文本提示与现有文档或其他数据的检索增强生成(RAG)应用中,嵌入模型可以用来将文本提示和现有文档进行嵌入表示,从而实现更好的语义匹配和检索能力。
总而言之,嵌入模型通过将输入数据映射到低维的稠密向量表示,提供了一种更加紧凑和语义感知的数据表示形式,广泛应用于各种机器学习和自然语言处理任务中。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值