AI Humanizer — програма для Windows, яка оцінює, наскільки український або англійський текст схожий на згенерований мовною моделлю, і показує, через які саме речення та звороти. Текст при цьому нікуди не йде: евристики рахуються в самій програмі, а глибокий аналіз робить модель, запущена в LM Studio на вашому ж комп’ютері.
Про Joomla-компонент, зроблений на основі цього застосунку, я вже писав окремо. Тут про сам десктопний застосунок: навіщо він з’явився, чим відрізняється від того, що вже є, і що в ньому досі не так.
Детектор як доказ: де ламається доброчесність
Детектори ШІ-тексту потрапили в процедури академічної доброчесності швидше, ніж хтось перевірив, чи можна на їхні відсотки спиратися. OpenAI свій класифікатор закрила ще 20 липня 2023 року. За її ж даними, він правильно впізнавав лише 26 % машинного тексту і в 9 % випадків називав машинним людський.
Ширші цифри не кращі. У дослідженні Ляна та співавторів зі Стенфорда (журнал Patterns, 2023) сім популярних детекторів позначали як згенеровані 61 % текстів людей, для яких англійська не рідна; приблизно на п’ятій частині робіт помилялися всі сім одностайно. Для українських авторів, які подають англомовні статті до Scopus-журналів, це не абстракція.
У лютому 2026 року Washington State University відмовилася від AI-модуля Turnitin. Аргументи в меморандумі проректора прості й неприємні: восени 2024 року через систему пройшло 148 547 робіт, тож навіть заявлені 1 % хибних спрацювань означають близько 1 485 несправедливо позначених людських текстів; у 33 % справ про ШІ за 2023–2025 роки студентів визнали невинними, бо звіт детектора був єдиним доказом; сам звіт бачив лише викладач, тож студент не міг нічого заперечити до звинувачення.
Є ще конфіденційність. Elsevier прямо забороняє рецензентам і редакторам завантажувати рукопис або будь-яку його частину в генеративні ШІ-інструменти, бо це може порушити конфіденційність і права авторів. Хмарний детектор, куди вставляють чужий неопублікований рукопис, працює за тією самою схемою.
В Україні Мінцифри та МОН у квітні 2025 року видали «Рекомендації щодо відповідального впровадження та використання технологій штучного інтелекту в закладах вищої освіти». Акцент там на атрибуції: використання ШІ треба зазначати, і сам факт такого зазначення не має ставати приводом для звинувачень. Про детектори документ не каже нічого. Між «треба чесно позначати» і «чим тоді перевіряти» лишається порожнє місце, і заповнюють його хмарні сервіси з однією цифрою на виході.
Що вже є і чим AI Humanizer відрізняється
Грубо наявні інструменти діляться на чотири групи.
| Група | Приклади | Українська | Де обробляється текст | Що видає |
|---|---|---|---|---|
| Інституційні антиплагіатні системи | Turnitin, StrikePlagiarism | StrikePlagiarism заявляє понад 100 мов, українська в переліку на сайті прямо не названа | хмара вендора | загальний коефіцієнт і кольорові фрагменти |
| Окремі хмарні детектори | GPTZero, Copyleaks, Originality.ai, ZeroGPT | у GPTZero та Copyleaks є в офіційних списках | хмара вендора | відсоток, підсвічування |
| «Хуманайзери» | Undetectable.ai | залежить від сервісу | хмара | детекція + автоматичне переписування |
| Дослідницькі методи | Binoculars, DetectGPT | не орієнтовані на неї | локально, якщо є GPU і бажання розбиратися | число в консолі |
Кожна група закриває свою частину задачі, але не всю. StrikePlagiarism чесно пише, що його коефіцієнт «не є мірою частки» ШІ-тексту в документі, і показує ймовірність по фрагментах. Причин, чому фрагмент червоний, не пояснює ніхто. Хуманайзери роблять протилежне: переписують усе, не показуючи, що й навіщо змінили (а журналіст Девід Ґевірц у жовтні 2025 року показав, що детектор Undetectable.ai плутає людський і машинний текст в обидва боки). Binoculars на папері дуже сильний (автори пишуть про понад 90 % виявлення за 0,01 % хибних спрацювань), але це метод на парі мовних моделей, а не програма, яку можна дати викладачеві.
AI Humanizer я будував під чотири вимоги одразу, яких разом не закриває жоден із перелічених: щоб текст не залишав комп’ютер, щоб українська мала свої словники маркерів, а не перекладені англійські, щоб кожна оцінка розкладалася на зрозумілі причини, і щоб від «ось підозріле речення» до «ось виправлений .docx з тим самим оформленням» не треба було перескакувати між трьома сервісами.
Три рівні аналізу
Перший рівень — евристики. Вони працюють миттєво, під час введення, без жодної моделі. Програма ділить текст на речення й абзаци і рахує дев’ять сигналів, кожен зі своєю вагою:
| Сигнал | Вага |
|---|---|
| ритм речень (коефіцієнт варіації довжин) | 2,2 |
| кліше й «модельна» лексика на 100 слів | 2,4 |
| шаблонні вступні зв’язки | 1,5 |
| конструкції «не X, а Y» | 1,3 |
| трійки через кому | 1,0 |
| довгі тире | 1,1 для EN, 0,5 для UA |
| частка речень середньої довжини | 1,2 |
| однаковість абзаців | 1,0 |
| людські маркери (1-ша особа, дужки, питання) | 1,6 |
Тире для української важить менше навмисно: у нас воно пунктуаційна норма, а не звичка моделі. Словники для двох мов окремі. В українському є «відіграє ключову роль», «у сучасному світі», «невід’ємною частиною», в англійському — delve, tapestry, "it is worth noting". Підсумкову оцінку трохи розтягнуто до країв (0.5 + (score - 0.5) * 1.35), щоб кілька сильних маркерів важили більше, ніж розмазаний шум, а достовірність прив’язано до обсягу: до 80 слів вона низька, до 250 середня.
Другий рівень — схожість стилю із сімействами моделей: ChatGPT, Claude, Gemini, DeepSeek, Grok. У коді чесно написано, що це «hand-picked observations, not a trained classifier», і в інтерфейсі блок має позначку «експериментально» з приміткою, що це не визначення авторства.
Третій — глибокий аналіз локальною моделлю через LM Studio. Він захований за кнопкою і з’являється, лише якщо програма знайшла сервер LM Studio або утиліту lms.
Чому LM Studio викликається з main-процесу
Найпростіше було б робити fetch прямо з рендерера на localhost:1234. Але тоді користувачеві довелося б вмикати CORS у налаштуваннях LM Studio, а це ще один крок, на якому люди відвалюються. Тому всі запити до моделі йдуть із головного процесу Electron, де в Node-шного fetch CORS немає. Рендерер узагалі не отримує ipcRenderer, усе проходить через явний Api у shared/types.ts.
Цікавіша історія вийшла з JSON-схемою відповіді. LM Studio вміє grammar-constrained decoding: модель генерує поля строго в порядку схеми. Спершу ai_probability стояв першим, і малі моделі впевнено писали «0 %», а потім в аргументах доводили, що текст згенерований. Порядок я перевернув:
// Property order matters: grammar-constrained decoding emits fields in this order,
// so the model writes its evidence first and commits to a number last.
export const SCHEMA = {
type: 'object',
additionalProperties: false,
required: ['reasons', 'sentences', 'summary', 'model_guess', 'verdict', 'ai_probability'],
// …
}Модель тепер спочатку наводить докази, потім вердикт і лише в кінці число. Якщо число все одно суперечить вердикту, normalize() підтягує його в потрібний діапазон, а інтерфейс про це прямо пише. Окремо довелося писати поблажливий парсер: локальні моделі повертають <think>-блоки, markdown-огорожі, хвостові коми й, найчастіше, об’єкт, обрізаний лімітом токенів. Оскільки докази стоять у схемі першими, навіть обрізана відповідь зазвичай містить аргументи й підозрілі речення.
Правки як рецензування
Детектор, який лише каже «72 %», нічим не допомагає автору, що чесно писав сам і тепер має пояснити комісії, чому його текст «машинний». З версії 0.8.0 програма пропонує правки, а з 0.13.0 робить це навіть без LM Studio.
Офлайн-правила прибирають шаблонні початки («Крім того,», "Moreover,"), замінюють кліше простішими формулюваннями, перетворюють «не лише…, а й…» на звичайне «і», викидають порожні «варто зазначити, що». Це заміни фраз, а не граматика, тож в українській після заміни інколи треба поправити відмінок наступного слова. Довідка про це попереджає прямо.
Якщо LM Studio запущено, модель переписує речення, які сама ж позначила. Промпт жорсткий: зберегти зміст, кожен факт, число, назву, термін і посилання, нічого не додавати, не перекладати, академічний регістр лишити академічним. Модель бачить не весь текст, а речення з сусідами, бо довгий документ інакше не влазить у типовий контекст LM Studio.
Обидва джерела потрапляють в один список «Пропоновані правки», де вилучене закреслено червоним, нове позначено зеленим, і кожну правку можна прийняти, відхилити або повернути. У текст нічого не потрапляє без кліку.
Тут, звісно, напрошується питання про доброчесність. Інструмент, що прибирає маркери, можна використати й для того, щоб приховати використання ШІ. Програма міняє лише стилістичні звороти й нічого не дописує, але питання атрибуції вона не вирішує і вирішувати не повинна: це справа декларації автора і політики закладу.
Після правок Ctrl+S записує текст назад у файл того самого формату. Для .docx читання й запис ідуть через спільну TextMap, тож пласкому тексту в редакторі завжди відповідають ті самі run-и XML; токенний diff чіпає лише змінені фрагменти, а решта пакета перепаковується байт у байт. Стилі, таблиці, колонтитули й зображення лишаються на місці. PDF так не відредагуєш, тому з нього виходить новий .docx.
Звіт і посібник
Звіт експортується в PDF (Ctrl+P). PDF-бібліотеки в проєкті немає: приховане вікно Chromium відкриває сторінку report.html і друкує її через printToPDF. Пастка тут одна: приховане вікно не малює кадрів, тож чекати треба document.fonts.ready, а не requestAnimationFrame. У колофоні звіту написано, що текст оброблено локально й нікуди не надсилався, і для рецензента це, можливо, найважливіший рядок.
Окремим вікном відкриваються методичні рекомендації «Детекція AI-тексту»: як працюють детектори, чому помиляються, як автору захистити свій текст від хибних звинувачень. Усередині є калькулятор водяного знака, симулятор базової частоти й чек-лист автора. Посібник працює без інтернету.
Чого ще немає
- OCR. Скан PDF без текстового шару дасть порожній результат.
- Навчених словників. Лексикони стилю зібрано вручну як спостереження, а не натреновано.
- Ollama. Бекенд поки один, LM Studio; Ollama в планах і має стати одним рядком у
shared/capabilities.tsплюс клієнт. - Стримінгу відповіді моделі: зараз це один запит, і результат з’являється лише цілком.
- Підпису коду. Інсталятор не підписаний, SmartScreen попереджатиме.
Глибокий аналіз бере лише перші 160 речень, щоб текст умістився в контекст моделі. Збірки є тільки під Windows (NSIS-інсталятор і zip).
Стек і збірка
Electron 33, React 19, TypeScript 5.7, Vite 6 для рендерера, esbuild для main і preload, SCSS за BEM, pdf.js для читання PDF, fflate для перепакування .docx. Інтерфейс двомовний (UA/EN), і два словники перевіряються на однаковий набір ключів окремим скриптом. Перший коміт датовано 26 вересня 2026 року, поточна версія 0.13.0.
npm install
npm run dev # Vite + Electron with hot restart
npm run dist # NSIS installer + zip in ./releaseПотрібні Node.js 20+ і Git; нативних модулів немає, Visual Studio Build Tools не знадобляться. npm run dist починається зі smoke-тесту, який рендерить інтерфейс у jsdom. Саме він ловить useEffect, поставлений після раннього return: такий баг уже давав чорне вікно, а TypeScript і Vite на нього мовчали.
Джерела
- OpenAI AI classifier shutdown (Inquirer, 2023)
- Liang W. et al. GPT detectors are biased against non-native English writers (arXiv 2304.02819 / Patterns, 2023)
- The Markup: AI detection tools falsely accuse international students of cheating
- WSU Provost memo: cancellation of Turnitin AI detection (Feb 2026)
- Elsevier: generative AI in the review process
- Мінцифри, МОН: Рекомендації щодо відповідального впровадження та використання технологій ШІ в ЗВО (2025)
- StrikePlagiarism: AI content detection
- GPTZero: supported languages
- Copyleaks: AI detection supported languages
- Undetectable AI (Wikipedia)
- Hans A. et al. Spotting LLMs With Binoculars (arXiv 2401.12070)