新しい投稿

検索

記事
· 2025年4月3日 4m read

d[IA]gnosis: Vetorizando Diagnósticos com Python Embutido e Modelos LLM

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

Introdução

Uma das principais características que surgiram com o desenvolvimento de modelos de IA é o que conhecemos como RAG (Geração Aumentada por Recuperação), que nos permite melhorar os resultados dos modelos LLM ao incorporar um contexto ao modelo. Bem, em nosso exemplo, o contexto é dado pelo conjunto de diagnósticos da CID-10 e, para usá-los, devemos primeiro vetorizá-los.

Como vetorizar nossa lista de diagnósticos?

SentenceTransformers e Embedded Python

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 deles:

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

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

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

As metodologias de ponta operam maximizando a similaridade na representação de nomes que se referem ao mesmo conceito e evitando o colapso por meio do aprendizado contrastivo. No entanto, como os nomes biomédicos nem sempre são autoexplicativos, às vezes resulta em representações não semânticas.

O BioLORD supera esse problema fundamentando suas representações de conceitos usando definições, bem como descrições curtas derivadas de um grafo de conhecimento multirrelacional que consiste em ontologias biomédicas. Graças a essa fundamentação, nosso modelo produz representações de conceitos mais semânticas que correspondem mais de perto à estrutura hierárquica das ontologias. O BioLORD-2023 estabelece um novo estado da arte para similaridade de texto tanto em frases clínicas (MedSTS) quanto em 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 ao vetorizar tanto nossos códigos CID-10 quanto texto livre.

Para o nosso projeto, baixaremos este modelo para acelerar a criação de 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 a serem vetorizados em listas para acelerar o processo. Vamos ver como vetorizamos os códigos CID-10 que registramos anteriormente em nossa classe 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

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 a serem vetorizadas 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-o no IRIS

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

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

Como você pode ver, temos nosso Business Service com o adaptador EnsLib.File.InboundAdapter, que nos permitirá coletar o arquivo de códigos 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

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

No próximo artigo...

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

Não perca!

1 Comment
ディスカッション (1)2
続けるにはログインするか新規登録を行ってください
お知らせ
· 2025年4月3日

InterSystems Open Exchange Applications Digest, March 2025

Hello and welcome to the March 2025 Open Exchange Recap.
General Stats:
21 new apps in March
607 downloads in March
1,060 applications all time
39,764 downloads all time
3,102 developers joined
New Applications
ollama-ai-iris
By Rodolfo Pscheidt
mcp-server-iris
By Dmitry Maslennikov
IRIS-Intelligent-Butler
By janzai renato
langchain-iris-tool
By Yuri Marx
AiAssistant
By XINING MA
iris-data-analysis
By lando miller
bg-iris-agent
By Elena Karpova
iris-AgenticAI
By Muhammad Waseem
pax-ai-iris
By PARANI KAMATCHIYAPPAN
Vitals Lab
By Gabriel Yang
toot
By Alex Woodhead
oncorag
By Patrick Salome
Facilis
By Henrique Dias
iris-clinical-assistant
By Diana Mindroc Filimon
iris-easybot
By Eric Fortenberry
bas_labs
By Alice Heiman
TaskList
By Irina Yaroshevskaya
X-rAI-iris-health
By Rahul Singhal
iris-watched-status
By David Hockenbroch
React Native Frontend for FHIR by Lovable
By Evgeny Shvarov
iris-waveform-demo
By Ajay Anand
New Releases
sqlalchemy-iris by Dmitry Maslennikov
v0.17.0
Official InterSystems driver support using iris+intersystems:// URL
intersystems-objectscript-class-diagram-view by Jinyao Chen
v0.1.0
🚀 New Features Added support for generating class diagrams using PlantUML Web Server (no Java required) Implemented user choice between local Java and PlantUML Web Server for diagram generation Added ability to copy PlantUML URL to clipboard or open directly in browser 📝 Documentation Updated README files (English, Chinese, German) with new PlantUML Web Server functionality Added detailed instructions for using the PlantUML Web Server option Improved requirements section with a clear table format for better readability Enhanced documentation with clearer distinction between required and optional dependencies 🔧 Maintenance Optimized command structure by consolidating diagram generation commands Removed redundant code for handling separate web server command Simplified user interface by providing generation method choice in a single command ⚡️ Performance Improvements Streamlined diagram generation process for PlantUML Web Server option Reduced code complexity by removing unnecessary WebView creation for web server URLs
isc-codetidy by Timothy Leavitt
v1.1.9

[1.1.9] - 2024-03-03

Fixed

  • Fixed spaces being added to delimeters in macro calls (#58)
v1.1.10

[1.1.10] - 2025-03-11

Fixed

  • Fixed bug where indentation is increased following in-line embedded js (#62)
v1.1.11

[1.1.11] - 2025-03-19

Fixed

  • Fixed bug where CodeTidy adds spacing between arguments within pre-processor if blocks (#64)
objectscript-errors by Evgeny Shvarov
v1.0.3
verbose parameter
pxw-debug by Paul Waterman
v1.0.1
Added: DEBUGSC - to set status code variable and log failures DEBUGPause - pause debug DEBUGResume - resume debug
v1.0.2
More documentation and example use.
iris-fhir-template by Evgeny Shvarov
v1.3.3
Added FHIR Swagger UI image
v1.3.4
Module.xml update due to deprecated CSP->Web application transition
ks-iris-lib by Robert Barbiaux
v1.0.3
fix DateTime data type
v1.0.4
fix DateTime data type
v1.0.5
bump version
v1.0.6
bump version
IRIS internal WebSocket Client by Robert Cemper
v1.1.0
more verbose description of * prerequisites * installation * starting * testing explained SMP = System Management Portal adjusted to actual behavior of CSP Gateway
iris-speed-test by Fan Ji
v3.0.0
Initial Release
Most downloaded
MDX2JSON
By Eduard Lebedyuk
DeepSeeWeb
By Anton Gnibeda
ObjectScript-Math
By Peter Steiwer
WebTerminal
By Nikita Savchenko
ssl-client
By Evgeny Shvarov
Embedded Git
By Timothy Leavitt
iris-web-swagger-ui
By Maks Atygaev
passwordless
By Sergey Mikhailenko
csvgen
By Evgeny Shvarov
March, 2025Month at a GlanceInterSystems Open Exchange
ディスカッション (0)1
続けるにはログインするか新規登録を行ってください
記事
· 2025年4月3日 3m read

Contourner l'incompatibilité de scikit-learn 1.6.0 dans IRIS 2024.3 AutoML

Introduction

Dans InterSystems IRIS 2024.3 et les versions ultérieures d'IRIS, le composant AutoML est désormais fourni sous forme de package Python distinct, installé après l'installation. Malheureusement, certaines versions récentes des packages Python sur lesquels AutoML s'appuie ont introduit des incompatibilités et peuvent entraîner des échecs lors de l'entraînement des modèles (instruction TRAIN MODEL). Si vous rencontrez une erreur mentionnant « TypeError » et l'argument de mot-clé « fit_params » ou « sklearn_tags », lisez la suite pour une solution rapide.

Cause principale

  • scikit-learn a été mis à jour vers la version 1.6.0, rendant ainsi fit_params obsolète.
  • scikeras ne met plus à jour les « wrappers » pour Tensorflow.
  • L'installation de ces packages dans IRIS 2024.3 sans dépendances épinglées entraîne des erreurs d'entraînement.

Symptômes

Vous pouvez rencontrer :

<TypeError>: got an unexpected keyword argument 'fit_params'

ou

[%msg: <ERROR #5002: ObjectScript error: <PYTHON EXCEPTION> *<class 'AttributeError'>: 'super' object has no attribute '__sklearn_tags__' [^%ML.AutoML.Provider.1:%SYS]>]

pendant la phase de formation du modèle.

Solution de contournement :

1. Désinstaller les packages existants (si nécessaire)

pip uninstall scikit-learn xgboost keras ...

 

2. Installer via Snapshot

pip install --index-url https://registry.intersystems.com/pypi/simple \
  --no-cache-dir \
  --target /path/to/iris/python \
  -r /path/to/requirementsSnapshot.txt

3. Vérifier

  • • Exécutez vos tests de détection de fumée pour confirmer l'absence d'erreurs fit_params.
  • • Assurez-vous que scikit-learn est épinglé à une version inférieure à 1.6.0.

Remarque : Les modalités d'obtention ou d'accès au fichier requirementsSnapshot.txt sont encore en discussion. Pour l'instant, veuillez contacter votre représentant InterSystems ou consulter la documentation officielle pour obtenir le lien ou le processus de distribution le plus récent.

Alternative : Épingler scikit-learn à une version inférieure à 1.6.0

Si vous préférez ne pas utiliser le fichier snapshot, vous pouvez épingler manuellement la version :

pip install scikit-learn<1.6.0 xgboost keras ...

Cela permettra de contourner le problème jusqu'à ce que XGBoost et Keras mettent officiellement à jour leurs packages.

Prochaines étapes

  • InterSystems a apporté des modifications au code AutoML afin de résoudre le problème dans les prochaines versions. Ce problème concerne principalement les conteneurs plus anciens, comme la version 2024.3, première version à utiliser la procédure de post-installation pour installer IntegratedML.
  • InterSystems publie une alerte client concernant les conteneurs IRIS 2024.3 ml (containers.intersystems.com/intersystems/iris-ml:2024.3), qui fait référence à cet article.
  • Si vous avez des questions ou rencontrez des problèmes, n'hésitez pas à laisser un commentaire ci-dessous ou à contacter votre contact du support InterSystems.

Ressources supplémentaires :

ディスカッション (0)1
続けるにはログインするか新規登録を行ってください
記事
· 2025年4月3日 1m read

ロードバランサやプロキシサーバ経由でアクセスしている接続元クライアントIPを取得する方法

これは、InterSystems FAQ サイトの記事です。
 

HTTPプロキシサーバまたは負荷分散装置(ロードバランサ)を経由してウェブサーバに接続するクライアントの送信元IPアドレスを特定する際は、HTTPヘッダ:X-Forwarded-For (XFF) を取得しますが、IRISでは以下で取得できます。

set ip = %request.GetCgiEnv("HTTP_X_FORWARDED_FOR")
ディスカッション (0)1
続けるにはログインするか新規登録を行ってください
記事
· 2025年4月3日 3m read

二要素認証について

これは、InterSystems FAQ サイトの記事です。
 

InterSystems製品は、二要素認証をサポートしています。
下記ドキュメントページに詳細について記載がありますので、ご参照ください。
2要素認証


以下、例として、スマートフォン用認証アプリを用いて、IRIS上のCSPアプリケーションの2要素認証を行うための設定方法を解説します。

1.IRIS側の設定​
1-1.インスタンスに対する 2 要素認証の有効化および構成を行います。
管理ポータルで、[システム管理] > [セキュリティ] > [システム・セキュリティ] > [認証/Web セッション・オプション]と進み、[2 要素のタイムベース・ワンタイム・パスワード認証を許可] チェック・ボックスにチェックを付けます。
チェックを付けると、[2 要素のタイムベース・ワンタイム・パスワードの発行者] フィールドが表示されますので、ここに発行者を示す文字列(任意)を入力します。 1-2.次に、このアプリケーションに接続するユーザの設定を行います。
[システム管理] > [セキュリティ] > [ユーザ]で、該当のユーザの編集を行います。
[二要素認証]の[タイムベースのワンタイム・パスコード有効]にチェックを付けて保存します。
ここで、ワンタイム・パスワードキー(OTPキー)及びQRコードが表示されます。
※OTPキーおよびQRコードの取り扱いには、十分注意してください。
 詳細は、ドキュメントの注意書きをご確認ください。

1-3.ウェブアプリケーションの編集を行います。
[システム管理] > [セキュリティ] > [アプリケーション] >[ウェブ・アプリケーション]で、該当のアプリケーションを開き(例では/csp/user)、[許可された認証方法]の[二要素パスワード]にチェックを付けて保存します。


2. スマートフォン認証アプリケーションの設定
2-1. スマートフォンに任意の認証アプリケーションをインストールします。
※例では、Microsoft Authenticatorを使用。

2-2. アカウントの追加
アカウントの追加メニューで[他のアカウント]を選択し、1-2のQRコードをスキャンするか、OTPキーをマニュアル入力します。 以上で設定は完了です。

<テスト>
CSPアプリケーションにアクセスすると、通常のユーザー名・パスワードの入力に続いて、ワンタイム・パスワードコードを入力する画面が出てきますので、そこに、スマートフォン認証アプリで表示されるコードを入力し、アクセスできることを確認します。 

ディスカッション (0)1
続けるにはログインするか新規登録を行ってください