OpenAI的文本嵌入衡量文本字符串的相关性。嵌入通常用于:
嵌入是浮点数的向量(列表)。两个向量之间的距离衡量它们的相关性。小距离表示高相关性,大距离表示低相关性。 但是OpenAI的文本嵌入接口对中文的支持并不好,社区经过实践,对中文支持比较好的模型是Hugging face上的 ganymedenil/text2vec-large-chinese。具体可以参见:http://huggingface.co/GanymedeNil/text2vec-large-chinese/discussions/3 ,作者采用的训练数据集是 中文STS-B数据集。它将句子映射到 768 维密集向量空间,可用于任务 如句子嵌入、文本匹配或语义搜索。
在Semantic Kernel 的Sample 下有一个 hugging-face-http-server:http://github.com/microsoft/semantic-kernel/tree/main/samples/apps/hugging-face-http-server ,通过这个示例项目,我们可以在本地运行Huggingface模型。
我们首先构建一个Docker,执行命令 docker image build -t hf_model_server . ,最新的构建会有问题,我把它独立成一个repo :http://github.com/mlnethub/hugging-face-http-server。
运行容器
docker run -p 5000:5000 -d hf_model_server
访问http://localhost:5000
通过从0.14版本引入的 Nuget 包 Microsoft.SemanticKernel.Connectors.AI.HuggingFace:http://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();
}
}
}
欢迎大家扫描下面二维码成为我的客户,扶你上云
从VisualStudio2013开始,当你编译面向.NETFramework4.5.1的应用程序时,绑定重定向可能会自动添加到应用配置文件,以便重写程序集统一。如果你的应用或其组件引用同一程序集的多个版本,就会添加绑定重定向,即使你在应用的配置文件中手动指定绑定重定向。自动绑定重定向功能会影响面向.NETFramework4.5.1的传统桌面应用和Web应用,但对于Web应用来说,行为略有不同。如果你有面向较早版本.NETFramework的现有应用,则可以启用自动绑定重定向,如果要保留手动编写的绑定重定向,你可以将此功能禁用。在桌面应用中禁用自动绑定重定向默认情况下,将为面向.NETFramework4.5.1及更高版本的传统桌面应用启用自动绑定重定向。编译应用并重写可能发生的程序集统一时,绑定重定向将添加到输出配置(app.config)文件中。不修改源app.config文件。你可以通过修改应用的项目文件来禁用此功能。禁用自动绑定重定向在VisualStudio中,在“解决方案资源管理器”中选择项目,然后从快捷菜单中选择“在文件资源管理器中打开文件夹”。在文件资源管理器中,找到
分割成一个包含两个元素列表的列对于一个已知分隔符的简单分割(例如,用破折号分割或用空格分割).str.split()方法就足够了。它在字符串的列(系列)上运行,并返回列表(系列)。importpandasaspd df=pd.DataFrame({'AB':['A1-B1','A2-B2']}) df AB 0A1-B1 1A2-B2 df['AB_split']=df['AB'].str.split('-') df ABAB_split 0A1-B1[A1,B1] 1A2-B2[A2,B2]复制分割成两列,每列包含列表的相应元素下面来看下如何从:分割成一个包含两个元素列表的列至分割成两列,每列包含列表的相应元素。df['AB'].str[0] 0A 1A Name:AB,dtype:object df['AB'].str[1] 01 12 Name:AB,dtype:object复制因此可以得到df['AB
lightGBM可以用来解决大多数表格数据问题的算法。有很多很棒的功能,并且在kaggle这种该数据比赛中会经常使用。 但我一直对了解哪些参数对性能的影响最大以及我应该如何调优lightGBM参数以最大限度地利用它很感兴趣。我想我应该做一些研究,了解更多关于lightGBM的参数…并分享我的旅程。我希望读完这篇文章后,你能回答以下问题:LightGBM中实现了哪些梯度增强方法,它们有什么区别?一般来说,哪些参数是重要的?哪些正则化参数需要调整?如何调整lightGBM参数在python?梯度提升的方法使用LightGBM,你可以运行不同类型的渐变增强提升方法。你有:GBDT、DART和GOSS,这些可以通过“boosting”参数指定。在下一节中,我将对这些方法进行解释和比较。梯度提升决策树(GBDT)该方法是本文首先提出的传统梯度提升决策树,也是XGBoost和pGBRT等优秀库背后的算法。由于其精度高、效率高、稳定性好,目前已得到广泛的应用。你可能知道gbdt是一个决策树的集合模型但是它到底是什么意思呢?让我来告诉你要点。它基于三个重要原则:弱学习者(决策树)梯度优化提升技术所以在
一个接口,可以使用不同的硬件。#include<iostream> usingnamespacestd; classCpu{ public: virtualvoidcalculate()=0; }; classVideoCard{ public: virtualvoiddisplay()=0; }; classMemory{ public: virtualvoidstorage()=0; }; classComputer{ public: Computer(Cpu*cpu,VideoCard*videoCard,Memory*memory){ this->cpu=cpu; this->videoCard=videoCard; this->memory=memory; } voidwork(){ cpu->calculate(); videoCard->display(); memory->storage(); } ~Computer(){ if(cpu!=NULL){ deletecpu; cpu=NULL; } if(videoCar
本文来自FourthWorkshoponComputerVisionforAR/VR的一篇演讲,演讲者是微软科学合作伙伴总监JamieShotton,他主要从人类理解的角度,介绍了微软的混合现实设备HoloLens中使用到的相关技术。Jamie首先介绍了微软开发的混合现实设备HoloLens,其第二代产品HoloLens2包含了头部、手部、眼部追踪相机,激光扫描显示器,嵌入式计算处理器等诸多硬件,拥有更强的沉浸感、更舒适的佩戴和上手体验,已经在一些医院里得到了应用。HoloLens的功能与人类理解与表征(humanunderstandingandrepresentation)息息相关,Jamie从三个主题对其进行了探究,分别是本能互动(instinctualinteraction)、合成数据(syntheticdata)以及神经渲染(neuralrendering)。为了实现互动,HoloLens中集成了手部关节追踪技术,该技术可以准确地追踪到穿戴者手部关节的运动,从而实现多样化且精准的交互。这项技术面临着许多挑战,手部会呈现多种多样的姿态、自遮挡、全局的3D旋转以及系统的帧率和延时。
近日,亚信安全截获多个垃圾邮件的攻击活动,这些攻击活动使用的邮件附件通常是伪装成系统镜像ISO文件(亚信安全检测为Mal_GENISO)以及RAR和LZH压缩文档,其中包括使用AutoIt编译和.NET编译的AgentTesla间谍木马(也被称为Negasteal),亚信安全命名为TrojanSpy.MSIL.NEGASTEAL.KBE。在这些攻击活动中,垃圾邮件内容通常是伪造成装运建议、财务报表、信息咨询和预付款通知单等,利用社会工程学诱骗用户点击邮件附件。特别需要注意的是,有些攻击活动中使用镜像ISO文件来逃避检测,因为ISO镜像文件可用于绕过垃圾邮件过滤器,并且文件格式也更容易安装在最新的Windows版本上。AutoIt是Windows图形用户界面的基本任务自动化的脚本语言,目前已经被滥用作为混淆的恶意软件二进制文件。对于AgentTesla间谍木马,AutoIt混淆技术分为两层:实际的恶意软件二进制文件被混淆为AutoIt脚本(.au3),然后使用Autout编译器(如Aut2Exe)将脚本编译为可执行文件。而通过使用.NET的混淆技术至少需要3层解密和去混淆才可以看到实际的
自2013年起,随着Docker的正式面世,容器技术迅速成为了基础技术领域中的热门。而在近两三年中,随着容器编排领域的混战结束,Kubernetes已经成为了容器编排领域事实上的标准。有一些人存在误解,认为Kubernetes的出现取代了Docker。但事实上,Docker与Kubernetes是相辅相成的。Kubernetes使用Docker作为容器运行时,用来启动应用;当Docker容器规模变大时,自然是需要有容器编排工具进行管理的。引用最近一次的网络研讨会后的文章内容:Infact,KubernetesisbetterwithDocker.AndDockerisbetterwithKubernetes.无论在使用Docker或是Kubernetes亦或者是使用基于这些技术的其他衍生技术时,都有可能会遇到一些意料之外的情况,当问题发生时,我们总是希望可以快速定位问题,并且从根本上解决问题。一般情况下,上层的问题比较容易解决,但如果问题发生在运行时/Docker或容器上时,如果没有系统性的知识,很难从根本上解决问题;当然,有些时候通过搜索引擎可以帮我们找到一些问题的解决办法,但如果不
首先先了解下CI,CD(持续交付)与CD(持续部署)的三者的区别如下图: 看完了这三者的区别,目前4399AT是达到了CI和CD(持续交付)阶段,接下来我们说下4399AT的CI与CD; 以下均以安卓项目APP为基础来进行讲解: 软件:jenkins+gradle+4399AT+sonar+gitlab+tomcat+nginx语言:json,python,javascript jenkins:需要下载插件邮件,gitlab,gradle,sonar等,jenkins是大脑,需要指引每一个操作 gradle:用于编译,可用电脑配置以及项目配置得gradle 4399AT:安卓UI自动化测试工具,用于自动化测试和报告产生 sonar:用于代码检查 gitlab:用于代码的推送以及通过jenkins的webhook构建机制触发自动构建 tomcat和nginx:用于服务器代理地址,本路是用tomcat就可,但只能局域网,后面大佬用反代理配置的域名,这样就不会因IP段不一样而无法访问的问题 json:用于测试用例脚本的编写 python:用于整体自动化测试执行,测试报告迁移,构建报告的判断及
Vue推荐在绝大多数情况下使用template来创建你的Html,然而在一些场景中,你真的需要JavaScript的完全编程的能力,这就是、render函数,它比template更接近编译器 使用template例子<bodyclass=""> <divid="example"> <my-componentv-bind:level="1">hello</my-component> </div> <scriptsrc="js/vue.js"></script> <scripttype="text/x-template"id="anchored-heading-template"> <h1v-if="level===1"> <slot></slot> </h1> <h2v-else-if="le
《Kotlin极简教程》正式上架:点击这里>去京东商城购买阅读 点击这里>去天猫商城购买阅读 非常感谢您亲爱的读者,大家请多支持!!!有任何问题,欢迎随时与我交流~8.2在Kotlin中使用函数式编程好了亲,前文中我们在函数式编程的世界里遨游了一番,现在我们把思绪收回来,放到在Kotlin中的函数式编程中来。严格的面向对象的观点,使得很多问题的解决方案变得较为笨拙。为了将一行有用的代码包装到Runnable或者Callable这两个Java中最流行的函数式示例中,我们不得不去写五六行模板范例代码。为了让事情简单化(在Java8中,增加Lambda表达式的支持),我们在Kotlin中使用普通的函数来替代函数式接口。事实上,函数式编程中的函数,比C语言中的函数或者Java中的方法都要强大的多。在Kotlin中,支持函数作为一等公民。它支持高阶函数、Lambda表达式等。我们不仅可以把函数当做普通变量一样传递、返回,还可以把它分配给变量、放进数据结构或者进行一般性的操作。它们可以是未经命名的,也就是匿名函数。我们也可以直接把一段代码丢到{}中,这就是闭包。在前面的章节中,其实我们
前不久微信公众平台重新调整了认证体系,经过认证之后订阅号也可以获得“自定义菜单”接口,而服务号则可以获得所有的高级接口权限(不包括支付接口)。这对微信公众账号的运营者来说无疑是个大好消息,但随着更多功能接口的开放,开发运营公众账号的难度也越来越大。在这样的背景下,催生了一大批第三方微信后台开发商,如我们之前报道过的微库、微信加等。 目前市场上充斥着大量第三方微信公众号后台开发商,毫不夸张的说,开发微信公众号都已经杀成了红海。另外腾讯还推出过官方开发工具“腾讯风铃”,让不少第三方开发商捏了把冷汗,以为腾讯会对第三方公众账号开发商下“毒手”。 直到最近,腾讯官方对这些第三方的微信公众号后台开发商态度才稍微明朗了些,表示将扶持第三方的开发商,开始低调测试第三方开发商聚合平台“微信云”,尝试“收编”这些第三方的公众号后台开发商。 据记者了解,“微信云”是由腾讯云团队主导在做,而非微信团队开发的产品;“微信云”并不提供第三方的微信公众号后台开发工具,而是一个聚合平台,将部分优质的第三方开发商聚集在一起,目前微社区、微信生意宝、微信卡卡、微俱聚等几家服务商都已接入;“微信云”向第三方服务商开放入
[LOJ2083][UOJ219][BZOJ4650][NOI2016]优秀的拆分 题意 给定一个字符串\(S\),求有多少种将\(S\)的子串拆分为形如AABB的拆分方案 \(|S|\le30000\)(\(95\%\)数据\(|S|\le2000\)) 题解 考场上遇见这题直接打95分暴力哈希跑路就完事了吧 \(O(n^2)\)暴力就直接枚举所有子串看它是不是AA型的,在左右端点处分别标记一下,然后枚举断点把两边的方案数乘起来就完事了. 考虑优化这个暴力.我们枚举这个AA串中A的长度\(l\),然后每隔\(l\)取一个关键点,那么每个AA串必然会覆盖两个关键点.对于每对相邻的关键点\(a\)和\(b\),我们计算\(p=\operatorname{LCP}(S[a:],S[b:])\)以及\(s=\operatorname{LCS}(S[:a-1],S[:b-1])\).那么只要\(p+s\gel\)就会有AA串出现.画画图可以发现\([a-s,a-(l-p)]\)都可以是AA串的左端点.直接在差分数组上修改左右端点就可以了.注意只能计算同时包含这两个相邻的关键点的AA串,所以应该
A.Right-LeftCipher timelimitpertest 1second memorylimitpertest 256megabytes input standardinput output standardoutput Polycarplovesciphers.HehasinventedhisownciphercalledRight-Left. Right-Leftcipherisusedforstrings.Toencryptthestring s=s1s2…sns=s1s2…sn Polycarpusesthefollowingalgorithm: hewritesdown s1s1, heappendsthecurrentwordwith s2s2 (i.e.writesdown s2s2 totherightofthecurrentresult), heprependsthecurrentwordwith s3s3 (i.e.writesdown s
1以太网概述 以太网(Ethernet)指的是由Xerox公司创建并由Xerox、Intel和DEC公司联合开发的基带局域网规范,是当今现有局域网采用的最通用的通信协议标准。 以太网络使用CSMA/CD(载波监听多路访问及冲突检测)技术,并以10M/S的速率运行在多种类型的电缆上。以太网与IEEE802.3系列标准相类似。 包括标准的以太网(10Mbit/s)、快速以太网(100Mbit/s)和10G(10Gbit/s)以太网。它们都符合IEEE802.3。 由上到下: 出口层(OR):广域网接入出口策略带宽控制 核心层(CO):高速转发服务器接入路由选择 汇聚层(GS):流量汇聚链路冗余设备冗余路由选择 接入层(AS):用户接入接入安全访问控制 MAC地址 MAC地址有48位,通常被表示为点分十六进制数。 MAC地址全球唯一,由IEEE对这些地址进行管理和分配。 每个地址由两部分组成,分别是供应商代码和序列号。其中前24位二进制代表该供应商代码。剩下的24位由厂商自己分配。 2交换机工作原理 二层交换机的主要功能 Addresslearni
“System.InvalidOperationException”类型的未经处理的异常在System.Windows.Forms.dll中发生 其他信息:线程间操作无效:从不是创建控件“txtPortName02”的线程访问它。 解决方法: 1 构造方法中添加 CheckForIllegalCrossThreadCalls=false; 2 方法二 invoke txtPortName02.Invoke(newAction<string>((str)=>{label1.Text=str;}),r.Next(0,10).ToString());
一、重置设置:(回到第一次安装CAD时候的默认设置) 电脑左下角开始按钮------找到AutoCAD文件夹----将设置重置为默认值----重置自定义 二、基础设置: 菜单栏的显示:点击三角按钮---勾选显示菜单栏 三、选项设置:菜单栏---工具---选项/快捷键:OP---空格---弹出“选项”对话框 文件:自动保存位置---双击路径---改变位置(找回自动保存文件时,要手动把文件后缀改成:.dwg) 显示: 颜色:二维模型空间---统一背景---黑色 图纸/布局---统一背景---黑色 块编辑器---统一背景---黑色 十字光标:大小:100 布局元素:只勾选:显示布局和模型选项卡,其他的都不勾选 打开和保存: 注释:CAD高版本可以打开低版本文件,但低版本打不开高版本文件 另存为:2004/2007 都可以,把文件保存为最低版本,避免自己打不开的情况发生 自动保存时间:10分钟(根据需要设置) 打印和发布: 用作默认输出设备:DWGToPDF.pc3 系统:帮
var a:array[1..200]oflongint; b:array[1..200]oflongint; len1,len2:longint; n:longint; procedureinti; begin readln(n); end; proceduredivi; vari:longint; begin len1:=1; whilen>len1do begin a[len1]:=len1+1; inc(len1); n:=n-len1; end; dec(len1); ifn>0then begin i:=len1; whilen>0do begin inc(a[i]); dec(n); dec(i); ifi=0theni:=len1; end; end; end; proceduremul; vari,j:longint; begin fillchar(b,sizeof(b),0); len2:=1;b[1]:=1; fori:=1tolen1do begin forj:=1tolen2dob[j]:=b[j]*a[i]; forj:=1tolen
在Python3环境下,根据实际使用Pandas的一些经验,简单总结了一下Pandas的使用要点。 Pandas有三种结构, 都可以指定索引,默认情况下,索引值从0。三种结构分别为: Serie:一维同类型结构 DataFrame:二维结构,每列的类型相同 Panel:三维结构 1.Series初始化 data=[1,2,3,4]a=Series(data)b=Series(data,index=['a','b','c','d'])print(a,b) 2. DataFrame初始化,有横轴index和纵轴column.可以传入数组或者字典构建。 dates=pd.date_range('20180101',periods=6)a=DataFrame(np.random.randn(6,4),index=dates,columns=['A','B','C','D'])b=DataFrame({'A':1,'B':pd.Timestamp('20180101'),'C':Series(2,index=list(range(4))),'D':pd.Categ
Aboutme 一只历史上最弱的hnoier... 身在hn弱校,除了在四大名校夹缝中生存,还要受到同校Julao的鄙视及冷嘲热讽... 很乐意与大家交♂py... 现状: 省选不算挂惨还在苟且偷生的NOID类选手... 省选不算挂惨但NOI挂惨已经滚回去高考啦... 省选不算挂惨但NOI挂惨高考不是太差(至少有学上的)正在康复的重症病患者... 一名huster,acmer... 已经彻底退役辣 一些游记 我不怎么写游记...也就省选那几天挺感慨写了一篇,之后就一发不可收拾 AFO?(HNOI2018游记&OI回忆录) CTSC2018游记 APIO2018游记 再会,OI(NOI2018退役记) 一些总结 因为自己太菜了...如果不及时总结一些学过的东西就会忘掉... 本来是留为草稿自己用的,后来认为写的还可以,就发出来...希望能对大家起到作用... 本来都是置顶的,因为太多了就单独开篇博客作为索引... 数论和组合计数类数学相关(定理&证明&板子) 多项式类数学相关(定理&证明&板子) 其他杂项数学相关(定理&证明&am
从后向前建主席树,以位置为下标建树,然后查询区间出现次数的第k/2大即可。 复杂度O(nlogn) 1#include<bits/stdc++.h> 2usingnamespacestd; 3constintN=2e5+10; 4intnum,ans[N],T,pre[N],rt[N],a[N]; 5structnode 6{ 7ints,l,r; 8}t[N*36]; 9voidinit() 10{ 11memset(rt,0,sizeof(rt));num=0; 12memset(pre,0,sizeof(pre)); 13} 14voidchange(int&x,inty,intl,intr,intp,intw) 15{ 16x=++num;t[x]=t[y]; 17if(l==r){t[x].s+=w;return;} 18intm=l+r>>1; 19if(m<p)change(t[x].r,t[y].r,m+1,r,p,w); 20elsechange(t[x].l,t[y].l,l,m,p,w); 21t[x].s=t[t[x].l
androidTextView是最常用的控件 可以用作普通的显示,还可以用作有显示文字的按钮,用作有显示图片的图文组合 1、图文组合 xml中: <TextView android:id="@+id/txt_back" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_centerVertical="true" android:paddingLeft="@dimen/margin_padding_ten" android:paddingRight="@dimen/margin_padding_ten" android