ホームページ  >  記事  >  バックエンド開発  >  d[IA]gnosis: 埋め込み Python および LLM モデルを使用した診断のベクトル化

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

WBOY
WBOYオリジナル
2024-08-29 06:35:02448ブラウズ

前の記事では、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 を使用しました。自身の Web サイトより:

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 クラス。

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 で類似点を検索するかを説明します。コードテーブル。

お見逃しなく!

以上がd[IA]gnosis: 埋め込み Python および LLM モデルを使用した診断のベクトル化の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。