Rumah  >  Artikel  >  pembangunan bahagian belakang  >  d[IA]gnosis: Diagnostik Vektor dengan Python Terbenam dan Model LLM

d[IA]gnosis: Diagnostik Vektor dengan Python Terbenam dan Model LLM

WBOY
WBOYasal
2024-08-29 06:35:02451semak imbas

Dalam artikel sebelumnya kami membentangkan aplikasi d[IA]gnosis yang dibangunkan untuk menyokong pengekodan diagnosis dalam ICD-10. Dalam artikel ini kita akan melihat bagaimana InterSystems IRIS for Health memberikan kita alat yang diperlukan untuk penjanaan vektor daripada senarai kod ICD-10 menggunakan model bahasa pra-latihan, penyimpanannya dan carian seterusnya untuk persamaan pada semua vektor yang dihasilkan ini. .

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

Pengenalan

Salah satu ciri utama yang telah muncul dengan pembangunan model AI ialah apa yang kami kenali sebagai RAG (Retrieval-Augmented Generation) yang membolehkan kami menambah baik hasil model LLM dengan memasukkan konteks ke dalam model. Nah, dalam contoh kita konteksnya diberikan oleh set diagnosis ICD-10 dan untuk menggunakannya, kita mesti vektorkannya terlebih dahulu.

Bagaimana untuk mengvektorkan senarai diagnosis kami?

SentenceTransformers dan Embedded Python

Untuk penjanaan vektor, kami telah menggunakan perpustakaan Python SentenceTransformers yang sangat memudahkan penvektoran teks percuma daripada model pra-latihan. Dari laman web mereka sendiri:

Pengubah Ayat (a.k.a. SBERT) ialah modul Python yang sesuai untuk mengakses, menggunakan dan melatih model pembenaman teks dan imej yang terkini. Ia boleh digunakan untuk mengira pembenaman menggunakan model Pengubah Ayat (mula pantas) atau mengira skor persamaan menggunakan model Pengekod Silang (mula pantas). Ini membuka kunci pelbagai aplikasi, termasuk carian semantik, persamaan teks semantik dan perlombongan parafrasa.

Antara semua model yang dibangunkan oleh komuniti SentenceTransformers, kami telah menemui BioLORD-2023-M, model pra-latihan yang akan menjana vektor 786 dimensi.

Model ini dilatih menggunakan BioLORD, strategi pra-latihan baharu untuk menghasilkan perwakilan bermakna bagi ayat klinikal dan konsep bioperubatan.

Metodologi terkini beroperasi dengan memaksimumkan persamaan dalam perwakilan nama yang merujuk kepada konsep yang sama, dan mencegah keruntuhan melalui pembelajaran kontrastif. Walau bagaimanapun, kerana nama bioperubatan tidak selalunya menerangkan sendiri, kadangkala ia menghasilkan perwakilan bukan semantik.

BioLORD mengatasi isu ini dengan mengasaskan perwakilan konsepnya menggunakan takrifan, serta penerangan ringkas yang diperoleh daripada graf pengetahuan pelbagai perkaitan yang terdiri daripada ontologi bioperubatan. Terima kasih kepada asas ini, model kami menghasilkan lebih banyak perwakilan konsep semantik yang lebih sepadan dengan struktur hierarki ontologi. BioLORD-2023 mewujudkan keadaan seni baharu untuk persamaan teks pada kedua-dua ayat klinikal (MedSTS) dan konsep bioperubatan (EHR-Rel-B).

Seperti yang anda boleh lihat dalam definisinya, model ini telah dilatih dengan konsep perubatan yang berguna apabila menvektorkan kedua-dua kod ICD-10 dan teks percuma kami.

Untuk projek kami, kami akan memuat turun model ini untuk mempercepatkan penciptaan vektor:

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

Sebaik sahaja dalam pasukan kami, kami boleh memasukkan teks untuk divektorkan dalam senarai untuk mempercepatkan proses, mari lihat bagaimana kami menvektorkan kod ICD-10 yang telah kami rakamkan sebelum ini dalam ENCODER.Object.Codes kelas.

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
Seperti yang anda lihat, kami mula-mula mengekstrak kod yang disimpan dalam jadual kod ICD-10 kami yang belum kami vektorkan tetapi kami telah merekodkan dalam langkah sebelumnya selepas mengekstraknya daripada fail CSV, kemudian kami mengekstrak senarai perihalan untuk mengvektorkan dan menggunakan pustaka

sentence_transformers Python, kami akan memulihkan model kami dan menjana benam yang berkaitan.

Akhir sekali, kami akan mengemas kini kod ICD-10 dengan penerangan vektor dengan melaksanakan KEMASKINI. Seperti yang anda lihat, arahan untuk mengvektorkan hasil yang dikembalikan oleh model ialah arahan SQL

TO_VECTOR dalam IRIS.

Menggunakannya dalam IRIS

Baiklah, kami mempunyai kod Python kami, jadi kami hanya perlu membungkusnya dalam kelas yang memanjangkan

Ens.BusinessProcess dan memasukkannya dalam pengeluaran kami, kemudian menyambungkannya kepada Perkhidmatan Perniagaan yang bertanggungjawab untuk mendapatkan semula fail CSV dan itu sahaja!

Mari kita lihat rupa kod ini dalam pengeluaran kami:

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

Seperti yang anda lihat, kami mempunyai Perkhidmatan Perniagaan kami dengan penyesuai

EnsLib.File.InboundAdapter yang membolehkan kami mengumpul fail kod dan mengubah hala ke Proses Perniagaan kami di mana kami akan melaksanakan semua pengendalian vektor dan penyimpanan, memberikan kami satu set rekod seperti berikut:

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

Kini aplikasi kami akan bersedia untuk mula mencari kemungkinan padanan dengan teks yang kami hantar!

Dalam artikel berikut...

Dalam artikel seterusnya, kami akan menunjukkan cara aplikasi front-end yang dibangunkan dalam Angular 17 disepadukan dengan pengeluaran kami dalam IRIS for Health dan cara IRIS menerima teks untuk dianalisis, mengvektorkannya dan mencari persamaan dalam ICD-10 jadual kod.

Jangan terlepas!

Atas ialah kandungan terperinci d[IA]gnosis: Diagnostik Vektor dengan Python Terbenam dan Model LLM. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn