Ми регулярно розповідаємо про кейси використання штучного інтелекту в медіа. Один із них — створення аудіоверсій матеріалів. Такі сервіси поки що недосконалі, але все більше редакцій експериментують із ними для контенту на сайтах і в соцмережах. Є такі кейси й в українських медіа — як з окремим сервісами, так і з поєднанням можливостей ШІ з можливостями автоматизації.
Читайте в розповіді співзасновника мережі гіперлокальних видань «Місцеві медіа» Віктора Захарченка, які впровадили озвучування новин для Telegram, із якими проблемами довелося зіткнутися, як їх нетривіально вирішували й до яких результатів це призвело. У кінці — докладна інструкція з автоматизованого створення аудіоновин.
Колись я дуже любив радіо. У шкільні роки воно «піклувалося» про мій денний сон — засинати під баталії депутатів Верховної Ради за головування Івана Степановича Плюща було так солодко. У студентські роки зʼявився формат FM-радіостанцій, який показав, що радіо може бути справді розважальним. Але потім трапився інтернет, який поставив з ніг на голову всю медіаіндустрію.
З моменту заснування першого з видань мережі — «Менщини» (видання Менської територіальної громади в Чернігівській області), ми вирішили, що не конкуруватимемо з традиційними місцевими паперовими виданнями. Імовірніше, ми запустили видання на противагу їм та їхнім методам. Так, ми розуміли, що втрачаємо доступ до старшої частини авдиторії, але прийняли це як необхідність і сфокусувалися на перевагах інтернету.
Про аудіоформат для новин у «Місцевих медіа» ми вперше заговорили десь під кінець «десятих». Хотілося поекспериментувати з радіо, проте аргументів «за» виявилося замало. Ми все-таки інтернет-видання, а власного контенту на заповнення стрічки радіоновин у нас не було. І ось 2024 року ми подивилися на аудіоновини вже під іншим кутом.
Авдиторія, що «дорослішає»
Я зрозумів, що моя мама вже не може читати «Менщину». Це і стало поштовхом для пошуку нового формату дистрибуції.
Наша авдиторія дорослішала (не хочу казати «старішала») разом із нами. Отже, через 13 років існування неминуче зʼявилися ті, кому споживання новин на екранах смартфонів і компʼютерів стало фізично дискомфортним. І ми знову повернулися до теми аудіо, адже інструменти штучного інтелекту наразі дозволяють створювати аудіоверсію новин повністю автоматизовано.
Ось перелік технологій, якими ми користуємося для цього:
- автоматизація на zapier.com;
- наголоси — через slovnyk.ua/nagolos.php;
- вирізання та форматування — внутрішні інструменти Zapier;
- озвучування через Whisper від OpenAI.
Коли обиратимете для себе інструмент для озвучування (text-to-speech), раджу ознайомитись із цим рейтингом від Deepgram. Вони очікувано ставлять себе на перше місце й неочікувано взагалі не включають Whisper. Проте матеріал буде корисним для розуміння можливостей ШІ.
Як ми почали «збирати» граблі, на які наступили
Насамперед ми відкоригували роботу редакторів — вирішили, що не всі публікації мають бути озвучені. Виняток склали неновинні публікації:
- матеріали рубрики «Доброго ранку» з фото;
- регулярні конкурси «Придумай підпис для фото»;
- опитування.
Тобто ми не озвучуємо всі матеріали, де фокус зміщено з текстового контенту й події на взаємодію чи фото. Решта публікацій, які ми пускаємо в озвучування, випускові редактори помічають спеціальним хештегом #аудіо, який під час озвучування вирізаємо разом із гіперлінками.
На перший погляд, все виглядає доволі просто:
- взяти необхідний контент із джерела (у нас це переважно сторінка на Facebook);
- озвучити інструментами text-to-speech;
- опублікувати в обраному каналі (у нас це переважно Telegram).
Проблема 1: де заголовок?
Публікація на Facebook фактично не містить заголовка. А нам він конче потрібен для того, щоб дати анонс новини — люди мають знати, про що новина.
Спершу ми хотіли автоматично визначати заголовок як текст на початку новини до крапки, знаку оклику чи питання. Потім зрозуміли, що це працює не завжди, а потрібно, щоб автоматизованими були 100 % випадків. Тому простим рішенням було визнавати заголовком усе, що йде до першого перенесення стрічки. Довелося окремо проінструктувати випускових редакторів. Але вони й самі швидко навчилися — кілька разів побачивши, які помилки публікуються в Telegram
Проблема 2: дивний пес «хататапеес»
Подекуди в публікаціях є гіперпокликання. Точніше вони є майже завжди, адже ми вказуємо першоджерело, на яке покликаємось. І от коли ШІ озвучує такий текст (а для нього це все ще просто текст) — зʼявляється «хататапеес» (тобто технологія дослівно озвучує інтернет-протокол https).
Ми зрозуміли, що в нас немає кейсів, коли треба було б озвучити гіперлінк. Тому ми геть усі з них сміливо «вирізаємо» з тексту, а назву джерела кажемо словами.
Проблема 3: проблема три
Начебто я написав два рази одне й те саме. Але для штучного інтелекту це так не виглядає. Whisper від OpenAI (ми його обрали серед трьох найкращих інструментів через низьку вартість) геть погано озвучує числівники, написані у вигляді чисел. Тож озвучення ним номеру телефону виходить геть як короткий стендап.
Тож довелося «згодовувати» текст словами, а не цифрами. Смішно, що переформатування цифр у слова ми робили для OpenAI інструментами OpenAI. Після цього все запрацювало майже як треба — ще трапляються аномалії, але рідко.
Проблема 4: я наголошую
Штучний інтелект ще не скоро нас витіснить, особливо якщо буде так безбожно ставити наголоси в іменах. Це стало для нас справжнім відкриттям, наскільки погано OpenAI ставить наголоси в текстах українською. Звісно ж, у їхньому корпоративному всесвіті це не топова мова, тож нічого особистого. Але щоб настільки погано…
Тож довелося почаклувати, і ми знайшли slovnyk.ua/nagolos.php — сервіс, що розставляє наголоси. Він дає кращу якість, але є стабільні проблеми, про які я згадаю в наступному пункті. Залишилося необхідний текст відправити у «словник», а версію з розставленими наголосами віддавати до Whisper.
Проблема 5: для немісцевих
Словник наголосів погано працює з українськими топонімами. Наприклад, він дуже рандомно ставить наголоси у слові Корюківський (район Чернігівської області).
Тут ми встромили легендарну «милицю», як заведено називати у програмістів доволі примітивне й лобове розв’язання проблеми. Під час автоматизації на Zapier, після отримання тексту зі slovnyk, ми жорстко прописуємо наголоси в топонімах. Добре, що це треба було додати лише раз.
Технічні деталі: (описати як це реалізовано технічно)
Розв’язавши ці проблеми, нам лишалося лише правильно налаштувати дистрибуцію, додавши оформлення до публікації з анонсом аудіоверсії. Тепер вона автоматично публікується в нашому Telegram-каналі одразу після текстової версії новини. Наші матусі знову з новинами!
Що по грошах?
Вартість озвучування одного матеріалу вирахувати водночас складно і легко. Складно, бо частина технологічних сервісів оплачується щомісячно без розділення. За Zapier ми сплачуємо $588 за річний план, але він покриває всі наші автоматизації.
Можна спробувати виділити такий складник як task (один крок в автоматизації). Він коштує 3 центи, а на кожну публікацію ми витрачаємо 4 таких кроки. Тож нехай це коштує нам 12 центів. Зауважу, що йдеться не безпосередньо про озвучування, а про всі кроки:
- взяти контент;
- підготувати;
- озвучити;
- опублікувати.
А от легко вирахувати вартість власне озвучування. 0,6 цента за хвилину — зазвичай у нас матеріали не довше ніж хвилина. Тож візьмемо 1 цент для простоти. Отже, фінально озвучування з публікацією новини нам вартує 13 центів. І ми серйозно розмірковуємо над тим, аби перенести це на власну платформу із Zapier, який найбільше впливає на вартість.
Що люди кажуть?
Спершу суха статистика. Аудіоверсії ми публікуємо в Telegram-каналі й наразі працюємо над тим, що відстежувати, чи люди вмикають це аудіо, а не просто перегляди публікації з цм аудіо. Тож додамо проміжний гіперлінк, який відстежуватиме натискання. Engagement rate (уподобання таких матеріалів) трохи нижчий, ніж у класичних текстових публікацій.
Окрім людей похилого віку, ми знайшли ще кілька кейсів використання аудіоновин:
- Новини за кермом. Коли читати з екрана не просто незручно, але і небезпечно (ще й порушення закону).
- Розвага. ШІ все ще «підкидає– інколи неправильні наголоси, і часом це звучить смішно. Кілька читачів сказали, що слухають аудіоновини для підняття настрою.
Ми сильно переживали, що такі «вибрики» штучного інтелекту вийдуть нам боком, і читачі (точніше слухачі) критикуватимуть нас за неідеальність. Але нічого такого не сталося — ми почули слова підтримки за бажання експериментувати.
Нудна технічна частина для тих, хто хоче сам таке зробити у своєму виданні
Створення автоматизації в Zapier
Нам знадобиться акаунт у Zapier, якщо його ще немає, зареєструватися можна за покликанням.
Створюємо новий Zap. Першим кроком обираємо Facebook Pages > New Post to Your Timeline.
Далі проходимо процес підключення в полі Account. Під час відкриття налаштувань підключення обираємо Opt in to all corrent and future Pages, що дасть доступ Zapier до списку всіх сторінок у вашому Facebook. Після того як отримали доступ, можна перейти до наступного кроку Configure й обрати сторінку, з якої потрібно брати пости.
Після того як обрали сторінку, переходимо до кроку Test. Потрібно створити пост на підключеній сторінці Facebook, щоб Zapier побачив дані останнього посту. Після створення посту натисніть Test trigger — тоді ви побачите останній пост, підписаний як page_sream A. Виберіть його й натисніть на Continue with selected record.
Створення завдання, яке оброблятиме текст і робитиме озвучку
Для цього в наявному Zapі додаємо новий крок, обираємо Code by Zapier. Далі в розділі Setup обираємо Run Javascript.
Переходимо до розділу Configure. Там потрібно задати змінні й код для виконання. Змінні встановлюємо такі:
- text (тобто текст для обробки) — обрати з випадаючого списку Message.
- photo (тобто URL фотографії для скорочення) — обрати зі списку Picture.
- url (тобто URL адреси поста для скорочення) — обрати зі списку First Action Link.
Далі потрібно додати ще дві змінні. Сервіс OpenAI використовується для підготовки тексту для озвучки, а TinyURL — для скорочення покликань.
- OPENAI_API_KEY — API-ключ до сервісу OpenAI. Можна згенерувати за покликанням.
- TINYURL_API_KEY — API-ключ до сервісу TinyURL. Можна згенерувати за покликанням.
Після цього потрібно заповнити поле Code. Код можна взяти за покликанням.
Зазначимо, що цей код ми написали самі. Саме він відповідає за наголоси, відокремлення заголовка й озвучення числівників. Ви можете абсолютно вільно використовувати його або видозмінювати на власний розсуд.
Крок Run Javascript підготує текст до озвучування. На виході з нього будуть такі дані, як на скриншоті, і серед них бачимо поле Text, де зʼявилися наголоси. Також є поля, в котрих виділено заголовок й обрізаний текст для публікації у WordPress (ми в цій статті оминаємо функцію підготовки тексту для WordPress).
Озвучування через Whisper від OpenAI
Потрібно додати крок, який перетворить текст на аудіофайл. Для цього використовується API для Whisper від OpenAI. Створимо новий крок — обираємо OpenAI (GPT-3, DALL-E, Whisper). Після цього в секції Setup заповнюємо поле Action event, обираємо Convert Text to Speech.
Далі необхідно встановити зʼєднання з вашим акаунтом OpenAI — в полі Account натискаємо Sign in. Тоді у вікні, що відкрилося, вказуємо ключ OpenAI та натискаємо Yes, Continue to OpenAI (GPT-3, DALL-E, Whisper):
Переходимо до секції Configure. У ній потрібно заповнити поле Model, де обираємо Text-to-Speech-1.
Далі поле Text потрібно заповнити текстом, згенерованим на кроці Run Javascript:
Після цього переходимо до кроку Test і натискаємо Test step.
Тест завершиться й покаже дані, серед котрих нас найбільше цікавить поле File URL — це покликання на MP3-файл з озвученим текстом.
Публікація в соцмережу
Отримані дані з попередніх кроків можна надіслати в потрібну соцмережу, до якої може під’єднатися Zapier. Розглянемо приклад із Telegram. Для цього створюємо новий крок й обираємо саме цей канал. У секції Action event обираємо Send Message.
Після чого встановлюємо Account, натискаємо Sign in та у вікні, що з’явилося, вказуємо API-токен бота, якого можна створити через @BotFather.
Після того як підключення встановлено, переходимо в секцію Configure й обираємо Chat ID. Для цього потрібно перейти у власноруч створений бот і відправити йому /start. Так в інтерфейсі Zapier під час відкриття випадаючого поля Chat ID з’явиться ваш із ботом чат. Дозаповнимо поля Text Format і Message Text.
У полі Message Text вказуємо покликання на аудіоверсію.
Тепер переходимо в секцію Test і натискаємо Test step. Тоді перевіряємо Telegram — у чат із ботом має прийти нове повідомлення.
Після цього натискаємо Publish. У результаті сценарій-автоматизація спрацьовуватиме кожного разу, коли зʼявлятиметься новий пост у Facebook: відбуватиметься очищування тексту (розставлення наголосів, заголовок, зміна числівників тощо), озвучування й публікація в Telegram.