LangChain 中Embeddings概述

在自然语言处理 (NLP) 领域,Embeddings已成为游戏规则的改变者。它们使我们能够将文字和文档转换为计算机可以理解的数字。这些数字表示(称为Embeddings)对于理解文本、分析情绪和翻译语言等任务至关重要。

本文探讨了 LangChain 中的Embeddings,LangChain 是一个用于创建Embeddings的用户友好平台。我们将解释什么是Embeddings以及它们在 AI 中的工作原理。我们还将深入探讨 LangChain 的Embeddings功能,以及它如何使为查询和文档生成Embeddings变得容易。

LangChain 不仅仅提供Embedding功能。它与不同的模型集成以提供多种Embedding选项。我们将探索其中的一些集成,例如 GloVeEmbeddings、BERTEmbeddings、Word2VecEmbeddings 和 FastTextEmbeddings,以及它们的优势。

本文结束时将清楚地了解Embeddings、它们在 NLP 中的重要性以及 LangChain 如何简化使用Embedding的过程。

什么是Embeddings?

在自然语言处理 (NLP) 领域,Embedding是一种将文本数据转换为机器学习算法可以理解和处理的数字格式的方法。每个单词(或文档)都被转换成一个高维向量,代表它在数据集中的上下文。这些向量的美妙之处在于它们可以捕获单词之间的语义关系——使用相似的单词将具有相似的向量。

Embedding是许多 NLP 任务的重要方面,包括文本分类、情感分析和语言翻译等。它们帮助我们以类似于人类理解语言的方式对语言数据进行量化和分类。

LangChain 中的Embeddings:近距离观察

LangChain 提供了一个强大且易于使用的界面来生成Embedding。但是当我们调用这些函数时,幕后发生了什么?让我们分解一下。

Embedding查询

当我们调用 embedQuery(“Hello world”) 时,LangChain 获取文本字符串“Hello world”,并将其转换为数字表示形式——Embedding。此函数返回一个数字数组,每个数字代表嵌入空间中的一个维度。

/* Embed queries */
const res = await embeddings.embedQuery("Hello world");

在 res 数组中看到的是“Hello world”的数字表示。它可能看起来像一个随机数字数组,但这些数字以机器学习模型可以理解的方式编码了“Hello world”的含义。

Embedding文档

正如我们可以为查询创建Embedding一样,我们也可以为文档做同样的事情。embedDocuments 函数接受一个文本字符串数组并返回一个包含它们各自嵌入的数组。

/* Embed documents */
const documentRes = await embeddings.embedDocuments(["Hello world""Bye bye"]);

在这种情况下,documentRes 是一个二维数组,每个子数组都是相应文档的Embedding。

在 LangChain 中Embedding集成

LangChain 提供了多个用于生成Embedding的类,每个类都与不同的模型提供者集成。

OpenAI Embedding

OpenAIEmbeddings 类使用 OpenAI API 来创建Embedding。可以使用 OpenAI 的 API 密钥或 Azure 的 OpenAI API 密钥。以下是如何使用 Azure 的 OpenAI API 密钥的示例:

import { OpenAIEmbeddings } from "langchain/embeddings/openai";

const embeddings = new OpenAIEmbeddings({
  azureOpenAIApiKey: "YOUR-API-KEY",
  azureOpenAIApiInstanceName: "YOUR-INSTANCE-NAME",
  azureOpenAIApiDeploymentName: "YOUR-DEPLOYMENT-NAME",
  azureOpenAIApiVersion: "YOUR-API-VERSION",
});

其他整合

其他集成包括 CohereEmbeddings、TensorFlowEmbeddings 和 HuggingFaceInferenceEmbeddings。例如,要使用 CohereEmbeddings可以这样做:

import { CohereEmbeddings } from "langchain/embeddings/cohere";

const embeddings = new CohereEmbeddings({
  apiKey: "YOUR-API-KEY",
});

附加功能和处理错误

LangChain 还提供了各种附加功能,例如设置超时、处理速率限制和处理 API 错误。

例如如果希望 LangChain 在一定时间后停止等待响应可以设置超时:

import { OpenAIEmbeddings } from "langchain/embeddings/openai";

const embeddings = new OpenAIEmbeddings({
  timeout: 1000, // 1s timeout
});

在这个例子中,如果Embedding过程超过 1 秒,LangChain 将停止等待并继续。当处理可能需要一段时间才能处理的大型文档时,或者当使用缓慢或不可靠的 Internet 连接时,这尤其有用。

处理速率限制

速率限制是许多 API 提供者实施的一种策略,以防止用户在短时间内因过多的请求而使服务器过载。如果超过速率限制将收到一条错误消息。

LangChain 提供了一个方便的功能来管理速率限制。可以在实例化Embedding模型时设置 maxConcurrency 选项。此选项允许指定要向提供程序发出的最大并发请求数。如果超过这个数量,LangChain 将自动对请求进行排队,并在之前的请求完成后发送。

下面是如何设置最大并发为 5 个请求的示例:

import { OpenAIEmbeddings } from "langchain/embeddings/openai";

const model = new OpenAIEmbeddings({ maxConcurrency: 5 });

处理 API 错误

如果模型提供者返回错误,LangChain 有一个内置机制可以重试请求最多 6 次,并带有指数退避。这意味着在再次尝试请求之前,每次重试将等待前一次的两倍。这种策略通常可以帮助成功完成请求,尤其是在出现临时网络问题或服务器过载的情况下。

如果要更改最大重试次数,可以在实例化模型时传递 maxRetries 选项:

import { OpenAIEmbeddings } from "langchain/embeddings/openai";

const model = new OpenAIEmbeddings({ maxRetries: 10 });

在这个例子中,LangChain 将在最终放弃之前重试失败的请求最多 10 次。

结论

总而言之,Embeddings是 NLP 任务中的强大工具,LangChain 提供了一个强大、灵活且用户友好的界面来生成和使用嵌入。凭借与多个提供商集成、处理速率限制和管理 API 错误的能力,LangChain 是任何 AI 项目的绝佳选择。


原文始发于微信公众号(漫谈大数据):LangChain 中Embeddings概述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/159605.html

(1)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!