В предыдущей статье мы представили приложение d[IA]gnosis, разработанное для поддержки кодирования диагнозов в МКБ-10. В этой статье мы увидим, как InterSystems IRIS for Health предоставляет нам необходимые инструменты для генерации векторов из списка кодов МКБ-10 с использованием предварительно обученной языковой модели, ее хранения и последующего поиска сходств по всем этим сгенерированным векторам. .
Одной из основных функций, появившихся при разработке моделей искусственного интеллекта, является то, что мы знаем как RAG (извлекательно-дополненная генерация), которая позволяет нам улучшать результаты моделей LLM за счет включения контекста в модель. Что ж, в нашем примере контекст задается набором диагнозов МКБ-10, и чтобы их использовать, мы должны сначала их векторизовать.
Как векторизовать наш список диагнозов?
Для генерации векторов мы использовали библиотеку Python SentenceTransformers, которая значительно облегчает векторизацию свободных текстов из предварительно обученных моделей. С их собственного сайта:
Sentence Transformers (также известный как SBERT) — это универсальный модуль Python для доступа, использования и обучения современным моделям встраивания текста и изображений. Его можно использовать для вычисления вложений с помощью моделей Sentence Transformer (быстрое начало) или для расчета показателей сходства с помощью моделей Cross-Encoder (быстрое начало). Это открывает широкий спектр приложений, включая семантический поиск, семантическое сходство текстов и анализ перефразирования.
Среди всех моделей, разработанных сообществом SentenceTransformers, мы нашли BioLORD-2023-M, предварительно обученную модель, которая будет генерировать 786-мерные векторы.
Эта модель была обучена с использованием BioLORD, новой стратегии предварительного обучения для создания осмысленных представлений клинических предложений и биомедицинских концепций.
Современные методологии работают за счет максимизации сходства в представлении имен, относящихся к одной и той же концепции, и предотвращения коллапса за счет контрастного обучения. Однако, поскольку биомедицинские названия не всегда говорят сами за себя, это иногда приводит к несемантическим представлениям.
BioLORD решает эту проблему, обосновывая свои концептуальные представления с помощью определений, а также кратких описаний, полученных из многореляционного графа знаний, состоящего из биомедицинских онтологий. Благодаря этому обоснованию наша модель создает больше семантических представлений концепций, которые более точно соответствуют иерархической структуре онтологий. BioLORD-2023 устанавливает новый уровень сходства текстов как клинических предложений (MedSTS), так и биомедицинских концепций (EHR-Rel-B).
Как видно из определения, эта модель предварительно обучена медицинским концепциям, которые будут полезны при векторизации как наших кодов МКБ-10, так и произвольного текста.
Для нашего проекта мы загрузим эту модель, чтобы ускорить создание векторов:
if not os.path.isdir('/shared/model/'): model = sentence_transformers.SentenceTransformer('FremyCompany/BioLORD-2023-M') model.save('/shared/model/')
Попав в нашу команду, мы можем вводить тексты для векторизации в списки, чтобы ускорить процесс, давайте посмотрим, как мы векторизуем коды МКБ-10, которые мы ранее записали в наши 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
Как видите, сначала мы извлекаем коды, хранящиеся в нашей кодовой таблице МКБ-10, которые мы еще не векторизовали, но которые мы записали на предыдущем шаге после извлечения их из файла CSV, затем извлекаем список описания для векторизации и с помощью библиотеки Python sentence_transformers мы восстановим нашу модель и сгенерируем соответствующие внедрения.
Наконец, мы обновим код МКБ-10 векторизованным описанием, выполнив команду UPDATE. Как видите, команда векторизации результата, возвращаемого моделью, — это команда SQL TO_VECTOR в IRIS.
Хорошо, у нас есть код Python, поэтому нам просто нужно обернуть его в класс, который расширяет Ens.BusinessProcess и включить его в нашу рабочую среду, а затем подключить его к Business Service, отвечающему за извлечение CSV-файл и все!
Давайте посмотрим, как этот код будет выглядеть в нашей продакшене:
Как видите, у нас есть бизнес-сервис с адаптером EnsLib.File.InboundAdapter, который позволит нам собрать файл кода и перенаправить его в наш бизнес-процесс, в котором мы выполним все операции векторизации и хранения, что дает нам набор записей вроде следующего:
Теперь наше приложение готово начать поиск возможных совпадений с текстами, которые мы ему отправляем!
В следующей статье мы покажем, как интерфейс приложения, разработанный в Angular 17, интегрируется с нашим производством в IRIS for Health и как IRIS получает тексты для анализа, векторизует их и ищет сходства в МКБ-10. кодовая таблица.
Не пропустите!
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3