开启左侧

LangChain 中的嵌入

[复制链接]
funingfu 发表于 昨天 22:44 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
作者:CSDN博客
在自然语言处理(NLP)领域,嵌入已经成为游戏规则的改变者。它们使我们能够将单词和文档转换为计算机可以理解的数字。这些数字表示(称为嵌入)对于理解文本、分析情感和翻译语言等任务至关重要。
本文探讨了LangChain中的嵌入,这是一个用于创建嵌入的用户友好平台。我们将解释什么是嵌入以及它们在人工智能中的工作原理。我们还将深入探讨 LangChain 的嵌入功能以及它如何轻松生成查询和文档的嵌入。
LangChain 不仅仅提供嵌入功能。它与不同的模型集成以提供各种嵌入选项。我们将探讨其中一些集成,例如 GloVeEmbeddings、BERTEmbeddings、Word2VecEmbeddings 和 FastTextEmbeddings 及其优势。
读完本文,您将清楚地了解嵌入、嵌入在 NLP 中的重要性,以及 LangChain 如何简化使用嵌入的过程。让我们深入嵌入的世界,通过 LangChain 释放语言理解的力量。
什么是嵌入?

在自然语言处理 (NLP) 领域,嵌入是一种将文本数据转换为机器学习算法可以理解和处理的数字格式的方法。每个单词(或文档)都会转换为一个高维向量,表示其在数据集中的上下文。这些向量的优点在于它们可以捕获单词之间的语义关系——使用相似的单词将具有相似的向量。
嵌入是许多 NLP 任务的重要方面,包括文本分类、情感分析和语言翻译等。它们帮助我们以类似于人类理解语言的方式对语言数据进行量化和分类。
LangChain 中的嵌入:仔细观察

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

当我们调用 embedQuery("Hello langchain") 时,LangChain 会获取文本字符串“Hello langchain”,并将其转换为数字表示形式 - 嵌入。该函数返回一个数字数组,每个数字代表嵌入空间中的一个维度。
/* Embed queries */const res = await embeddings.embedQuery("Hello langchain");
您在数组中看到的res是“Hello langchain”的数字表示。它可能看起来像一个随机的数字数组,但这些数字以机器学习模型可以理解的方式编码“Hello langchain”的含义。
嵌入文档

正如我们可以为查询创建嵌入一样,我们也可以为文档创建嵌入。该embedDocuments函数接受一个文本字符串数组并返回其各自嵌入的数组。
/* Embed documents */const documentRes = await embeddings.embedDocuments(["Hello langchain", "Bye bye"]);
在本例中,documentRes是一个二维数组,每个子数组都是相应文档的嵌入。
在 LangChain 中嵌入集成

LangChain 提供了多个用于生成嵌入的类,每个类都与不同的模型提供程序集成。
OpenAI 嵌入

该类OpenAIEmbeddings使用 OpenAI API 创建嵌入。您可以使用 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});
在本例中,如果嵌入过程超过 1 秒,LangChain 将停止等待并继续。当处理可能需要一段时间才能处理的大型文档时,或者当您使用缓慢或不可靠的互联网连接时,这尤其有用。
处理速率限制

速率限制是许多 API 提供商实施的一种策略,旨在防止用户在短时间内因过多请求而导致服务器过载。如果超出速率限制,您将收到一条错误消息。
LangChain 提供了一个方便的功能来管理速率限制。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次,然后最终放弃。
结论

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

原文地址:https://blog.csdn.net/npk191954/article/details/132535997
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

发布主题
阅读排行更多+

Powered by Discuz! X3.4© 2001-2013 Discuz Team.( 京ICP备17022993号-3 )