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, das 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 zu verwenden, müssen wir sie zunächst vektorisieren.
Wie kann ich unsere Diagnoseliste vektorisieren?
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, führt dies manchmal zu nicht semantischen Darstellungen.
BioLORD überwindet dieses Problem, indem es seine Konzeptdarstellungen auf Definitionen sowie Kurzbeschreibungen stützt, 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. Sehen 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 = False
Wie 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 der Beschreibungen zum Vektorisieren und mithilfe der Python-Bibliothek sentence_transformers stellen wir unser Modell wieder her und generieren die zugehörigen Einbettungen.
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-Befehl TO_VECTOR in IRIS.
Okay, wir haben unseren Python-Code, also müssen wir ihn nur in eine Klasse einbinden, die Ens.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 Adapter EnsLib.File.InboundAdapter, der es uns ermöglicht, die Codedatei zu sammeln und an unseren Geschäftsprozess umzuleiten, 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, nach möglichen Übereinstimmungen mit den von uns gesendeten Texten zu suchen!
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!
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3