Як за допомогою великих мовних моделей проводити контент-аналіз: поради Костянтина Янченка

post-image
Аркадій Гущин Ірина Авраменко
Використовувати великі мовні моделі у медіадослідженнях можна і без глибинних навичок програмування.

5 березня в межах Днів Науки «Києво-Могилянської академії» український медіадослідник та викладач Інституту комунікації Єнського університету імені Фрідріха Шиллера Костянтин Янченко провів семінар, під час якого розповів про деякі сценарії використання мовних моделей для контент-аналізу, поділився алгоритмом дій. JTA підготувала конспект цієї події. 

Великі мовні моделі: було/стало

У 2018 році Google презентував нову модель BERT, і це справило сильне враження. Але коли почали одна за одною виходити різні версії ChatGPT, стало зрозуміло: речі, які в моменті здавалися революційними, швидко відходять у минуле (див. нижче порівняльну таблицю).

Порівняння мовних моделей
В лівій колонці прописані деякі типові аспекти роботи з мовними моделями, які ще залишаються актуальними, коли йдеться про контент-аналіз і кодування за певними категоріями, визначеними наперед. Права колонка — це можливості, які доступні зараз.

Тренування. Відносно нещодавно, аби проаналізувати ґрунтовно тему, доводилося спочатку тренувати модель. Їй «згодовували» корпус — певний масив даних, який закодували люди, попередньо узгодивши між собою механізм кодування. Як правило, автори не мали можливості пояснити моделі, що саме потрібно аналізувати. Модель радше мала дійти висновку самостійно за допомогою того матеріалу, який їй давали для тренувань.

Зараз мовні моделі теж так тренують, особливо коли їх потрібно адаптувати під конкретне завдання. Але сучасні моделі у форматі чату, з якими можна взаємодіяти через API, доволі непогано розпізнають природну мову, оскільки їх тренували на величезних масивах даних. Тобто є низка доволі типових завдань, з якими модель так чи інакше стикалася під час навчання. Можна простими словами пояснити їй, на якому рівні треба провести аналіз, якого результату очікуємо.

Поріг входу. Раніше нам було потрібно багато програмістів, які б писали код на всіх етапах роботи. Зараз дослідник може взаємодіяти з моделлю безпосередньо і це не потребує глибинних навичок програмування.

Якість. Якось для одного проєкту ми аналізували аргументи за і проти постачання зброї в загальнонаціональній пресі. Досягли певних результатів. Потім ми вирішили сфокусуватися на місцевій пресі, де дискурс був дуже схожий. Однак наша модель, яка була навчена під конкретне завдання на конкретних даних, тут надала гірший аналіз. Довелося знову оцінювати якість, продукувати дані, щоб покращити метрики. Сьогодні перехід на інші дані не обов’язково означає втрату якості.

Вартість. Зібрати людей, пояснити їм завдання, провести раунди кодування, перевірити все, а потім в разі чого перекодувати — це все дуже недешево. Сучасні моделі дозволяють досягати тих же результатів швидше, дешевше, а часто і кращої якості.

Типові сценарії застосування

Явне vs приховане значення

Явне значення — це щось, що однозначно функціонує на поверхневому рівні в мові. Той випадок, коли можна, наприклад, за допомогою певних слів-маркерів зрозуміти, в якому тематичному полі знаходиться той чи інший пост. 

Інша річ — аналіз абстрактних конструктів, як-от політичні цінності. Нещодавно я проводив для себе експеримент: кодував категорії аналізу вручну та порівнював свої результати з тими, що видавав GPT. Багато разів вони виявлялися дуже хорошими. Але коли, наприклад, йдеться про таку цінність як прагматизм, все ускладнюється. Приміром, політик на ток-шоу каже: «… так, ми можемо мати різні ідеології, але ми маємо зробити так, щоб парламент функціонував. І, попри якісь наші незгоди, ми маємо дивитися на речі практично і намагатися досягти результату. Це є нашим пріоритетом…». Людина розпізнає тут прагматизм, а мовній моделі це вдається не завжди. Це приклад більш прихованого значення.

Типове vs спеціальне завдання

Приклад більш типового завдання: ми даємо моделі аналізувати тональність тесту (позитивну, негативну, нейтральну). Модель часто стикалася з подібними завданнями, тож вони для неї будуть відносно простими.  

Приклад спеціального завдання: ми хочемо закодувати антиелітизм, один із базових елементів популізму. Це загалом можливо, але мовна модель звертатиме увагу на конкретні слова на кшталт «еліти» або «сильні світу цього». Якщо ж політик говоритиме в дещо переносному значенні — про Сороса або Біла Гейтса як про дуже впливових багатіїв, які керують світовим порядком і є втіленням еліт — то, можливо, такі речі не вдасться закодувати, оскільки модель не зрозуміє значення, яке спікер вкладає в такі висловлювання.

Правильна відповідь vs правильний тренд

Багато що залежить від вашої мети. Якщо у вас відносно небагато даних і вас цікавить якісне глибинне розуміння, то вам, найімовірніше, не слід для цього використовувати автоматичні методи. Останні є сенс застосовувати, коли даних занадто багато для традиційного аналізу, і правильний тренд вас цікавить більше, ніж правильна відповідь на конкретне запитання. Наприклад, як висвітлення певної теми змінювалося протягом тривалого часу або якими типами джерел послуговуються ЗМІ різних країн. Навіть якщо модель помилятиметься час від часу, ви все одно зможете побачити загальний тренд на основі даних.

Висока vs низька деталізація

Працюючи з мовними моделями, важливо чітко окреслити рівень абстракції, на якому має відбуватися аналіз. Наприклад, добираючи теми для серії текстів, людина інтуїтивно розуміє, що поняття на кшталт економіка, політика чи культура є значно ширшими, ніж, скажімо, ринок нерухомості або реформа децентралізації. Для мовних моделей це не завжди очевидно — вони можуть змішувати поняття різного рівня узагальнення. Тому важливо заздалегідь визначити бажаний рівень деталізації й чітко сформулювати ці очікування у запиті.  

Алгоритм дій

Визначення завдання, створення книги кодування (codebook)

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

Переклад: Чи обговорюються в дописі російські загрози іншим країнам, окрім України? Ці загрози можуть включати політичне втручання, дезінформацію та пропаганду, кібератаки, гібридну війну, дії хакерів та шпигунів, диверсії та інші види загроз.
Створення вибірки для валідації (validation set)

На цьому етапі ми маємо створити сет — частину «корпусу», відносно якої ми потім порівнюватимемо все, що закодує модель.

Критерії вибірки:

  • походить з тих же даних, які ви плануєте кодувати автоматично; 
  • є випадковою вибіркою. Це означає, що коли ви кодуватимете маленьку частинку, то там має бути приблизно той самий відсоток того феномену, який ви шукаєте; 
  • закодована (щонайменше) двома незалежними кодерами, оскільки одні й ті самі речі люди сприймають по-різному. Ідеально, якщо ви можете дати закодувати одне й те саме непарній кількості кодерів. Потім ви ухвалюєте остаточне рішення голосуванням. Якщо двоє людей вибрали один варіант, а третя людина — інший, то ви віддасте перевагу тому варіанту, який вибрала більшість;
  • рівень згоди між кодерами задокументовано (0.7 і вище за такими метриками як Krippendorff’s alpha або Cohen’s Kappa);
  • становить від 1 % до 10 % від загального обсягу даних.
Вибір моделі та параметрів, розробка запиту (на прикладі GPT)

Про що варто подумати:

  • Рівень кодування — на якому рівні відбуватиметься аналіз: стаття, пост, абзац чи речення. Іноді ви можете, наприклад, розбити ваш пост або статтю на окремі речення і поставити чатботу запитання щодо кожного речення, а потім аналізувати агреговані результати. Чим більше тексту ви даєте моделі, тим більше контексту вона отримує, і це добре. Але тоді їй важче дати правильну відповідь, бо відбувається розфокусування, втрата уваги. І навпаки: чим менше тексту — тим більший фокус та передбачуваніша відповідь стосовно конкретних даних. І тут треба шукати баланс.
  • Чи потрібно моделі давати приклади з ваших даних для навчання або уточнення відповідей? Загалом приклад — це завжди добре. Але й буває так, що модель починає мислити категорією того конкретного прикладу, який ви їй навели, певним чином зациклюється на ньому. Отже, коли ви просите GPT щось закодувати, потрібно щоразу генерувати інший приклад, щоб принаймні помилки сприйняття, якщо вони й виникатимуть, не мали системного характеру. 
  • Тип поведінки моделі: чи має GPT імітувати певний стиль відповіді або роль (adopted persona), наприклад, бути нейтральним експертом чи творчим автором. Це можна задавати і в API через окремий параметр.
  • Температура: вам потрібні унікальні відповіді чи більш передбачувані, точні та повторювані. Звісно, коли йдеться про контент-аналіз, у більшості сценаріїв вам потрібні детерміністські відповіді.
  • У якому форматі модель має відповідати: відкритий текст, бінарні (так/ні) відповіді чи шкала (наприклад, від 0 до 1). Найкраще GPT відповідає, коли ви даєте йому говорити. Тут він схожий на студента, який не знає точної відповіді, але коли починає говорити, то, можливо, по ходу сам зрозуміє правильну відповідь або помилку. Ви, напевно, помічали, що ChatGPT починає щось писати й вже в процесі відбувається коригування. Але якщо ви кодуєте за визначеними категоріями, варіант із відкритими відповідями буде дорожчим.
Перевірка стабільності відповідей

Важливо з’ясувати, наскільки наша мовна модель передбачувана у своїх оцінках. Наприклад, якщо вона вважає певний пост мовою ворожнечі, то чи повторить цю ж відповідь декілька разів. 

Як і людина, мовна модель не може пояснити різницю між «я загалом погоджуюсь» і «я повністю погоджуюсь». Ми не знаємо, наскільки це справді велика різниця. І якщо ви просите дати відповідь «так» чи «ні», то, звісно, ви отримаєте відповідь «так» чи «ні». Але це не значить, що кожне з цих «так» має однаковий ступінь впевненості. Тому часто корисно дати моделі можливість сигналізувати про непевність, недостатню кількість інформації, чи інші проблеми, які дослідниця чи дослідник потім можуть взяти до уваги.

Автоматичне кодування

Наведу приклад програмування моделі. 

Ми задали декілька базових параметрів. Вказуємо моделі, що нас цікавить не просто схожість, а саме збіг. Тобто те, що ми шукаємо, повинно містити один з вказаних меседжів.

І потім ми даємо текст. І ставимо одне запитання.

Що можна ще зробити? Особливо, якщо ви перший раз працюєте саме з цим типом завдань?

Можна зробити декілька раундів кодування і порівняти рівень узгодженості між цими раундами.

Якщо він більше 0.9, то тоді в принципі немає сенсу дублювати кодування.

Оцінка якості автоматичного кодування

Порівнюємо закодоване людьми з тим, що закодувала машина. Оцінюємо, чи завдання було виконано адекватно, за такими метриками:

  • Точність (Precision) частка правильних позитивних результатів серед усіх передбачених позитивних.
  • Чутливість (Recall) частка правильних позитивних результатів серед усіх справжніх позитивних.
  • F1-міра (F1-Score) середнє значення точності та чутливості, що оцінює баланс між ними.

Якщо всі результати будуть близько до 1, але не 1, тоді треба запитати себе: що для нас важливіше — не пропустити наратив, коли він там є, або не набрати зайвого? Як правило, ми хочемо щось середнє між цими двома параметрами. Звісно, це означає, що певна кількість постів буде закодована неправильно. Але якщо ці помилки не є систематичними, то в такому разі ми можемо говорити про правильний тренд.

Коригування попередніх кроків (за потреби)

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

Виклики та обмеження

Деякі з моделей, як-от ChatGPT, — це чорна скринька: ніхто, окрім розробника, не знає, як саме вони працюють та скільки у них закладено параметрів.

Якщо ми, дослідники, дійшли певних висновків, то, як правило, воліємо мати змогу відтворити це дослідження. У випадку з автоматичним контент-аналізом це не завжди можливо. Моделі змінюються постійно, і нас про це не попереджають.

Окрім того, ці моделі тренуються на упереджених даних, як і все, що продукує людина. Тому не можна говорити про якусь примарну об’єктивність або відстороненість.

Коментарі