人工智能的世界已经取得了很大的进步。从最初的炒作到如今借助像ChatGPT这样的工具成为现实,这是一个令人难以置信的美妙时代——谁能想到一个简单的工具可以写整篇文章呢?即使曾经有过这样的工具,也没有如今这些由大型语言模型(LLMs)支持的工具那么强大和出色。
这些大型语言模型(LLMs)能够执行各种任务,就像人脑一样。它们将输入的数据的意义和上下文以一种称为嵌入(embeddings)的特殊格式存储。想象一下,将一个单词、图像或用户的精髓捕捉在一个数学方程中。这就是向量嵌入(vector embeddings)的力量——当今机器学习中最令人着迷和最具影响力的概念之一。
向量嵌入是对象(包括单词、图像或用户资料)在连续向量空间中的密集表示。每个对象在该空间中由一个点(或向量)表示,其中点之间的距离和方向捕捉到了对象之间的语义或上下文关系。例如,在自然语言处理中,相似的单词在嵌入空间中被映射得非常接近。
图片来源:OpenAI
向量嵌入的意义在于它们能够捕捉数据的本质,并将其转化为计算机算法可以高效处理的形式。通过将高维数据转换为低维空间,嵌入使得执行复杂的计算变得更加高效。它们还有助于揭示数据中可能在原始空间中不明显的关联和模式。
生成式AI应用是通过向量嵌入构建的,数据源可以是文本、音频、视频以及任何形式的结构化和非结构化数据。我们可以将这些嵌入大致分为四大类:
这个过程将文本转换为数值向量,使算法能够更准确和高效地执行包括语义搜索、文本分类和情感分析等任务。向量嵌入的核心在于它们能够保留语义关系;例如,具有相似含义的单词在向量空间中会更接近。
生成这些嵌入的方法各不相同,包括 Word2Vec、GloVe 以及最近更先进的转换模型,如 OpenAI 的 BERT 和 GPT。每种技术使用不同的算法来分析文本语料库并学习反映单词或短语的上下文和使用模式的表示。嵌入在弥合人类语言和机器理解之间的差距方面发挥着重要作用,为 AI 的众多应用提供了基础,从聊天机器人到内容推荐系统。
让我们使用 SingleStore Notebooks 和来自 OpenAI、Cohere 和 HuggingFace 的嵌入模型创建一些文本嵌入。
一旦注册完毕,点击 Develop 选项卡开始使用 Notebooks。
从未使用过Notebooks?注册您的免费SingleStore试用版开始使用。
开发标签页提供了选项如 SQL 编辑器、Kai Shell 和笔记本。
点击 Notebooks 创建一个新的笔记本。
你需要有一个 OpenAI API 密钥才能使用他们的模型。如果没有安装 OpenAI 的 Python 包,请先进行安装。
接下来,导入所需的库并提及 OpenAI API 密钥。
使用OpenAI的格式生成文本嵌入。
def generate_embeddings(text): headers = { "Authorization": f"Bearer {api_key}", "Content-Type": "application/json" } data = { "input": text, "model": "text-embedding-ada-002", "encoding_format": "float" } response = requests.post("https://api.openai.com/v1/embeddings", headers=headers, data=json.dumps(data)) return response.json()
提到你想要转换为嵌入的文本。让我们将文本 ‘Pavan 是一名开发者倡导者’ 作为输入。
text = "Pavan 是一名开发者倡导者" embeddings = generate_embeddings(text) print(embeddings)
你看到的是文本“Pavan 是一名开发者倡导者。”的向量嵌入。同样,我们也可以使用Cohere和HuggingFace将我们的文本转换为嵌入。
!pip install cohere
访问 Cohere 网站并获取 API 密钥(它是免费的),并在你的笔记本中像下面这样提及它。
import cohere co = cohere.Client('添加你的 Cohere API 密钥') response = co.embed( texts=['Pavan 是一名开发者倡导者'], model='embed-english-v3.0', input_type='classification' ) print(response)
就像之前说的,你也可以使用 HuggingFace 创建嵌入向量。首先安装所需的库。
!pip install transformers torch
接下来,添加以下代码以从HuggingFace创建嵌入并向其运行:
from transformers import AutoTokenizer, AutoModel import torch def get_huggingface_embedding(text, model_name='sentence-transformers/all-MiniLM-L6-v2'): tokenizer = AutoTokenizer.from_pretrained(model_name) model = AutoModel.from_pretrained(model_name) inputs = tokenizer(text, return_tensors="pt", padding=True, truncation=True, max_length=512) with torch.no_grad(): outputs = model(**inputs) # 您可以选择如何推导最终嵌入,例如均值池化 embeddings = outputs.last_hidden_state.mean(dim=1).squeeze().numpy() return embeddings # 示例用法 text = "Pavan 是一名开发者倡导者。" embedding_huggingface = get_huggingface_embedding(text) print(embedding_huggingface)
你可以在我的 GitHub 仓库 中找到整个 Notebook 代码。
一旦你创建了嵌入向量,你需要存储它们,对吧?你可以轻松地将向量嵌入存储在SingleStore数据库中。为此,你首先需要创建一个工作区,然后在该工作区下创建一个数据库。
一旦创建了工作区,只需单击一下即可清除数据库。
现在,我们将我们的向量嵌入存储在刚刚创建的数据库中。我已经创建了一个名为“embeddings”的数据库(如前图所示)。
前往 Develop 选项卡中的 SQL Editor。
选择你的工作区和数据库下拉菜单中的数据库。让我们创建一个表来存储我们的向量嵌入。如你所见,我的表名是‘vectortable’。
让我们运行以下代码将我们的嵌入存储到表‘vectortable’中
INSERT INTO vectortable (text, vector) VALUES ("你的文本", JSON_ARRAY_PACK("添加嵌入"))
在“你的文本”中,添加你转换成向量嵌入的文本。在“添加嵌入”中,添加相应的嵌入。
让我们回到我们的数据库和创建的表,确认我们的嵌入向量已经存储。
这样,你可以创建你的向量嵌入并将其存储在SingleStore中。此外,我们还可以进行索引近似最近邻(ANN)搜索等更多操作。在下一篇文章中,我们将展示如何使用SingleStore进行索引ANN搜索。
向量嵌入是机器学习和数据科学中不可或缺的工具,提供了一种复杂的方法来表示和处理跨多个领域的数据。尽管存在挑战,嵌入技术和发展中的模型的持续进步有望解决这些问题——扩大其应用范围和有效性。