«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > d[IA]gnosis: векторизация диагностики с помощью встроенных моделей Python и LLM

d[IA]gnosis: векторизация диагностики с помощью встроенных моделей Python и LLM

Опубликовано 2 сентября 2024 г.
Просматривать:493

В предыдущей статье мы представили приложение d[IA]gnosis, разработанное для поддержки кодирования диагнозов в МКБ-10. В этой статье мы увидим, как InterSystems IRIS for Health предоставляет нам необходимые инструменты для генерации векторов из списка кодов МКБ-10 с использованием предварительно обученной языковой модели, ее хранения и последующего поиска сходств по всем этим сгенерированным векторам. .

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

Введение

Одной из основных функций, появившихся при разработке моделей искусственного интеллекта, является то, что мы знаем как RAG (извлекательно-дополненная генерация), которая позволяет нам улучшать результаты моделей LLM за счет включения контекста в модель. Что ж, в нашем примере контекст задается набором диагнозов МКБ-10, и чтобы их использовать, мы должны сначала их векторизовать.

Как векторизовать наш список диагнозов?

Преобразователи предложений и встроенный Python

Для генерации векторов мы использовали библиотеку 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.

Использование в IRIS

Хорошо, у нас есть код Python, поэтому нам просто нужно обернуть его в класс, который расширяет Ens.BusinessProcess и включить его в нашу рабочую среду, а затем подключить его к Business Service, отвечающему за извлечение CSV-файл и все!

Давайте посмотрим, как этот код будет выглядеть в нашей продакшене:

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

Как видите, у нас есть бизнес-сервис с адаптером EnsLib.File.InboundAdapter, который позволит нам собрать файл кода и перенаправить его в наш бизнес-процесс, в котором мы выполним все операции векторизации и хранения, что дает нам набор записей вроде следующего:

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

Теперь наше приложение готово начать поиск возможных совпадений с текстами, которые мы ему отправляем!

В следующей статье...

В следующей статье мы покажем, как интерфейс приложения, разработанный в Angular 17, интегрируется с нашим производством в IRIS for Health и как IRIS получает тексты для анализа, векторизует их и ищет сходства в МКБ-10. кодовая таблица.

Не пропустите!

Заявление о выпуске Эта статья воспроизведена по адресу: https://dev.to/intersystems/diagnosis-vectorizing-diagnostics-with-embedded-python-and-llm-models-3n8a?1. В случае нарушения прав обращайтесь по адресу [email protected]. удалить его
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3