"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > d[IA]gnosis: Vetorização de diagnósticos com modelos Python incorporados e LLM

d[IA]gnosis: Vetorização de diagnósticos com modelos Python incorporados e LLM

Publicado em 2024-09-02
Navegar:854

No artigo anterior apresentamos o aplicativo d[IA]gnosis desenvolvido para apoiar a codificação de diagnósticos na CID-10. Neste artigo veremos como InterSystems IRIS for Health nos fornece as ferramentas necessárias para a geração de vetores da lista de códigos CID-10 utilizando um modelo de linguagem pré-treinado, seu armazenamento e a posterior busca de semelhanças em todos esses vetores gerados .

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

Introdução

Uma das principais características que surgiram com o desenvolvimento de modelos de IA é o que conhecemos como RAG (Retrieval-Augmented Generation) que nos permite melhorar os resultados dos modelos LLM incorporando um contexto ao modelo. Pois bem, no nosso exemplo o contexto é dado pelo conjunto de diagnósticos da CID-10 e para utilizá-los devemos primeiro vetorizá-los.

Como vetorizar nossa lista de diagnósticos?

Transformadores de frases e Python incorporado

Para a geração de vetores utilizamos a biblioteca Python SentenceTransformers que facilita muito a vetorização de textos livres a partir de modelos pré-treinados. Do próprio site:

Sentence Transformers (também conhecido como SBERT) é o módulo Python ideal para acessar, usar e treinar modelos de incorporação de texto e imagem de última geração. Ele pode ser usado para calcular embeddings usando modelos de transformador de frases (início rápido) ou para calcular pontuações de similaridade usando modelos Cross-Encoder (início rápido). Isso abre uma ampla gama de aplicações, incluindo pesquisa semântica, similaridade textual semântica e mineração de paráfrases.

Entre todos os modelos desenvolvidos pela comunidade SentenceTransformers encontramos o BioLORD-2023-M, um modelo pré-treinado que irá gerar vetores de 786 dimensões.

Este modelo foi treinado usando BioLORD, uma nova estratégia de pré-treinamento para produzir representações significativas para sentenças clínicas e conceitos biomédicos.

Metodologias de última geração operam maximizando a similaridade na representação de nomes referentes ao mesmo conceito e evitando o colapso por meio da aprendizagem contrastiva. No entanto, como os nomes biomédicos nem sempre são autoexplicativos, às vezes resultam em representações não semânticas.

BioLORD supera esse problema fundamentando suas representações de conceito usando definições, bem como breves descrições derivadas de um gráfico de conhecimento multi-relacional que consiste em ontologias biomédicas. Graças a esta base, nosso modelo produz mais representações de conceitos semânticos que correspondem mais de perto à estrutura hierárquica das ontologias. BioLORD-2023 estabelece um novo estado da arte para similaridade de texto em sentenças clínicas (MedSTS) e conceitos biomédicos (EHR-Rel-B).

Como você pode ver em sua definição, este modelo é pré-treinado com conceitos médicos que serão úteis na vetorização de nossos códigos CID-10 e texto livre.

Para nosso projeto, iremos baixar este modelo para agilizar a criação dos vetores:

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

Uma vez em nossa equipe, podemos inserir os textos para vetorizar em listas para agilizar o processo, vamos ver como vetorizamos os códigos CID-10 que registramos anteriormente em nosso ENCODER.Object.Codes aula.

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

Como você pode ver, primeiro extraímos os códigos armazenados em nossa tabela de códigos CID-10 que ainda não vetorizamos, mas que registramos em uma etapa anterior após extraí-los do arquivo CSV, depois extraímos a lista de descrições para vetorizar e usando a biblioteca Python sentence_transformers recuperaremos nosso modelo e geraremos os embeddings associados.

Finalmente, atualizaremos o código CID-10 com a descrição vetorizada executando o UPDATE. Como você pode ver, o comando para vetorizar o resultado retornado pelo modelo é o comando SQL TO_VECTOR no IRIS.

Usando no IRIS

Ok, temos nosso código Python, então só precisamos envolvê-lo em uma classe que estenda Ens.BusinessProcess e incluí-lo em nossa produção, depois conectá-lo ao Business Service encarregado de recuperar o arquivo CSV e pronto!

Vamos dar uma olhada em como ficará esse código em nossa produção:

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

Como você pode ver, temos nosso Business Service com o adaptador EnsLib.File.InboundAdapter que nos permitirá coletar o arquivo de código e redirecioná-lo para nosso Business Process no qual realizaremos todas as operações de vetorização e armazenamento, fornecendo-nos um conjunto de registros como o seguinte:

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

Agora nosso aplicativo estará pronto para começar a procurar possíveis correspondências com os textos que enviamos!

No artigo seguinte...

No próximo artigo mostraremos como o front-end da aplicação desenvolvido em Angular 17 está integrado à nossa produção no IRIS for Health e como o IRIS recebe os textos a serem analisados, os vetoriza e busca semelhanças na CID-10 tabela de códigos.

Não perca!

Declaração de lançamento Este artigo foi reproduzido em: https://dev.to/intersystems/diagnosis-vectorizing-diagnostics-with-embedded-python-and-llm-models-3n8a?1 Se houver alguma violação, entre em contato com [email protected] para excluí-lo
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3