隨著人工智慧技術的飛速發展,.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技術,非常融洽。