Please use this identifier to cite or link to this item: https://er.chdtu.edu.ua/handle/ChSTU/6734
Title: Розроблення нейромережевої рекомендаційної системи для персоналізованого підбору фільмів
Authors: Мірошкіна, Ірина Володимирівна
КОРОТКА, Єлизавета Олександрівна
Keywords: РЕКОМЕНДАЦІЙНА СИСТЕМА, НЕЙРОННІ МЕРЕЖІ, ТРАНСФОРМЕРНІ МОДЕЛІ, СЕМАНТИЧНИЙ ПОШУК, ЕМБЕДДИНГИ, ПЕРСОНАЛІЗАЦІЯ, МЕДІАКОНТЕНТ;RECOMMENDATION SYSTEM, NEURAL NETWORKS, TRANSFORMER MODELS, SEMANTIC SEARCH, EMBEDDINGS, PERSONALIZATION, MEDIA CONTENT
Issue Date: 18-Dec-2025
Abstract: Кваліфікаційна робота магістра присвячена розробленню нейромережевої рекомендаційної системи фільмів на основі семантичного пошуку та векторних подань. Актуальність теми зумовлена стрімким зростанням обсягів медіаконтенту та потребою в інтелектуальних методах його персоналізованого впорядкування. Об’єктом дослідження є процес формування рекомендацій у системах медіаконтенту, а предметом — трансформерні моделі, методи побудови ембеддингів і алгоритми оцінювання релевантності. У роботі реалізовано підходи до попередньої обробки даних, формування векторних представлень фільмів і пошуку на основі косинусної подібності, а також розроблено інструменти інтерактивної взаємодії з користувачем. Отримані результати можуть бути використані в стримінгових сервісах, медіаплатформах і вебзастосунках для підвищення якості персоналізованих рекомендацій та семантичного пошуку контенту.
The master’s thesis focuses on the development of a neural network–based movie recommendation system using semantic search and vector representations. The relevance of the study is driven by the rapid growth of media content and the need for intelligent technologies to organize and personalize access to it. The object of the research is the process of generating personalized recommendations in media systems, while the subject includes transformer models, embedding methods, and relevance estimation algorithms. The work implements data preprocessing techniques, construction of vector representations of movies, and cosine similarity–based retrieval, as well as interactive search tools for natural language queries. The obtained results can be applied in streaming services, media platforms, and web applications to improve the quality of personalized recommendations and semantic content search.
URI: https://er.chdtu.edu.ua/handle/ChSTU/6734
Appears in Collections:112 Статистика (Аналіз даних (DATA SCIENCE) та комп'ютерна статистика)

Files in This Item:
File Description SizeFormat 
КОРОТКА Є.О. Кваліфікаційна робота магістра.pdf
  Restricted Access
25.29 MBAdobe PDFView/Open Request a copy


Items in DSpace are protected by copyright, with all rights reserved, unless otherwise indicated.

Extracted text
 
 
 
2 
 
РЕФЕРАТ 
 
Магістерська кваліфікаційна робота є завершеним науково-дослідним 
проєктом, який має логічно вибудувану структуру та відповідає чинним вимогам до 
робіт освітнього рівня «магістр». Вона складається зі вступу, у якому обґрунтовано 
актуальність теми та визначено основні характеристики дослідження, трьох 
основних розділів, що послідовно розкривають теоретичні, методичні та практичні 
аспекти роботи, загальних висновків, списку використаних джерел і додатків. 
Загальний обсяг магістерської кваліфікаційної роботи становить 60 сторінок 
основного тексту, що забезпечує можливість детального аналізу предметної області 
та результатів дослідження. Робота містить 11 рисунків, які ілюструють архітектуру 
системи, етапи обробки даних і результати експериментів, а також 6 таблиць, у яких 
систематизовано вхідні дані та підсумкові показники. Для формалізації 
використаних підходів застосовано 11 математичних формул. Список використаних 
джерел налічує 34 найменування, що охоплюють сучасні наукові публікації, 
монографії та електронні ресурси, а також подано 4 додатки із допоміжними 
матеріалами.  
Актуальність теми дослідження визначається стрімким зростанням обсягів 
цифрового медіаконтенту, зокрема фільмів, серіалів і відеоматеріалів, а також 
ускладненням процесів їх ефективного пошуку, аналізу та впорядкування. Сучасні 
медіаплатформи функціонують в умовах інформаційного перевантаження, коли 
користувачам дедалі складніше самостійно знаходити релевантний контент 
відповідно до власних інтересів і вподобань. У таких умовах зростає потреба у 
впровадженні інтелектуальних рекомендаційних систем, заснованих на 
нейромережевих технологіях. Традиційні методи рекомендацій, що ґрунтуються на 
простих статистичних або правилових підходах, виявляються недостатньо 
ефективними для аналізу великих, різнорідних і слабкоструктурованих наборів 
даних, а також для оброблення користувацьких запитів природною мовою. Саме 
тому сучасні трансформерні моделі, методи семантичного пошуку та використання 
векторних подань текстової інформації стають ключовими інструментами 
3 
 
побудови високоточних, адаптивних і персоналізованих рекомендаційних систем у 
сфері медіаконтенту.  
Об’єктом дослідження у магістерській кваліфікаційній роботі є процес 
формування персоналізованих рекомендацій у системах управління, пошуку та 
споживання медіаконтенту, що використовуються в цифрових платформах, 
стримінгових сервісах і мультимедійних інформаційних середовищах.  
Предметом дослідження є сукупність методів, алгоритмів і нейромережевих 
моделей семантичного пошуку та рекомендації, які забезпечують аналіз текстових 
описів фільмів, їхніх жанрових характеристик, а також супровідних метаданих. До 
предмета дослідження також належать методи побудови векторних подань 
контенту, механізми порівняння таких подань і алгоритми визначення ступеня 
релевантності між інформаційними запитами користувачів і наявним 
медіаконтентом.  
Метою кваліфікаційної роботи є розроблення, реалізація та 
експериментальна перевірка нейромережевої рекомендаційної системи фільмів, яка 
базується на використанні векторних подань даних і механізмів семантичного 
пошуку. Досягнення поставленої мети передбачає підвищення точності 
рекомендацій, покращення якості персоналізації та забезпечення зручної взаємодії 
користувача із системою.  
Для досягнення поставленої мети в роботі сформовано та послідовно 
вирішено такі завдання: дослідження теоретичних і методологічних основ 
побудови рекомендаційних систем; аналіз сучасних підходів до обробки природної 
мови та можливостей трансформерних моделей; розроблення методів попередньої 
обробки, нормалізації та очищення вхідних даних; формування векторних 
представлень фільмів на основі текстових описів і метаданих; реалізація алгоритмів 
семантичного пошуку з використанням косинусної подібності; створення 
інструментів інтерактивного пошуку та рекомендації фільмів; експериментальне 
оцінювання якості роботи системи із застосуванням сучасних метрик релевантності 
та точності.  
4 
 
Методи дослідження, використані в роботі, охоплюють комплекс 
теоретичних, статистичних і комп’ютерних методів. Теоретичні методи 
застосовано для аналізу, узагальнення та систематизації наукових публікацій і 
сучасних підходів до семантичного пошуку та рекомендаційних систем. 
Статистичні методи використовуються для формування ембеддингів, обчислення 
показників косинусної подібності між векторними поданнями, а також для 
фільтрації та відбору релевантних даних. Комп’ютерні методи передбачають 
програмну реалізацію розроблених алгоритмів мовою Python, побудову та 
тестування нейромережевої моделі, а також обробку користувацьких запитів 
природною мовою в інтерактивному режимі.  
Практичне значення отриманих результатів полягає в можливості 
використання розробленої рекомендаційної системи в сучасних стримінгових 
сервісах, онлайн-кінотеатрах і медіаплатформах, а також в аналітичних системах 
класу Digital Media Intelligence. Запропоноване рішення може бути інтегроване у 
вебдодатки, інформаційні портали, чат-боти та інтелектуальні системи 
персоналізованого пошуку й рекомендації медіаконтенту. Окрім того, результати 
роботи можуть бути використані в навчальному процесі під час викладання 
дисциплін, пов’язаних із Data Science, машинним навчанням і штучним інтелектом. 
Ключові слова: рекомендаційна система, нейронні мережі, трансформерні 
моделі, семантичний пошук, ембеддинги, персоналізація, медіаконтент. 
5 
 
ABSTRACT 
 
The master’s qualification thesis is a completed research project that has a logically 
structured organisation and complies with the current requirements for works of the 
“master’s” educational level. It consists of an introduction, which substantiates the 
relevance of the topic and defines the main characteristics of the research, three main 
chapters that consistently reveal the theoretical, methodological, and practical aspects of 
the work, general conclusions, a list of references, and appendices. The total volume of 
the master’s qualification thesis is 60 pages of the main text, which provides an 
opportunity for a detailed analysis of the subject area and research results. The thesis 
contains 11 figures that illustrate the system architecture, data processing stages, and 
experimental results, as well as 6 tables in which the input data and final indicators are 
systematised. To formalise the applied approaches, 11 mathematical formulas are used. 
The list of references includes 34 entries covering modern scientific publications, 
monographs, and electronic resources, and 4 appendices with supplementary materials is 
also provided.  
The relevance of the research topic is determined by the rapid growth in the 
volume of digital media content, in particular films, TV series, and video materials, as 
well as by the increasing complexity of their effective search, analysis, and organisation. 
Modern media platforms operate under conditions of information overload, when it 
becomes increasingly difficult for users to independently find relevant content according 
to their own interests and preferences. Under such conditions, the need for the 
implementation of intelligent recommendation systems based on neural network 
technologies is increasing. Traditional recommendation methods based on simple 
statistical or rule-based approaches prove to be insufficiently effective for analysing large, 
heterogeneous, and weakly structured datasets, as well as for processing user queries in 
natural language. Therefore, modern transformer models, semantic search methods, and 
the use of vector representations of textual information become key tools for building 
high-precision, adaptive, and personalised recommendation systems in the field of media 
content.  
6 
 
 
The object of research in the master’s qualification thesis is the process of forming 
personalised recommendations in media content management, search, and consumption 
systems used in digital platforms, streaming services, and multimedia information 
environments.  
The subject of research is a set of methods, algorithms, and neural network models 
of semantic search and recommendation that provide analysis of textual descriptions of 
films, their genre characteristics, as well as accompanying metadata. The subject of 
research also includes methods for constructing vector representations of content, 
mechanisms for comparing such representations, and algorithms for determining the 
degree of relevance between users’ information queries and the available media content.  
The purpose of the qualification thesis is the development, implementation, and 
experimental validation of a neural network-based movie recommendation system that is 
based on the use of vector data representations and semantic search mechanisms. 
Achieving this goal involves increasing recommendation accuracy, improving the quality 
of personalisation, and ensuring convenient user interaction with the system.  
To achieve the stated goal, the following tasks were formulated and consistently 
solved in the thesis: study of the theoretical and methodological foundations of building 
recommendation systems; analysis of modern approaches to natural language processing 
and the capabilities of transformer models; development of methods for preprocessing, 
normalization, and cleaning of input data; formation of vector representations of films 
based on textual descriptions and metadata; implementation of semantic search 
algorithms using cosine similarity; creation of tools for interactive search and 
recommendation of films; experimental evaluation of the system performance quality 
using modern relevance and accuracy metrics.  
The research methods used in the thesis include a complex of theoretical, 
statistical, and computational methods. Theoretical methods were applied for the analysis, 
generalisation, and systematisation of scientific publications and modern approaches to 
semantic search and recommendation systems. Statistical methods are used for generating 
embeddings, calculating cosine similarity measures between vector representations, as 
7 
 
well as for filtering and selecting relevant data. Computational methods involve the 
software implementation of the developed algorithms using the Python programming 
language, building and testing a neural network model, and processing user queries in 
natural language in an interactive mode. The practical significance of the obtained results 
lies in the possibility of using the developed recommendation system in modern streaming 
services, online cinemas, and media platforms, as well as in analytical systems of the 
Digital Media Intelligence class. The proposed solution can be integrated into web 
applications, information portals, chatbots, and intelligent systems for personalised search 
and recommendation of media content. In addition, the results of the thesis can be used 
in the educational process when teaching disciplines related to Data Science, machine 
learning, and artificial intelligence.  
Keywords: recommendation system, neural networks, transformer models, 
semantic search, embeddings, personalisation, media content. 
8 
 
ЗМІСТ  
 
ПЕРЕЛІК УМОВНИХ ПОЗНАЧЕНЬ, СИМВОЛІВ, СКОРОЧЕНЬ І ТЕРМІНІВ .... 9 
ВСТУП ........................................................................................................................ 11 
1 ТЕОРЕТИЧНІ ОСНОВИ РЕКОМЕНДАЦІЙНИХ СИСТЕМ ............................... 14 
1.1 Класифікація рекомендаційних підходів ......................................................... 14 
1.2 Семантичний пошук у інформаційних системах............................................. 15 
1.2.1 Текстові ембеддинги ................................................................................... 16 
1.2.2 Косинусна міра подібності ......................................................................... 18 
1.3 Трансформерні моделі у задачах рекомендацій .............................................. 19 
Висновки до розділу 1 ............................................................................................ 22 
2 АНАЛІЗ ДАНИХ ТА МЕТОДИ ПОПЕРЕДНЬОЇ ОБРОБКИ .............................. 23 
2.1 Структура та характеристики датасету ............................................................ 23 
2.1.1 Очищення та нормалізація текстових даних ............................................. 24 
2.1.2 Оброблення жанрів і акторських списків .................................................. 27 
2.2 Методи виділення ключових ознак .................................................................. 30 
2.3 Визначення інтенцій і заперечень у запитах ................................................... 33 
Висновки до розділу 2 ............................................................................................ 36 
3 РОЗРОБЛЕННЯ НЕЙРОМЕРЕЖЕВОЇ РЕКОМЕНДАЦІЙНОЇ СИСТЕМИ ....... 38 
3.1 Архітектура та загальна схема роботи системи............................................... 38 
3.2 Формування векторних представлень .............................................................. 43 
3.2.1 Кодування фільмів ...................................................................................... 43 
3.2.2 Кодування користувацьких запитів ........................................................... 44 
3.3 Алгоритм семантичного пошуку ...................................................................... 45 
3.4 Демонстрація та тестування програмного модуля .......................................... 48 
Висновки до розділу 3 ............................................................................................ 58 
ВИСНОВКИ ............................................................................................................... 60 
СПИСОК ВИКОРИСТАНИХ ДЖЕРЕЛ ................................................................... 62 
ДОДАТОК А. Специфікація ...................................................................................... 66 
ДОДАТОК Б. Текст програми ................................................................................... 68 
ДОДАТОК В. Структура бази даних ........................................................................ 75 
ДОДАТОК Г. Інструкція користувача ...................................................................... 78 
 
9 
 
ПЕРЕЛІК УМОВНИХ ПОЗНАЧЕНЬ, СИМВОЛІВ, СКОРОЧЕНЬ І 
ТЕРМІНІВ 
API – Application Programming Interface, інтерфейс програмного взаємодії 
між модулями.  
CPU – Central Processing Unit, центральний процесор, що виконує основні 
обчислення.  
GPU – Graphics Processing Unit, графічний процесор, що прискорює 
нейромережеві обчислення.  
ML – Machine Learning, машинне навчання, клас алгоритмів, що навчаються 
на даних. 
NLP – Natural Language Processing, обробка природної мови. 
CSV – Comma-Separated Values, формат текстових таблиць із роздільниками. 
IMDb – Internet Movie Database, міжнародна база даних про фільми. 
Regex – Regular Expressions, регулярні вирази для пошуку та обробки 
текстових шаблонів. 
PyTorch – бібліотека для побудови та тренування нейронних мереж. 
Pandas – Python-бібліотека для роботи з табличними даними. 
RapidFuzz – бібліотека для нечіткого зіставлення тексту. 
SentenceTransformer / MiniLM-L6-v2 – модель трансформера для створення 
текстових ембеддингів. 
Embedding – векторне представлення тексту у багатовимірному просторі. 
Runtime – середовище виконання програмного коду. 
Tagline – короткий маркетинговий опис фільму. 
Overview – основний опис/синопсис фільму. 
Rating – числова оцінка фільму, зазвичай середня оцінка користувачів. 
Votes – кількість голосів користувачів за фільм. 
Rule-based – метод на основі чітких правил, що не використовує ML. 
Vector search – пошук у векторному просторі шляхом обчислення подібності. 
Cosine similarity – косинусна міра подібності між векторами. 
10 
 
Transformers – архітектура нейронних мереж, що використовує механізм self-
attention. 
Self-attention – механізм у трансформерах, що визначає важливість різних 
частин тексту. 
Python Runtime – середовище виконання Python, у якому працює система. 
 
11 
 
ВСТУП 
Актуальність. В сучасних інформаційних системах рекомендаційні 
технології відіграють ключову роль, оскільки забезпечують персоналізований 
добір контенту за умов стрімкого зростання обсягів медіаданих. Традиційні методи 
фільтрації виявляються недостатньо ефективними в умовах великої кількості 
фільмів, жанрів та різноманітних описових характеристик, що зумовлює потребу у 
використанні нейромережевих моделей і векторних подань. Сучасні 
трансформерні архітектури дозволяють враховувати семантичні зв’язки між 
об’єктами, обробляти запити природною мовою та забезпечувати більш точні 
рекомендації. Водночас залишається низка невирішених проблем: коректне 
інтегрування різнорідних ознак у спільний простір, оброблення заперечень у 
запитах, масштабування пошуку та підвищення продуктивності при роботі з 
великими датасетами. Це визначає необхідність розроблення комплексної 
нейромережевої системи, що поєднує методи семантичного пошуку, машинного 
навчання та попередньої обробки даних.  
Об’єктом дослідження є процес формування персоналізованих 
рекомендацій на основі аналізу структурованих та неструктурованих даних у 
системах медіаконтенту.  
Предметом дослідження є методи, алгоритми та нейромережеві моделі 
семантичного пошуку та рекомендації, що забезпечують аналіз текстових й 
метаданих фільмів, формування їхніх векторних подань, оброблення запитів 
природною мовою та визначення релевантності на основі подібності. 
Метою дослідження є розроблення нейромережевої рекомендаційної 
системи фільмів на основі векторних подань і семантичного пошуку, яка 
забезпечує високоточну персоналізацію, оброблення запитів природною мовою та 
використання комплексного набору ознак для підбору контенту. 
Для досягнення поставленої мети необхідно виконати такі завдання: 
 визначити теоретичні основи рекомендаційних систем, методів 
семантичного пошуку та векторного подання текстових даних; 
12 
 
 дослідити можливості використання трансформерних моделей для 
побудови ембеддингів фільмів і користувацьких запитів; 
 розробити методи попередньої обробки даних: очищення жанрів, 
нормалізації текстів, виявлення заперечень, визначення діапазонів років та 
оброблення акторських списків; 
 побудувати алгоритм формування векторних представлень великої 
колекції фільмів та реалізувати механізм ефективного пошуку за косинусною 
схожістю; 
 реалізувати функціональність рекомендаційної системи для 
інтерактивного пошуку фільмів природною мовою; 
 оцінити якість результатів рекомендації на основі метрик 
релевантності та порівняти ефективність різних конфігурацій моделі; 
 обґрунтувати доцільність застосування запропонованих методів і 
можливості їх подальшого використання у масштабованих інформаційних 
системах. 
Методи дослідження: для досягнення мети використано комплекс 
теоретичних, статистичних та комп’ютерних методів. Теоретичні підходи 
забезпечили аналіз наукових джерел і систематизацію сучасних моделей 
рекомендацій та семантичного пошуку. Статистичні методи охоплювали 
формування векторних представлень, обчислення косинусної подібності та 
фільтрацію даних за ключовими ознаками. Комп’ютерні методи включали 
реалізацію алгоритмів у Python, експериментальне тестування моделі та інтеграцію 
обробки природної мови для підвищення якості рекомендацій. 
Наукова новизна полягає у розробленні комплексного підходу до побудови 
рекомендаційної системи, який поєднує: 
 механізми семантичного пошуку на основі трансформерних моделей; 
 обробку запитів природною мовою із виявленням інтенцій, заперечень 
та діапазонів років; 
 інтеграцію багатокомпонентних ознак фільмів (жанри, актори, описи) 
у спільний векторний простір; 
13 
 
 удосконалений алгоритм фільтрації контенту з урахуванням 
негативних критеріїв (forbidden actors/genres), що мало висвітлено у класичних 
рекомендаційних моделях. 
Удосконалено метод побудови рекомендацій шляхом поєднання 
статистичних і нейромережевих підходів, що забезпечує високу точність пошуку 
відповідно до семантичного змісту запиту. Запропонований підхід набув 
подальшого розвитку у контексті обробки гібридних даних і використання 
трансформерних моделей для задач персоналізації у медіасистемах. 
Практичне значення полягає у можливості використання розробленої 
рекомендаційної системи: 
 у стрімінгових платформах для персоналізованого підбору контенту; 
 у медіасервісах, що потребують обробки складних запитів природною 
мовою; 
 в аналітичних системах Digital Media Intelligence; 
 у навчальних та дослідницьких проєктах, що потребують демонстрації 
алгоритмів роботи з текстовими даними й нейромережевими моделями. 
Система може бути інтегрована у вебдодатки, чат-боти, персоналізовані 
кабінети користувача, а також застосована як інструмент дослідження у Data 
Science-курсах та лабораторних роботах. Її архітектура дозволяє масштабувати 
рішення для великих колекцій даних і доповнювати новими джерелами інформації.  
Особистий внесок автора включає: збір і попередню обробку даних, 
розроблення алгоритму рекомендаційної системи, експериментальне тестування 
моделі, аналіз результатів та формування висновків. 
 
 
  
14 
 
1 ТЕОРЕТИЧНІ ОСНОВИ РЕКОМЕНДАЦІЙНИХ СИСТЕМ 
1.1 Класифікація рекомендаційних підходів 
Рекомендаційні системи посідають важливе місце у сучасних інформаційних 
технологіях, забезпечуючи автоматизований добір елементів контенту відповідно 
до вподобань, історії взаємодій або контекстних параметрів користувача. Існує 
кілька основних підходів до побудови рекомендаційних систем, кожен із яких має 
власні переваги, обмеження та сфери застосування. 
Першим класичним підходом є колаборативна фільтрація, яка ґрунтується на 
аналізі взаємодій користувачів з елементами системи. Основна ідея полягає у тому, 
що користувачі з подібними вподобаннями надаватимуть перевагу схожому 
контенту. Колаборативна фільтрація поділяється на два основні види: user-based, 
що шукає користувачів зі схожими профілями, та item-based, яка визначає 
подібність між самими об’єктами [1]. Незважаючи на популярність, цей підхід має 
недоліки, зокрема проблему холодного старту, залежність від великої кількості 
історичних даних та складність масштабування. 
Другим поширеним типом є контентно-орієнтовані рекомендаційні системи, 
що аналізують властивості самих об’єктів: жанри, описи, теги, акторський склад, 
технічні характеристики тощо. Рекомендація формується на основі подібності 
елементів за їх змістовими або метаданими характеристиками [2]. Такий підхід 
добре працює при нестачі історичних даних, однак обмежений якістю та повнотою 
описів об’єктів, а також схильний формувати рекомендації надто вузької 
спрямованості. 
Третім напрямом є гібридні системи, що поєднують колаборативні та 
контентні підходи з метою усунення їхніх недоліків. Гібридизація може 
відбуватися шляхом комбінування результатів різних моделей, побудови 
багаторівневих архітектур або адаптивного зважування компонентів залежно від 
якості їх прогнозів [3]. Такий підхід підвищує точність рекомендацій і зменшує 
ризики, пов’язані з холодним стартом або неповнотою даних. 
15 
 
Окрему групу становлять семантичні та нейромережеві рекомендаційні 
системи, що використовують представлення даних у вигляді ембеддингів та 
працюють у високовимірних просторах. Завдяки трансформерним моделям і 
методам глибинного навчання такі системи враховують контекст, значення слів і 
приховані зв’язки між об’єктами, що суттєво підвищує якість рекомендацій. 
Семантичні методи здатні працювати навіть за умов обмежених історичних даних, 
оскільки опираються на змістовий аналіз текстів та метаданих [4]. 
Класифікація рекомендаційних систем охоплює колаборативні, контентні, 
гібридні та семантичні підходи. Кожен із них використовується в залежності від 
типу даних, специфіки завдання та вимог до точності і масштабованості, а сучасні 
тенденції свідчать про зростання ролі нейромережевих і трансформерних методів 
у розробленні персоналізованих систем рекомендацій. 
1.2 Семантичний пошук у інформаційних системах 
Семантичний пошук є ключовим напрямом сучасної інформаційної 
аналітики, оскільки дозволяє не просто знаходити об’єкти за точним збігом 
ключових слів, а й розуміти їхній зміст, контекст і приховані взаємозв’язки. На 
відміну від класичного пошуку за ключовими словами, що оперує лише 
синтаксичними відповідностями, семантичний підхід використовує моделі, які 
формують векторні представлення тексту, здатні фіксувати латентні 
закономірності, значення термінів, стилістичні особливості та контекстуальні 
асоціації. Завдяки цьому система може знаходити релевантні елементи навіть тоді, 
коли користувач формулює запит іншими словами або описує зміст у довільній 
формі. 
Семантичні алгоритми лежать в основі рекомендаційних систем нового 
покоління, чат-ботів, пошукових сервісів і мовних моделей. Вони дозволяють 
виконувати такі задачі, як порівняння текстів, пошук схожих документів, 
визначення «близькості» змісту між описами, класифікація, кластеризація та 
фільтрація контенту. У контексті рекомендаційних систем медіаконтенту 
семантичний пошук дає змогу аналізувати описи фільмів, рецензії, жанри, 
16 
 
акторський склад, а також інтерпретувати запити природною мовою, незалежно від 
їхньої структури та довжини. 
Структурно семантичний пошук складається з кількох етапів [5]: 
 побудова векторних представлень текстів або об’єктів; 
 нормалізація та попередня обробка даних; 
 формування векторного запиту; 
 обчислення міри подібності між запитом і векторними 
представленнями об’єктів; 
 ранжування результатів за мірою релевантності. 
У більшості сучасних систем ключову роль відіграють трансформерні моделі 
(наприклад, BERT, RoBERTa, MiniLM), які забезпечують глибоке контекстне 
подання тексту. Це дає можливість працювати зі складними запитами: «фільм про 
втечу з тюрми, але без жорстоких сцен», «романтична комедія після 2010 року», 
«трилер з актором, який грав у Dark Knight». 
Для розуміння механізму семантичного пошуку необхідно розглянути два 
важливі теоретичні компоненти: текстові ембеддинги та косинусну міру 
подібності, що використовуються для обчислення «відстані» між об’єктами в 
семантичному просторі. 
1.2.1 Текстові ембеддинги 
Текстові ембеддинги – це векторні представлення текстів, створені 
нейромережею таким чином, що схожі за змістом фрагменти мають близькі 
вектори у високовимірному просторі [6]. Вони виступають основою семантичного 
пошуку, оскільки переводять природну мову у числовий формат, який можна 
порівнювати, кластеризувати та використовувати у машинному навчанні. 
Існує кілька поколінь моделей для побудови ембеддингів (табл. 1.1). З часом 
технології створення ембеддингів значно еволюціонували. Кожне нове покоління 
моделей розв'язувало обмеження попереднього, що призвело до створення все 
більш змістовних та контекстно-чутливих векторних представлень [7]. 
 
17 
 
Таблиця 1.1 – Покоління моделей та їх особливості [8-12] 
Покоління моделі Приклад Особливості 
Фіксують частоти слів, не враховують 
Статистичні моделі TF-IDF, BoW 
порядок, контекст або багатозначність 
Нейронні моделі на основі Одне векторне представлення для 
Word2Vec, GloVe 
слів слова незалежно від контексту 
Враховують оточення слова, формують 
Контекстні трансформери BERT, SBERT, MiniLM подання на рівні фраз, документів, 
запитів 
Трансформерні моделі є найбільш прогресивними, оскільки вони [13]: 
 враховують контекст та відтінки значень; 
 здатні обробляти довгі тексти; 
 створюють подання, що відображають семантичні зв’язки; 
 підтримують багатомовність; 
 ефективні у задачах семантичного пошуку. 
У контексті рекомендаційних систем фільмів ембеддинги будуються не лише 
для текстового опису, але й для жанрів, акторського складу, ключових слів, а також 
для комбінованих представлень (наприклад, назва + жанри + опис + актори). Такий 
підхід дає змогу значно підвищити точність порівняння фільмів і пошуку 
релевантних елементів. 
Математична модель ембеддингу, нехай трансформер перетворює текст TTT 
у вектор [14]: 
��(��) = ����(��),      (1.1) 
де: 
��(��) – векторне подання тексту; 
���� – нейромережева модель з параметрами θ; 
�� – текстовий опис або запит. 
Вектор може мати розмірність 256, 384, 768 або навіть більше, залежно від 
моделі. Чим більша розмірність тим детальнішим є представлення, але тим вищі 
обчислювальні витрати.  
В контексті поставлених завдань, ембеддинги дозволяють: 
 зіставляти фільми не за ключовими словами, а за змістом; 
18 
 
 розпізнавати «косвені» зв’язки (наприклад, два фільми не мають 
однакових слів в описі, але мають схожі теми); 
 обробляти запити, що містять емоції, сюжетні мотиви, контекстні 
обмеження; 
 працювати з різними мовами (англійська + українська), виконуючи 
автоматичний переклад. 
У результаті формується семантичний простір, у якому кожний фільм і запит 
представлено точкою, а пошук зводиться до знаходження найближчих точок. 
1.2.2 Косинусна міра подібності 
Для визначення того, наскільки два тексти є схожими, використовується 
косинусна міра подібності. Це один із найпоширеніших методів порівняння 
векторів у машинному навчанні. Він оцінює не абсолютні значення координат 
векторів, а кут між ними, що дозволяє зосередитися саме на семантичній близькості 
[15]. 
Формула косинусної подібності [16]: 
�� ∙��
������ (��, ��) =  ,      (1.2) 
‖��‖‖��‖
де: 
��, �� – векторні представлення двох текстів (наприклад, опису фільму та 
запиту); 
�� ∙ �� – скалярний добуток; 
‖��‖, ‖��‖ – довжини відповідних векторів. 
Значення міри подібності: 
 1 – тексти максимально схожі; 
 0 – немає зв’язку; 
 −1 – протилежні за змістом (у практиці семантики майже не 
трапляється). 
19 
 
Завдяки нормалізації косинусна подібність не залежить від довжини тексту, 
що є критично важливим для фільмів: описи можуть бути і короткими, і довгими, 
але їхня релевантність визначається саме змістом. 
Припустимо, є два описи: 
 «фільм про втечу з тюрми» 
 «історія про спробу звільнення з колонії» 
Слова повністю різні, але значення близькі, ембеддинги таких текстів будуть 
близькими у векторному просторі, а косинусна міра покаже високу подібність: sim 
≈ 0.82. При звичайному пошуку за ключовими словами результат був би хибним, 
адже жодне ключове слово не збігається. 
В межах системи, косинусна подібність використовується для: 
 ранжування списку фільмів за релевантністю до запиту; 
 пошуку найближчих сусідів (top-k nearest neighbors); 
 визначення взаємної близькості між фільмами; 
 класифікації жанрових і тематичних груп; 
 алгоритмів «користувачі також дивляться». 
У практичній реалізації даної роботи косинусна міра застосовується після 
формування ембеддингів як основний інструмент обчислення схожості між 
запитами і фільмами. 
1.3 Трансформерні моделі у задачах рекомендацій 
Трансформерні моделі є одним із найважливіших досягнень сучасного 
машинного навчання та становлять основу високоточної семантичної обробки 
текстів, класифікації, генерації та рекомендацій. Їхня архітектура дозволяє 
ефективно працювати з довгими текстами, ураховувати контекст кожного слова та 
формувати високовимірні векторні представлення, що відображають сутність та 
зміст даних. У рекомендаційних системах трансформери використовуються 
переважно для побудови ембеддингів фільмів і запитів користувача, що надалі 
стають базою для семантичного пошуку та ранжування [17]. 
20 
 
Основою трансформера є механізм Self-Attention, що визначає, наскільки 
кожний елемент послідовності (слово чи токен) важливий для інших елементів у 
цьому ж тексті. На відміну від рекурентних мереж, трансформер обробляє всі слова 
паралельно, що суттєво прискорює тренування й робить модель масштабованою 
[18]. 
Алгоритм обчислення attention включає перетворення тексту у три матриці 
[19]: 
�� = ������ , �� = ������ , �� = ������ ,    (1.3) 
де: 
��– матриця вхідних токенів; 
���� , ���� , ���� – параметри нейромережі; 
�� – матриця запитів; 
�� – матриця ключів; 
�� – матриця значень. 
Далі обчислюється ваговий коефіцієнт важливості між словами: 
������
������������������(��, ��, ��) = �������������� =  ( ) ��,    (1.4) 
√����
де: 
����– розмірність ключів. 
Модель визначає, які частини тексту найбільше впливають на значення 
певного фрагмента. Для рекомендаційних систем це дозволяє уловлювати складні 
семантичні залежності, наприклад: 
 емоційний контекст сюжету («трагічна історія», «темний трилер»); 
 сюжетні мотиви («пошук істини», «втеча», «розслідування»); 
 взаємозв’язки між акторами, жанрами, ключовими фразами; 
 багатозначність слів («dark» як колір, атмосфера, жанр або стиль). 
Алгоритм використання трансформера у рекомендаційній системі подано на 
рисунку 1.1. 
21 
 
 
Рисунок 1.1 – Алгоритм використання трансформера у рекомендаційній 
системі 
Алгоритм починається з попередньої обробки текстів, де нормалізуються 
описи фільмів, жанри та акторські списки. Далі трансформер виконує векторизацію 
фільмів, створюючи семантичні ембеддинги, що узагальнюють ключовий зміст 
кожного об’єкта. Після цього система отримує текстовий запит користувача, який 
також перетворюється трансформером у векторний простір. На наступному етапі 
виконується обчислення косинусної подібності між вектором запиту та векторами 
всіх фільмів для визначення їх семантичної близькості. 
Далі алгоритм перевіряє, чи необхідна додаткова фільтрація за вторинними 
критеріями: роком випуску, акторами, жанрами чи негативними обмеженнями. У 
разі потреби такі фільтри застосовуються. На завершальному етапі система виконує 
ранжування фільмів за рівнем схожості та повертає користувачу остаточний список 
рекомендацій. 
У даній роботі трансформерні моделі використовуються для: 
22 
 
 генерації ембеддингів фільмів та запитів (модель MiniLM); 
 обробки змістовних та лінгвістичних характеристик; 
 семантичного пошуку за косинусною подібністю; 
 нормалізації фільтрації (жанри, роки, актори); 
 інтеграції векторних представлень у єдиний простір порівняння. 
Трансформери забезпечують високий рівень точності та гнучкості 
рекомендацій, дозволяючи системі адаптуватися до складних користувацьких 
інтенцій і контекстів, що неможливо реалізувати традиційними підходами. 
Висновки до розділу 1 
В першому розділі розглянуто теоретичні основи побудови рекомендаційних 
систем та сучасні підходи до їх реалізації. Проаналізовано класифікацію 
рекомендаційних методів, зокрема колаборативні, контентні, гібридні та 
семантичні моделі, що визначають різні способи формування персоналізованих 
рекомендацій. Окрему увагу приділено семантичному пошуку, який дозволяє 
здійснювати аналіз текстових даних на основі змістової близькості, 
використовуючи векторні подання та контекстні залежності. 
Детально описано механізм роботи текстових ембеддингів та наведено їх 
роль у створенні високовимірного семантичного простору, необхідного для 
точного порівняння фільмів і запитів користувача. Показано, що косинусна міра 
подібності є ключовим інструментом для ранжування контенту за ступенем 
релевантності. Розглянуто принципи функціонування трансформерних моделей, 
які забезпечують глибоку контекстну інтерпретацію текстів та значно підвищують 
якість рекомендацій.  
23 
 
2 АНАЛІЗ ДАНИХ ТА МЕТОДИ ПОПЕРЕДНЬОЇ ОБРОБКИ 
2.1 Структура та характеристики датасету 
У дослідженні використано кастомізований датасет на основі IMDb, який 
містить описові характеристики сучасних фільмів (2024-2025 рр.), необхідні для 
побудови семантичної рекомендаційної системи [20]. Набір даних має табличну 
структуру та представлений у форматі CSV, що забезпечує сумісність із 
бібліотеками pandas та можливість швидкого інтегрування в пайплайн попередньої 
обробки. Кожен рядок таблиці відповідає окремому фільму та включає 
мультимодальні ознаки: текстові, категоріальні та числові. 
У таблиці 2.1 наведено узагальнену характеристику основних полів датасету. 
Таблиця 2.1 – Основні поля, типи даних та приклади значень датасету 
Поле Тип даних Приклад значення Призначення 
Назва фільму, текстова семантична 
Movie_Name string Nosferatu 
ознака 
['Fantasy', 'Horror', Категоріальна ознака жанрової 
Genres list / string 
'Mystery'] приналежності 
A gothic tale of Опис сюжету, основне джерело 
Overview string 
obsession... семантики 
['Lily-Rose Depp', Список акторів, використовується 
Cast list / string 
'Nicholas Hoult', ...] для пошуку по персоналіях 
['English', 'German', 
Languages list Додатковий текстовий контекст 
'Romanian'] 
Production list ['Focus Features', ...] Ідентифікація студій 
Використовується для визначення 
Release_Date string December 25, 2024 
року релізу 
Числова ознака, отримана з 
Release_Year int 2024 
попередньої колонки 
Runtime list ['2 hours 12 minutes'] Тривалість, частково структурована 
Tagline string Succumb to the darkness Короткий маркетинговий опис 
Rating float 7.3 Користувацька оцінка IMDb 
Кількість голосів, індикатор 
Votes int 151000 
популярності 
Наявність у датасеті полів різної природи дозволяє застосовувати 
комплексний підхід до моделювання: поєднувати векторне текстове подання (опис, 
жанри, актори) з фільтрами, що враховують рік, популярність або наявність 
конкретних учасників знімальної групи. 
24 
 
Текстові ознаки датасету мають низку характерних властивостей, що 
впливають на побудову системи попередньої обробки: 
1. Наявність вкладених структур. 
Поля Genres, Cast, Languages і Production у джерелі представлені у вигляді 
Python-подібних списків, наприклад: 
 
['Lily-Rose Depp', 'Nicholas Hoult', 'Bill Skarsgård'] 
 
У CSV-файлі ці структури зберігаються як рядки, що потребує подальшого 
перетворення перед обробкою. 
2. Семантична насиченість полів Overview та Tagline, їх специфіка висока 
різноманітність лексики, наявність складних конструкцій, метафор, ідіом. Це 
визначає доцільність використання трансформерів для векторизації. 
3. Різна довжина текстів, обсяг описів варіюється від коротких (1–2 речення) 
до розгорнутих (5–8 речень). Це може впливати на стабільність обчислення 
ембеддингів. 
Жанрова і акторська компоненти датасету мають важливе значення для 
побудови гібридної рекомендаційної системи, що поєднує фільтри строгого 
відповідності (rule-based) із семантичним пошуком. 
У результаті аналізу встановлено, що застосований датасет має чітку 
структуру та містить багатий набір ознак, релевантних задачі рекомендації фільмів. 
Його особливістю є поєднання текстових, категоріальних та числових полів, а 
також значна семантична насиченість описів та акторських списків. Ці властивості 
визначають необхідність подальшої глибокої попередньої обробки: нормалізації 
структурованих полів, очищення тексту, картографування жанрів, виявлення 
акторів і підготовки даних до векторизації.  
2.1.1 Очищення та нормалізація текстових даних 
Ефективність семантичної рекомендаційної системи значною мірою 
залежить від якості опрацювання текстових полів датасету. Основні текстові 
джерела інформації: Movie_Name, Overview та Tagline містять описові, стилістично 
25 
 
різнорідні фрагменти, які вимагають спеціальної процедури очищення перед 
застосуванням моделей глибинного навчання. Метою даного етапу є перетворення 
тексту у форму, придатну для стабільного обчислення ембеддингів, мінімізуючи 
вплив «шумових» конструкцій, надлишкових елементів та специфічних 
лінгвістичних варіацій. 
Видалення спеціальних символів та структурних артефактів, текстові поля 
можуть містити лапки, дужки, HTML-подібні структури або символи, що виникли 
під час екстракції даних з вебсередовища.  
Усі такі елементи не несуть змістового навантаження під час побудови 
семантичної моделі, тому усуваються регулярними виразами: 
 
def clean_vector_query(query): 
    query_without_years = re.sub(r'\b(19|20)\d{2}\b', '', 
query.lower()) 
    query_lower = re.sub(r'[^\w\s]', '', query_without_years) 
    stop_words = {...}   
    words = query_lower.split() 
    cleaned_words = [word for word in words if word not in 
stop_words and len(word) > 1] 
    return " ".join(cleaned_words) 
 
Тут re.sub(r'[^\w\s]', '') видаляє пунктуацію та службові символи, далі йде 
приведення до нижнього регістру забезпечує однорідність, фінальна фільтрація 
виключає службові слова, що не впливають на семантичне ядро. 
У текстах можуть траплятися варіанти слів, семантично ідентичні, але 
граматично відмінні (наприклад, «haunted», «haunting», «haunts»). Моделі 
трансформерів частково вирівнюють ці відмінності, проте попередня нормалізація 
шляхом стемінгу або лемматизації підвищує точність при коротких описах. 
Оскільки датасет англомовний, лемматизація може бути здійснена за 
допомогою nltk.WordNetLemmatizer, однак у даному проєкті перевага надана більш 
універсальному варіанту, непрямій нормалізації через модель MiniLM, яка 
внутрішньо працює з підсловниками (subword units) [21]. Тому цей крок 
реалізований частково: збережено початкову форму слів але видалено слова з 
неінформативною функцією (детермінанти, прийменники, частки). 
26 
 
Опис фільмів та рекламні речення можуть містити роки, дати або числові 
маркери («in 1947», «12 minutes», «after 2025»). У загальному випадку такі 
елементи: не є корисними для векторного пошуку (оскільки модель повинна 
оперувати семантичним змістом сюжету, а не числовими метаданими) та 
викликають зсув у ембеддингах, особливо при коротких запитах. 
У процесі очищення усі роки видаляються за допомогою регулярного виразу: 
����������(��) = �� − {������������ ��������ℎ������ ( 19 ∣ 20 )\��2},    (2.1) 
де: 
��– початковий текст. 
Це дозволяє уникнути небажаного домінування часових ознак у семантичних 
векторах. Аналіз року релізу здійснюється окремим модулем, тому не дублюється 
у межах текстової нормалізації. 
Особливість системи полягає в тому, що датасет англомовний, тоді як 
користувацькі запити можуть формулюватися українською. Надійний спосіб 
забезпечити відповідність між моделлю MiniLM (яка оптимізована під англійську) 
і запитами автоматичний переклад, реалізований через модуль GoogleTranslator 
[22]: 
 
def translate_to_english(text: str) -> str: 
    try: 
        translated = GoogleTranslator(source='uk', 
target='en').translate(text) 
        return translated.lower() 
    except Exception: 
        return text.lower() 
 
Після перекладу текст додатково нормалізується у загальному пайплайні 
попередньої обробки. Завдяки такому підходу забезпечується стабільність 
векторного представлення незалежно від мови введення. 
Результатом усіх попередніх кроків є лаконічний, нормалізований текст, 
позбавлений: пунктуації, надлишкових символів, часових маркерів, службових і 
непотрібних слів, багатомовності. 
Цей текст переходить безпосередньо до етапу векторизації у функції: 
27 
 
 
query_embedding = model.encode(final_query_translated, 
convert_to_tensor=True) 
 
Після чого система здійснює пошук найбільш близьких семантичних описів 
серед фільмів. 
Очищення текстових даних на цьому етапі концентрується виключно на 
усуненні шумових артефактів і гармонізації тексту для подальшої роботи 
трансформерної моделі. 
2.1.2 Оброблення жанрів і акторських списків 
Поля, що визначають жанрову структуру фільмів та акторів, посідають 
ключове місце у змішаній архітектурі рекомендаційної системи. На відміну від 
описових текстових полів, ці характеристики мають напівструктуровану форму, що 
передбачає як синтаксичну, так і семантичну підготовку перед подальшим 
аналітичним використанням. Метою даного етапу є приведення жанрів і списків 
акторів до уніфікованого, машинно-оброблюваного формату.  
У вихідному датасеті поля Genres та Cast зберігаються у CSV-файлі у вигляді 
рядкових записів, що формально імітують Python-списки: 
 
"['Fantasy', 'Horror', 'Mystery']" 
"['Lily-Rose Depp', 'Nicholas Hoult', ...]" 
 
Таке представлення не дозволяє пряме використання списків у фільтрації, 
порівнянні або пошуку. Для коректної обробки застосовується функція: 
 
def clean_genres(val): 
    if pd.isna(val): 
        return [] 
    if isinstance(val, list): 
        return [g.strip() for g in val] 
    if isinstance(val, str): 
        text = val.strip() 
        if text.startswith("["): 
            try: 
                parsed = ast.literal_eval(text) 
                if isinstance(parsed, list): 
                    return [g.strip() for g in parsed] 
            except: 
                pass 
28 
 
        return [x.strip() for x in text.split(",")] 
    return [] 
 
Функція коректно обробляє відсутні значення (None, порожній список), якщо 
значення вже список то нормалізує пробіли, якщо це рядок то намагається 
перетворити його через ast.literal_eval, у разі невдачі розбиває запис за комами. Це 
забезпечує однорідне внутрішнє представлення жанрів у форматі списків Python, 
яке зберігається у стовпці df["Genres"] [23]. 
Жанрові категорії, зазначені у користувацьких запитах, можуть бути 
сформульовані українською мовою, у той час як датасет використовує англомовні 
назви. Для забезпечення сумісності впроваджено словник відповідності (табл. 2.2). 
Таблиця 2.2 – Відповідність жанрів 
Українська назва жанру Англійська назва жанру 
комедія Comedy 
драма Drama 
трилер Thriller 
фантастика Sci-Fi 
кримінал Crime 
романтика Romance 
жахи Horror 
музика Music 
біографія Biography 
фентезі Fantasy 
пригоди Adventure 
історія History 
сімейний Family 
короткометражка Short 
аніме Animation 
документальний Documentary 
Цей словник (genre_map) дозволяє інтерпретувати україномовні запити та 
зіставляти їх з фактичними категоріями у датасеті. Обробка здійснюється за 
допомогою функції: 
 
def map_genres(text): 
    mapped = [] 
    for ukr, eng in genre_map.items(): 
        if ukr in text.lower(): 
            mapped.append(eng) 
    return mapped 
 
Список акторів у датасеті характеризується значною різноманітністю: 
29 
 
 складні імена з кількома компонентами, 
 варіації написання з діакритичними символами, 
 подвійні прізвища, 
 поєднання англомовних та іспаномовних форм. 
Для узгодження всіх варіантів перед подальшим аналізом застосовується 
нормалізація: 
 
def normalize_actor_name(name): 
    return re.sub(r"(а|у|и)$", "", name.lower()).strip() 
 
Тут функція виконує зведення регістру до нижнього, видалення суфіксів, які 
трапляються у відмінюваних формах, усунення зайвих пробілів. Важливо, що цей 
етап не виконує семантичних операцій, таких як зіставлення «ті самі актори під 
різними написаннями» чи «пошук часткових збігів» ці процеси відбуваються 
пізніше за допомогою алгоритмів часткової відповідності.  
Після нормалізації склад акторів з усіх фільмів об’єднується у глобальний 
набір: 
 
all_actors = [] 
for cast in df["Cast"]: 
    parts = [c.strip() for c in cast.split(",") if c.strip()] 
    all_actors.extend(parts) 
all_actors = list(set(all_actors)) 
 
Ця функція забезпечує швидке порівняння запиту з усім доменом можливих 
акторів, повний реєстр для подальших операцій fuzzy-matching, уникає дублювання 
імен у різних формах запису.  
У результаті нормалізації жанрів та акторських списків датасет приводиться 
до однорідного, формалізованого стану, придатного для подальшого виокремлення 
ознак та аналізу користувацьких запитів.  
На цьому етапі здійснюються лише структурні перетворення: перетворення 
рядкових списків на Python-структури, встановлення мовної відповідності жанрів 
та нормалізація акторських імен. 
 
30 
 
2.2 Методи виділення ключових ознак 
Після структурного опрацювання текстових, жанрових і акторських полів 
необхідним етапом стає виокремлення ключових ознак (features), що 
характеризують як самі фільми, так і зміст запиту користувача. У контексті 
рекомендативних систем ознаки мають виконувати дві основні функції: 
забезпечувати коректну відповідність між запитом і характеристиками фільмів, 
формувати універсальні векторні представлення, придатні для семантичного 
пошуку. 
У даному дослідженні використовується гібридний підхід до виділення 
ознак, що поєднує алгоритмічні, статистичні та трансформерні методи. Основним 
інструментом для побудови семантичних ознак є модель SentenceTransformer 
MiniLM-L6-v2, яка забезпечує компактні та інформативні ембеддинги. На відміну 
від класичних методів TF-IDF або bag-of-words, трансформер формує ознаки на 
основі контексту, захоплюючи взаємозв’язки між словами [24]. 
Для кожного фільму формується узагальнений текстовий блок: 
���� = ����������_���������� + �������������� + ������������������ + ����������,  (2.2) 
де: 
����– підготовлений текст для i-го фільму. 
Вектор ознак обчислюється як: 
���� = ����(����),      (2.3) 
де: 
���� – трансформер із параметрами ��; 
���� – підготовлений текст для i-го фільму. 
У коді це реалізовано через пакетну обробку: 
 
def embed_movies(df): 
    texts = df["Movie_Name"] + " " + df["Genres"].astype(str) \ 
            + " " + df["Overview"] + " " + 
df["Cast"].astype(str) 
 
31 
 
    embeddings = [] 
    batch_size = 300 
    for i in range(0, len(texts), batch_size): 
        batch = texts[i:i + batch_size].tolist() 
        emb = model.encode(batch, convert_to_tensor=True) 
        embeddings.append(emb) 
 
    return torch.cat(embeddings, dim=0) 
 
Пакети по 300 елементів дають змогу уникнути переповнення GPU та 
прискорюють обчислення. 
У той час як модель трансформера добре працює з описами, вона менш 
ефективна для встановлення відповідності між конкретними іменами акторів у 
запиті. Для цього використовується алгоритм fuzzy partial matching (rapidfuzz), що 
визначає схожість фрагментів рядків [25]. 
Оцінка відповідності імені актора акторському списку в запиті визначається 
як: 
��(��, ��) =  ��������������_����������(��, ��),   (2.4) 
де: 
�� – ім’я актора; 
�� – текст запиту. 
У коді ключовий фрагмент представлений функцією: 
 
def extract_actors(user_query, actor_list, threshold=35): 
    found = [] 
    query_norm = user_query.lower() 
    for actor in actor_list: 
        ratio = fuzz.partial_ratio(actor.lower(), query_norm) 
        if ratio >= threshold: 
            found.append(actor) 
    return list(set(found)) 
 
Цей метод формує дискретні ознаки: наявність або відсутність певного 
актора у запиті та набір прізвищ, які стають фільтрами першої лінії. 
Користувацький запит може містити роки або часові індикатори («після 
2020», «до 1995», «фільм 2024 року»).  
Для виокремлення цих ознак використовується регулярний аналіз: 
32 
 
�� = {��|�� ∈ �� ∧ �� ∈ [1900,2099]}.    (2.5) 
Після виявлення значень формуються два додаткові ознаки: 
 ��������– нижня межа; 
 ��������– верхня межа. 
Ці ознаки використовуються виключно під час фільтрації фільмів (не 
векторизації), тому алгоритм не дублює функції очищення тексту: 
 
def extract_year_range(query): 
    years = [int(y) for y in 
re.findall(r'\b(19\d{2}|20\d{2})\b', query.lower())] 
    ... 
    return min_year, max_year 
 
Окремий шар ознак це виділення елементів, які не повинні бути присутніми 
у фільмі: 
 «не з Деппом»; 
 «без жорстокості»; 
 «ні трилерам»; 
 «не хочу жахи». 
Для цього виділяються «застереження» (negations), на етапі виділення ознак 
формується лише сировинний список заборонених фрагментів: 
 
def detect_negations(text): 
    words = text.split() 
    forbidden = [] 
    neg_words = ["не", "без", "not", "without", "no", "ні"] 
    for i, w in enumerate(words): 
        if w.lower() in neg_words and i + 1 < len(words): 
            segment = words[i + 1:i + 4] 
            forbidden.append(" ".join(segment)) 
    return forbidden 
 
Елементи цього списку ще не інтерпретуються, вони лише формують 
негативні ознаки, які використовуються пізніше. Узагальнений набір ознак 
користувацького запиту складається з чотирьох незалежних груп наведено в 
таблиці 2.3. 
 
33 
 
Таблиця 2.2 – Відповідність жанрів 
Група ознак Приклад Позначення 
Векторні (семантичні) «містична історія одержимості» → embedding ���� 
Дискретні акторські «з актором X» → список імен ���� 
Жанрові «треш-хорор» → Horror ���� 
Заборонні «не жахи», «без насильства» ���� 
Часові «фільм 2024 року» → 2024 ���� 
 
У фінальному вигляді структура ознак може бути подана як: 
��(��) = {���� , ���� , ����, ���� , ����}.    (2.6) 
Векторні ознаки, дискретні акторські збіги, жанрові категорії, часові 
обмеження та елементи заперечення формуються як незалежні компоненти, які 
інтегруються у загальну структуру F(q). 
2.3 Визначення інтенцій і заперечень у запитах 
Інтенція користувача – це прихована мета, яку він переслідує, формулюючи 
запит у природній мові. На відміну від безпосередніх ключових слів, інтенція 
описує те, що користувач очікує отримати (наприклад: знайти жанр, уникнути 
певної тематики, підібрати фільм із певним емоційним настроєм). У 
рекомендаційних системах інтерпретація інтенцій є обов’язковим логічним етапом, 
який пов’язує виділені ознаки з конкретною моделлю відповіді. В системі інтенції 
виділяються з урахуванням структури запиту, його лексичного наповнення, 
наявності негативних маркерів, а також семантичної подібності до векторних 
описів фільмів.  
Відповідно до цього, система формує гібридну модель інтенцій, що 
складається з трьох основних компонентів: 
 жанрова інтенція, 
 акторська інтенція, 
 семантична інтенція сюжету або настрою. 
Паралельно з цим аналізуються заперечення елементи, яких користувач 
прагне уникнути. 
34 
 
Користувацька інтенція може бути явною («хочу драму», «підбери хорор»), 
або імпліцитною («щось темне і гнітюче», «легкий, веселий фільм»). На основі 
словникового зіставлення система виявляє пряму жанрову інтенцію. Формально це 
подається як: 
������������ = ��(��),     (2.7) 
де: 
��(��) – множина жанрів. 
Імпліцитні жанрові інтенції виводяться не з конкретних жанрових слів, а з 
семантики запиту. Наприклад: «страшний, напружений, гнітючий» отримаємо 
Horror / Thriller або «яскравий, музичний, легкий» результат Musical / Comedy. 
Це реалізується через порівняння ембеддингу запиту з жанровими 
кластерами, сформованими за статистичними описами жанрів фільмів у датасеті 
(кластеризація не розглядається у цьому розділі, оскільки відноситься до 
моделювання, а не попередньої обробки): 
 
def map_genres(text): 
    mapped = [] 
    for ukr, eng in genre_map.items(): 
        if ukr in text.lower(): 
            mapped.append(eng) 
    return mapped 
 
required_genres = map_genres(user_input) 
 
Тут функція перебирає словник genre_map, якщо слово «драма», «жахи», 
«комедія» зустрічається в тексті запиту, система розуміє це як жанрову інтенцію, 
після цього повертатися мають англомовні жанри, оскільки саме вони 
використовуються у датасеті. 
Акторська інтенція визначається через співпадіння між частинами запиту та 
акторським словником, аналогічно до жанрової інтенції. Імпліцитна акторська 
інтенція може виникати у випадках, коли користувач називає характер ролі замість 
імені («фільм з актором, який грав у...») в межах попередньої обробки такі випадки 
не інтерпретуються, їх опрацьовує вже модель векторної подібності.  
Програмно це реалізується так: 
35 
 
 
def extract_actors(user_query, actor_list, threshold=35): 
    found = [] 
    query_norm = user_query.lower() 
    for actor in actor_list: 
        actor_norm = actor.lower() 
        ratio = fuzz.partial_ratio(actor_norm, query_norm) 
        if ratio >= threshold: 
            found.append(actor) 
    return list(set(found)) 
 
detected_actors = extract_actors(user_input, all_actors) 
 
Використовується fuzz.partial_ratio, здатний знаходити збіги навіть при 
неточному введенні («Депп», «Деп», «Деппом»), якщо схожість ≥ 35% система 
вважає, що користувач має на увазі конкретного актора, результат стає акторською 
інтенцією [25]. 
Центральна частина інтерпретації запиту, векторизація тексту, яка дає змогу 
виявляти приховані інтенції: атмосферу, емоційний тон, сюжетні мотиви: 
 
final_query = clean_vector_query(user_input) 
final_query_translated = translate_to_english(final_query) 
 
query_embedding = model.encode( 
    final_query_translated, 
    convert_to_tensor=True, 
    device=device 
) 
 
Запит очищується від сміттєвих слів (clean_vector_query), перекладається 
англійською (translate_to_english), кодується трансформером MiniLM-L6-v2 після 
чого отримуємо вектор інтенції. 
Після формування інтенцій система порівнює їх із кожним фільмом у 
датасеті: 
 
idxs, scores = nn_search(query_embedding, movie_embeddings, 
top_k=50) 
 
results = df.iloc[idxs] 
results['Similarity_Score'] = scores 
results = results.sort_values(by='Similarity_Score', 
ascending=False) 
 
36 
 
nn_search() повертає фільми з найбільшою косинусною близькістю, це 
забезпечує врахування сюжетної, емоційної та тематичної інтенції, результати 
сортуються за семантичним збігом. 
Перевірка заперечень (негативних інтенцій):  
 
def check_forbidden(row): 
    overview_lower = row["Overview"].lower() 
    genres_lower = [g.lower() for g in row["Genres"]] 
    cast_lower = row["Cast"].lower() 
 
    normalized_cast = [normalize_actor_name(c.strip())  
                       for c in cast_lower.split(',')] 
 
    for f in forbidden_items: 
        if f in normalized_cast or f in genres_lower or f in 
overview_lower: 
            return False 
    return True 
 
filtered_df = filtered_df[filtered_df.apply(check_forbidden, 
axis=1)] 
 
Жанри, актори й сюжет перевіряються на збіг із забороненими фразами, якщо 
збіг є фільм виключається, так система реалізує негативну інтенцію користувача. 
Система інтегрує всі шари інтенцій у єдину модель: 
 
intentions = { 
    "genres": required_genres, 
    "actors": detected_actors, 
    "semantic_vector": query_embedding, 
    "forbidden": forbidden_items, 
    "year_min": min_year, 
    "year_max": max_year 
} 
 
Це дозволяє системі вже на наступних етапах легко комбінувати: строгі 
фільтри (жанри, актори, роки, заборони) та семантичний пошук (векторна 
подібність) і додатково отримувати гібридні рекомендації. 
Висновки до розділу 2 
В другому розділі здійснено попередню обробку даних та формування ознак, 
необхідних для роботи гібридної рекомендаційної системи. Встановлено, що 
37 
 
обраний датасет має змішану структуру: текстові, категоріальні та числові поля, що 
потребують різних методів очищення та нормалізації. Було проведено 
перетворення текстових описів фільмів у стандартизований формат, включно з 
видаленням шумових елементів, уніфікацією мовного подання та підготовкою 
даних до семантичної векторизації. 
Окрему увагу приділено структуруванню жанрових і акторських полів: 
рядкові списки перетворено на повноцінні Python-структури, імена акторів 
нормалізовано, а жанри зіставлено зі словником відповідностей. Це забезпечило 
можливість точного визначення жанрових та акторських критеріїв під час 
подальшого пошуку. 
На основі підготовлених даних сформовано набір ключових ознак запиту: 
семантичний вектор MiniLM, акторські збіги, жанрові інтерпретації, часові 
обмеження та негативні інтенції. Показано, що кожна група ознак відіграє окрему 
функціональну роль: від строгих фільтрів до контекстної інтерпретації намірів 
користувача. 
  
38 
 
3 РОЗРОБЛЕННЯ НЕЙРОМЕРЕЖЕВОЇ РЕКОМЕНДАЦІЙНОЇ СИСТЕМИ 
3.1 Архітектура та загальна схема роботи системи 
Архітектура нейромережевої рекомендаційної системи побудована як 
багатошаровий програмний комплекс, у якому окремі модулі відповідають за 
специфічні етапи обробки даних та взаємодіють між собою у чітко визначеній 
послідовності. Основою побудови є модульний принцип, що дозволяє відокремити 
логіку роботи трансформерної моделі, механізми фільтрації, обробку 
користувацького запиту та векторний пошук. Поділ системи на окремі компоненти 
робить її стійкою до модифікацій, полегшує тестування й забезпечує 
відтворюваність результатів, що є критично важливим у контексті побудови 
сучасних інтелектуальних рекомендаційних платформ. Загальна схема взаємодії 
компонентів демонструється на діаграмі послідовності (рис. 3.1) [27].  
 
Рисунок 3.1 – Діаграма послідовності роботи системи 
Діаграма відображає точний порядок виконання операцій від моменту 
введення тексту користувачем до отримання фінальних рекомендацій. Процес 
розпочинається з того, що основний скрипт приймає запит і передає його до модуля 
попередньої обробки. Тут викликаються функції нормалізації тексту, визначення 
жанрів, аналізу можливих заборон та виділення рокових обмежень. Після цього 
очищений запит передається у трансформерну модель, яка виконує кодування 
39 
 
тексту у векторне представлення. Векторна форма запиту надходить далі у модуль, 
що виконує косинусне порівняння з ембеддингами фільмів, та дозволяє виявити 
найсхожіші за змістом записи у датасеті. Завершальним етапом є ранжування 
найдених результатів і формування вихідного списку рекомендацій. 
Логічна організація системи на рівні компонентів більш детально 
представлена на діаграмі компонентів (рис. 3.2) [28].  
 
Рисунок 3.2 – Діаграма компонентів 
 
У її межах архітектура поділяється на декілька функціональних зон. На рівні 
даних знаходяться модулі, відповідальні за завантаження CSV-файлу та початкову 
підготовку таблиці засобами Pandas. Саме цей шар забезпечує подальшу 
коректність усіх обчислень, оскільки будь-яка помилка у структуризації даних 
може викликати некоректність фільтрації або помилки під час векторного 
кодування. 
Другий визначальний рівень машинно-навчальний, тут розташована модель 
SentenceTransformer MiniLM-L6-v2, яка виступає центральною ланкою системи. 
Поруч з нею працює генератор ембеддингів, що відповідає за пакетну обробку 
40 
 
текстових полів кожного фільму у датасеті. Результатом роботи цього рівня є 
багатовимірні вектори, які відображають семантику як фільмів, так і 
користувацького запиту. Векторний простір, побудований таким чином, створює 
підґрунтя для виконання подібності за змістом. 
Окремо від ML-рівня функціонує логічний шар системи. На ньому 
зосереджено механізми, що не потребують нейромережевих обчислень, але є 
критичними для точності пошуку. Сюди входять модуль фільтрації, механізм 
аналізу акторських збігів, модуль відображення жанрів та алгоритми визначення 
часових діапазонів. На цьому ж рівні виконується обробка заперечень (негативних 
інтенцій), що дозволяє користувачу виключити з результатів фільми, які містять 
небажані жанри, характеристику сюжету чи акторів. 
У взаємодії з логічним рівнем працює інтерфейсний модуль, який отримує 
початковий запит, викликає відповідні етапи обробки та відповідає за фінальне 
форматування рекомендацій.  
Структурне співвідношення між класами та їх ролями у системі детально 
зображено на діаграмі класів (рис. 3.3) [29].  
 
 
Рисунок 3.3 – Діаграма компонентів 
Основою взаємодії системи є три ключові сутності: Query, Movie та модулі, 
що здійснюють обробку цих сутностей. Клас Query зберігає різні форми запиту: 
41 
 
необроблений текст, очищений текст, перекладений варіант, а також списки 
акторів, жанрів, років та заборонених елементів. Клас Movie відповідає за 
структуру одного запису в датасеті, що робить модель узгодженою з реальними 
даними. Класи Preprocessor, FilterEngine, EmbeddingModel та SearchEngine 
реалізують відповідні етапи пайплайну: очищення тексту, застосування фільтрів, 
побудову ембеддингів та виконання векторного пошуку. 
Загальний потік обробки даних від початкових файлів до фінальних 
рекомендацій представлений на DFD-моделі (рис. 3.4) [30].  
 
 
Рисунок 3.4 – Діаграма потоку даних 
 
Ця діаграма демонструє, як дані проходять крізь систему. Спочатку CSV-
файл перетворюється в таблицю із очищеними текстовими та структурованими 
списковими полями. Після цього користувацький запит проходить очищення, 
переклад та інтерпретацію. Обидві підготовлені сутності фільми й запит 
потрапляють до трансформерної моделі, де отримують векторні подання. Далі за 
допомогою векторного пошуку та косинусної подібності визначається множина 
42 
 
релевантних фільмів. Фінальний етап ранжування й форматування результатів 
формує завершений вихідний список рекомендацій. 
Завершальним елементом загальної архітектури є діаграма розгортання (рис. 
3.5) [31].  
 
 
Рисунок 3.5 – Діаграма потоку даних 
 
Діаграма демонструє фізичну структуру виконання системи: програмний 
комплекс функціонує на локальній машині користувача, де працює середовище 
Python Runtime із вбудованими бібліотеками Pandas, RapidFuzz та Regex [32-33]. 
Звідти ж здійснюється завантаження локального CSV-файлу з фільмами. 
Нейромережеві обчислення відбуваються на ML-пристрої, це може бути GPU або 
CPU із відповідною підтримкою PyTorch [34]. Трансформерна модель 2 виконує 
кодування тексту в ембеддинги, які далі надходять до модулів фільтрації та 
пошуку. Таким чином, обчислення між двома апаратними блоками розподіляються 
оптимально: інтенсивні операції виконуються на ML-пристрої, тоді як загальна 
логіка й управління здійснюються на процесорі користувача. 
43 
 
3.2 Формування векторних представлень 
Після попередньої обробки даних наступним ключовим етапом є формування 
векторних представлень ембеддингів, що відображають зміст кожного фільму та 
сенс користувацького запиту у спільному семантичному просторі. Векторизація 
дозволяє системі порівнювати текстові описи на основі їх близькості за змістом, а 
не лише збігом ключових слів. У центрі цього процесу знаходиться трансформерна 
модель, яка забезпечує баланс між швидкістю, компактністю та якістю отриманих 
ембеддингів. 
Векторні представлення створюються у двох незалежних потоках. Перший 
це попереднє кодування всіх фільмів із датасету, що дозволяє не виконувати 
повторний розрахунок під час кожного запиту. Другий це кодування 
користувацького запиту, яке виконується в реальному часі. Обидва вектори і 
вектори фільмів, і вектор запиту розташовуються в єдиному просторовому 
середовищі, що дозволяє виконувати обчислення схожості за допомогою 
алгоритмів косинусної близькості. 
3.2.1 Кодування фільмів 
Кодування фільмів є статичним процесом, що виконується один раз при 
запуску системи. Мета цього етапу перетворити структуровані текстові дані (назва 
фільму, жанри, опис, актори) у компактні вектори, які модель може ефективно 
порівнювати з вектором користувацького запиту. 
Для цього кожен фільм перетворюється на сукупний текстовий блок. 
Приклад формування такого тексту подано нижче: 
 
def build_movie_text(row): 
    return f"{row['Movie_Name']} {row['Genres']} 
{row['Overview']} {row['Cast']}" 
 
Ця функція приймає один рядок таблиці з фільмами і поєднує всі релевантні 
поля в один суцільний текст. Це дозволяє MiniLM-моделі побачити не окремі 
частини опису, а всі пов’язані між собою ознаки: жанрову спрямованість, сюжетну 
44 
 
атмосферу та акторський склад. Функція не модифікує самі значення жанрів чи 
акторів, вони вже очищені у попередній обробці, тому тут відбувається лише 
акуратне збирання інформації. 
Після формування тексту для всіх фільмів система переходить до пакетного 
кодування: 
 
movie_texts = df.apply(build_movie_text, axis=1).tolist() 
movie_embeddings = model.encode(movie_texts, batch_size=300, 
convert_to_tensor=True) 
 
df.apply(build_movie_text) створює список повних текстових описів, 
model.encode() викликає попередньо завантажену MiniLM-модель і повертає набір 
ембеддингів. Параметр batch_size=300 оптимізує використання GPU-пам’яті. В 
результаті виходить багатовимірна матриця, де кожен вектор відповідає одному 
фільму. Отримані вектори зберігаються у пам’яті процесу, що дозволяє виконувати 
швидкий пошук без повторного кодування при кожному запиті. 
Результатом кодування фільмів є статична база ембеддингів, що служить 
основою для подальшого порівняння з користувацьким запитом. 
3.2.2 Кодування користувацьких запитів 
На відміну від кодування фільмів, кодування запиту виконується динамічно 
кожного разу, коли користувач вводить опис бажаного фільму. Основне завдання 
цього етапу побудувати максимально точний семантичний вектор, який 
відобразить намір користувача і дозволить виконати релевантний пошук у 
векторному просторі. 
Перед кодуванням запит проходить етап попередньої обробки: 
 
cleaned = clean_vector_query(user_input) 
translated = translate_to_english(cleaned) 
 
clean_vector_query() видаляє слова, які не впливають на семантику, 
залишаючи лише змістові елементи, translate_to_english() приводить текст до 
англомовної форми, на якій тренувалася MiniLM-модель. Обидва етапи 
45 
 
забезпечують лінгвістичну узгодженість і покращують якість семантичної проєкції 
у векторний простір. 
Наступний крок, власне кодування: 
 
query_embedding = model.encode( 
    translated, 
    convert_to_tensor=True 
) 
 
Модель отримує підготовлений англійський текст і повертає вектор, що 
описує зміст запиту. Трансформер розпізнає контекст запиту, ідентифікує 
наявність жанрових ознак, сюжетних характеристик, стилістичних маркерів та 
навіть емоційного забарвлення. Завдяки цьому навіть складні запити типу: «щось 
похмуре, як сучасний містичний трилер, але без жорстокості», «романтична драма 
з атмосферою Європи 60-х», «напружений фільм про втечу, але не кримінальний» 
перетворюються на вектор, з яким можна виконати точний семантичний пошук. 
Після цього вектор користувацького запиту готовий для передачі на етап 
порівняння з матрицею векторів фільмів. 
3.3 Алгоритм семантичного пошуку 
Після формування векторних представлень фільмів та користувацького 
запиту система переходить до виконання ключового етапу семантичного пошуку. 
Його мета полягає у визначенні тих фільмів, чий зміст найбільше відповідає 
намірам користувача, вираженим у запиті. На відміну від традиційного пошуку за 
ключовими словами, семантичний пошук оцінює глибинну подібність між 
текстами, враховуючи контекст, емоційний тон та сюжетний характер. 
Алгоритм пошуку складається з трьох основних стадій: 
1. попередня фільтрація набору фільмів; 
2. обчислення семантичної близькості між векторами; 
3. ранжування та формування вихідної множини рекомендацій. 
Усі ці етапи виконуються послідовно та є взаємодоповнюючими. 
46 
 
Фільтрація є підготовчим кроком, який дозволяє зменшити обсяг векторного 
простору ще до виконання обчислень подібності. Це суттєво підвищує 
ефективність алгоритму та зменшує кількість помилкових збігів. 
Фільтрація враховує такі критерії: акторів, явно вказаних у запиті; жанри, 
присутні або відсутні у запиті; часові інтервали (наприклад, «фільми після 2010 
року»); заборонені користувачем елементи («без жахів», «не з Томом Крузом»). 
Приклад застосування фільтрації у коді: 
 
filtered_df = FilterEngine.apply( 
    df, 
    actors=detected_actors, 
    years=(min_year, max_year), 
    genres=required_genres, 
    forbidden=forbidden_items 
) 
 
Модуль FilterEngine приймає таблицю фільмів і набір критеріїв, які необхідно 
застосувати. Кожен тип фільтра працює окремим методом, а функція apply() 
послідовно викликає ці методи, зменшуючи список кандидатів. Фільтрація не 
змінює зміст векторів, але суттєво впливає на продуктивність, оскільки 
семантичний пошук виконується лише на очищеному підмножинному наборі 
даних. 
Після фільтрації система переходить до визначення подібності між 
отриманими фільмами та вектором користувацького запиту. У системі 
використовується косинусна подібність, яка дозволяє визначати, наскільки 
напрямки векторів збігаються у спільному семантичному просторі: 
 
scores = util.cos_sim(query_embedding, movie_embeddings)[0] 
 
Модуль sentence_transformers.util обчислює подібність між запитом та 
кожним із векторів фільмів. Результатом є числовий масив, у якому кожен елемент 
відповідає одному фільму. Вищі значення означають сильнішу схожість. Важливо, 
що порівняння відбувається не за окремими словами, а за сумарною векторною 
проєкцією змісту. 
47 
 
Після обчислення значень подібності необхідно відібрати ті фільми, які 
найбільше відповідають намірам користувача. Для цього система використовує 
метод ранжування, сортування векторів за спаданням значень схожості: 
 
top_k_indices = scores.topk(50).indices.tolist() 
top_results = filtered_df.iloc[top_k_indices] 
 
Метод topk(50) повертає індекси 50 найсхожіших фільмів. Значення 50 є 
рекомендованим компромісом між повнотою і точністю пошуку: алгоритм не 
обмежується занадто малим числом варіантів, але й не перевантажує користувача 
надто великою вибіркою. Після цього таблиця фільмів фільтрується за знайденими 
індексами. 
Фінальний етап полягає у впорядкуванні та форматуванні результатів. На 
цьому кроці до кожного фільму додається його значення подібності, після чого 
результати впорядковуються за спаданням: 
 
top_results["Similarity_Score"] = scores[top_k_indices] 
ranked = top_results.sort_values(by="Similarity_Score", 
ascending=False) 
 
Поле Similarity_Score дозволяє системі надати користувачу більше 
прозорості: чим вище оцінка, тим точніше фільм відповідає введеному запиту. На 
відміну від класичних пошукових механізмів, де ранжування виконується за 
ключовими словами, семантичний пошук дозволяє визначити відповідність навіть 
у тих випадках, коли у фільмі не зустрічаються ті самі формулювання, що й у 
запиті, але зберігається схожість сюжетної структури або настрою. 
Після ранжування система формує зрозумілий вихідний формат: список 
фільмів з назвами, роком виходу, жанрами, ключовими акторами та стислим 
описом. 
Семантичний пошук у системі поєднує два різні підходи: 
1. Логічний (фільтраційний) визначає, які фільми взагалі можна вважати 
кандидатами; 
2. Нейромережевий (векторний) визначає, наскільки зміст кожного 
кандидата відповідає інтенції запиту. 
48 
 
Ця гібридна структура дозволяє уникнути помилок, типових для чисто 
семантичних моделей (які можуть знаходити занадто широкі або абстрактні збіги), 
і водночас значно перевершує класичну keyword-фільтрацію. 
Фінальний результат являє собою ранжований перелік фільмів, 
упорядкований не за ключовими словами, а за семантичною близькістю, тобто за 
тим, наскільки глибинний зміст фільму відповідає опису, який користувач надав у 
запиті. 
3.4 Демонстрація та тестування програмного модуля 
Програмний модуль складається з трьох основних файлів, кожен із яких 
виконує свою чітку роль у загальній архітектурі (рис. 3.6).  
 
 
Рисунок 3.6 – Компоненти системи 
 
Файл IMDb_Movies.csv містить вихідні дані назви фільмів, жанри, акторські 
склади, описи та дати релізу. Саме з нього формується база знань системи. Файл 
movie_embeddings.pt є бінарним сховищем попередньо згенерованих векторних 
представлень усіх фільмів. Такі ембеддинги дозволяють значно прискорити роботу, 
оскільки система не виконує повторне кодування тисяч текстових записів при 
кожному запуску. Головним є файл MovieRecommendation.py, який реалізує всю 
бізнес-логіку: обробляє запит користувача, здійснює семантичний пошук, обробляє 
жанри, акторів і часові рамки, виконує фільтрацію та знаходить найближчі векторні 
збіги. 
Консольний інтерфейс працює у формі покрокового діалогу (рис. 3.7). Після 
запуску користувач бачить повідомлення про завантаження або створення 
ембеддингів, а далі вводить звичайний текстовий запит: ім’я актора, бажаний жанр, 
сюжетні елементи, емоції чи рік.  
49 
 
 
Рисунок 3.7 – Консольний інтерфейс системи 
 
Система автоматично розпізнає ключові критерії, застосовує фільтри, 
виконує переклад запиту англійською, формує вектор і проводить пошук 
найближчих відповідностей. Результат подається у вигляді кількох 
рекомендованих фільмів із роком виходу, жанрами, акторами, коротким описом і 
числовим показником схожості. 
Нижче наведено тестування розробленого програмного модуля рекомендації 
фільмів, побудованого на основі семантичних ембеддингів та обробки природної 
мови. Для оцінювання коректності функціонування системи було сформовано 
набір тестових користувацьких запитів (промптів), які охоплюють різні категорії 
інформаційних потреб: пошук акторів, жанрові обмеження, інтенції користувача, 
заперечення, часові рамки, сюжетні тематики, емоційний тон, комбіновані вимоги, 
змішані мовні конструкції та складні багатокомпонентні інструкції. 
Такий підхід дозволяє комплексно оцінити роботу всіх етапів алгоритму: 
 попереднє очищення запиту; 
 визначення жанрів, акторів та обмежень; 
 обробку заперечень; 
 переклад запиту українською та англійською; 
 побудову векторного представлення запиту; 
 пошук найближчих відповідностей у високорозмірному семантичному 
просторі. 
Перед проведенням тестування було створено узагальнену таблицю 
категорій промптів, яка є еталонним сценарієм для демонстрації роботи системи. 
Кожна категорія містить кілька запитів, спрямованих на перевірку конкретної 
функціональної можливості.  
У таблиці  3.1 наведено структурований перелік тестових промптів, 
використаних під час демонстрації роботи модуля. 
50 
 
Таблиця 3.1 – Категорії тестових промптів та приклади запитів 
Категорія промптів Приклади тестових запитів 
1. «Хочу фільм з Віллемом Дефо, але не його найстаріші роботи  
щось сучасніше.» 
Виявлення акторів 
2. «Порадь фільм, де грає Селена Гомес, але без комедії.» 
 
1. «Хочу щось у жанрі історичної драми з акцентом на реальні 
події.» 
Жанрові запити 
2. «Порадь сучасний фантастичний фільм з філософським 
змістом.» 
1. «Щось атмосферне й меланхолійне, повільне за темпом.» 
Інтенції та стиль фільму 
2. «Хочу напружений фільм із почуттям загрози, але без жахів.» 
Заперечення (negation 1. «Фільм про подорож, але без криміналу і без жорстких сцен.» 
handling) 2. «Драма, але не про війну і не про насильство. 
1. «Фантастика після 2020 року.» 
Часові обмеження / роки 
2. «Нуар після 2015 року.» 
Тематичні запити 1. «Фільм про складні моральні вибори героя.» 
(сюжет/концепція) 2. «Стрічка про мистецтво, але не документалка.» 
1. «Дуже напружений фільм, але не хорор.» 
Емоційний тон 
2. «Щось дуже сумне, але красиве.» 
1. «Про родину, але сучасний, без криміналу і без комедії.» 
Комбіновані складні 
2. «Наукова фантастика з елементами детективу, але без бойових 
вимоги 
сцен.» 
Мовні варіації (англійські 1. «Psychological thriller, але без horror elements.» 
змішані фрази) 2. «Sci-fi, але не про космос і не про роботи.» 
Нестандартні 1. «Герой змінює життя після трагедії, але не драма і не 
багатокомпонентні романтика.» 
інструкції 2. «Стилізоване фентезі без магії.» 
 
Підготовлений набір промптів охоплює широкий спектр сценаріїв 
користувацької взаємодії та дозволяє комплексно перевірити роботу програмного 
модуля. 
Для перевірки коректності роботи модуля було протестовано два 
користувацькі промпти, спрямовані на виявлення акторів у складі касту. Графічні 
результати роботи системи наведено на рисунку 3.8. 
Промпт: «Хочу фільм з Віллемом Дефо, але не його найстаріші роботи щось 
сучасніше.» 
На рисунку видно, що система повернула фільм A Complete Unknown (2024 
рік), жанрово віднесений до біографії, драми та музики. У списку акторів, який 
відображено у відповідній секції рисунка, присутні Тімоті Шаламе, Едвард Нортон, 
Елле Феннінг, Моніка Барбаро та інші виконавці, однак імені Віллема Дефо серед 
них немає. 
51 
 
 
Рисунок 3.8 – Тестування категорії «Виявлення акторів» 
 
Короткий опис фільму, поданий також на рисунку, свідчить, що відповідь 
системи орієнтована головним чином на семантичний контекст запиту, насамперед 
на критерій «сучасних фільмів» а не на точне зіставлення актора з базою кастів. 
Висновок за промптом: система успішно зчитала інтенцію «сучасний фільм», 
однак не змогла коректно розпізнати та знайти актора Віллема Дефо, що говорить 
про обмежену точність компоненту actor-matching. 
Промпт: «Порадь фільм, де грає Селена Гомес, але без комедії.». 
Як показано на рисунку (нижня частина зображення), система запропонувала 
фільм Emilia Pérez (2024 рік). У секції «У ролях» однозначно вказано ім’я Selena 
Gomez, що підтверджує, що модуль цього разу коректно розпізнав акторку в запиті 
та знайшов відповідний фільм. Однак жанрова характеристика, наведена на 
рисунку (Comedy, Crime, Drama, Musical, Thriller), демонструє, що рекомендація не 
задовольняє умову «без комедії»: запропонований фільм має комедію серед жанрів. 
Таким чином система частково виконала запит, знайшла потрібну акторку, але не 
дотрималася обмеження щодо жанру. На основі промптів та результатів, можна 
відзначити, що система демонструє стабільне семантичне розуміння змісту запиту, 
але компонент розпізнавання акторів працює неоднорідно. 
52 
 
У межах тестування категорії перевірялося, наскільки коректно система 
розпізнає жанрові вимоги користувача та чи здатна вона зіставляти їх із фільмами 
у базі. На рисунку 3.9 подано виведені системою результати для двох промптів, 
орієнтованих на складні жанрові конструкції. 
 
 
Рисунок 3.9 – Тестування категорії «Жанрові запити» 
 
Промпт: «Хочу щось у жанрі історичної драми з акцентом на реальні події.» 
Як видно на рисунку 3.9 (верхня частина зображення), система повернула 
фільм The Decameron (2024 рік), який за жанровою класифікацією позначений як 
Comedy, Drama, History. Наявність тега History дозволяє вважати фільм частково 
релевантним запиту, однак слід підкреслити, що сама стрічка не має чіткого зв’язку 
з реальними подіями, а належить радше до художньої інтерпретації бубонної чуми. 
У описі фільму, наведеному на рисунку, підкреслюється період пандемії 1348 
року, що створює відповідний історичний контекст, але не вказує на біографічну 
чи документальну основу. Отже, система змогла визначити загальний жанровий 
напрям («історія + драма»), але не до кінця виконала детальну умову «на реальних 
подіях». 
53 
 
 Висновок за промптом, модуль добре уловлює змішані жанрові ознаки, проте не 
проводить жорсткої перевірки відповідності реальним подіям, через що 
рекомендація є частково релевантною. 
Промпт: «Порадь сучасний фантастичний фільм з філософським змістом.». 
На рисунку 3.9 (нижня частина зображення) продемонстровано, що система 
повернула фільм Hard Truths (2025 рік), жанри якого Comedy, Drama. У списку 
жанрів відсутня «фантастика», що є ключовим елементом запиту. Незважаючи на 
це, у текстовому описі фільму присутні теми «вивчення людських слабкостей» та 
«трагикомічного дослідження світу», що може бути інтерпретовано системою як 
філософський зміст. Це свідчить, що модель при обробці запиту опирається 
насамперед на семантичну близькість до ідейного наповнення, а не на точну 
структурну жанрову відповідність. Таким чином умова «сучасний» була виконана, 
умова «філософський»частково, але «фантастичний» повністю проігнорована. 
У межах цієї категорії перевірялося, наскільки система здатна визначати тон, 
емоційне забарвлення та стиль запиту тобто не лише жанрові ознаки, а й такі 
характеристики як «атмосферність», «меланхолійність», «напряженість», 
«повільність», «загроза» тощо. На рисунку 3.10 подано результати для двох 
промптів, що орієнтовані саме на інтерпретацію стилістичних вимог користувача. 
 
 
Рисунок 3.10 – Тестування категорії «Інтенції та стиль фільму» 
54 
 
Промпт: «Щось атмосферне й меланхолійне, повільне за темпом.». 
Як показано у верхній частині рисунку, система повернула фільм Mr. 
Plankton (2024). За жанрами він належить до комедії та романтики. Незважаючи на 
те, що жанрова складова не відповідає вимозі «меланхолійності», у короткому 
описі, наведеному на рисунку, фігурують такі мотиви як нещасливий наречений, 
останній спільний шлях, низькі шанси на щастя. Ці елементи дозволяють 
охарактеризувати фільм як такий, що має емоційну тональність, близьку до 
меланхолійної, хоча він не є повністю «повільним» чи «атмосферним» у 
традиційних кінотермінах. Це свідчить, що модель орієнтується на емоційно-
семантичний опис сюжету, а не на жанр. Система частково виконала вимогу, вона 
вловила меланхолійну інтенцію, проте не забезпечила відповідність іншим ознакам 
(«атмосферність», «повільний темп»). Результат можна вважати частково 
релевантним. 
Промпт: «Хочу напружений фільм із почуттям загрози, але без жахів.» 
У нижній частині рисунку  наведено результат: система запропонувала фільм 
Outbreak (2024), який має жанрові теги Horror, Mystery, Thriller. Попри те, що фільм 
дійсно містить атмосферу напруги та загрози, що видно із його опису 
(«psychological thriller», «local mystery that questions their grip on reality»), система 
не виконала ключову вимогу «без жахів», оскільки жанр Horror присутній. 
Водночас у сюжеті, який подано на рисунку, акцент зроблено на психологічному 
протистоянні, сімейній драмі та відчутті невідомості це повністю відповідає 
інтенції «почуття загрози». Модуль правильно інтерпретував стилістичну частину 
запиту (напруга, загроза), але проігнорував заборонний жанр, що свідчить про 
слабке відпрацювання заперечень у контексті інтенцій. 
Наведені нижче категорії тестування описуються стисло, оскільки ключові 
групи промптів були детально проаналізовані вище. Тут подано короткий огляд 
роботи системи для додаткових типів запитів, які демонструють її поведінку в 
умовах часових обмежень, тематичних уточнень, роботи із запереченнями, 
емоційною тональністю, мовними варіаціями та складними багатокомпонентними 
інструкціями. 
55 
 
Категорія опрацювання заперечень показала, що система здатна коректно 
розуміти основну тему чи жанр запиту, але погано відпрацьовує заборонені умови. 
Наприклад, запит «фільм про подорож, але без криміналу і без жорстких сцен» 
повертає стрічку, яка містить кримінальний компонент, а фраза «драма, але не про 
війну і не про насильство» приводить до рекомендації фільму, де наявні бойові 
елементи. Це свідчить про недостатню чутливість моделі до слів-заперечень і 
потребу додаткової логічної фільтрації. 
Категорія часових обмежень демонструє значно кращу роботу. Запити на 
кшталт «фантастика після 2020 року» або «нуар після 2015 року» коректно 
інтерпретуються в частині визначення року, і система успішно повертає фільми, що 
відповідають часовим рамкам. Проте жанрова частина таких запитів інколи 
ігнорується, і замість фантастики чи нуару можуть повертатися інші жанрові групи. 
Це свідчить про певний пріоритет часових ознак над стилістичними. 
Тематичні запити, які описують сюжетну ідею, працюють частково коректно. 
У запиті «фільм про складні моральні вибори героя» система знаходить стрічку з 
тематикою конфлікту та складних рішень, хоча й не завжди точно за змістом. У 
випадку запиту «стрічка про мистецтво, але не документалка» модель правильно 
інтерпретує ключове слово «мистецтво», але повністю ігнорує уточнення «не 
документалка», пропонуючи саме документальний фільм. Це свідчить про те, що 
тематичний зміст визначається добре, але додаткові обмеження система поки 
обробляє слабко. 
Категорія емоційного тону працює значно краще. Приклад «щось атмосферне 
й меланхолійне, повільне за темпом» повертає фільм, що відповідає саме такій 
чуттєвій стилістиці. У запитах про напруження без хорору або про «дуже сумне, 
але красиве» система демонструє здатність зчитувати емоційні маркери і знаходити 
стрічки з відповідною атмосферою. Це вказує на те, що модель добре адаптована 
до семантичних і настрійних характеристик тексту. 
У категорії комбінованих складних вимог система демонструє змішані 
результати. Наприклад, запит «про родину, але сучасний, без криміналу і без 
комедії» частково виконується, хоча результат містить і комедію, і містерію. Так 
56 
 
само у запиті «наукова фантастика з елементами детективу, але без бойових сцен» 
система добре вловлює детективну складову, але жанрово може відхилятися від 
фантастики чи відсутності екшену. Це свідчить про складність обробки 
багаторівневих умов у межах одного речення. 
Мовні варіації, включно з англійськими словами та код-міксом, система 
інтерпретує цілком успішно. Запити на кшталт «psychological thriller, але без horror 
elements» або «sci-fi, але не про космос і не про роботів» демонструють, що модель 
правильно обробляє англомовні жанрові маркери та здатна працювати з 
багатомовним текстом. Проте обмеження знову можуть ігноруватися. 
У категорії нестандартних багатокомпонентних інструкцій система частково 
справляється із загальним задумом промпта, але інколи не охоплює всі деталі. 
Запит «герой змінює життя після трагедії, але не драма і не романтика» повертає 
драму, тобто суперечить вимозі. Подібно до цього, «стилізоване фентезі без магії» 
інтерпретується через стилістичний компонент, але жанрові та сюжетні обмеження 
також частково випадають. 
Нижче подано узагальнення результатів тестування. Для кожної категорії 
було проведено якісну оцінку роботи системи за п’ятибальною шкалою, де 1 
функціональність практично не працює, а 5 працює стабільно та коректно. 
Оцінювання здійснювалося на основі результатів тестових промптів, наведених у 
попередніх підрозділах. 
 
Таблиця 3.2 – Оцінка роботи системи за категоріями тестування 
Категорія Опис характеристик роботи Оцінка (1-5) 
Система розуміє контекст, але рідко точно розпізнає 
Виявлення акторів 2 
актора у запиті і не фільтрує результати за актором 
Жанр частково враховується, але система часто повертає 
Визначення жанру суміжні жанри або комбінації, що не повністю 3 
відповідають вимозі 
Інтенція та Модель добре зчитує атмосферу, настрій, темп та 
4 
емоційний стиль емоційну якість запиту, результати найбільш точні 
Обробка 
Заперечення «не», «без», «not» здебільшого ігноруються, 
заперечень 2 
умови часто порушуються 
(negations) 
Роки інтерпретуються правильно, система чітко обирає 
Часові обмеження 
фільми з відповідного періоду, але жанрова точність 4 
/ роки 
може падати 
57 
 
Кінець таблиці 3.2 
Загальна тема зчитується коректно, але уточнення типу 
Тематичні запити 3 
«але не документалка» можуть ігноруватися 
Атмосфера, настрій, темп та емоційні маркери 
Емоційний тон 5 
визначаються дуже точно 
Комбіновані Система виконує основну частину запиту, але рідко 
3 
складні вимоги витримує всі одночасні умови 
Мовні варіації 
Модель добре розуміє змішані запити, англійські жанри 
(англійські фрази, 4 
та стилістичні маркери 
змішані запити) 
Нестандартні 
Частина вимог виконується, але другорядні уточнення 
багатокомпонентні 3 
модель ігнорує 
інструкції 
 
За результатами тестування можна стверджувати, що система 
продемонструвала високу здатність до семантичного та контекстного розуміння, 
особливо в тих категоріях, які пов’язані з емоційним тоном, атмосферою, 
настроєвими характеристиками, а також із часовими обмеженнями (роки виходу 
фільмів). У цих випадках модель застосовує сильні сторони трансформерної 
архітектури, що дозволяє точно визначати латентні ознаки, які не завжди явно 
присутні у тексті. 
Разом із тим результати у категоріях, що вимагають логічного фільтрування, 
залишаються слабшими. Зокрема, система недостатньо точно: інтерпретує та 
застосовує заперечення («не», «без», «not»), фільтрує фільми за конкретними 
акторами, враховує складні комбіновані інструкції, що містять декілька 
взаємовиключних умов 
Це свідчить про обмеження в частині формальної логіки, оскільки модель 
орієнтується передусім на подібність змісту, а не на строгі правила. 
Загальний рівень роботи можна оцінити як стабільно хороший для 
контекстно-емоційних запитів і середній для запитів з формальними обмеженнями. 
Система демонструє сильні можливості у творчих, описових та сюжетно-
атмосферних промптах, але потребує додаткових модулів або правил у частині 
логічних фільтрів (наприклад, окремі класифікатори, строгі фільтри за жанрами та 
акторами, або механізм перевірки заперечень). Система вже зараз може ефективно 
використовуватися для рекомендацій за стилем, настроєм, загальним описом чи 
58 
 
часовим періодом, але потребує подальшого доопрацювання для задач, що 
вимагають суворої умовної відповідності. 
Надалі система може бути суттєво розширена не лише на рівні алгоритмів, а 
й у практичній, прикладній частині. Одним із ключових напрямів розвитку є 
створення повноцінного веб-інтерфейсу, який дозволить користувачу виконувати 
пошук у зручній формі, застосовувати фільтри, зберігати історію запитів, 
формувати списки перегляду та отримувати персоналізовані рекомендації. Також 
важливим кроком є розширення самої бібліотеки фільмів, додавання ширшого 
набору джерел, включно з кількома міжнародними базами що дозволить збільшити 
якість, різноманітність та релевантність рекомендацій. Окремо варто впровадити 
багатомовну підтримку: українська, англійська, польська чи інші мови могли б 
бути доступні як у ввідних запитах, так і в інтерфейсі, що зробить систему більш 
інклюзивною та зручною для різних аудиторій.  
Додатковим кроком може стати інтеграція мобільного застосунку або 
окремого API, яке забезпечуватиме доступ до пошуку через сторонні сервіси. У 
перспективі система може отримати рекомендаційні профілі користувачів, 
адаптивне навчання на основі вподобань та можливість оцінювання фільмів, що ще 
більше покращить точність підбору. Такі практичні розширення роблять систему 
не лише дослідницьким прототипом, а повноцінним продуктом, готовим до 
реального використання. 
Висновки до розділу 3 
В третьому розділі було здійснено практичну реалізацію та тестування 
програмного модуля рекомендації фільмів на основі семантичного аналізу 
користувацьких запитів. Реалізовано повний цикл обробки даних: очищення та 
нормалізацію інформації про фільми, побудову ембеддингів, формування запитів, 
виконання пошуку та представлення результатів. Проведені експерименти 
показали, що система здатна адекватно інтерпретувати інтенцію користувача, 
розуміти емоційний тон і загальний контекст запиту, а також працювати з часовими 
обмеженнями. Разом із тим виявлено низку слабких місць, зокрема недостатню 
59 
 
точність у розпізнаванні акторів, урахуванні заперечень та дотриманні складних 
комбінованих умов. 
Узагальнений аналіз роботи системи дозволив визначити її сильні сторони й 
напрями покращення. Показано, що застосування векторного пошуку забезпечує 
високий рівень семантичної відповідності, тоді як формальні обмеження 
потребують окремих логічних модулів та фільтрів. На основі результатів 
тестування було запропоновано практичні рекомендації щодо подальшого 
розвитку системи, зокрема розширення бази даних, покращення фільтрації 
результатів та створення повноцінного веб-інтерфейсу. 
  
60 
 
ВИСНОВКИ 
В результаті виконання магістерської роботи було комплексно досліджено 
принципи побудови сучасних рекомендаційних систем та реалізовано повноцінний 
прототип нейромережевого модуля пошуку фільмів на основі семантичного аналізу 
користувацьких запитів. На теоретичному рівні проведено систематизацію 
рекомендаційних підходів, розглянуто методи контентного, колаборативного та 
гібридного аналізу, а також окреслено особливості застосування трансформерних 
моделей для роботи з природною мовою. Детально проаналізовано механізми 
формування текстових ембеддингів і розрахунку міри подібності, що стали 
основою побудованої системи. 
Під час аналітичного етапу було досліджено структуру даних про фільми, 
виконано очищення, нормалізацію та перетворення текстових полів, включно з 
жанрами, описами та списками акторів. Розглянуто методи виділення ключових 
ознак, способи інтерпретації користувацьких інтенцій, оброблення контексту та 
заперечень у пошукових запитах. Такий підхід дозволив сформувати якісний набір 
даних і забезпечити коректну роботу нейромережевої моделі. 
У практичній частині розроблено архітектуру рекомендаційної системи, 
реалізовано механізми кодування фільмів і запитів у векторні простори та 
побудовано алгоритм семантичного пошуку на основі трансформера MiniLM. 
Створено програмний модуль, що здійснює формування ембеддингів, попередню 
обробку тексту, знаходження найближчих сусідів та представлення результатів 
користувачу. Система була протестована на різних категоріях промптів, включно з 
жанровими, емоційними, тематичними, комбінованими та змішаними мовними 
запитами. Результати тестування підтвердили здатність моделі коректно 
працювати з контекстом та емоційною тональністю, водночас виявивши 
обмеження в частині точного врахування формальних умов і заперечень. 
Виконана робота продемонструвала, що семантичний підхід на основі 
трансформерів є ефективним інструментом побудови рекомендаційних систем 
нового покоління, здатних розуміти природну мову і працювати з 
неструктурованими даними. Розроблений модуль може служити основою для 
61 
 
створення повноцінного веб-сервісу або інтеграції в інформаційні системи, а 
подальші технічні покращення, окреслені у роботі, відкривають перспективи 
підвищення точності, гнучкості та практичної цінності системи. 
Поставлені у магістерській роботі цілі були досягнуті, а отримані результати 
мають як наукову, так і прикладну значущість у сфері інтелектуальних 
рекомендаційних систем та обробки природної мови. 
  
62 
 
СПИСОК ВИКОРИСТАНИХ ДЖЕРЕЛ 
1. Collaborative Filtering: базові принципи. URL: 
https://www.vpnunlimited.com/ua/help/cybersecurity/collaborative-filtering (дата 
звернення: 09.12.2025). 
2. Falk K. Practical Recommender Systems. New York: Manning Publications, 
2019. 432 p. 
3. What Are Recommender Systems: Types and Techniques. URL: 
https://coralogix.com/ai-blog/what-are-recommender-systems-use-cases-types-and-
techniques/ (дата звернення: 09.12.2025). 
4. Bazargani M., Alizadeh S. H., Masoumi B. Group deep neural network 
approach in semantic recommendation system for movie recommendation in online 
networks // Electronic Commerce Research. September 2024. DOI: 10.1007/s10660-024-
09897-4. (дата звернення: 09.12.2025). 
5. Semantic Search Pipeline Architecture. URL: 
https://apxml.com/courses/vector-databases-semantic-search/chapter-4-building-
semantic-search-systems/semantic-search-pipeline-architecture (дата звернення: 
09.12.2025). 
6. What Is Text Embedding? URL: https://www.geeksforgeeks.org/nlp/what-
is-text-embedding/ (дата звернення: 09.12.2025). 
7. Uppara S. K. Embedding Models: A Comprehensive Guide for Beginners to 
Experts. Medium. URL: https://medium.com/@nay1228/embedding-models-a-
comprehensive-guide-for-beginners-to-experts-0cfc11d449f1 (дата звернення: 
09.12.2025). 
8. Kumar S. Demystifying TF-IDF in NLP: What, Why and How It Works. 
Medium. URL: https://medium.com/@sateeshfrnd/demystifying-tf-idf-in-nlp-what-why-
and-how-it-works-04ff1c2fdaf7 (дата звернення: 09.12.2025). 
9. Word Embeddings Overview. IBM. URL: 
https://www.ibm.com/think/topics/word-embeddings (дата звернення: 09.12.2025). 
63 
 
10. Gazali S. Word-Based Neural Language Modeling Using GloVe + LSTM. 
Medium. URL: https://saifgazali.medium.com/word-based-neural-language-modeling-
using-glove-lstm-ffb4ae314abc (дата звернення: 09.12.2025). 
11. Li X., Liu T., Zhang L., Alqahtani F. H., Çakmak Y. A Transformer-BERT 
Integrated Model-Based Automatic Conversation Method Under English Context // IEEE 
Access. 2024. DOI: 10.1109/ACCESS.2024.3388100. (дата звернення: 09.12.2025). 
12. Çakmak Y. From Keywords to Concepts: Leveraging Sentence 
Transformers for Smarter Information Retrieval. Medium. URL: 
https://medium.com/@ysfckmk/from-keywords-to-concepts-leveraging-sentence-
transformers-for-smarter-information-retrieval-8233c6e48e89 (дата звернення: 
09.12.2025). 
13. Transformer Model Explained. URL: https://deepfa.ir/en/blog/transformer-
model-deep-learning-ai (дата звернення: 09.12.2025). 
14. Vector Embedding Overview. IBM. URL: 
https://www.ibm.com/think/topics/vector-embedding (дата звернення: 09.12.2025). 
15. Cosine Similarity Overview. IBM. URL: 
https://www.ibm.com/think/topics/cosine-similarity (дата звернення: 09.12.2025). 
16. Cosine Similarity in DBMS. URL: 
https://www.geeksforgeeks.org/dbms/cosine-similarity/ (дата звернення: 09.12.2025). 
17. Scaling Recommender Transformers to a Billion Parameters. URL: 
https://towardsdatascience.com/scaling-recommender-transformers-to-a-billion-
parameters/ (дата звернення: 09.12.2025). 
18. Transformer Model. IBM. URL: 
https://www.ibm.com/think/topics/transformer-model (дата звернення: 09.12.2025). 
19. Self-Attention Mechanism Overview. IBM. URL: 
https://www.ibm.com/think/topics/self-attention (дата звернення: 09.12.2025). 
20. IMDb Non-Commercial Datasets. URL: https://developer.imdb.com/non-
commercial-datasets/ (дата звернення: 09.12.2025). 
64 
 
21. Sentence-Transformers: all-MiniLM-L6-v2. Hugging Face. URL: 
https://huggingface.co/sentence-transformers/all-MiniLM-L6-v2 (дата звернення: 
09.12.2025). 
22. Googletrans Library. PyPI. URL: https://pypi.org/project/googletrans/ (дата 
звернення: 09.12.2025). 
23. Python Data Structures Tutorial. URL: 
https://docs.python.org/uk/3/tutorial/datastructures.html (дата звернення: 09.12.2025). 
24. TF-IDF vs Bag-of-Words in NLP. URL: 
https://www.pedromebo.com/blog/en-tfidf-bow-nlp (дата звернення: 09.12.2025). 
25. RapidFuzz Library. GitHub. URL: https://github.com/rapidfuzz/RapidFuzz 
(дата звернення: 09.12.2025). 
26. RapidFuzz Fuzz Usage Documentation. URL: 
https://rapidfuzz.github.io/RapidFuzz/Usage/fuzz.html (дата звернення: 09.12.2025). 
27. UML Sequence Diagrams. URL: https://www.geeksforgeeks.org/system-
design/unified-modeling-language-uml-sequence-diagrams/ (дата звернення: 
09.12.2025). 
28. Component-Based Diagrams. URL: 
https://www.geeksforgeeks.org/software-engineering/component-based-diagram/ (дата 
звернення: 09.12.2025). 
29. UML Class Diagrams. URL: https://www.geeksforgeeks.org/system-
design/unified-modeling-language-uml-class-diagrams/ (дата звернення: 09.12.2025). 
30. Data Flow Diagram. IBM. URL: https://www.ibm.com/think/topics/data-
flow-diagram (дата звернення: 09.12.2025). 
31. UML Deployment Diagram. URL: https://www.geeksforgeeks.org/system-
design/deployment-diagram-unified-modeling-languageuml/ (дата звернення: 
09.12.2025). 
32. Pandas Documentation. URL: https://pandas.pydata.org/ (дата звернення: 
09.12.2025). 
33. Python Regex Library. URL: https://docs.python.org/uk/3/library/re.html 
(дата звернення: 09.12.2025). 
65 
 
34. PyTorch Framework. URL: https://pytorch.org/ (дата звернення: 
09.12.2025). 
 
  
66 
 
ДОДАТОК А 
 
 
«Затверджую» 
Завідувач кафедри статистики 
та прикладної математики 
  Анаіт КАРАПЕТЯН 
« »  2025 р. 
 
 
 
 
 
 
РОЗРОБЛЕННЯ НЕЙРОМЕРЕЖЕВОЇ РЕКОМЕНДАЦІЙНОЇ СИСТЕМИ 
ДЛЯ ПЕРСОНАЛІЗОВАНОГО ПІДБОРУ ФІЛЬМІВ 
Специфікація 
  482.ЧДТУ.5 2435-01 
 
Листів 2 
 
 
 
 
 
 
 
Розробниця    Єлизавета КОРОТКА 
Керівниця    Ірина МІРОШКІНА 
 
 
 
 
 
 
 
 
Черкаси – 2025 
67 
 
482.ЧДТУ.5 2435-01 
Позначення Найменування Примітка 
 Документація  
482.ЧДТУ.5 2435-01 12 01 Текст програми  
482.ЧДТУ.5 2435-01 90 01 Структура бази даних  
482.ЧДТУ.5 2435-01 34 01 Інструкція користувача  
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
  
68 
 
ДОДАТОК Б 
 
 
 
 
 
 
 
 
 
 
 
 
РОЗРОБЛЕННЯ НЕЙРОМЕРЕЖЕВОЇ РЕКОМЕНДАЦІЙНОЇ СИСТЕМИ 
ДЛЯ ПЕРСОНАЛІЗОВАНОГО ПІДБОРУ ФІЛЬМІВ 
Текст програми 
482.ЧДТУ. 52435-01 12 01 
Листів 7 
 
 
 
 
 
 
 
Розробниця    Єлизавета КОРОТКА 
 
 
 
 
 
 
 
 
 
 
 
 
Черкаси – 2025 
69 
 
import pandas as pd 
import ast 
import re 
from sentence_transformers import SentenceTransformer, util 
from rapidfuzz import fuzz 
from tqdm import tqdm 
import torch 
from deep_translator import GoogleTranslator 
 
# ------------------ Налаштування моделі ------------------ 
device = 'cuda' if torch.cuda.is_available() else 'cpu' 
model = SentenceTransformer('sentence-transformers/all-MiniLM-
L6-v2', device=device) 
 
# ------------------ Словник жанрів ------------------ 
genre_map = { 
    "комедія": "Comedy", "драма": "Drama", "трилер": 
"Thriller", "фантастика": "Sci-Fi", 
    "кримінал": "Crime", "романтика": "Romance", "жахи": 
"Horror", "музика": "Music", 
    "біографія": "Biography", "фентезі": "Fantasy", "пригоди": 
"Adventure", 
    "історія": "History", "сімейний": "Family", 
"короткометражка": "Short", 
    "аніме": "Animation", "документальний": "Documentary" 
} 
 
# ------------------ ФУНКЦІЇ ------------------ 
 
def clean_genres(val): 
    if pd.isna(val): 
        return [] 
    if isinstance(val, list): 
        return [g.strip() for g in val] 
    if isinstance(val, str): 
        text = val.strip() 
        if text.startswith("["): 
            try: 
                parsed = ast.literal_eval(text) 
                if isinstance(parsed, list): 
                    return [g.strip() for g in parsed] 
            except: 
                pass 
        return [x.strip() for x in text.split(",")] 
    return [] 
 
def extract_year(date_str): 
    if pd.isna(date_str) or not isinstance(date_str, str): 
        return None 
    match = re.search(r"\b(19|20)\d{2}\b", date_str) 
    return int(match.group()) if match else None 
 
def extract_year_range(query): 
    min_year, max_year = None, None 
70 
 
    query_lower = query.lower() 
    years = [int(y) for y in 
re.findall(r'\b(19\d{2}|20\d{2})\b', query_lower)] 
    for year in years: 
        year_str = str(year) 
        idx = query_lower.find(year_str) 
        context = query_lower[:idx].split() 
        if context: 
            last_word = context[-1] 
            if "до" in last_word: 
                max_year = min(max_year or year, year - 1) 
            elif "після" in last_word: 
                min_year = max(min_year or year, year + 1) 
            elif "в" in last_word or "з" in last_word or "року" 
in last_word or "рік" in last_word: 
                if min_year is None or min_year == year: 
                    min_year = year 
                    max_year = year 
    if len(years) == 1 and min_year is None and max_year is 
None: 
        min_year = years[0] 
        max_year = years[0] 
    return min_year, max_year 
 
def detect_negations(text): 
    words = text.split() 
    forbidden = [] 
    neg_words = ["не", "без", "not", "without", "no", "ні"] 
    for i, w in enumerate(words): 
        if w.lower() in neg_words and i + 1 < len(words): 
            segment = words[i + 1:i + 4] 
            if segment: 
                forbidden.append(" ".join(segment)) 
    return forbidden 
 
def normalize_actor_name(name): 
    return re.sub(r"(а|у|и)$", "", name.lower()).strip() 
 
def extract_actors(user_query, actor_list, threshold=35): 
    found = [] 
    query_norm = user_query.lower() 
    for actor in actor_list: 
        actor_norm = actor.lower() 
        ratio = fuzz.partial_ratio(actor_norm, query_norm) 
        if ratio >= threshold: 
            found.append(actor) 
    return list(set(found)) 
 
def map_genres(text): 
    mapped = [] 
    for ukr, eng in genre_map.items(): 
        if ukr in text.lower(): 
            mapped.append(eng) 
    return mapped 
71 
 
 
def clean_vector_query(query): 
    """Видаляє стоп-слова, нерелевантні фрази та роки для 
покращення векторного пошуку.""" 
    query_without_years = re.sub(r'\b(19|20)\d{2}\b', '', 
query.lower()) 
    query_lower = re.sub(r'[^\w\s]', '', query_without_years) 
    stop_words = {'фільм', 'фільми', 'кіно', 'про', 'що', 
'який', 'які', 'у', 'в', 'ролях', 'з', 'актором', 'актрисою', 
                  'на', 'тему', 'жанрі', 'жанр', 'після', 'до', 
'року', 'рік', 'вийшов', 'вийшла', 'вийшли', 'за', 
                  'мотивами', 'або', 'і', 'та', 'але', 'це', 
'це є', 'це про', 'є'} 
    words = query_lower.split() 
    cleaned_words = [word for word in words if word not in 
stop_words and len(word) > 1] 
    return " ".join(cleaned_words) 
 
def translate_to_english(text: str) -> str: 
    """ 
    Автоматичний переклад будь-яких слів українською -> 
англійською 
    для векторного пошуку. 
    """ 
    try: 
        translated = GoogleTranslator(source='uk', 
target='en').translate(text) 
        return translated.lower() 
    except Exception as e: 
        print("⚠️ Помилка перекладу:", e) 
        return text.lower() 
 
def embed_movies(df): 
    texts = df["Movie_Name"].astype(str) + " " + 
df["Genres"].astype(str) + " " + df["Overview"].astype(str) + " " + 
df["Cast"].astype(str) 
    embeddings = [] 
    batch_size = 300 
    for i in tqdm(range(0, len(texts), batch_size), 
desc="Кодування пакетів"): 
        batch = texts[i:i + batch_size].tolist() 
        emb = model.encode(batch, convert_to_tensor=True, 
device=device) 
        embeddings.append(emb) 
    if embeddings: 
        return torch.cat(embeddings, dim=0) 
    return torch.tensor([], device=device) 
 
def nn_search(query_emb, movie_embeddings, top_k=50): 
    if len(movie_embeddings) == 0: 
        return [], [] 
    scores = util.cos_sim(query_emb.to(device), 
movie_embeddings.to(device))[0] 
    top_results = scores.topk(min(top_k, len(scores))) 
72 
 
    return top_results.indices.tolist(), 
top_results.values.tolist() 
 
# ------------------ ЗАВАНТАЖЕННЯ ДАТАСЕТУ ------------------ 
try: 
    df = pd.read_csv("IMDb_Movies.csv") 
except FileNotFoundError: 
    print("Помилка: Файл 'IMDb_Movies.csv' не знайдено.") 
    exit() 
 
df["Genres"] = df["Genres"].apply(clean_genres) 
df["Release_Year"] = df["Release_Date"].apply(extract_year) 
df["Overview"] = df["Overview"].fillna("") 
df["Cast"] = df["Cast"].fillna("").astype(str) 
 
all_actors = [] 
for cast in df["Cast"]: 
    parts = [c.strip() for c in cast.split(",") if c.strip()] 
    all_actors.extend(parts) 
all_actors = list(set(all_actors)) 
 
# ------------------ Кодування всіх фільмів ------------------ 
print(f"⏳ Кодування всіх фільмів... (Використовується 
{device})") 
movie_embeddings = embed_movies(df) 
print("✅ Кодування завершено") 
 
# ------------------ ПОШУК ------------------ 
user_input = input("�� Введіть, який фільм вас цікавить (жанри, 
емоції, сюжет, актори, рік тощо): ") 
print("�� Ваш запит:", user_input) 
 
# ------------------ ВИЯВЛЕННЯ КРИТЕРІЇВ ------------------ 
detected_actors = extract_actors(user_input, all_actors, 
threshold=35) 
final_query = clean_vector_query(user_input) 
final_query_translated = translate_to_english(final_query) 
 
forbidden_items = detect_negations(user_input) 
forbidden_items = [normalize_actor_name(x) for x in 
forbidden_items] 
print("�� Заборонені актори/жанри:", forbidden_items) 
 
min_year, max_year = extract_year_range(user_input) 
print(f"�� Виявлений діапазон років: Мінімум={min_year}, 
Максимум={max_year}") 
 
print("�� Виявлені актори:", detected_actors) 
print(f"�� Векторний запит для пошуку: 
{final_query_translated}") 
 
# ------------------ ФІЛЬТРАЦІЯ ------------------ 
73 
 
filtered_df = df.copy() 
initial_filter_applied = False 
 
# Фільтр за акторами 
if detected_actors: 
    filtered_df = filtered_df[filtered_df["Cast"].apply(lambda 
x: any(a in x for a in detected_actors))] 
    initial_filter_applied = True 
 
# Фільтр за роком 
if min_year is not None or max_year is not None: 
    temp_df = 
filtered_df.dropna(subset=['Release_Year']).copy() 
    if min_year is not None: 
        temp_df = temp_df[temp_df['Release_Year'] >= min_year] 
    if max_year is not None: 
        temp_df = temp_df[temp_df['Release_Year'] <= max_year] 
    if not temp_df.empty: 
        filtered_df = temp_df 
        initial_filter_applied = True 
 
# Фільтр заборон 
if forbidden_items: 
    def check_forbidden(row): 
        overview_lower = str(row["Overview"]).lower() 
        genres_lower = [g.lower() for g in row["Genres"]] 
        cast_lower = row["Cast"].lower() 
        normalized_cast = [normalize_actor_name(c.strip()) for 
c in cast_lower.split(',')] 
        for f in forbidden_items: 
            if f in normalized_cast or f in genres_lower or f 
in overview_lower: 
                return False 
        return True 
    filtered_df = 
filtered_df[filtered_df.apply(check_forbidden, axis=1)] 
    initial_filter_applied = True 
 
# Фільтр за жанрами 
required_genres = map_genres(user_input) 
if required_genres: 
    filtered_df = 
filtered_df[filtered_df["Genres"].apply(lambda g_list: any(g in 
g_list for g in required_genres))] 
    initial_filter_applied = True 
 
# Запасний план 
if filtered_df.empty and initial_filter_applied: 
    print("\n⚠️ Жодного фільму не відповідає всім критеріям 
фільтрації. Перехід до загального пошуку.") 
    filtered_df = df.copy() 
    initial_filter_applied = False 
 
# ------------------ ВЕКТОРНИЙ ПОШУК ------------------ 
74 
 
print(f"�� Векторний пошук серед {len(filtered_df)} 
фільмів...") 
 
if filtered_df.empty: 
    print("Неможливо виконати векторний пошук, база порожня 
після фільтрації.") 
    results = pd.DataFrame() 
else: 
    query_embedding = model.encode(final_query_translated, 
convert_to_tensor=True, device=device) 
    subset_embeddings = embed_movies(filtered_df) 
    idxs, scores = nn_search(query_embedding, 
subset_embeddings, top_k=50) 
    results = filtered_df.iloc[idxs].copy() 
    results['Similarity_Score'] = scores 
    results = results.sort_values(by='Similarity_Score', 
ascending=False) 
 
# ------------------ ВИВІД ------------------ 
print("\n�� Рекомендовані фільми:\n") 
if results.empty: 
    print("Нічого не знайдено за вашим запитом.") 
else: 
    for i, r in results.head(5).iterrows(): 
        print(f"�� Назва: {r['Movie_Name']}") 
        print(f"��️ Рік виходу: {r['Release_Year']}") 
        print(f"�� Жанри: {r['Genres']}") 
        print(f"�� У ролях: {r['Cast']}") 
        print(f"�� Опис: {r['Overview']}") 
        print(f"�� Схожість: {r['Similarity_Score']:.4f}") 
        print("-" * 50) 
  
75 
 
ДОДАТОК В 
 
 
 
 
 
 
 
 
 
 
 
 
РОЗРОБЛЕННЯ НЕЙРОМЕРЕЖЕВОЇ РЕКОМЕНДАЦІЙНОЇ СИСТЕМИ 
ДЛЯ ПЕРСОНАЛІЗОВАНОГО ПІДБОРУ ФІЛЬМІВ 
Структура бази даних 
482.ЧДТУ.5 2435-01 90 01 
Листів 3 
 
 
 
 
 
 
 
Розробниця    Єлизавета КОРОТКА 
 
 
 
 
 
 
 
 
 
 
 
 
Черкаси – 2025 
76 
 
У процесі розроблення рекомендаційної системи фільмів було використано 
набір даних IMDb Movies, який представлено у вигляді табличного файлу формату 
CSV. Даний набір даних містить структуровану інформацію про художні та 
телевізійні фільми і слугує основним джерелом даних для побудови, фільтрації та 
аналізу рекомендацій. 
База даних не є реляційною у класичному розумінні, однак має чітко 
визначену структуру атрибутів, що дозволяє ефективно застосовувати методи 
попередньої обробки даних, фільтрації та машинного навчання. 
База даних складається з одного логічного об’єкта — фільму, який 
описується сукупністю атрибутів, що відображають його ідентифікаційні, описові 
та статистичні характеристики. Кожен рядок таблиці відповідає окремому фільму, 
а кожен стовпець — певній властивості цього фільму. 
Набір даних використовується для: 
 • семантичного аналізу описів фільмів; 
 • фільтрації за жанрами, роком випуску та акторами; 
 • побудови векторних представлень текстових характеристик; 
 • реалізації контент-орієнтованої рекомендаційної системи. 
У таблиці 2.1 наведено узагальнену характеристику основних полів датасету. 
Поле Genres у вихідному наборі даних може зберігатися як текстовий рядок 
або як список значень, що потребує додаткової обробки та нормалізації перед 
використанням у фільтраційних алгоритмах. Аналогічно, поле Cast зберігає 
перелік акторів у вигляді рядка, розділеного комами, що дозволяє застосовувати 
методи текстового аналізу та нечіткого зіставлення. 
Для цілей аналізу було додатково сформовано похідний атрибут 
Release_Year, який отримується шляхом виділення року з поля Release_Date. Це 
спрощує фільтрацію за часовими критеріями. 
Текстові поля Movie_Name, Overview, Genres та Cast використовуються для 
формування векторних представлень за допомогою моделей глибинного навчання, 
що дозволяє здійснювати семантичний пошук і рекомендацію фільмів на основі 
змістовної схожості. 
77 
 
Таким чином, структура бази даних IMDb Movies є достатньо гнучкою та 
інформативною для реалізації рекомендаційної системи фільмів. Поєднання 
структурованих та напівструктурованих атрибутів забезпечує можливість 
використання як класичних методів фільтрації, так і сучасних підходів машинного 
навчання та обробки природної мови. 
  
78 
 
ДОДАТОК Г 
 
 
 
 
 
 
 
 
 
 
 
 
РОЗРОБЛЕННЯ НЕЙРОМЕРЕЖЕВОЇ РЕКОМЕНДАЦІЙНОЇ СИСТЕМИ 
ДЛЯ ПЕРСОНАЛІЗОВАНОГО ПІДБОРУ ФІЛЬМІВ 
Інструкція користувача 
482.ЧДТУ.5 2435-01 34 01 
Листів 4 
 
 
 
 
 
 
 
Розробниця    Єлизавета КОРОТКА 
 
 
 
 
 
 
 
 
 
 
 
 
Черкаси – 2025 
79 
 
Даний додаток містить інструкцію користувача програмного застосунку 
рекомендаційної системи фільмів, розробленої у межах кваліфікаційної роботи. 
Інструкція призначена для кінцевих користувачів та описує порядок запуску 
програми, введення запитів і отримання результатів. 
Рекомендаційна система фільмів призначена для підбору кіно- та 
телевізійних фільмів відповідно до побажань користувача, сформульованих у 
вигляді текстового запиту природною мовою. Система враховує жанрові 
вподобання, сюжетні характеристики, акторський склад, часові обмеження, а також 
семантичну близькість описів фільмів. 
Програмний застосунок реалізовано у вигляді консольної програми мовою 
Python та орієнтовано на використання без спеціальної підготовки у сфері 
програмування. 
Для коректної роботи рекомендаційної системи необхідне таке програмне та 
апаратне забезпечення: 
 • операційна система: Windows, macOS або Linux; 
 • інтерпретатор Python версії не нижче 3.9; 
 • оперативна пам’ять: не менше 8 ГБ (рекомендовано); 
 • вільний дисковий простір: не менше 1 ГБ. 
Перед запуском застосунку користувач повинен переконатися у встановленні 
таких бібліотек: 
 • pandas; 
 • torch; 
 • sentence-transformers; 
 • rapidfuzz; 
 • tqdm. 
Усі бібліотеки можуть бути встановлені за допомогою менеджера пакетів pip. 
Для запуску рекомендаційної системи необхідно виконати такі кроки: 
1. Розмістити файл з програмним кодом у каталозі разом із файлом набору 
даних IMDb_Movies.csv. 
2. Відкрити термінал або командний рядок. 
80 
 
3. Перейти до каталогу з програмою. 
4. Виконати команду запуску Python-скрипта. 
5. Дочекатися завершення процесу завантаження та кодування даних. 
Після ініціалізації система автоматично переходить у режим очікування 
введення користувацького запиту. 
Користувацький запит вводиться у текстовому вигляді природною мовою. 
Допускається використання української або англійської мови. Запит може 
містити такі елементи: 
 • жанр або кілька жанрів фільму; 
 • опис настрою або емоційної тематики; 
 • сюжетні характеристики; 
 • імена акторів; 
 • часові обмеження (рік або діапазон років); 
 • умови виключення (наприклад, відсутність певного актора або 
жанру). 
Приклади коректних запитів: 
 • «комедія без Джима Керрі»; 
 • «драматичний фільм про війну після 2010 року»; 
 • «фільм, що підніме настрій»; 
 • «біографічний фільм з відомою актрисою». 
Після введення запиту система виконує такі етапи обробки: 
1. Попередню обробку тексту запиту (очищення, нормалізацію, 
усунення службових слів). 
2. Виявлення ключових характеристик запиту (жанри, актори, роки, 
заборонені умови). 
3. Формування векторного подання запиту за допомогою моделі 
глибинного навчання. 
4. Порівняння векторного запиту з векторними представленнями 
фільмів. 
5. Ранжування результатів за рівнем семантичної схожості. 
81 
 
Результати роботи рекомендаційної системи виводяться у текстовому 
вигляді. Для кожного рекомендованого фільму відображається така інформація: 
 • назва фільму; 
 • рік виходу; 
 • жанри; 
 • акторський склад; 
 • короткий опис; 
 • числовий показник схожості з користувацьким запитом. 
Фільми подаються у порядку спадання релевантності до введеного запиту. 
Рекомендаційна система працює виключно з фільмами, представленими у 
використаному наборі даних IMDb Movies. Якість рекомендацій може залежати від 
повноти та коректності вхідних даних, а також від точності формулювання 
користувацького запиту. 
Таким чином, інструкція користувача надає повний опис процесу взаємодії з 
рекомендаційною системою фільмів та дозволяє використовувати програмний 
застосунок без додаткової технічної підготовки. Простота введення запитів і 
наочність результатів забезпечують зручність використання системи для широкого 
кола користувачів.