Heim >Backend-Entwicklung >Python-Tutorial >d[IA]gnosis: Vektorisierung der Diagnose mit eingebetteten Python- und LLM-Modellen
Im vorherigen Artikel haben wir die d[IA]gnosis-Anwendung vorgestellt, die zur Unterstützung der Kodierung von Diagnosen in ICD-10 entwickelt wurde. In diesem Artikel werden wir sehen, wie InterSystems IRIS for Health uns die notwendigen Werkzeuge für die Generierung von Vektoren aus der ICD-10-Codeliste mithilfe eines vorab trainierten Sprachmodells, dessen Speicherung und die anschließende Suche nach Ähnlichkeiten auf allen diesen generierten Vektoren zur Verfügung stellt .
Eines der Hauptmerkmale, die sich bei der Entwicklung von KI-Modellen herausgebildet haben, ist das, was wir als RAG (Retrieval-Augmented Generation) kennen und es uns ermöglicht, die Ergebnisse von LLM-Modellen zu verbessern, indem wir einen Kontext in das Modell integrieren. Nun, in unserem Beispiel wird der Kontext durch die Menge der ICD-10-Diagnosen vorgegeben und um sie verwenden zu können, müssen wir sie zunächst vektorisieren.
Wie vektorisiere ich unsere Diagnoseliste?
Für die Generierung von Vektoren haben wir die Python-Bibliothek SentenceTransformers verwendet, die die Vektorisierung von Freitexten aus vorab trainierten Modellen erheblich erleichtert. Von ihrer eigenen Website:
Sentence Transformers (auch bekannt als SBERT) ist das Python-Modul der Wahl für den Zugriff, die Verwendung und das Training modernster Text- und Bildeinbettungsmodelle. Es kann zum Berechnen von Einbettungen mithilfe von Satztransformator-Modellen (Schnellstart) oder zum Berechnen von Ähnlichkeitswerten mithilfe von Cross-Encoder-Modellen (Schnellstart) verwendet werden. Dadurch wird eine breite Palette von Anwendungen freigeschaltet, darunter semantische Suche, semantische Textähnlichkeit und Paraphrase-Mining.
Unter allen von der SentenceTransformers-Community entwickelten Modellen haben wir BioLORD-2023-M gefunden, ein vorab trainiertes Modell, das 786-dimensionale Vektoren generiert.
Dieses Modell wurde mit BioLORD trainiert, einer neuen Pre-Training-Strategie zur Erstellung aussagekräftiger Darstellungen für klinische Sätze und biomedizinische Konzepte.
Hochmoderne Methoden maximieren die Ähnlichkeit in der Darstellung von Namen, die sich auf dasselbe Konzept beziehen, und verhindern einen Zusammenbruch durch kontrastives Lernen. Da biomedizinische Namen jedoch nicht immer selbsterklärend sind, kommt es manchmal zu nicht-semantischen Darstellungen.
BioLORD überwindet dieses Problem, indem es seine Konzeptdarstellungen auf Definitionen sowie kurzen Beschreibungen basiert, die aus einem multirelationalen Wissensgraphen abgeleitet sind, der aus biomedizinischen Ontologien besteht. Dank dieser Grundlage erzeugt unser Modell semantischere Konzeptdarstellungen, die besser der hierarchischen Struktur von Ontologien entsprechen. BioLORD-2023 schafft einen neuen Stand der Technik für Textähnlichkeit sowohl bei klinischen Sätzen (MedSTS) als auch bei biomedizinischen Konzepten (EHR-Rel-B).
Wie Sie in seiner Definition sehen können, ist dieses Modell mit medizinischen Konzepten vortrainiert, die bei der Vektorisierung sowohl unserer ICD-10-Codes als auch unseres Freitexts nützlich sein werden.
Für unser Projekt werden wir dieses Modell herunterladen, um die Vektorerstellung zu beschleunigen:
if not os.path.isdir('/shared/model/'): model = sentence_transformers.SentenceTransformer('FremyCompany/BioLORD-2023-M') model.save('/shared/model/')
Sobald wir in unserem Team sind, können wir die zu vektorisierenden Texte in Listen eingeben, um den Prozess zu beschleunigen. Schauen wir uns an, wie wir die ICD-10-Codes vektorisieren, die wir zuvor in unseren ENCODER.Object.Codes Klasse.
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 = FalseWie Sie sehen können, extrahieren wir zunächst die in unserer ICD-10-Codetabelle gespeicherten Codes, die wir noch nicht vektorisiert haben, die wir aber in einem vorherigen Schritt aufgezeichnet haben, nachdem wir sie aus der CSV-Datei extrahiert haben, und dann extrahieren wir die Liste davon Beschreibungen zum Vektorisieren und mithilfe der Python-Bibliothek
sentence_transformers werden wir unser Modell wiederherstellen und die zugehörigen Einbettungen generieren.
Abschließend aktualisieren wir den ICD-10-Code mit der vektorisierten Beschreibung, indem wir das UPDATE ausführen. Wie Sie sehen können, ist der Befehl zum Vektorisieren des vom Modell zurückgegebenen Ergebnisses der SQL-BefehlTO_VECTOR in IRIS.
Verwendung in IRISEns.BusinessProcess erweitert, ihn in unsere Produktion einbinden und ihn dann mit dem Business Service verbinden, der für den Abruf zuständig ist die CSV-Datei und fertig!
Sehen wir uns an, wie dieser Code in unserer Produktion aussehen wird:
Wie Sie sehen können, verfügen wir über unseren Business Service mit dem
EnsLib.File.InboundAdapter-Adapter, der es uns ermöglicht, die Codedatei zu sammeln und sie an unseren Geschäftsprozess weiterzuleiten, in dem wir alles ausführen Vektorisierungs- und Speichervorgänge, wodurch wir eine Reihe von Datensätzen wie die folgenden erhalten:
Jetzt wäre unsere Anwendung bereit, mit der Suche nach möglichen Übereinstimmungen mit den von uns gesendeten Texten zu beginnen!
Im nächsten Artikel zeigen wir, wie das in Angular 17 entwickelte Anwendungs-Frontend in unsere Produktion in IRIS for Health integriert wird und wie IRIS die zu analysierenden Texte empfängt, vektorisiert und nach Ähnlichkeiten im ICD-10 sucht Codetabelle.
Verpassen Sie es nicht!
Das obige ist der detaillierte Inhalt vond[IA]gnosis: Vektorisierung der Diagnose mit eingebetteten Python- und LLM-Modellen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!