首页 > 其他分享 >中文环境下使用 huggingface 模型替换 OpenAI的Embedding 接口

中文环境下使用 huggingface 模型替换 OpenAI的Embedding 接口

时间:2023-05-21 14:33:13浏览次数:55  
标签:embeddings string huggingface System OpenAI Embedding using 文本 response

OpenAI的文本嵌入衡量文本字符串的相关性。嵌入通常用于:

  • 搜索(其中结果按与查询字符串的相关性排名)
  • 聚类(其中文本字符串按相似性分组)
  • 推荐(推荐具有相关文本字符串的项目)
  • 异常检测(识别出相关性不大的异常值)
  • 多样性测量(分析相似性分布)
  • 分类(其中文本字符串按其最相似的标签分类)

嵌入是浮点数的向量(列表)。两个向量之间的距离衡量它们的相关性。小距离表示高相关性,大距离表示低相关性。 但是OpenAI的文本嵌入接口对中文的支持并不好,社区经过实践,对中文支持比较好的模型是Hugging face上的 ganymedenil/text2vec-large-chinese。具体可以参见:https://huggingface.co/GanymedeNil/text2vec-large-chinese/discussions/3 ,作者采用的训练数据集是 中文STS-B数据集。它将句子映射到 768 维密集向量空间,可用于任务 如句子嵌入、文本匹配或语义搜索。

在Semantic Kernel 的Sample 下有一个 hugging-face-http-server:https://github.com/microsoft/semantic-kernel/tree/main/samples/apps/hugging-face-http-server ,通过这个示例项目,我们可以在本地运行Huggingface模型。

我们首先构建一个Docker,执行命令 docker image build -t hf_model_server . ,最新的构建会有问题,我把它独立成一个repo :https://github.com/mlnethub/hugging-face-http-server

运行容器

docker run -p 5000:5000 -d hf_model_server

image

访问http://localhost:5000

image

通过从0.14版本引入的 Nuget 包 Microsoft.SemanticKernel.Connectors.AI.HuggingFace:https://www.nuget.org/packages/Microsoft.SemanticKernel.Connectors.AI.HuggingFace/0.14.547.1-preview#versions-body-tab 

具体用法参考单元测试代码HuggingFaceEmbeddingGenerationTests

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Threading.Tasks;
using Microsoft.SemanticKernel.Connectors.AI.HuggingFace.TextEmbedding;
using Xunit;

namespace SemanticKernel.Connectors.UnitTests.HuggingFace.TextEmbedding;

/// <summary>
/// Unit tests for <see cref="HuggingFaceTextEmbeddingGeneration"/> class.
/// </summary>
public class HuggingFaceEmbeddingGenerationTests : IDisposable
{
     private const string Endpoint = "http://localhost:5000/embeddings";
     private const string Model = @"GanymedeNil/text2vec-large-chinese";

    private readonly HttpResponseMessage _response = new()
     {
         StatusCode = HttpStatusCode.OK,
     };

    /// <summary>
     /// Verifies that <see cref="HuggingFaceTextEmbeddingGeneration.GenerateEmbeddingsAsync"/>
     /// returns expected list of generated embeddings without errors.
     /// </summary>
     [Fact]
     public async Task ItReturnsEmbeddingsCorrectlyAsync()
     {
         // Arrange
         const int ExpectedEmbeddingCount = 1;
         const int ExpectedVectorCount = 8;
         List<string> data = new() { "test_string_1", "test_string_2", "test_string_3" };

        using var service = this.CreateService(HuggingFaceTestHelper.GetTestResponse("embeddings_test_response.json"));

        // Act
         var embeddings = await service.GenerateEmbeddingsAsync(data);

        // Assert
         Assert.NotNull(embeddings);
         Assert.Equal(ExpectedEmbeddingCount, embeddings.Count);
         Assert.Equal(ExpectedVectorCount, embeddings.First().Count);
     }

    /// <summary>
     /// Initializes <see cref="HuggingFaceTextEmbeddingGeneration"/> with mocked <see cref="HttpClientHandler"/>.
     /// </summary>
     /// <param name="testResponse">Test response for <see cref="HttpClientHandler"/> to return.</param>
     private HuggingFaceTextEmbeddingGeneration CreateService(string testResponse)
     {
         this._response.Content = new StringContent(testResponse);

        var httpClientHandler = HuggingFaceTestHelper.GetHttpClientHandlerMock(this._response);

        return new HuggingFaceTextEmbeddingGeneration(new Uri(Endpoint), Model, httpClientHandler);
     }

    public void Dispose()
     {
         this.Dispose(true);
         GC.SuppressFinalize(this);
     }

    protected virtual void Dispose(bool disposing)
     {
         if (disposing)
         {
             this._response.Dispose();
         }
     }
}

标签:embeddings,string,huggingface,System,OpenAI,Embedding,using,文本,response
From: https://www.cnblogs.com/shanyou/p/17418565.html

相关文章

  • OpenAI 官宣首个 ChatGPT iOS 应用
    最近,OpenAI宣布推出官方iOS应用,允许用户随时随地访问其高人气AI聊天机器人,此举也打破了近几个月内苹果AppStore上充斥似是而非的山寨服务的窘境。该应用程序是ChatGPT的首个官方移动应用程序。ChatGPT软件程序在去年推出后迅速获得了超过1亿用户,这也让技术行业火速......
  • 矩池云教程|体验 OpenAI 最近推出的 3D 生成模型 Shap-E!
    Shap-E是由OpenAI最近推出的3D生成模型,使用者可以通过简单的文字或图像进行三维模型的生成,OpenAI认为相比于点云的生成模型Point-E,Shap-E的收敛更快。本文将展示如何在矩池云上体验3D模型生成。Shap-E:https://github.com/openai/shap-e矩池云:https://matpool.com/1、安装......
  • BFT 最前线 | WPS AI接入四大办公软件;OpenAI准备开源新模型;OpenAI CEO首次出证国会;百
    原创|文BFT机器人AI视界TECHNOLOGYNEWS01WPSAI宣布接入文字、表格、PPT、PDF四大办公软件,AI能力大升级5月16日,金山办公旗下人工智能应用WPSAI,宣布四大办公组件全面升级:包括文字、表格、PPT和PDF,相比4月只有文字组件升级,这次升级涵盖了更广范围,并展示了WPSAI在阅读理解和人......
  • 使用 openai 翻译器
    1.下载openai翻译器 https://github.com/yetone/openai-translator  我在release界面下下载.msi安装包,下载好双击安装即可2.申请openaiAPIkey https://platform.openai.com/account/api-keys要获取openaiAPIkey相对容易。但是免费试用只有一个月,如何升级成付......
  • 调用openAI API出现429错误
    如果不是请求太频繁的话,请检查一下自己账号Usage的期限 openAI给每个账号18美刀、三个月的免费用量,所以过期了就会报429错误......
  • openai模型个性化训练Embedding和fine-tuning区别
    现在基于自然语言和文档进行对话的背后都是使用的基于嵌入的向量搜索。OpenAI在这方面做的很好,它的Cookbook(github.com/openai/openai-cookbook)上有很多案例,最近他们对文档做了一些更新。GPT擅长回答问题,但是只能回答它以前被训练过的问题,如果是没有训练过的数据,比如一些私有数据......
  • Personalized Top-N Sequential Recommendation via Convolutional Sequence Embeddin
    目录概符号说明Caser代码TangJ.andWangK.Personalizedtop-nsequentialrecommendationviaconvolutionalsequenceembedding.WSDM,2018.概序列推荐的经典之作,将卷积用在序列推荐之上.符号说明\(\mathcal{U}=\{u_1,u_2,\cdots,u_{|\mathcal{U}|}\}\),us......
  • OpenAI CLIP 关键点 - 连接图像和文字
    标签:#CLIP#Image2Text#Text2Image#OpenAI创建时间:2023-04-2100:17:52基本原理CLIP是一个图像分类模型。准备训练数据:准备大量的文本描述和图片的训练对,然后把进行对比训练。文本描述和图片的训练对的数据获取:从互联网上获得400Million的图像文本数据对。这个规模......
  • NLP 中 Embedding(词嵌入) 和 Tokenizer(分词器) 分别是什么?
    NLP中Embedding(词嵌入)和Tokenizer(分词器)分别是什么?Embedding(词嵌入)和Tokenizer(分词器)是在自然语言处理中常用的两种技术,用于将文本转换为计算机可以处理的数字表示。Tokenizer(分词器)是将文本转换为单词或子词序列的过程。在自然语言处理中,文本通常是由一系列单词或子词组......
  • 【OpenAI】私有框架代码生成实践
    作者:京东零售牛晓光根据现有调研和实践,由OpenAI提供的ChatGPT/GPT-4模型和CodeX模型能够很好的理解和生成业界大多数编程语言的逻辑和代码,其中尤其擅长Python、JavaScript、TypeScript、Ruby、Go、C#和C++等语言。然而在实际应用中,我们经常会在编码时使用到一些私有框架、包......