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

net,ai,强强联合,antsk,知识库,项目,rerank,模型,技术,突破,实战,应用 · 浏览次数 : 78

小编点评

## AntSK知识库框架和Rerank技术介绍 AntSK是一个基于.Net平台构建的开源离线AI知识库项目,它集成了先进的语义理解技术,并提供了一个扩展的AI功能平台,还支持Python混合编程,让.NET开发者也可以轻松利用Python丰富的AI生态库进行开发。 **Rerank模型的优势:** * 显著提升搜索结果的相关性和准确性。 * 通过对向量匹配后的初步结果进行重新排序,提高搜索效率。 **AntSK项目简介:** * 是一个开放源的AI知识库框架。 * 集成了先进的语义理解技术。 * 支持Python混合编程。 **Rerank模型的集成:** * 使用pythonnet运行Rerank模型,可确保.NET和Python之间的无缝集成。 * 建立一个pythonnet类,用于对Vector进行重排序。 * 通过简单的集成,我们就能为AntSK赋予ReRank的能力。 **效能测试:** * 经过初步的测试,引入Rerank技术后,AntSK在搜索结果的相关性和准确性上都得到了显著的提升。 * 提升了对混合AI系统的理解,为.NET平台上的AI应用开发提供了新的可能性和方向。 **结语:** AntSK是一个令人兴奋的开源项目,它为.NET和AI领域融合的趋势提供了新的机会。我们期待未来会有更多精彩的.NET结合AI的应用场景出现。

正文

        随着人工智能技术的飞速发展,.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模型的技术突破与实战应用相似的内容:

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

随着人工智能技术的飞速发展,.Net技术与AI的结合已经成为了一个新的技术热点。今天,我要和大家分享一个令人兴奋的开源项目——AntSK,这是一个基于.net平台构建的开源离线AI知识库项目。在这个项目中,我们最近加入了一项强大的Rerank(重排)模型,进一步增强了我们的AI知识库的查询能力。如果

Semantic Kernel .NET SDK 的 v1.0.0 Beta1 发布

介绍 Semantic Kernel (SK) 是一个开源的将大型语言模型(LLM)与流行的编程语言相结合的SDK,Microsoft将Semantic Kernel(简称SK)称为轻量级SDK,结合了OpenAI,Azure OpenAI和Hugging Face等AI LLM的集成。它使开发人员

对DenseTensor进行Transpose

`ML.NET` 是微软推出的为. NET 平台设计的深度学习库,通过这个东西(`ModelBuilder`)可以自己构建模型,并用于后来的推理与数据处理。虽然设计是很好的,但是由于现在的 AI 发展基本上都以 `python` 实现作为基础,未来这个东西的发展不好说,特别是模型构建部分。我个人认为

动手学Avalonia:基于SemanticKernel与硅基流动构建AI聊天与翻译工具

Avalonia是什么? Avalonia是一个跨平台的UI框架,专为.NET开发打造,提供灵活的样式系统,支持Windows、macOS、Linux、iOS、Android及WebAssembly等多种平台。它已成熟并适合生产环境,被Schneider Electric、Unity、JetBrai

.NET 6+Semantic Kernel快速接入OpenAI接口

Semantic Kernel 与 LangChain 类似,但 Semantic Kernel 是为应用开发开发人员创建的SDK项目,它支持.NET, Python 以及 Java,但是对.NET支持最成熟(微软自家孩子嘛),可以让你的应用很轻易的集成AI大语言模型。今天我们快速地使用Semant...

OpenAI的离线音频转文本模型 Whisper 的.NET封装项目

whisper介绍 Open AI在2022年9月21日开源了号称其英文语音辨识能力已达到人类水准的Whisper神经网络,且它亦支持其它98种语言的自动语音辨识。 Whisper系统所提供的自动语音辨识(Automatic Speech Recognition,ASR)模型是被训练来运行语音辨识与

实时的语音降噪神经网络算法

概要 现代基于深度学习的模型在语音增强任务方面取得了显著的性能改进。然而,最先进模型的参数数量往往太大,无法部署在现实世界应用的设备上。为此,我们提出了微小递归U-Net(TRU-Net),这是一种轻量级的在线推理模型,与当前最先进的模型的性能相匹配。TRU-Net的量化版本的大小为362千字节,足

C#.NET与JAVA互通之DES加密V2024

C#.NET与JAVA互通之DES加密V2024 配置视频: 环境: .NET Framework 4.6 控制台程序 JAVA这边:JDK8 (1.8) 控制台程序 注意点: 1.由于密钥、明文、密文的输入输出参数,都是byte数组(byte[]),所以:字符串转byte数组(byte[])环节,

C#.NET与JAVA互通之MD5哈希V2024

C#.NET与JAVA互通之MD5哈希V2024 配套视频: 要点: 1.计算MD5时,SDK自带的计算哈希(ComputeHash)方法,输入输出参数都是byte数组。就涉及到字符串转byte数组转换时,编码选择的问题。 2.输入参数,字符串转byte数组时,编码双方要统一,一般为:UTF-8。

C#.NET与JAVA互通之AES加密解密V2024

C#.NET与JAVA互通之AES加密解密V2024 视频: 注意点: 1. KEY 和 IV 从字符串转byte数组时,双方要约定好编码,一般是UTF8。 2.明文从字符串转byte数组时,双方要约定好编码,一般是UTF8,也可以GB2312,但不能Encoding.Default。 3.加密后的