Google тихо відкотив функцію What People Suggest для медичних запитів. Офіційне формулювання — «якість відповідей». Але за цим стоїть конкретна архітектурна проблема: retrieval-система витягала семантично схожі, але клінічно несумісні фрагменти — і модель синтезувала з них технічно обґрунтовані, але небезпечні відповіді.
Головна теза: це не про медицину і не про відповідальність корпорацій. Це публічний кейс того, як провалюється RAG-архітектура, коли корпус даних не відповідає вимогам задачі. Урок застосовний до будь-якого пайплайну — від юридичного бота до корпоративного пошуку.
Чому агрегація думок користувачів не є валідною вибіркою
Функція What People Suggest будувалася на логічній, але хибній передумові: якщо достатньо людей описують схожий досвід, агрегований результат наближається до істини. У медицині ця модель ламається на рівні самої вибірки.
Для рекомендацій ресторанів або відгуків про готелі агрегація працює — вибірка достатньо велика і репрезентативна. Медичний форум — це інша популяція. Сюди приходять люди з нетиповим перебігом хвороби, незадоволені стандартним лікуванням, або ті, хто шукає підтвердження вже прийнятого рішення.
Validation bias як структурна властивість UGC-платформ
Платформи типу Reddit або Quora мають вбудований validation bias: публікують ті, хто має що сказати — тобто ті, у кого досвід відхиляється від норми. Людина, яка прийняла ібупрофен і через день почувається краще, не пише пост. Людина, у якої виникла нестандартна реакція — пише.
Це не проблема конкретних платформ — це математична властивість будь-якого добровільного контенту. Дослідники називають це survivorship bias у зворотному напрямку: у вибірці переважають крайні випадки, а не типові.
Як виглядає UGC-розподіл на практиці
Уяви умовний медичний форум з 10 000 постів про побічні ефекти ібупрофену. З них 8 500 описують нестандартні або негативні реакції — саме через них люди і прийшли шукати відповідь або поділитися досвідом. Ще 1 200 — запити «чи нормально, що...». І лише 300 постів у стилі «прийняв, допомогло, дякую» — бо ця людина більше не мала причини повертатися на форум.
Тепер RAG-система індексує цей корпус і отримує запит: «чи безпечний ібупрофен?» Similarity search знаходить 20 найрелевантніших chunks. 17 з них описують ускладнення. Не тому що ібупрофен небезпечний — а тому що безпечні випадки в корпусі просто недопредставлені.
Медичний форум проти клінічного дослідження: різниця у вибірці
Клінічне дослідження будується на контрольованій вибірці: визначена популяція, рандомізація, контрольна група. Результат відображає розподіл у реальній популяції пацієнтів.
Медичний UGC-форум — це протилежне:
- Вибірка нерандомізована — приходять ті, кому є що сказати
- Немає контрольної групи — немає голосу тих, у кого «все пройшло нормально»
- Confirmation bias підсилює сигнал — пости з нестандартним досвідом отримують більше відповідей і upvotes, піднімаються вище, потрапляють у більше chunks
- Часовий зсув — старіші пости з застарілими протоколами лікування семантично рівнозначні новим
Для розробника, який будує RAG, це означає одне: якщо корпус складається з UGC, розподіл думок у ньому не відповідає реальному розподілу випадків у популяції. Модель навчається на хвостах, а не на центрі розподілу.
Аналогія для розробника
Уяви, що твій рекомендаційний движок навчається тільки на 1-зіркових і 5-зіркових відгуках — 3-зіркових у корпусі майже немає. Модель буде впевнено рекомендувати або відхиляти, але не матиме поняття про «нормально».
Тепер зроби крок далі: уяви, що 1-зіркові відгуки отримують у 10 разів більше лайків і коментарів, ніж 5-зіркові — і тому переважають у пошуковій видачі. Система не просто «не знає нормального» — вона активно навчена на аномаліях. Саме це відбувається, коли RAG-система використовує форумний UGC як основне джерело для медичних або будь-яких інших YMYL-запитів.
Принцип Garbage In, Garbage Out не зникає при збільшенні параметрів моделі. Складніша архітектура синтезує зміщену вибірку переконливіше — але не робить її репрезентативною.
Де саме ламається RAG: chunk-collision і втрата клінічного контексту
Retrieval-Augmented Generation — архітектура, при якій модель спочатку витягує релевантні фрагменти з корпусу, а потім синтезує відповідь на їх основі. Точка збою — не генерація. Точка збою — retrieval.
Розберемо на конкретному прикладі. Користувач вводить запит: «дієта при раку підшлункової залози».
Покроковий механізм збою
- Embedding. Запит перетворюється на вектор у семантичному просторі.
- Similarity search. Система шукає chunks з найвищою косинусною схожістю. «Близькість» визначається статистичною схожістю слів — не клінічним контекстом.
- Chunk-collision. У контекстне вікно потрапляють два фрагменти: один про «низькожирову дієту при панкреатиті», інший про «харчування під час хіміотерапії». Обидва семантично близькі до запиту. Обидва клінічно несумісні в цьому контексті.
- Синтез. Модель формує відповідь, яка технічно обґрунтована джерелами, але клінічно некоректна: протоколи харчування при хіміотерапії кардинально відрізняються від загальних рекомендацій при захворюваннях підшлункової залози.
Як це виглядає на рівні retrieval-запиту
Щоб зрозуміти збій конкретно, подивимось на те, що система реально «бачить». Спрощений приклад retrieval-результату для запиту «дієта при раку підшлункової залози»:
Query: "дієта при раку підшлункової залози"
Retrieved chunks (top-3 by cosine similarity):
[chunk_id: 4821] score: 0.91
source: forum_post, date: 2021-08
"При панкреатиті лікарі рекомендують низькожирову дієту —
не більше 40г жирів на день. Підшлункова залоза не справляється
з переробкою жирів, тому обмеження критичне..."
[chunk_id: 2203] score: 0.88
source: health_blog, date: 2022-03
"Під час хіміотерапії важливо підтримувати калорійність.
Пацієнтам часто рекомендують висококалорійне харчування,
включаючи жири — для збереження маси тіла..."
[chunk_id: 7734] score: 0.85
source: forum_post, date: 2020-11
"Після резекції підшлункової залози дієта змінюється кардинально.
Перші місяці — мінімум жирів, потім поступове розширення..."
Модель отримує три chunks з cosine similarity 0.85–0.91 — всі «релевантні» за метрикою. Але chunk 4821 описує хронічний панкреатит, chunk 2203 — онкологію під хіміотерапію, chunk 7734 — постопераційний стан. Це три різних клінічних контексти з протилежними рекомендаціями щодо жирів.
Система не має механізму розрізнити їх — і синтезує «збалансовану» відповідь з суперечливих джерел.
Чому cosine similarity не бачить клінічного контексту
Cosine similarity вимірює кут між двома векторами у багатовимірному просторі. Чим менший кут — тим «ближчі» документи. Але що саме кодується у цьому просторі?
Embedding-модель навчається передбачати слова з контексту (або навпаки). Вона дізнається, що «підшлункова залоза», «дієта», «жири», «хіміотерапія», «панкреатит» — семантично пов'язані слова. Тому документи, які містять ці слова, отримують близькі вектори.
Але embedding не розуміє, що «обмеж жири» і «збільш калорійність за рахунок жирів» — це протилежні медичні інструкції для різних станів одного органу. Для вектора це просто два документи про підшлункову залозу і дієту.
Детальніше про обмеження embedding-моделей у domain-специфічних задачах — у дослідженні RAGAS (2023).
Візуальна схема: що відбувається в контекстному вікні
Запит користувача
│
▼
┌───────────────────┐
│ Embedding model │ → вектор запиту
└───────────────────┘
│
▼
┌───────────────────┐
│ Vector store │ similarity search
│ (весь корпус) │ → top-K chunks
└───────────────────┘
│
├── chunk A: панкреатит + низькожирова дієта (score: 0.91)
├── chunk B: хіміотерапія + висококалорійне (score: 0.88) ← COLLISION
└── chunk C: постопераційний стан (score: 0.85)
│
▼
┌───────────────────┐
│ LLM │ синтезує відповідь з A + B + C
│ (generation) │ ← модель «не знає», що A і B несумісні
└───────────────────┘
│
▼
Відповідь технічно
обґрунтована джерелами,
але клінічно некоректна
Чому це відбувається саме у YMYL-нішах
Google визначає YMYL (Your Money or Your Life) як категорію запитів, де неправильна відповідь може завдати реальної шкоди. Медицина, право, фінанси. Детально про те, як працюють YMYL-ніші з точки зору SEO, ми розбирали в окремій статті — YMYL-ніші: повне керівництво для SEO. У контексті RAG-архітектури проблема chunk-collision у цих нішах є найбільш критичною з двох причин:
- Висока доменна специфічність. Медичні терміни мають вузькі значення, які embedding-простір загального призначення не розрізняє. «Панкреатит» і «рак підшлункової залози» — для моделі суміжні теми, для клініциста — принципово різні патології з різними протоколами.
- Ціна помилки непропорційна. Неточна рекомендація ресторану — поганий обід. Неточна медична рекомендація може мати серйозніші наслідки.
Детальніше про критерії YMYL в контексті оцінки якості пошуку — у Search Quality Rater Guidelines від Google.