«Это второй день моего участия в первом испытании обновлений 2022 года. Подробную информацию о мероприятии см.:Вызов первого обновления 2022 г.".
Система ответов на вопросы этого проекта опирается на установленную карту медицинских знаний, которая полностьюматч по правиламОсознайте, классифицируйте вопросы с помощью сопоставления ключевых слов, сами медицинские проблемы относятся к сценариям закрытой области, исчерпайте и классифицируйте вопросы предметной области, а затем используйте совпадение шифра, чтобы сопоставить и найти Neo4j, собрать ответ на вопрос в соответствии с возвращенными данными и, наконец, вернуть результат.
- Классифицировать по характерным словам
- Дальнейший анализ на основе классификации и генерации запроса
- Запрос в neo4j на основе оператора запроса и обработка возвращенных данных
(1) Техническая база
(2) Структура сценария
chatbot_graph.py: скрипт программы вопросов и ответов
question_classifier.py: скрипт классификации типов вопросов.
question_parser.py: скрипт разбора вопроса
answer_search.py: Скрипт запроса вопроса
(3) Реализовать интеллектуальный процесс вопросов и ответов
1. Сопоставьте тему вопроса пользователя и классифицируйте вопрос
В процессе обработки естественного языка наиболее важными этапами являются извлечение сущностей и классификация намерений. По сравнению с английскими словами в китайских словах отсутствует сегментация по пространству, и нелегко провести границу между словами, что увеличивает сложность сегментации предложений и семантического понимания при обработке естественного языка. ahocorasick — это алгоритм сопоставления строк, реализованный двумя структурами данных: trie и автоматами Ахо-Корасика. Trie — это словарь, индексированный строками, и время извлечения связанных элементов пропорционально длине строки. Автоматы Ахо-Корасика (сокращенно автоматы AC) могут найти все строки в заданном наборе за один прогон. Автомат AC может завершить сопоставление строк с несколькими шаблонами, сформировав строку шаблона в дерево Trie и изменив процесс сопоставления основной строки на процесс передачи по дереву Trie. Правила перехода состояния автомата AC размещены в дереве Trie для поиска и сопоставления, что позволяет эффективно искать целевую строку, увеличивать вероятность сопоставления основной строки и строки шаблона, а также эффективно повышать эффективность обработки вопросов. исследование Принять решение обработать проблему пользовательского ввода на основе алгоритма автоматов АС, использовать имена сущностей в графе знаний для формирования базы данных признаков (корпуса) для создания дерева АС (дерева Ахо-Корасика) и использовать алгоритм автоматов АС для сопоставьте, есть ли характерные слова в вопросительном предложении. , то есть, есть ли имя объекта графа знаний в вопросе запроса, чтобы реализовать извлечение объекта. Автоматы AC используются для сопоставления конечного набора подстрок в «словаре» в строке входных строк. Разница между ним и обычным сопоставлением строк заключается в том, что оно сопоставляется со всеми строками словаря одновременно, что значительно повышает эффективность сопоставления.
После того, как пользователь вводит вопрос, вызывается библиотека Python ahocorasick для сопоставления вопросительных слов и слов-характеристик объекта в вопросе.Если соответствующие правила не совпадают, пользователю будет предложено повторно подробно описать вопрос. Если оно соответствует соответствующему типу правил вопросительного предложения и категории объекта в вопросительном предложении (например, спрашивать о болезнях, симптомах, лекарствах и т. д.), то классифицируйте входное вопросительное предложение в соответствии с результатами сопоставления и постройте соответствующий { Feature word: словарь Feature Word Corresponding Type} для определения типа вопроса и тела вопроса.
2. Анализ допроса
После того, как вопрос классифицирован, вопрос необходимо разобрать.После получения доменных слов и их типов сущностей в вопросе генерируются разные языки запросов Cypher в соответствии с категорией вопроса и телом вопроса, что удобно для последующего neo4j граф результатов запросов к базе данных.
3. Запросите графическую базу данных Neo4j и соберите ответ в соответствии с возвращенными данными.
Выполните шифр для запроса базы данных графа Neo4j.Если ответ на соответствующий вопрос найден, будет возвращен соответствующий результат.Если ответ соответствующего типа вопроса не найден, информация описания заболевания или симптома, упомянутого пользователем будет запрошен и возвращен, а затем в соответствии с соответствующим типом вопроса вызвать соответствующий шаблон ответа, чтобы упаковать результаты, возвращаемые запросом к базе данных, и, наконец, вернуть ответ пользователю.
(4) Поддерживаемые типы вопросов и ответов
тип вопроса | Китайское значение | пример вопроса |
---|---|---|
disease_symptom | симптомы болезни | Каковы симптомы рака молочной железы? |
symptom_disease | Найти возможные заболевания с известными симптомами | Что делать, если у меня недавно появился насморк? |
disease_cause | Этиология заболевания | Почему некоторые люди страдают бессонницей? |
disease_acompany | Осложнения заболевания | Каковы осложнения бессонницы? |
disease_not_food | Продукты, которых следует избегать при заболеваниях | Что нельзя есть людям с бессонницей? |
disease_do_food | Какие продукты есть при болезни | Звон в ушах, что есть? |
food_not_disease | При какой болезни лучше не есть что-то | Кому лучше не есть мед? |
food_do_disease | При каких заболеваниях полезна еда? | В чем польза гусиного мяса? |
disease_drug | Какое лекарство принимать при каком заболевании | Какое лекарство следует принимать при заболеваниях печени? |
drug_disease | Что может вылечить медицина | Какие заболевания лечат гранулы Banlangen? |
disease_check | Что делать при заболевании | Как можно диагностировать менингит? |
check_disease | Какое заболевание можно проверить | Что может выявить общий анализ крови? |
disease_prevent | Меры предосторожности | Как мы можем предотвратить почечную недостаточность? |
disease_lasttime | Цикл лечения | Сколько времени нужно, чтобы вылечиться от простуды? |
disease_cureway | лечение | Как лечить высокое кровяное давление? |
disease_cureprob | вероятность излечения | Можно ли вылечить лейкемию? |
disease_easyget | Подверженное заболеванию население | Кто склонен к повышенному давлению? |
disease_desc | описание болезни | сахарный диабет |
Визуальный дисплей
(1) Создание веб-сервиса Flask
Flask — это крошечная веб-инфраструктура, разработанная на Python, основанная на наборе инструментов Werkzeug WSGI и механизме шаблонов Jinja2. Flask использует лицензию BSD. Flask также известен как «микрофреймворк», потому что он использует простое ядро и использует расширения для добавления дополнительных функций. У Flask нет базы данных по умолчанию или инструмента проверки формы. Тем не менее, Flask сохраняет гибкость для добавления этих функций с расширением Flask: ORM, инструменты проверки подлинности с помощью форм, загрузка файлов, различные открытые технологии проверки подлинности и т. д.
Основной режим работы Flask: назначить функцию URL-адресу (унифицированный указатель ресурсов, уникальный адрес каждого информационного ресурса в Интернете) в программе, и всякий раз, когда пользователь получает доступ к этому URL-адресу и отправляет запрос, система будет выполнять Этот URL-адрес предварительно назначается функции, а возвращаемое значение функции извлекается и отображается в браузере.
(2) Компоновка принудительной направляющей ECharts
ECharts, аббревиатура происходит от Enterprise Charts, диаграммы данных коммерческого уровня, представляет собой инструмент визуализации данных с открытым исходным кодом Baidu, библиотеку диаграмм на чистом Javascript, охватывающую различные отраслевые диаграммы, отвечающую различным потребностям, и может бесперебойно работать на ПК и мобильных устройствах, совместима с большинством современных браузеров (IE6/7/8/9/10/11, chrome, firefox, Safari и т. д.), в основе лежит легкая библиотека Canvas ZRender, ECharts предоставляет интуитивно понятные, яркие, интерактивные и персонализированные настраиваемые данные. графики визуализации. Инновационный пересчет с помощью перетаскивания, просмотр данных, роуминг диапазона значений и другие функции значительно улучшают взаимодействие с пользователем и предоставляют пользователям возможность извлекать и интегрировать данные.
Компоновка ECharts с силовым управлением предназначена для имитации модели пружинного заряда и добавления силы отталкивания между каждыми двумя узлами и силы гравитации между двумя узлами каждого ребра.Каждый итерационный узел будет двигаться под действием каждой силы отталкивания и гравитационная сила.После нескольких итераций узлы будут стационарными в сбалансированном по силе положении, чтобы минимизировать энергию всей модели. Имитация neo4j для отображения данных может быть реализована с помощью принудительно управляемой схемы компоновки echarts.
Принцип реализации:
- Инициализация объекта echarts
- Установить категорию данных
- Напишите параметры информации о конфигурации функции: заголовок, окно подсказки, панель инструментов, тип графика, назначьте значения узлам и ребрам.
- Назначить опцию объекту echarts
конечный эффект проекта
1. Интерфейс приветствия: пользователь нажимает кнопку «Открыть открытие», чтобы перейти к основному интерфейсу системы.
2. Главная страница системы: главная страница системы включает в себя вращающееся облако тегов, которое визуально отображает наиболее распространенные заболевания в виде тегов.Пользователи могут напрямую щелкнуть тег заболевания, и на нем будет создана карта знаний о соответствующем заболевании. правая сторона, показывающая отдел, к которому относится заболевание, осложнения, симптомы, диагностические тесты, хорошо принятые лекарства, избегание, рекомендуемые рецепты и подробную информацию о том, что есть.
В сгенерированном графе знаний болезнь является центральным узлом, а легенда справа показывает элементы, связанные с болезнью.Пользователи могут произвольно выбрать скрытие аспектов, на которые они не обращают внимания, и показывать только те части, на которые они не обращают внимания. хочется обратить особое внимание.
Разверните боковую панель слева, и пользователи смогут увидеть атрибутивную информацию, связанную с заболеванием, в основном включая восприимчивую популяцию, продолжительность, вероятность излечения, метод лечения, соответствующие меры введения и защиты.
Пользователи также могут напрямую искать определенное заболевание в поле поиска вверху, ввести название заболевания, которое нужно найти, и щелкнуть поиск, будет создана соответствующая карта знаний, и информация на левой боковой панели будет соответствующим образом изменена. .
3. Интеллектуальный компонент вопросов и ответов: щелкните значок врача в левом нижнем углу, и появится диалоговое окно интеллектуального фельдшера.Пользователь может ввести вопрос в диалоговом окне, и интеллектуальный фельдшер немедленно ответит. результат после запроса.
Резюме и перспективы
Этот проект использует Neo4j в качестве хранилища, основан в области медицины, использует обширные источники данных и берет болезни в качестве ядра и выбирает 7 типов сущностей со шкалой 44 000, 9 типов отношений сущностей со шкалой около 280 000. , и 8 типов типов атрибутов болезни.График медицинских знаний может не только получать атрибутивную информацию, такую как вероятность излечения и причину заболевания, но также воспринимать такие объекты, как «элементы диагностической проверки болезни», «лекарство от болезни», «Болезнь-пища» через визуальную графику Соотношение между ними и визуализацией графа медицинских знаний в локальной системе выполнено на основе схемы компоновки с принудительным управлением сетью колб и графиками. Кроме того, группа также завершила вопрос знаний и ответ на основе традиционных правил и, наконец, использовала оператор шифрованного запроса в качестве sql поиска вопросов и ответов и вернула требуемые результаты после запроса базы данных графов neo4j, а затем дополнительно обернула вывод пользователю с шаблоном ответа Служба вопросов и ответов. Интернет-диагностика и лечение могут позволить пациентам диагностировать основные состояния, не выходя из дома или не регистрируясь, что имеет большую практическую ценность.Построение графа медицинских знаний и интеллектуальные ответы на медицинские вопросы помогают классифицировать и стандартизировать медицинские знания и продвигать лечение.Обмен, распространение и использование знаний имеют прикладное значение в клинической диагностике и лечении, клинических исследованиях, образовании и обучении.
Недостатки в этом проекте еще есть: о причине и предупреждении болезней, собственно возврат - это большой абзац текста.На самом деле сюда можно ввести понятие извлечения событий для дальнейшего структурированного выражения причин. Это можно попробовать позже. Кроме того, в разделе интеллектуальных ответов на вопросы существующая система может только сопоставлять тип вопроса пользователя на основе заданных правил, а затем преобразовывать его в соответствующий оператор шифрования для запроса базы данных графа neo4j, но ограниченные правила трудно изменить. бесконечно трудно охватить все явления языка, поэтому он особенно подвержен ошибкам, а система имеет плохую переносимость. Если здесь можно учесть, что после того, как пользователь вводит вопрос, система может выполнить семантическое сопоставление по вопросу, введенному пользователем, и ввести faiss для сопоставления сходства предложения, то выполнение системного запроса будет более эффективным. . Мы будем продолжать совершенствоваться в будущем.
Подробный код можно увидеть ?git ee.com/new-month-pro…
Смотрите предыдущую статью ?Возьмите вас за руку, чтобы построить карту знаний в области медицины от 0 до 1 (1)
использованная литература
Neo4j от начала до построения простого графа знаний — этот программист не слишком холоден