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. .
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?
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 mevelokkan kod ICD-10 yang telah kami rakamkan sebelum ini dalamENCODER.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
sentence_transformersPython, 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 SQLTO_VECTORdalam IRIS.
Menggunakannya dalam IRIS Baiklah, kami mempunyai kod Python kami, jadi kami hanya perlu membungkusnya dalam kelas yang memanjangkanEns.BusinessProcessdan 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: Seperti yang anda lihat, kami mempunyai Perkhidmatan Perniagaan kami dengan penyesuaiEnsLib.File.InboundAdapteryang 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:
Kini aplikasi kami akan bersedia untuk mula mencari kemungkinan padanan dengan teks yang kami hantar!
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!