[ 9 семестр: системы искусственного интеллекта ]
Сборка:
go build cmd\main.go
Запуск:
go run cmd\main.go
Данные для лабораторной сгенерированы случайным образом по следующему принципу:
- Название статьи является случайным предложением, для генерации используется faker.Sentence()
- Количество авторов - от 1 до 3, выбирается случайно, для генерации каждого используется faker.Name()
- Поле исследования - одно случайное поле, выбирается из случайным образом из графа
- Принадлежность базам (РИНЦ, ВАК, WoS) - случайным образом выбирается одна из баз
- Год - случайное число из диапазона [1970, 2020]
- Количество цитирований - случайное число из диапазона [0, 40]
- Оценка - случайное число из диапазона [1, 0)
- Время чтения - случайное число из диапазона [5, 30)
Список имен находится в файле names.json
Для коллаборативной фильтрации сгенерирована матрица оценок пользователями статьей.
- Имя пользователя является случайным словосочетанием, для генерации используется faker.Name()
- Оценка пользователем статьи - случайное число из диапазона [0, 5]
Полученная матрица находится в файле users.csv
- Определяется текущий пользователь
- Определяется корреляция оценок пользователей с оценками текущего пользователя
- Отсекаются пользователи с отрицательной оценкой корреляции
- Определяется текущая статья
- Определяются оценки статей, для этого суммируются оценки отобранных пользователей, предварительно помноженные на значение их корреляции с текущим пользователем
Список имено находится в файле names.json.
- Определяется текущая статья
- Определяется корреляция оценок статей с оценками текущей статьи
- Отсекаются статьи с отрицательной оценкой корреляции оценок
- Для каждого пользователя определяется средняя оценка статей
- Определяются оценки статей, для этого создается вектор оценок статьи с учетом вычета для каждого пользователя его средней оценки
- Выводятся лучшие совпадения (сама статья не показывается)
- Параметрический поиск имеет два типа фильтров: постоянные и плавающие фильтры
- Каждый фильтр может быть как постоянным, так и плавающим
- Расширение пространства поиска происходит следующим образом:
- Для области исследования: берутся соседние по графу области исследования
- Для баз данных: добавляется по одной базе данных каждый раз
- Для года выпуска: диапазон расширяется на единицу с каждой стороны
- Для количества цитирований: диапазон расширяется на единицу с каждой стороны
- Для качества исследования: диапазон расширяется на 0.1 с каждой стороны
- Для времени чтения: диапазон расширяется на единицу с каждой стороны
- Авторы и название статьи при поиске не учитываются
- Запускается цикл поиска
- Среди списка статьей ищутся те, что строго подходят под описание
- Если удалось найти хотя бы одну подходящую статью, поиск закончен
- Если найти подходящие статьи не удалось, то расширяем границы поиска
- Если цикл выполнился больше X раз и ничего найти не удалось, выходим - это неудача
- После отбора статей статьи ранжируются. Каждому параметру задается вес, влияющий на то, насколько этот признак значим для оценки схожести. Оценка схожести происходит на основе корреляции
- Определяется, соответствует ли статья хотя бы одному из полей исследования. Если нет, то статья автоматически считается не подходящей
- Определяется, находится ли статья хотя бы в одной из допустимых баз данных
- Определяется, находятся ли вещественные признаки статьи в заданном диапазоне
Данные для поиска лежат в params.json. Файл содержит два объекта - объект-статья, обозначающая левую границу, и объект-статья, обозначающая правую границу. В файле keys.json лежит массив флагов, обозначающих, какие параметры можно расширять, а какие нет.
В примере работы искались статьи, соответствующие следующим критериям:
- тема исследования: "complex_manifold"
- статьи входят в РИНЦ
- год статьи от 1970 до 2021
- количество цитат, время чтения и оценка - любые
Рекомендации найдены за первую итерацию
{Title:Consequatur perferendis sit aut accusantium voluptatem. Authors:[Prof. Aglae Friesen Queen Guadalupe Morissette Ms. Jazlyn Kulas] Fields:[complex_manifold] RINZ:true WAK:false WOS:false Year:2011 Citations:3 Score:0.4409283900936391 ReadingTime:21}
{Title:Voluptatem accusantium aut perferendis consequatur sit. Authors:[Prof. Aglae Friesen Mrs. Elna Schaden Miss Bernita Feeney] Fields:[complex_manifold] RINZ:true WAK:false WOS:false Year:1974 Citations:36 Score:0.5354199838094965 ReadingTime:18}
Во втором примере искались статьи, соответствующие следующим критериям:
- тема исследования: "complex_manifold"
- статьи входят в WOS
- год статьи от 2000 до 2008
- количество цитат от 0 до 2
- менять область исследования не разрешалось
Рекомендации найдены за 2 итераций
{Title:Consequatur perferendis sit aut accusantium voluptatem. Authors:[Prof. Aglae Friesen Queen Guadalupe Morissette Ms. Jazlyn Kulas] Fields:[complex_manifold] RINZ:true WAK:false WOS:false Year:2011 Citations:3 Score:0.4409283900936391 ReadingTime:21}
Наиболее подходящие вам статьи: Счёт: 0.280130 Cтатья: Perferendis sit accusantium voluptatem aut consequatur.
Счёт: 0.279621 Cтатья: Voluptatem sit aut accusantium consequatur perferendis.
Счёт: 0.265004 Cтатья: Consequatur sit accusantium aut perferendis voluptatem.
Счёт: 0.263912 Cтатья: Perferendis consequatur sit aut voluptatem accusantium.
Счёт: 0.254610 Cтатья: Accusantium perferendis sit consequatur voluptatem aut.