首頁 >後端開發 >Python教學 >d[IA]gnosis:使用嵌入式 Python 和 LLM 模型進行向量化診斷

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

WBOY
WBOY原創
2024-08-29 06:35:02514瀏覽

在上一篇文章中,我們介紹了為支援 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-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 中搜尋相似之處代碼表。

不要錯過!

以上是d[IA]gnosis:使用嵌入式 Python 和 LLM 模型進行向量化診斷的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn