目录
介绍
在自然语言处理领域,嵌入提供了一种可靠的方法来量化文本字符串的相关性。正如上一篇文章所强调的,OpenAI的文本嵌入为需要搜索、聚类和分类功能的应用程序带来了巨大的功能。此处演示的ConnectingApps.Refit.OpenAI
NuGet页进一步简化了此功能与.NET应用程序的集成。
背景
那么,究竟什么是文本嵌入?将它们视为一种将单词或句子转换为数字向量同时保留其含义的方法。如果两段文本具有相似的含义,那么在这个多维空间中,它们的向量将更接近。举一个更具体的例子,考虑一个音乐流媒体服务,它旨在根据歌词推荐歌曲。通过利用嵌入,该服务可以分析您喜欢的歌曲歌词背后的含义,并推荐其他主题内容相似的歌曲。再深入一点,假设你经常听关于“克服挑战”的歌曲。即使新歌没有使用“克服挑战”的确切短语,只要它们传达了相似的情绪,它们就会推荐给你。这种魔力是通过文本嵌入实现的。为了深入理解,OpenAI官方文档提供了有关嵌入及其机制的宝贵见解。
使用代码
ConnectingApps.Refit.OpenAI
NuGet包为利用OpenAI的API提供了一个无缝接口。要在此包中使用文本嵌入,请执行以下操作:
1. 从其指定的 NuGet页面保护包。
2. 从OpenAI中检索必要的API密钥,并将其设置为环境变量。
3. 与OpenAI的嵌入终结点集成,如NuGet包的GitHub存储库上托管的代码示例中所示。
using ConnectingApps.Refit.OpenAI;
using ConnectingApps.Refit.OpenAI.Embeddings;
using ConnectingApps.Refit.OpenAI.Embeddings.Request;
using Refit;
var apiKey = Environment.GetEnvironmentVariable("OPENAI_KEY");
var completionApi = RestService.For<IEmbedding>(new HttpClient
{
BaseAddress = new Uri("https://api.openai.com")
}, OpenAiRefitSettings.RefitSettings);
var response = await completionApi.GetEmbeddingAsync(new EmbeddingRequest
{
Input = "The food was delicious",
Model = "text-embedding-ada-002"
}, $"Bearer {apiKey}");
Console.WriteLine($"Returned response status code {response.StatusCode}");
Console.WriteLine($"Vector length {response.Content!.Data.First().Embedding.Length}");
Console.WriteLine($"Vector {string.Join(", ", response.Content!.Data.First().Embedding.Take(10))}...");
执行代码后,您将收到类似于以下内容的输出:
Returned response status code OK
Vector length 1536
Vector 0,022599462, -0,0008510616, -0,005139073, -0,010128645, -0,0023203692, 0,0057370737, -0,01077648, -0,03453457, 0,008851663, -0,044576004...
此输出表示输入文本“The food was delicious”已转换为长度为1536的嵌入向量。打印的矢量值只是整个输出的一个片段,展示了如何以数字表示输入文本的情绪和含义。
兴趣点
对ConnectingApps.Refit.OpenAI
软件包的探索揭示了OpenAI与.NET的优势相结合时的巨大功能。通过抽象复杂性,此NuGet包使获取嵌入就像调用例程函数一样简单。这种非凡的集成证明了AI技术如何越来越多地被不同平台的开发人员所接受。
https://www.codeproject.com/Tips/5370205/Unlocking-the-Power-of-OpenAI-Text-Embeddings-in-N