在上一篇文章中,我们介绍了为支持 ICD-10 中的诊断编码而开发的诊断应用程序。在本文中,我们将了解 InterSystems IRIS for Health 如何为我们提供必要的工具,以便使用预先训练的语言模型、其存储以及随后搜索所有这些生成的向量从 ICD-10 代码列表生成向量.
随着人工智能模型的发展而出现的主要功能之一就是我们所知道的 RAG(检索增强生成),它使我们能够通过将上下文融入到模型中来改进 LLM 模型的结果。好吧,在我们的示例中,上下文由 ICD-10 诊断集给出,要使用它们,我们必须首先对它们进行矢量化。
如何矢量化我们的诊断列表?
为了生成向量,我们使用了 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 中使用它Ens.BusinessProcess 的类中,并将其包含在我们的生产中,然后将其连接到负责检索的业务服务CSV 文件就是这样!
让我们看看这段代码在我们的产品中会是什么样子:
如您所见,我们的业务服务带有
EnsLib.File.InboundAdapter 适配器,它允许我们收集代码文件并将其重定向到我们的业务流程,我们将在其中执行所有操作矢量化和存储操作,给我们一组如下所示的记录:
现在我们的应用程序已准备好开始寻找与我们发送的文本可能的匹配项!
在下一篇文章中,我们将展示在 Angular 17 中开发的应用程序前端如何与我们在 IRIS for Health 中的制作集成,以及 IRIS 如何接收要分析的文本、对其进行矢量化并在 ICD-10 中搜索相似之处代码表。
不要错过!
以上是d[IA]gnosis:使用嵌入式 Python 和 LLM 模型进行矢量化诊断的详细内容。更多信息请关注PHP中文网其他相关文章!