中文环境下使用 huggingface 模型替换 OpenAI的Embedding 接口
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


通过从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();
}
}
}
中文环境下使用 huggingface 模型替换 OpenAI的Embedding 接口的更多相关文章
- 安装debian 9.1后,中文环境下将home目录下文件夹改为对应的英文
安装了debian 9.1后,中文环境下home目录下文件夹显示的是中文,相当不方便cd命令,改为对应的英文吧,需要用到的软件xdg-user-dirs-gtk #安装需要的软件 sudo apt i ...
- 解决Linux中文环境下astro和Calibre不能输入的问题
例如我的opensuse在中文环境下不能在astro中输入指令,Calibre的grid spacing设置框不能输入,经过摸索,找到以下两种解决方法: 1. 将系统环境变成英文,在.bashr ...
- 中文环境下PostgreSQL的使用
虽然官方文档有提到编码的问题,但是对于中文讲的比较简单,给中文的PostgreSQL用户带来很多困扰,本文简单简述一下中文环境下PostgreSQL如何正确设置编码. 一.服务器端的编码设置 Post ...
- windows和linux环境下keras的模型框架可视化
1.简介 keras提供了模型可视化模块,下面讲解下安装教程和简易教程. 2.安装教程 2.1windows环境下的安装 2.1.1安装指定模块 pip install pydot-ng pip in ...
- Linux 环境下 网络IO模型
本文讨论的背景是Linux环境下的network IO. IO发生时涉及的对象和步骤: 对于一个network IO (这里我们以read举例),它会涉及到两个系统对象,一个是调用这个IO的proce ...
- 解决中文环境下zabbix监控图形注释乱码
zabbix监控的图形界面能够更直观的查看监控状态,当我们把zabbix的语言切换为中文的时候,会发现监控图形中一些中文参数会乱码,例如下面的效果 但是图形界面在原生的英文环境下完全没有乱码问题.为了 ...
- Win 10环境下6sV2.1模型编译心得
最新版本6sV2.1模型是通过FORTRAN95编写的,2017年11月代码编写完成,2018年11月发布在模型官网上.通常我们在使用过程中都是调用模型的.exe可执行文件,而下载下来的是FORTRA ...
- WP8_(windows phone环境下)上传文件从C#到php接口
在windows phone环境下,将手机上的图片上传到服务端(php环境): 注意事项:在上传的地方,头文件中name,例如name= img,则在php服务端处理时 ,需要约定好 存取一致 php ...
- Oracle在中文环境下出现乱码解决办法
zysong.ttf下载是一款oracle字体乱码解决工具,实质于缺乏中文字体包! 01情况的例子 02情况的例子 01.在开始安装的时候出现乱码 下载zysong.ttf,unzip 解压 一 ...
- Object_C 集成环信时,中文环境下不显示中文
因为本app只有中文,没有做中英文判断,但是环信是默认英文环境的,所以,此时,需要在info.plist 文件中修改它的语言环境.如下
随机推荐
- JavaWeb学习笔记第三弹
一.数据库设计 1.软件研发步骤 2.数据库设计概念 建立数据库中的表结构以及表与表之间的关联关系的过程 3.数据库设计的步骤 表关系:一对一.一对多(多对一).多对多 表关系之一对多 表关系之多对多 ...
- 性能的极致,Rust的加持,Zed-Dev编辑器快速搭建Python3.10开发环境
快就一个字,甚至比以快著称于世的Sublime 4编辑器都快,这就是Zed.dev编辑器.其底层由 Rust 编写,比基于Electron技术微软开源的编辑器VSCode快一倍有余,性能上无出其右,同 ...
- gralde-plugin->docker-compose的使用
在java web项目中,本地开发经常会需要在本地使用docker启动数据库等之类的服务.gradle提供了一个插件,允许通过gradle task启动docker的容器.在这里我们介绍的一个gral ...
- 机器学习基础05DAY
分类算法之k-近邻 k-近邻算法采用测量不同特征值之间的距离来进行分类 优点:精度高.对异常值不敏感.无数据输入假定 缺点:计算复杂度高.空间复杂度高 使用数据范围:数值型和标称型 一个例子弄懂k-近 ...
- jQuery绑定方法
流程/*** * 1.文件命名 * jquery.banner.1.0.0.js * jquery.banner.js * 2.添加匿名函数 * (function(){})() * 3.给插件前后添 ...
- 机器学习08DAY
线性回归 波士顿房价预测案例 步骤 导入数据 数据分割 数据标准化 正规方程预测 梯度下降预测 # 导入模块 import pandas as pd # 导入数据 from sklearn.model ...
- 如何申请 Azure OpenAI
一.前言 众所周知 OpenAI ChatGPT 是不对中国开放的,包括香港.就最近一个月的情况来看,陆续有 API 调用被限制.大规模账号封禁.关闭注册.无法直接使用银联支付(国内信用卡)等等,使用 ...
- 使用 screw(螺丝钉) 快速生成数据库文档
一.框架介绍 回想起那个去年的7月份,第一份实习,组长让我写一份金蝶云的SQL文档,当时一看2000多张表,当时就猛吸一根烟,然后去gitee看看有没有好的框架快速生成 SQL 文档 ,由此找到了 s ...
- Kubernetes 各个组件 启动参数介绍
kube-controller-manager Kubernetes 控制器管理器是一个守护进程,内嵌随 Kubernetes 一起发布的核心控制回路.在机器人和自动化的应用中,控制回路是一个永不休止 ...
- python内置模块之ctype
ctypes --- Python 的外部函数库¶ ctypes 是 Python 的外部函数库.它提供了与 C 兼容的数据类型,并允许调用 DLL 或共享库中的函数.可使用该模块以纯 Python ...