Рекомендації книг на основі їх описів та відгуків з використанням Embeddings

Колись у мене виникла ідея створити та зібрати в електронному каталог всіх виданих книг українськими видавництвами з автоматичним оновленням. Я зараз потрохи збираю ці списки, і час від часу на основі цієї бігдати іноді зʼявляються всраті гіпотези. На цей раз їх зʼявилось дві – чи можна якось візуалізувати книжки на основі подібності їх описів, та як виглядали б рекомендації книг по якомусь запиту на основі створених відгуків та описів різних книжок.

Про біль збору даних про книги

На превеликий жаль, даних українського реєстру ISBN у вільному доступі немає. Книжкова палата України (установа, яка видає ці ISBN-коди) публікує літопис книг в електронному форматі (і я вже думав почати їх обробляти), але, як виявилось, з трирічною затримкою. Я до них звертався за допомогою, і Палата відповіла, що актуальна інформація за останні роки є у них лише в паперовому форматі, тому вони запрошують мене відвідати бібліотеки (де сканування платне, і це приблизно по 160 сторінок на кожен місяць) або оформлювати підписку на цей журнал додому.

Якщо раптом у вас є інформація або думки, де ще можна спробувати отримати (окрім сайтів книжкових магазинів) – напишіть мені!

Трохи технічних деталей

Є така штука, як Embeddings – текст переводиться у вектори (значення а-ля [0.8, 0.5, 0.4, 0.9, ....]), та для пошуку схожих текстів використовується косинус подібності між цими векторами (cosine similarity). Основний плюс таких LM, на відміну від того ж еластіка/сфінкса – те, що вони працюють добре при дуже нечітких умовах пошуку та намагаються розібратись у запиті.

Зараз зʼявилось трошки більше, чим мільйон SAAS-стартапів, які продають доступ до векторних баз даних, хоча у більшості випадків прекрасно підходять різні безплатні рішення, наприклад, Chroma. За замовчуванням вони використовують модель, яка не розуміє кирилицю, а використовувати OpenAI можу бути дуже дорого (бо це українська мова!), але є досить багато відкритих моделей з підтримкою української мови, які можна запускати у себе на ноутбуці – я використав sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2, яка має найбільше лайків та завантажувань, хе-хе-хе!

Ну і ці всі експерименти проводились на основі декількох тисяч найпопулярніших книжок, які знайшлись в деяких реєстрах та інтернет-магазинах, тому тут може не бути багато інших (не менш популярних книжок). А відгуки всі я взяв з гудрідз – у них тепер новенький GraphQL для моїх цілей!

Схожі книжки по опису

Після створення векторів всі описів книг, та погравшись з коефіцієнтами для візуалізації, мені все-таки вдалось більш-менш кластеризувати більшість доданих книг! Вийшло якось так:

Візуалізація (краще відкривати з ноутбука, бо для телефонів це не дуже оптимізовано):

Відкрити у новому вікні →

Взагалі, там на графіках є багато хибно позитивних випадків, але в цілому виглядає так, що багато описів книжок корелюються між собою. Звісно, що у якості основного методу рекомендацій цей спосіб не підійде, хоча повертає місцями результати з дуже неявним звʼязком та не дуже зрозуміло, що може їх обʼєднувати, але у них все-таки щось спільне є! Наприклад, «10 країн після карантину» та «Маленька книгарня щастя».

Пошук на основі відгуків та описів книг

Останні декілька днів я безсовісно витягував коментарі до книжок з гудрідзу – напевно, це найцінніше, що там є, хоч там і багато коментарів рівня «сподобалось»/«не сподобалось». Маючи цей список, мені стало цікаво, чи можна порекомендувати якісь книжки на основі коментарів (а потім – на основі тих же описів).

Як виявилось, пошук досить погано працює по коментарях, трохи краще по опису книг, але все одно дуже мееех!

Q: Роман про дівчину, яка проживала в Криму
A[Review][1]: Марина Гримич - Клавка
A[Review][2]: Анастасія Левкова - За Перекопом є земля
A[Book][1]: Анастасія Левкова - За Перекопом є земля
A[Book][2]: Олена Улановська (пер. з англійської Валерій Терзі) - Місто, в якому цвіли абрикоси


Q: Чому у Запоріжжі так багато нещасливих людей
A[Book][1]: Марк Лівін, Ілля Полудьонний - Простими словами. Як розібратися у своїй поведінці
A[Book][2]: П’єр Самсон (пер. з французької Ростислав Нємцев) - «Мамонт»


Q: Як підготуватись до війни
A[Review][1]: Олександр Дєдик, Михайло Слободянюк, Олег Фешовець - Без паніки! Як вижити, боротися й перемогти під час бойових дій: Порадник для цивільного населення
A[Review][2]: Сунь-цзи - Мистецтво війни
A[Book][1]: Олександр Дєдик, Михайло Слободянюк, Олег Фешовець - Без паніки! Як вижити, боротися й перемогти під час бойових дій: Порадник для цивільного населення
A[Book][2]: Валер'ян Підмогильний - Коли говорять гармати… Антологія української воєнної прози ХХ століття


Деякі результати прям дуже цікаві, в цілому пошук все ще погано працює. А з іншого боку, я навряд чи колись дізнався б про «Мамонт» Самсона, про книжку з рейтингом 2.83 :)

Але мені все ще здається, що проаналізувавши відгуки (наприклад, аналіз настрою кожного відгуку) іншими шляхами можна знайти дуже багато чого нового.

До речі, якщо коментарі спробувати теж візуалізувати між собою (що взагалі не має ніякого сенсу), то зʼявляється величезний парашут, який дійсно не має сенсу!

Ще про рейтинги

У ще була ідея сформувати список з найбільш контроверсійних українських книжки, але як виявилось, їх взагалі не так багато. Але так як у мене є ця інформація, то я тепер знаю книжки з найгіршим рейтингом! У більшості з них, мінімальна кількість оцінок:

Назва Рейтинг Кількість Видавництво
Від пустки, Юлія Шекет 2.38 8 Видавництво Анеттти Антоненко
Суспільна пам’ять та її імпланти, Ґолька Мар’ян (пер. з польської В.Ф.Сагана) 2.5 1 НІКА-ЦЕНТР
Божевільні з Вифлеєма,Усама аль-Ейса (пер. з арабської Богдан Горват) 2.5 2 Видавництво Анетти Антоненко
Звідки росте борода?, Юрій Николишин 2.5 2 Апріорі
Вілла Анемона, Галина Петросаняк 2.5 20 Книги ХХІ
Секс у людському коханні. Ігри, в які грають у ліжку, Ерік Берн 2.73 33 Книжковий клуб "Клуб Сімейного Дозвілля"
Пор'ядна львівська пані, Люба Клименко 2.83 89 НОРА-ДРУК
«Мамонт», П’єр Самсон (пер. з французької Ростислав Нємцев) 2.83 12 Видавництво Анетти Антоненко
«Колір повітря», Абдо Вазен (пер. з арабської Оксана Прохорович) 2.84 17 Видавництво Анетти Антоненко
Камінна оргія, Євгенія Кононенко 2.88 25 Видавництво Анетти Антоненко
Хвала гніву. Чому ми повинні гніватися частіше і більше, Сальваторе Ла Порта (пер. з італійської Любов Котляр) 2.91 24 Видавництво Анетти Антоненко
У що вірити, Рудольф Ташнер (пер. з німецької Олександр Юдін) 2.94 10 Видавництво Анетти Антоненко

А за кількістю оцінок, на першому місці «Я бачу, вас цікавить пітьма» (6629 оцінок), на другому «Тигролови» (3930) і далі вже йде звичайний бестселер-список з «Спитайте Мієчку» Кузнєцової, «Інтернат» Жадана та «Танці з кістками» Сем’янківа.