「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > d[IA]gnosis: 埋め込み Python および LLM モデルを使用した診断のベクトル化

d[IA]gnosis: 埋め込み Python および LLM モデルを使用した診断のベクトル化

2024 年 9 月 2 日に公開
ブラウズ:351

前の記事では、ICD-10 での診断のコーディングをサポートするために開発された診断アプリケーションを紹介しました。この記事では、InterSystems IRIS for Health が、事前トレーニングされた言語モデルを使用した ICD-10 コード リストからのベクトルの生成、その保存、およびその後の生成されたすべてのベクトルの類似性の検索に必要なツールをどのように提供するかを説明します。 .

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

導入

AI モデルの開発で登場した主な機能の 1 つは、RAG (検索拡張生成) として知られる機能で、モデルにコンテキストを組み込むことで LLM モデルの結果を向上させることができます。この例では、コンテキストは ICD-10 診断のセットによって与えられており、それらを使用するには、まずそれらをベクトル化する必要があります。

診断リストをベクトル化するにはどうすればよいですか?

SentenceTransformers と埋め込み Python

ベクトルの生成には、事前トレーニングされたモデルからのフリー テキストのベクトル化を大幅に容易にする Python ライブラリ SentenceTransformers を使用しました。自身のウェブサイトより:

Sentence Transformers (別名 SBERT) は、最先端のテキストおよび画像埋め込みモデルにアクセス、使用、トレーニングするための頼りになる Python モジュールです。これは、Sentence Transformer モデル (クイックスタート) を使用してエンベディングを計算したり、Cross-Encoder モデル (クイックスタート) を使用して類似性スコアを計算したりするために使用できます。これにより、意味検索、意味テキストの類似性、言い換えマイニングなど、幅広いアプリケーションが可能になります。

SentenceTransformers コミュニティによって開発されたすべてのモデルの中で、786 次元のベクトルを生成する事前トレーニング済みモデルである BioLORD-2023-M を発見しました。

このモデルは、臨床文章や生物医学的概念の意味のある表現を生成するための新しい事前トレーニング戦略である 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 に記録した ICD-10 コードをどのようにベクトル化するかを見てみましょう。 ] クラス。

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 での使用

OK、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] までご連絡ください。それを削除するには
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3