」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > d[IA]gnosis:使用嵌入式 Python 和 LLM 模型進行向量化診斷

d[IA]gnosis:使用嵌入式 Python 和 LLM 模型進行向量化診斷

發佈於2024-09-02
瀏覽:575

在上一篇文章中,我們介紹了為支援 ICD-10 中的診斷編碼而開發的診斷應用程式。在本文中,我們將了解 InterSystems IRIS for Health 如何為我們提供必要的工具,以便使用預先訓練的語言模型、其存儲以及隨後搜索所有這些生成的向量從 ICD-10 代碼列表生成向量.

d[IA]gnosis: Vectorizing Diagnostics with Embedded Python and LLM Models

介紹

隨著人工智慧模型的發展而出現的主要特徵之一就是我們所知道的 RAG(檢索增強生成),它使我們能夠透過將上下文融入模型中來改進 LLM 模型的結果。嗯,在我們的範例中,上下文由 ICD-10 診斷集給出,要使用它們,我們必須先對它們進行矢量化。

如何向量化我們的診斷清單?

SentenceTransformers 與嵌入式 Python

為了產生向量,我們使用了 Python 庫 SentenceTransformers,它極大地促進了來自預訓練模型的自由文本的向量化。來自他們自己的網站:

Sentence Transformers(又稱 SBERT)是用於存取、使用和訓練最先進的文字和圖像嵌入模型的首選 Python 模組。它可用於使用 Sentence Transformer 模型計算嵌入(快速入門),或使用交叉編碼器模型計算相似度分數(快速入門)。這解鎖了廣泛的應用程序,包括語義搜尋、語義文本相似性和釋義挖掘。

在 SentenceTransformers 社群開發的所有模型中,我們發現了 BioLORD-2023-M,這是一個可產生 786 維向量的預訓練模型。

該模型使用 BioLORD 進行訓練,BioLORD 是一種新的預訓練策略,用於為臨床句子和生物醫學概念產生有意義的表示。

最先進的方法透過最大化指涉相同概念的名稱表示的相似性,並透過對比學習來防止崩潰。然而,由於生物醫學名稱並不總是不言自明的,它有時會導致非語義表示。

BioLORD 透過使用定義以及從由生物醫學本體組成的多關係知識圖導出的簡短描述來奠定其概念表示的基礎,從而克服了這個問題。由於這種基礎,我們的模型產生了更多語意概念表示,與本體的層次結構更相符。 BioLORD-2023 為臨床句子 (MedSTS) 和生物醫學概念 (EHR-Rel-B) 上的文本相似性建立了新的技術水平。

正如您在其定義中所看到的,該模型已使用醫學概念進行了預先訓練,這些概念在對我們的 ICD-10 代碼和自由文本進行向量化時非常有用。

對於我們的項目,我們將下載此模型以加快向量建立速度:

if not os.path.isdir('/shared/model/'):
    model = sentence_transformers.SentenceTransformer('FremyCompany/BioLORD-2023-M')            
    model.save('/shared/model/')

加入我們的團隊後,我們可以在清單中輸入要向量化的文字以加快流程,讓我們看看如何對我們先前記錄在ENCODER.Object.Codes 班級。

st = iris.sql.prepare("SELECT TOP 50 CodeId, Description FROM ENCODER_Object.Codes WHERE VectorDescription is null ORDER BY ID ASC ")
resultSet = st.execute()
df = resultSet.dataframe()

if (df.size > 0):
    model = sentence_transformers.SentenceTransformer("/shared/model/")
    embeddings = model.encode(df['description'].tolist(), normalize_embeddings=True)

    df['vectordescription'] = embeddings.tolist()

    stmt = iris.sql.prepare("UPDATE ENCODER_Object.Codes SET VectorDescription = TO_VECTOR(?,DECIMAL) WHERE CodeId = ?")
    for index, row in df.iterrows():
        rs = stmt.execute(str(row['vectordescription']), row['codeid'])
else:
    flagLoop = False

如您所見,我們首先提取儲存在ICD-10 代碼表中的代碼,這些代碼尚未向量化,但我們在從CSV 文件中提取後已在上一步中記錄了這些代碼,然後提取以下清單:描述向量化並使用Python sentence_transformers 庫,我們將恢復我們的模型並產生相關的嵌入。

最後,我們將透過執行 UPDATE 使用向量化描述來更新 ICD-10 代碼。可以看到,對模型傳回的結果進行向量化的命令是IRIS中的SQL指令TO_VECTOR

在 IRIS 中使用它

好的,我們有了Python 程式碼,所以我們只需將其包裝在一個擴展Ens.BusinessProcess 的類別中,並將其包含在我們的生產中,然後將其連接到負責檢索的業務服務CSV 檔案就是這樣!

讓我們看看這段程式碼在我們的生產中會是什麼樣子:

d[IA]gnosis: Vectorizing Diagnostics with Embedded Python and LLM Models

如您所見,我們的業務服務帶有EnsLib.File.InboundAdapter 適配器,它允許我們收集代碼檔案並將其重定向到我們的業務流程,我們將在其中執行所有操作向量化和儲存操作,給我們一組如下所示的記錄:

d[IA]gnosis: Vectorizing Diagnostics with Embedded Python and LLM Models

現在我們的應用程式已準備好開始尋找與我們發送的文字可能的匹配項!

在下面的文章中...

在下一篇文章中,我們將展示如何將Angular 17 中開發的應用程式前端與我們在IRIS for Health 中的製作集成,以及IRIS 如何接收要分析的文本、對其進行矢量化並在ICD -10 中搜尋相似之處代碼表。

不要錯過!

版本聲明 本文轉載於:https://dev.to/intersystems/diagnosis-vectorizing-diagnostics-with-embedded-python-and-llm-models-3n8a?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • 為什麼使用Firefox後退按鈕時JavaScript執行停止?
    為什麼使用Firefox後退按鈕時JavaScript執行停止?
    導航歷史記錄問題:JavaScript使用Firefox Back Back 此行為是由瀏覽器緩存JavaScript資源引起的。要解決此問題並確保在後續頁面訪問中執行腳本,Firefox用戶應設置一個空功能。 警報'); }; alert('inline Alert')...
    程式設計 發佈於2025-04-17
  • 解決MySQL錯誤1153:數據包超出'max_allowed_packet'限制
    解決MySQL錯誤1153:數據包超出'max_allowed_packet'限制
    mysql錯誤1153:故障排除比“ max_allowed_pa​​cket” bytes 更大的數據包,用於面對陰謀mysql錯誤1153,同時導入數據capase doft a Database dust?讓我們深入研究罪魁禍首並探索解決方案以糾正此問題。 理解錯誤此錯誤表明在導入過程中...
    程式設計 發佈於2025-04-17
  • 如何在無序集合中為元組實現通用哈希功能?
    如何在無序集合中為元組實現通用哈希功能?
    在未訂購的集合中的元素要糾正此問題,一種方法是手動為特定元組類型定義哈希函數,例如: template template template 。 struct std :: hash { size_t operator()(std :: tuple const&tuple)const {...
    程式設計 發佈於2025-04-17
  • Python 3高效搜索替換文件文本方法
    Python 3高效搜索替換文件文本方法
    使用python 3 響應: 潛在的問題與地上替換: 要解決這個問題,避免同時閱讀並寫入文件。相反,請按照以下步驟操作: 將文件讀取到內存中:有效性: 考慮:推薦方法可能不適用於在單個操作中無法加載到內存中的大文件。在這種情況下,請考慮寫入臨時文件,然後用修改版本替換原始文件。
    程式設計 發佈於2025-04-17
  • FastAPI中的緩存:開啟高性能開發
    FastAPI中的緩存:開啟高性能開發
    在当今的数字世界中,每个动作(无论是在约会应用程序上刷还是完成购买)上的API在幕后有效地工作。作为后端开发人员,我们知道每毫秒都很重要。但是,我们如何使API响应速度更快?答案在于缓存。 缓存是一种将经常访问的数据存储在内存中的技术,允许API立即响应,而不是每次都查询较慢的数据库。可以将其视为将...
    程式設計 發佈於2025-04-17
  • 如何正確使用與PDO參數的查詢一樣?
    如何正確使用與PDO參數的查詢一樣?
    在pdo 中使用類似QUERIES在PDO中的Queries時,您可能會遇到類似疑問中描述的問題:此查詢也可能不會返回結果,即使$ var1和$ var2包含有效的搜索詞。錯誤在於不正確包含%符號。 通過將變量包含在$ params數組中的%符號中,您確保將%字符正確替換到查詢中。沒有此修改,PD...
    程式設計 發佈於2025-04-17
  • C++中如何將獨占指針作為函數或構造函數參數傳遞?
    C++中如何將獨占指針作為函數或構造函數參數傳遞?
    在構造函數和函數中將唯一的指數管理為參數 unique pointers( unique_ptr [2啟示。通過值: base(std :: simelor_ptr n) :next(std :: move(n)){} 此方法將唯一指針的所有權轉移到函數/對象。指針的內容被移至功能中,在操作...
    程式設計 發佈於2025-04-17
  • 左連接為何在右表WHERE子句過濾時像內連接?
    左連接為何在右表WHERE子句過濾時像內連接?
    左JOIN CONUNDRUM:WITCHING小時在數據庫Wizard的領域中變成內在的加入很有趣,當將c.foobar條件放置在上面的Where子句中時,據說左聯接似乎會轉換為內部連接。僅當滿足A.Foo和C.Foobar標準時,才會返回結果。 為什麼要變形?關鍵在於其中的子句。當左聯接的右側...
    程式設計 發佈於2025-04-17
  • Go語言垃圾回收如何處理切片內存?
    Go語言垃圾回收如何處理切片內存?
    Garbage Collection in Go Slices: A Detailed AnalysisIn Go, a slice is a dynamic array that references an underlying array.使用切片時,了解垃圾收集行為至關重要,以避免潛在的內存洩...
    程式設計 發佈於2025-04-17
  • HTML格式標籤
    HTML格式標籤
    HTML 格式化元素 **HTML Formatting is a process of formatting text for better look and feel. HTML provides us ability to format text without us...
    程式設計 發佈於2025-04-17
  • 版本5.6.5之前,使用current_timestamp與時間戳列的current_timestamp與時間戳列有什麼限制?
    版本5.6.5之前,使用current_timestamp與時間戳列的current_timestamp與時間戳列有什麼限制?
    在時間戳列上使用current_timestamp或MySQL版本中的current_timestamp或在5.6.5 此限制源於遺留實現的關注,這些限制需要對當前的_timestamp功能進行特定的實現。 創建表`foo`( `Productid` int(10)unsigned not ...
    程式設計 發佈於2025-04-17
  • 在C#中如何高效重複字符串字符用於縮進?
    在C#中如何高效重複字符串字符用於縮進?
    在基於項目的深度下固定字符串時,重複一個字符串以進行凹痕,很方便有效地有一種有效的方法來返回字符串重複指定的次數的字符串。使用指定的次數。 constructor 這將返回字符串“ -----”。 字符串凹痕= new String(' - ',depth); console.W...
    程式設計 發佈於2025-04-17
  • Maven快照在持續集成中的作用及使用
    Maven快照在持續集成中的作用及使用
    揭開Maven快照:連續集成的開發人員工具什麼是maven快照? maven快照版本是指在開發過程中不斷發展的依賴性。與被認為穩定和最終的“發行版”版本不同,快照被認為是“正在進行的工作”版本。它們代表了對項目或庫進行的最新更改。 實時更新:快照使開發人員可以立即訪問和集成對依賴關係的最新更改...
    程式設計 發佈於2025-04-17
  • 大型C++項目中如何識別和刪除冗餘#include指令?
    大型C++項目中如何識別和刪除冗餘#include指令?
    Identifying Redundant #include Directives in Extensive C ProjectsWorking with龐大的 C 項目時,開發者經常會遇到過多的 #include 指令,其中一些可能已成為程序中無必要的代碼。這些冗餘的指令可能會是代碼中的歷...
    程式設計 發佈於2025-04-17
  • Python元類工作原理及類創建與定制
    Python元類工作原理及類創建與定制
    python中的metaclasses是什麼? Metaclasses負責在Python中創建類對象。就像類創建實例一樣,元類也創建類。他們提供了對類創建過程的控制層,允許自定義類行為和屬性。 在Python中理解類作為對象的概念,類是描述用於創建新實例或對象的藍圖的對象。這意味著類本身是使用...
    程式設計 發佈於2025-04-17

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3