Вопрос или проблема
У нас есть проблема, связанная со стандартизированной базой данных названий медикаментов. С другой стороны, существует подмножество названий медикаментов, в которых могут быть орфографические ошибки, различная структура или дефисы, отсутствующие слова и т.д. Также доступна некоторая метаинформация, такая как название производителя, размер упаковки и т.д.
Человек может легко сопоставить эти две базы данных. Мы использовали некоторые методы сравнения строк и создали некоторую вероятностную оценку, и в некоторых случаях это оправдало себя.
Но часто мы сталкиваемся с множеством нюансированных проблем, и условия продолжают накапливаться. Есть ли идеи о том, может ли какой-либо алгоритм машинного обучения помочь? У меня есть базовое понимание всех основных алгоритмов, но пока я не могу найти решение для этой проблемы. Простым примером является сопоставление Epilex 300mg таб с Epilex 300 таблетка. Если нужно, я могу привести больше примеров.
Я считаю, что нет необходимости использовать машинное обучение для этой проблемы. Мы можем решить это с помощью простой таблицы поиска/карты. Дело в том, что нам нужно обновлять таблицу поиска всякий раз, когда мы сталкиваемся с новой категорией.
Чтобы применить машинное обучение к этой проблеме, у вас должны быть данные о наборе предобработанных и обработанных ответов, таких как [Epilex 300mg (предобработанный), Epilex 300 (обработанный)]. Если у вас есть эти данные, вы можете применить модель дерева решений (без обрезки) для предсказания обработанного текста, учитывая необработанный текст. Помните, что вы получите предсказания только с категориями в обученных категориях. Что вы можете сделать, так это, если возникла новая категория, вы можете вручную добавить этот ответ в обучающую выборку. И снова обучить свои данные. Если в следующий раз эта категория встретится, она будет предсказана правильно. Таким образом, вы можете повысить мощность предсказания вашей модели. Со временем вы сможете правильно предсказывать каждый ответ. Здесь прикреплены скриншоты примерного кода.
Для получения актуального кода рассмотрите эту Ссылку.
Ответ или решение
Для решения проблемы сопоставления наименований медикаментов с учетом возможных опечаток, различий в структуре, пропущенных слов и других нюансов, можно воспользоваться методами машинного обучения, однако также следует рассмотреть использование простого подхода на основе таблицы соответствий.
Подход с использованием таблицы соответствий
-
Создание таблицы соответствий: Начните с составления таблицы, где стандартные названия медикаментов будут сопоставлены с некорректными или измененными названиями. Например, запись "Epilex 300mg таб." будет сопоставлена с "Epilex 300 Tablet". Это позволит реализовать быстрый поиск и сопоставление.
-
Обновление таблицы: Каждый раз, когда вы сталкиваетесь с новым наименованием, необходимо добавлять его в таблицу соответствий. Это позволит поддерживать актуальность данных и уменьшит количество сложностей при следующих сопоставлениях.
Подход с использованием машинного обучения
Если вы хотите применить методы машинного обучения, необходимо следовать следующему алгоритму:
-
Сбор данных: Составьте набор данных, включающий пары стандартных и некорректных названий медикаментов. Например:
- "Epilex 300mg" (предобработка) → "Epilex 300" (обработка).
-
Предобработка данных: Обработайте текстовые данные, используя стандартные методы, такие как:
- Приведение к нижнему регистру,
- Удаление специальных символов и лишних пробелов,
- Замена сокращений и аббревиатур на полные формы.
-
Создание и обучение модели: Используйте алгоритмы машинного обучения, такие как:
- Деревья решений: Простые в интерпретации и могут помочь выделить непростые зависимости.
- Методы на основе расстояния (например, Levenshtein): Это позволит оценить степень различия между строками.
-
Обучение модели: Обучите модель на собранном наборе данных. Регулярно обновляйте модель по мере появления новых данных, чтобы улучшать точность предсказаний.
-
Оценка качества модели: Используйте метрики, такие как точность, полнота и F1-мера, чтобы определить эффективность вашей модели.
Автоматизация процесса
Для автоматизации процесса можно создать скрипт или использовать платформу для разработки моделей (например, Google Colab), где можно написать код для предобработки данных и обучения модели. Вы можете использовать Pandas и scikit-learn для выполнения этих задач.
Пример кода
В качестве примера вы можете использовать следующий код для предобработки данных и обучения модели:
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
# Загрузка данных
data = pd.read_csv('medicine_data.csv')
# Предобработка данных
data['processed_name'] = data['raw_name'].str.lower().str.replace('[^a-z0-9]', '')
# Разделение данных на обучающую и тестовую выборки
X_train, X_test, y_train, y_test = train_test_split(data['processed_name'], data['standard_name'], test_size=0.2)
# Обучение модели
model = DecisionTreeClassifier()
model.fit(X_train.values.reshape(-1, 1), y_train)
# Оценка модели
accuracy = model.score(X_test.values.reshape(-1, 1), y_test)
print(f'Точность модели: {accuracy}')
С помощью таких шагов вы сможете наладить процесс сопоставления имен медикаментов и систематизировать данные, что значительно упростит вашу работу.