随着人工智能技术的飞速发展,.Net技术与AI的结合已经成为了一个新的技术热点。今天,我要和大家分享一个令人兴奋的开源项目——AntSK,这是一个基于.net平台构建的开源离线AI知识库项目。在这个项目中,我们最近加入了一项强大的Rerank(重排)模型,进一步增强了我们的AI知识库的查询能力。如果你关心.NET和AI的融合应用,那么请继续阅读,我保证这会是一次充满技术洞见的探索旅程。

引言

在现代搜索引擎技术中,如何从庞大的数据中快速、准确地找到用户需要的信息,这一点至关重要。虽然向量匹配技术已经可以实现语义相关度的匹配,它是根据向量之间的距离来判断文档与查询之间的相关性,但这往往不能满足我们日益增长的精准匹配需求。文档质量的参差不齐,以及用户查询意图的多样性,让向量匹配技术看起来有些力不从心。

AntSK知识库项目正是针对这些挑战而诞生,目标是构建一个强大、灵活且易于扩展的AI知识库框架。引入Rerank技术后,AntSK可以对向量匹配后的初步结果进行进一步的重排序,从而显著提升搜索结果的相关性和质量。

AntSK项目简介

AntSK是一个开源且强大的AI知识库框架,它集成了先进的语义理解技术。通过结合

semantic kernel和kernel memory,它提供了一个扩展的AI功能平台,还支持Python混合编程,让.NET开发者也可以轻松利用Python丰富的AI生态库进行开发。

项目地址参见:

https://github.com/AIDotNet/AntSK

Rerank模型的介绍及应用

要在AntSK中加入Rerank模型,我们可以使用一个名为FlagEmbedding的开源项目作为参考。FlagEmbedding提供了一个用于文档重排序的优秀实践,它可以通过更复杂的模型和更多因素,例如文档的语义深度、用户查询意图等,来筛选出更加配准的结果。

FlagEmbedding项目地址:

https://github.com/FlagOpen/FlagEmbedding/tree/master/FlagEmbedding/llm_reranker#model-list

  

在AntSK中,我们需要通过pythonnet来运行Rerank模型,这样可确保.NET和Python之间的无缝集成。由于网络原因,一些国内用户在下载模型时可能会遇到困难,因此我们对下载部分进行了修改,使其支持从modelscope进行下载。

接下来,我们来看看如何在AntSK中实现ReRank模型的集成。首先建立一个pythonnet类,以下是一个简化版的代码实现:

public static class BegRerankConfig
{
public static dynamic model { get; set; } static object lockobj = new object(); /// <summary>
/// 模型写死
/// </summary>
public static dynamic LoadModel(string pythondllPath, string modelName)
{
lock (lockobj)
{
if (model == null)
{
if (string.IsNullOrEmpty(Runtime.PythonDLL))
{
Runtime.PythonDLL = pythondllPath;
}
PythonEngine.Initialize();
try
{
using (GIL())// 初始化Python环境的Global Interpreter Lock)
{
dynamic modelscope = Py.Import("modelscope");
dynamic flagEmbedding = Py.Import("FlagEmbedding"); dynamic model_dir = modelscope.snapshot_download(modelName, revision: "master");
dynamic flagReranker = flagEmbedding.FlagReranker(model_dir, use_fp16: true);
model = flagReranker;
return model;
}
}
catch (Exception ex)
{
throw ex;
}
}
else
{
return model;
}
}
} public static double Rerank(List<string> list)
{
using (GIL())
{
try
{
PyList pyList = new PyList();
foreach (string item in list)
{
pyList.Append(item.ToPython()); // 将C# string转换为Python对象并添加到PyList中
}
PyObject result = model.compute_score(pyList, normalize: true);
return result.As<double>();
}
catch (Exception ex)
{
throw ex;
}
}
}
}

  

代码详见AntSK项目。通过简单的集成,我们就能为AntSK赋予ReRank的能力。另外,我们将初步查找的top 5结果扩展为top 20,甚至更多,然后通过ReRank模型对这些结果进一步筛选和排序,最后只抽取重排后的top 5。这样的操作流程大大提升了结果的准确性。

为什么需要向量匹配后再Rerank?

这是因为Rerank依赖的是一对一的精确匹配模型,在处理海量文档时效率较低。因此,将向量匹配作为第一轮粗筛选择,然后让Rerank技术进行第二轮精细的筛选排序,就显得格外高效且合理。

效能测试

经过初步的测试,引入Rerank技术后,AntSK在搜索结果的相关性和准确性上都得到了显著的提升。这不仅加深了我们对混合AI系统的认识,也为.NET平台上的AI应用开发提供了新的可能性和方向。

结语

通过AntSK这一案例,我们可以明显看到.NET和AI领域融合的趋势。随着技术的不断进步,我们预计会有越来越多精彩的.NET结合AI的应用场景出现。现在,你可以通过访问Github上的AntSK项目,深入了解这一先进技术,并将其应用于你自己的工作当中。

本文仅是一个起点,探讨AntSK知识库框架以及Rerank在内的相关深度技术。我将继续关注这一个领域的进展,并与大家分享更多精彩内容。感谢阅读,让我们一起期待.NET/AI的融合未来!

另外也欢迎大家加入我们的社区交流群,关注公众号《许泽宇的技术分享》发送进群!
这是一个非常和谐的社区,大家在里面讨论AI技术,非常融洽。

.Net与AI的强强联合:AntSK知识库项目中Rerank模型的技术突破与实战应用的更多相关文章

  1. 我在项目中运用 IOC(依赖注入)--实战篇

    上一篇<我在项目中运用 IOC(依赖注入)--入门篇>只是简单的使用 IOC.实际项目使用 IOC 的情景复杂多了,比如说,构造函数有多个参数,有多个类继承同一个接口... Unity都有 ...

  2. 企业应用开发模式 ERP项目中应用到的技术和工具

    一.基础技术选型 C# .NET 3.5/4.0  这两个版本的.NET已经相当方便(Linq, Lambda,Parallel),语法简洁,配合WCF和WF两项技术,可以满足快速开发,维护方便的目标 ...

  3. 一个JavaWeb项目中使用的部分技术

    -- 2015年8月8日 1. Web框架: Spring+ SpringMVC + MyBatis Spring: 作为容器.工厂,用于解耦以及管理对象生命周期. 整合各类框架和依赖. MVC  : ...

  4. RabbitMQ之项目中实战

    说了那么多,还不是为了在项目中进行实战吗,在实践中检验真理,不然我学他干嘛,不能解决项目中的实际问题的技术都是耍流氓... 一.后台管理系统发送消息 瞎咧咧:后台管理系统发送消息到交换机中,然后通知其 ...

  5. 【技术博客】JWT的认证机制Django项目中应用

    开发组在开发过程中,都不可避免地遇到了一些困难或问题,但都最终想出办法克服了.我们认为这样的经验是有必要记录下来的,因此就有了[技术博客]. JWT的认证机制Django项目中应用 这篇技术博客基于软 ...

  6. TFS在项目中DevOps落地进程(下)

    紧接上篇 TFS在项目中Devops落地进程(上) 再接着说TFS相关之前先插入一个番外篇,虽然跟TFS关系不大但跟DevOps关系很大,觉得有必要在此乱入一下. 番外篇--监控之Applicatio ...

  7. 2019年最值得关注的AI领域技术突破及未来展望

    选自venturebeat 翻译:魔王.一鸣 前言 AI 领域最杰出的头脑如何总结 2019 年技术进展,又如何预测 2020 年发展趋势呢?本文介绍了 Soumith Chintala.Celest ...

  8. VS项目中使用Nuget还原包后编译生产还一直报错?

    Nuget官网下载Nuget项目包的命令地址:https://www.nuget.org/packages 今天就遇到一个比较奇葩的问题,折腾了很久终于搞定了: 问题是这样的:我的解决方案原本是好好的 ...

  9. ABP项目中使用Swagger生成动态WebAPI

    本文是根据角落的白板报的<使用ABP实现SwaggerUI,生成动态webapi>一文的学习总结,感谢原文作者角落的白板报. 1 安装Swashbuckle.core 1.1 选择WebA ...

  10. iOS 之项目中遇到的问题总结

    昨天去一家公司面试,面试官问了我在项目开发中遇到过哪些问题,是什么引起的,怎样解决的? 当时由于有点小紧张只说出了一两点,现在就来好好总结一下. 问题: 1.两表联动 所谓的两表联动就是有左右两个表格 ...

随机推荐

  1. day03-1-查看账单&结账功能

    满汉楼03 4.功能实现05 4.8查看账单功能 按照之间搭建起来的框架,在BillService编写方法 4.8.1代码实现 1.修改Bill类 重写Bill类中的toString方法 @Overr ...

  2. stream使用汇总

    整理了下java使用stream处理list的几个便捷的方法 准备数据 List<KnowledgeInfoTable> knowledgeInfoTables = knowledgeIn ...

  3. 快速上手系列:JavaScript

    第一章 基础语法 1 javascript 的简介 * 是基于对象和事件驱动的语言,应用于客户端. - 基于对象: ** 提供好了很多对象,可以直接拿过来使用 - 事件驱动: ** html 做网站静 ...

  4. C# 消息发送

    界面 frmMain using System; using System.Collections.Generic; using System.ComponentModel; using System ...

  5. Docker部署之使用docker-compose部署(全新的干净的服务器,从0开始搭建)

    部署环境准备 安装yum # 安装yum工具 yum install -y yum-utils device-mapper-persistent-data lvm2 --skip-broken 安装d ...

  6. modelsim常用操作

    modelsim常用操作 1.库的定义(library) modelsim是比较常用的仿真软件,主要用于数字电路的仿真,可以实现高效的前后仿真.仿真,就需要几个关键的元素:激励.设计模块.设计模块的约 ...

  7. read IEEE Standard for verilog(1)

    IEEE Standard for Verilog Hardware Description Language 英语说明阅读,首先看导读.目录.摘要等内容. 摘要: 1 Abstract: The V ...

  8. KingbaseES V8R6集群运维案例---数据块故障自动修复(auto_bmr)

    案例说明: 在Oracle11.2版本之后,DataGuard 若搭建实时应用日志的物理备库,那么在主库数据文件少 量坏块的情况下,可以利用ABCR技术快速修复坏块. Starting in Orac ...

  9. 【Learning eBPF-2】eBPF 的“Hello world”

    前一章讲了 eBPF 为什么这么吊,不理解没关系,现在开始,我们通过一个 "Hello world" 例子,来真正入门一下. BCC Python 框架是上手 eBPF 的最友好方 ...

  10. ssh登录太慢了,每次都要20s

    背景 大家工作时,少不了ssh登录各个服务器,我这边手里也有很多服务器,有一些登录很快就进去了,有些要卡半天才能进去.之前以为是公司网络问题,每次也就忍了,这次突然不想忍了,决定定位一下. 我这边的服 ...