1.28M

Система NIKA 2.0-4(1)

1.

Интеллектуальная диалоговая
система NIKA

2.

Введение
NIKA is an Intelligent Knowledge-driven Assistant —
интеллектуальная диалоговая система, управляемая
знаниями, способная вести диалог с пользователем
на заданную тему.
2

3.

Введение
3

4.

Архитектура системы NIKA

5.

Принципы работы системы NIKA
NIKA является ostis-системой и разработана по
принципам, лежащим в основе Технологии OSTIS.
Она состоит из базы знаний, решателя задач и
пользовательского интерфейса.
5

6.

База знаний системы NIKA
База знаний системы NIKA включает:
❏ базовые предметные области, содержащие основные понятия,
необходимые при решении логических задач, задач поиска и
задач управления диалогом с пользователем;
❏ информацию о пользователях;
❏ классы сообщений пользователей и цепочки логических
продукций, по которым выводится ответ на сообщения
пользователей;
❏ формальную спецификацию агентов управления диалогом с
пользователем;
❏ прикладные предметные области, на темы которых может
вестись диалог с пользователем;
❏ модель пользовательского интерфейса.
6

7.

Решатель задач системы NIKA
Решатель задач системы NIKA включает:
❏ агент идентификации пользователя;
❏ агент идентификации диалога с известным пользователем;
❏ агент идентификации диалога с неизвестным пользователем;
❏ агент построения диалога с пользователем;
❏ агент классификации темы и выделения сущностей из нового сообщения в
диалоге с пользователем;
❏ агент поиска контекста сообщения в диалоге с пользователем;
❏ агент вывода ответа на новое классифицированное сообщение в диалоге с
пользователем;
❏ агент поиска графов по заданному графу-образцу с фиксированной
стратегией поиска;
❏ агент трансляции графа в текст на естественном языке;
❏ агент управления диалогом с пользователем через Telegram;
❏ агент управления диалогом с пользователем посредством веб-интерфейса.
7

8.

Пользовательский интерфейс системы NIKA
Пользовательский
интерфейс
реализован в виде:
❏ веб-клиента (через браузер)
❏ и Telegram-бота.
системы
NIKA
Пользовательский
интерфейс
системы
реализованный в виде веб-клиента, включает:
NIKA,
❏ компонент диалога с пользователем на естественном языке;
❏ компонент вывода ответа на сообщение пользователя в
виде графа.
8

9.

Ответ на сообщение в системе NIKA
1. Пользователь вводит сообщение на заданную тему. Сообщение
устанавливается как сообщение от неизвестного пользователя.
2. После система определяет пользователя и его класс.
3. Далее система находит существующий или инициализирует новый
диалог с этим пользователем. Сообщение пользователя добавляется
в полученный диалог с пользователем.
4. Затем система определяет класс сообщения, выделяет сущности из
него.
5. Используя класс сообщения и выделенные из него сущности,
система применяет логические продукции для получения ответа на
заданное сообщение.
6. После система транслирует ответ, представленный в виде графа, в
текст на естественном языке.
7. Затем полученный ответ добавляется в диалог с пользователем.
Текст ответ выводится в компоненте диалога с пользователем.
9

10.

Запуск системы NIKA в браузере
● 1й терминал:
cd nika
./scripts/start.sh
изменения
build_kb
#
выполняется
в
первый
раз
или
после
её
./scripts/start.sh machine
● 2й терминал:
cd nika
./scripts/start.sh web
● 3й терминал:
cd nika
./scripts/start.sh interface
10

11.

Запуск системы NIKA в виде Telegram-бота
● терминал:
cd nika
export BOT_TOKEN= # может быть получен через BotFather в телеграмм
./scripts/start.sh
изменения
build_kb
#
выполняется
в
первый
раз
или
после
её
./scripts/start.sh machine
Перед запуском сборки базы знаний необходимо в исходном файле knowledgebase/users/students/students.scs заменить id пользователя на свой id в Telegram.
11

12.

Обучение системы NIKA

13.

Принципы обучения системы NIKA
Под обучением системы NIKA понимается процесс добавления
новых знаний заданной предметной области в базу знаний этой
системы, необходимых для ответа на сообщения по этой заданной
предметной области.
Для обучения системы NIKA необходимо:
1. Формализовать предметные области на заданную тему, то есть
описать сущности, связи между ними и их классы по заданной
теме и погрузить их в базу знаний системы.
2. Формализовать классы сообщений и соответствующие им
цепочки логических продукций для ответа на сообщения
пользователя по заданной теме и погрузить их в базу знаний
системы.
13

14.

Принципы обучения системы NIKA
Под формализацией знаний в системе NIKA понимается
представление этих знаний на формальном языке — SC-коде
(Semantic
Computer),
являющимся
внутренним
языком
представления знаний в ostis-системах.
Формами представления знаний в ostis-системах являются SCgкод и SCs-код.
14

15.

Принципы обучения системы NIKA
Формализация знаний в системе NIKA осуществляется
посредством разработки исходных файлов на SCg-коде и SCsкоде в директории knowledge-base/, находящейся в корне проекта
системы.
В этой директории можно создавать любые новые поддиректории
и файлы формата .gwf и/или .scs.
15

16.

Пример знания на SCg-коде и SCs-коде
Petya
<- concept_human;
<=> nrel_friend:
Vasya
(*
<- concept_human;;
=> nrel_sister:
Anna;;
*);
=> nrel_brother:
Igor;;
16

17.

Примеры формализации знаний на SCg-коде
и SCs-коде
Пример на
множеств
Языке
Пример на SCg-коде
Пример на SCs-коде
A -> a;;
a ∈ A или A ∋ a
или
a <- A;;
17

18.

Примеры формализации знаний на SCg-коде
и SCs-коде
Пример на
множеств
Языке
Пример на SCg-коде
Пример на SCs-коде
A -|> a;;
a ∉ A или A ∌ a
или
a <|- A;;
18

19.

Примеры формализации знаний на SCg-коде
и SCs-коде
Пример на
множеств
Языке
A = {<a, 1>, …}
(множеству A
принадлежит элемент
a с ролью 1)
Пример на SCg-коде
Пример на SCs-коде
A -> rrel_1: a;;
или
a <- rrel_1: A;;
19

20.

Примеры формализации знаний на SCg-коде
и SCs-коде
Пример на
множеств
Языке
A = {<a, 1>, <b, 2>}
(массив из двух
элементов)
Пример на SCg-коде
Пример на SCs-коде
A
-> rrel_1: a;
-> rrel_2: b;;
20

21.

Примеры формализации знаний на SCg-коде
и SCs-коде
Пример на
множеств
А⊃B
или
B⊂A
Языке
Пример на SCg-коде
Пример на SCs-коде
A
=> nrel_inclusion:
B;;
21

22.

Примеры формализации знаний на SCg-коде
и SCs-коде
Пример на
множеств
Языке
мужчины = {
Игорь, …}
Пример на SCg-коде
Пример на SCs-коде
Igor
=> nrel_main_idtf:
[Игорь];
<- concept_man;;
concept_man
=> nrel_main_idtf:
[мужчина];
<- sc_node_class;;
22

23.

Примеры формализации знаний на SCg-коде
и SCs-коде
Пример на Языке
Пример на SCg-коде
множеств
Пример на SCs-коде
Igor
=> nrel_main_idtf:
[Игорь];
<=> nrel_friends:
Sergey;;
друзья
=
Сергей>, …}
{<Игорь,
Sergey
=> nrel_main_idtf:
[Сергей];;
nrel_friends
=> nrel_main_idtf:
[быть другом*];
<- sc_node_non_role_relation;;
23

24.

Пример обучения системы NIKA

25.

Выбор предметной области для системы
NIKA
В качестве примера рассмотрим процесс обучения
системы NIKA по теории множеств.
25

26.

Пример диалога системы NIKA с
пользователем по теории множеств
Пользователь: “Что ты знаешь по теории множеств?”
NIKA: “Я знаю следующие понятия в рамках теории множеств:
- множество;
- кортеж;
- …”
Пользователь: “Что такое кортеж?”
NIKA: “Кортеж — это множество, в котором элементы имеют различные роли.”
Пользователь: “Приведи примеры кортежей.”
NIKA: “Примеры кортежей:
- строка символов — <и, н, т, е, л, л, е, к, т>;
- родитель и его ребёнок — <Олег, Миша>;
- команда из 3 человек — <Иванов, Петров, Сидоров>.”

26

27.

Пример диалога системы NIKA с
пользователем по теории множеств
Чтобы система NIKA могла вести указанный диалог
с пользователем, необходимо формализовать
предметную область теории множеств, а именно
формализовать:
● понятия, определения и пояснения к ним,
примеры понятий;
● классы сообщений;
● цепочки
логических
продукций,
соответствующих этим классам сообщений.
27

28.

Выделение сущности из сообщения в
системе NIKA
В сообщении “Что ты знаешь по теории множеств?”:
● типовая часть сообщения – “Что ты знаешь по”;
● сущность – теория множеств.
Типовая часть сообщения соответствует классу
сообщения.
28

29.

Формализация сущности “Теория
множеств” на SCs-коде
topic_set_theory
=> nrel_main_idtf:
[Теория множеств]
(*
<- lang_ru;;
*);
=> nrel_idtf:
[Основы теории множеств]
(*
<- lang_ru;;
*);
<- concept_discipline;
=> nrel_decomposition: <
topic_1_basic_concepts_sets;
topic_2_operations_sets;
topic_3_relations_functions;
topic_4_cardinality_sets
>;
29

30.

Формализация сущности “Теория
множеств” на SCs-коде
=> nrel_key_concept:
concept_set;
concept_finite_set;
concept_infinite_set;
concept_empty_set;
concept_subset;
concept_proper_subset;
concept_power_set;
concept_tuple;
concept_cartesian_product;
concept_relation;
concept_function;
concept_cardinality;
concept_equivalence_relation;
concept_partial_order;
concept_ordinal_number;
concept_cardinal_number;
30

31.

Формализация сущности “Теория
множеств” на SCs-коде
=> nrel_definition:
[Теория множеств — раздел дискретной математики, изучающий множества и их свойства
как фундаментальные объекты, лежащие в основе большинства математических структур.]
(*
<- concept_definition;;
*);
=> nrel_explanation:
[Дисциплина направлена на формирование представлений о ключевых понятиях и законах
теории множеств, её роли в формализации и аксиоматизации математики, а также на развитие
навыков строгого логического рассуждения и доказательства.]
(*
<- concept_explanation;;
*);
31

32.

Формализация сущности “Теория
множеств” на SCs-коде
=> nrel_purpose:
[В результате изучения дисциплины учащийся должен:
• <i>знать</i>:
◦ основные определения и обозначения теории множеств;
◦ свойства и операции над множествами;
◦ понятия отношения, отображения, кардинального числа и ординала
◦ и другое.
• <i>уметь</i>:
◦ выполнять операции над множествами и анализировать их свойства;
◦ формулировать и доказывать утверждения, используя язык теории множеств;
◦ применять методы теории множеств для описания структур и отношений в информатики.
• <i>владеть</i>:
◦ навыками формализации математических объектов с помощью аппарата теории множеств;
◦ методами доказательства теорем, индукции и построения контрпримеров;
◦ приёмами использования теории множеств как основы для логических и компьютерных моделей.]
(*
<- concept_purpose;;
=> nrel_format: format_html;;
*);;
32

33.

Создание исходного файла сущности
“Теория множеств” на SCs-коде
Формализацию сущности “Теория множеств” можно
сохранить в виде исходного файла knowledgebase/system/disciplines/set-theory/topic_set_theory.scs,
предварительно создав необходимые поддиректории.
33

34.

Выделение сущности из сообщения в
системе NIKA
В сообщении “Что такое кортеж?”:
● типовая часть сообщения – “Что такое”;
● сущность – кортеж.
В сообщении “Приведи примеры кортежей.”:
● типовая часть сообщения – “Приведи примеры”;
● сущность – кортеж.
Типовые части сообщений соответствуют классам
этих сообщений.
34

35.

Формализация сущности “кортеж” на SCsкоде
concept_tuple
=> nrel_main_idtf:
[кортеж]
(*
<- lang_ru;;
*);
=> nrel_idtf:
[упорядоченный набор]
(*
<- lang_ru;;
*);
[кортеж данных]
(*
<- lang_ru;;
*);
35

36.

Формализация сущности “кортеж” на SCsкоде
<- sc_node_class;
<- concept;
<- concept_class;
<= nrel_inclusion:
concept_set;
=> nrel_definition:
[Кортеж — это множество, в котором элементы имеют различные роли.]
(*
<- concept_definition;;
*);
36

37.

Формализация сущности “кортеж” на SCsкоде
=> nrel_example:
[строка символов — <и, н, т, е, л, л, е, к, т>]
(*
<- concept_example;;
*);
[родитель и его ребёнок — <Олег, Миша>]
(*
<- concept_example;;
*);
[команда из 3 человек — <Иванов, Петров, Сидоров>]
(*
<- concept_example;;
*);;
37

38.

Создание исходного файла сущности
“кортеж” на SCs-коде
Формализацию сущности “кортеж” можно сохранить в
виде
исходного
файла
knowledgebase/system/disciplines/settheory/concepts/concept_tuple.scs, предварительно создав
необходимые поддиректории.
38

39.

Тестирование исходного файла базы знаний
Для проверки синтаксической корректности исходного файла базы
знаний требуется выполнить процесс сборки всей базы знаний с этим
новым фрагментом. Для этого в терминале, запустив его из корня
проекта системы, необходимо выполнить следующий скрипт:
./scripts/start.sh build_kb
39

40.

Пример успешной собранной базы знаний
40

41.

Пример собранной базы знаний с ошибкой
41

42.

Пример диалога системы NIKA с
пользователем по теории множеств
В процессе формализации сущностей
выделены три класса сообщений:
● “Что ты знаешь по”;
● “Что такое”;
● “Приведи примеры”.
были
Их можно формализовать на SCs-коде.
42

43.

Формализация класса сообщений “Что ты
знаешь по” на SCs-коде
concept_student_message_about_subject_domain
<- sc_node_class;
=> nrel_main_idtf:
[класс сообщений учащихся о запросе информации по теме]
(*
<- lang_ru;;
*);
<- concept_message_topic;
<= nrel_inclusion:
concept_student_message;
43

44.

Формализация класса сообщений “Что ты
знаешь по” на SCs-коде
=> nrel_corresponding_skill:
...
(*
=> nrel_main_idtf:
[найти информацию по указанной предметной области]
(*
<- lang_ru;;
*);;
<- concept_skill;;
<- .process_disciplines;;
*);
=> nrel_example:
[Что ты знаешь по теории множеств?]
(*
<- concept_example;;
*);
44

45.

Формализация класса сообщений “Что ты
знаешь по” на SCs-коде
=> nrel_message_keywords: [
что ты знаешь по;
расскажи про;
мне интересно узнать о;
что изучает
];
=> nrel_message_patterns: [
что.*ты.*знаешь.*по
];
=> nrel_entity_class_descriptions: {
{
rrel_entity_class: concept_discipline
}
};;
45

46.

Создание исходного файла класса
сообщений “Что ты знаешь по” на SCs-коде
Формализацию класса сообщений “Что ты знаешь по”
можно сохранить в виде исходного файла knowledgebase/system/messages/known-user-messages/studentmessages/examples/aboutdisciplines/concept_student_message_about_subject_domai
n.scs.
46

47.

Формализация класса сообщений “Что ты
знаешь по” на SCs-коде
При помощи отношения nrel_message_keywords задаются
ключевые слова и словосочетания, которые должны встречаться в
сообщениях заданного класса сообщений.
При помощи отношения nrel_message_patterns могут задаваться
регулярные выражения для проверки принадлежности сообщения
заданному классу сообщений.
При помощи отношения nrel_entity_class_descriptions задаются
описания классов сущностей, которые должны распознаваться в
сообщениях заданного класса сообщений.
47

48.

Формализация классов сообщений на SCsкоде
Больше примеров формализации классов сообщений
можно
найти
в
директории
knowledgebase/system/messages/known-user-messages/studentmessages/examples/.
48

49.

Классификация сообщений в системе NIKA
По-умолчанию, классификация сообщений в NIKA
осуществляется при помощи агента на С++, который
реализует определение классов сообщений по ключевым
словам и выделении сущностей из сообщений по
терминам, представленным в базе знаний.
49

50.

Классификация сообщений в системе NIKA
Можно создать и обучить собственный классификатор
сообщений. Для этого в исходном файле problemsolver/py/modules/messageClassifyModule/classifier/Messa
geClassifier.py находится пример классификатора на
Python,
который
можно
дополнить
любыми
существующими методами (NLP, LLM и прочее).
50

51.

Запуск системы NIKA в браузере с
собственным классификатором
● 1й терминал:
cd nika
./scripts/start.sh build_kb # выполняется в первый раз или после её изменения
./scripts/start.sh machine
● 2й терминал:
cd nika
./scripts/start.sh web
● 3й терминал:
cd nika
./scripts/start.sh interface
● 4й терминал:
cd nika
./scripts/start.sh py_server
51

52.

Пример диалога системы NIKA с
пользователем по теории множеств
Формализация классов сообщений “Что такое” и
“Приведи примеры” выполняется по аналогии.
Формализация классов сообщений позволяет
системе NIKA только классифицировать сообщения.
Для ответа на сообщения определённого класса
системе NIKA необходимо иметь цепочку
логических продукций ответа, соответствующую
этому классу сообщений.
52

53.

Формализация цепочки логических продукций
ответа для класса сообщений “Что ты знаешь по”
на SCs-коде
@discipline_concepts_found_reply_template = [Я знаю следующие понятия в рамках дисциплины
“<b>${concept_discipline}</b>":
#foreach
• ${concept}
#endfor];;
@if_discipline_concepts_found_production = {
rrel_condition_template: {
rrel_template: [*
@input_param1 = (.._discipline <-_ concept_discipline);;
.._discipline _=> nrel_key_concept:: .._concept;;
@sort_param = (.._concept <-_ concept);;
*];
rrel_template_input_params: {
@input_param1
};
rrel_sort_param:
@sort_param
} (* <- nrel_search_set_template;; *);
rrel_reply_template: {
rrel_message_template: @discipline_concepts_found_reply_template;
}
};;
@if_discipline_concepts_found_production <- nrel_reply_production;;
53

54.

Формализация цепочки логических продукций
ответа для класса сообщений “Что ты знаешь по”
на SCs-коде
@discipline_concepts_not_found_reply_template = [Хм, интересный запрос! К сожалению, в моей базе знаний
<b>мало информации</b> по этой дисциплине.
❗ Попробуй переформулировать вопрос или задать его немного по-другому.];;
@if_discipline_concepts_not_found_production = {
rrel_condition_template: {
rrel_template: [*
@input_param1 = (.._concept <-_ concept_discipline);;
*];
rrel_template_input_params: {
@input_param1
}
} (* <- nrel_search_template;; *);
rrel_reply_template: {
rrel_message_template: @discipline_information_not_found_reply_template
}
};;
@if_discipline_concepts_not_found_production <- nrel_reply_production;;
54

55.

Формализация цепочки логических продукций
ответа для класса сообщений “Что ты знаешь по”
на SCs-коде
@discipline_not_found_reply_template = [
English     Русский Rules