”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > d[IA]gnosis:使用嵌入式 Python 和 LLM 模型进行矢量化诊断

d[IA]gnosis:使用嵌入式 Python 和 LLM 模型进行矢量化诊断

发布于2024-09-02
浏览:333

在上一篇文章中,我们介绍了为支持 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]删除
最新教程 更多>
  • eval()vs. ast.literal_eval():对于用户输入,哪个Python函数更安全?
    eval()vs. ast.literal_eval():对于用户输入,哪个Python函数更安全?
    称量()和ast.literal_eval()中的Python Security 在使用用户输入时,必须优先确保安全性。强大的Python功能Eval()通常是作为潜在解决方案而出现的,但担心其潜在风险。 This article delves into the differences betwee...
    编程 发布于2025-05-23
  • 反射动态实现Go接口用于RPC方法探索
    反射动态实现Go接口用于RPC方法探索
    在GO 使用反射来实现定义RPC式方法的界面。例如,考虑一个接口,例如:键入myService接口{ 登录(用户名,密码字符串)(sessionId int,错误错误) helloworld(sessionid int)(hi String,错误错误) } 替代方案而不是依靠反射...
    编程 发布于2025-05-23
  • 哪种方法更有效地用于点 - 填点检测:射线跟踪或matplotlib \的路径contains_points?
    哪种方法更有效地用于点 - 填点检测:射线跟踪或matplotlib \的路径contains_points?
    在Python Matplotlib's path.contains_points FunctionMatplotlib's path.contains_points function employs a path object to represent the polygon.它...
    编程 发布于2025-05-23
  • 如何有效地选择熊猫数据框中的列?
    如何有效地选择熊猫数据框中的列?
    在处理数据操作任务时,在Pandas DataFrames 中选择列时,选择特定列的必要条件是必要的。在Pandas中,选择列的各种选项。选项1:使用列名 如果已知列索引,请使用ILOC函数选择它们。请注意,python索引基于零。 df1 = df.iloc [:,0:2]#使用索引0和1 c...
    编程 发布于2025-05-23
  • 为什么HTML无法打印页码及解决方案
    为什么HTML无法打印页码及解决方案
    无法在html页面上打印页码? @page规则在@Media内部和外部都无济于事。 HTML:Customization:@page { margin: 10%; @top-center { font-family: sans-serif; font-weight: bo...
    编程 发布于2025-05-23
  • 为什么尽管有效代码,为什么在PHP中捕获输入?
    为什么尽管有效代码,为什么在PHP中捕获输入?
    在php ;?>" method="post">The intention is to capture the input from the text box and display it when the submit button is clicked.但是,输出...
    编程 发布于2025-05-23
  • 如何处理PHP文件系统功能中的UTF-8文件名?
    如何处理PHP文件系统功能中的UTF-8文件名?
    在PHP的Filesystem functions中处理UTF-8 FileNames 在使用PHP的MKDIR函数中含有UTF-8字符的文件很多flusf-8字符时,您可能会在Windows Explorer中遇到comploreer grounder grounder grounder gro...
    编程 发布于2025-05-23
  • 如何在JavaScript对象中动态设置键?
    如何在JavaScript对象中动态设置键?
    在尝试为JavaScript对象创建动态键时,如何使用此Syntax jsObj['key' i] = 'example' 1;不工作。正确的方法采用方括号: jsobj ['key''i] ='example'1; 在JavaScript中,数组是一...
    编程 发布于2025-05-23
  • 如何使用PHP从XML文件中有效地检索属性值?
    如何使用PHP从XML文件中有效地检索属性值?
    从php $xml = simplexml_load_file($file); foreach ($xml->Var[0]->attributes() as $attributeName => $attributeValue) { echo $attributeName,...
    编程 发布于2025-05-23
  • 编译器报错“usr/bin/ld: cannot find -l”解决方法
    编译器报错“usr/bin/ld: cannot find -l”解决方法
    错误:“ usr/bin/ld:找不到-l “ 此错误表明链接器在链接您的可执行文件时无法找到指定的库。为了解决此问题,我们将深入研究如何指定库路径并将链接引导到正确位置的详细信息。添加库搜索路径的一个可能的原因是,此错误是您的makefile中缺少库搜索路径。要解决它,您可以在链接器命令中添加...
    编程 发布于2025-05-23
  • 在GO中构造SQL查询时,如何安全地加入文本和值?
    在GO中构造SQL查询时,如何安全地加入文本和值?
    在go中构造文本sql查询时,在go sql queries 中,在使用conting and contement和contement consem per时,尤其是在使用integer per当per当per时,per per per当per. [&​​&&&&&&&&&&&&&&&默元组方法在...
    编程 发布于2025-05-23
  • PHP未来:适应与创新
    PHP未来:适应与创新
    PHP的未来将通过适应新技术趋势和引入创新特性来实现:1)适应云计算、容器化和微服务架构,支持Docker和Kubernetes;2)引入JIT编译器和枚举类型,提升性能和数据处理效率;3)持续优化性能和推广最佳实践。 引言在编程世界中,PHP一直是网页开发的中流砥柱。作为一个从1994年就开始发展...
    编程 发布于2025-05-23
  • 为什么PHP的DateTime :: Modify('+1个月')会产生意外的结果?
    为什么PHP的DateTime :: Modify('+1个月')会产生意外的结果?
    使用php dateTime修改月份:发现预期的行为在使用PHP的DateTime类时,添加或减去几个月可能并不总是会产生预期的结果。正如文档所警告的那样,“当心”这些操作的“不像看起来那样直观。 考虑文档中给出的示例:这是内部发生的事情: 现在在3月3日添加另一个月,因为2月在2001年只有2...
    编程 发布于2025-05-23
  • Java中如何使用观察者模式实现自定义事件?
    Java中如何使用观察者模式实现自定义事件?
    在Java 中创建自定义事件的自定义事件在许多编程场景中都是无关紧要的,使组件能够基于特定的触发器相互通信。本文旨在解决以下内容:问题语句我们如何在Java中实现自定义事件以促进基于特定事件的对象之间的交互,定义了管理订阅者的类界面。以下代码片段演示了如何使用观察者模式创建自定义事件: args)...
    编程 发布于2025-05-23
  • 如何从Google API中检索最新的jQuery库?
    如何从Google API中检索最新的jQuery库?
    从Google APIS 问题中提供的jQuery URL是版本1.2.6。对于检索最新版本,以前有一种使用特定版本编号的替代方法,它是使用以下语法:获取最新版本:未压缩)While these legacy URLs still remain in use, it is recommended ...
    编程 发布于2025-05-23

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3