3,583 papers
arXiv:2510.13914 76 15 окт. 2025 г. FREE

A11yn: обучение LLM генерировать доступный веб-код через reward-сигнал из WCAG-аудита

КЛЮЧЕВАЯ СУТЬ
Обнаружено: LLM обучены на триллионах токенов веб-страниц, 96% которых нарушают стандарты доступности — отсутствие alt-текстов, серый текст на белом (контраст 2:1 вместо 4.5:1),
вместо семантических тегов. A11yn позволяет дообучить модель генерировать веб-интерфейсы, доступные для людей с инвалидностью (слепота, слабое зрение, моторные нарушения). Метод использует GRPO — после генерации кода запускается Axe-core (аудит WCAG), нарушения конвертируются в penalty (Critical: −0.4, Serious: −0.3...), преобразуются в reward. GRPO обновляет веса модели в сторону паттернов с меньшими нарушениями — −60% inaccessibility rate за 2 эпохи обучения.
Адаптировать под запрос

TL;DR

A11yn — метод дообучения LLM для генерации веб-интерфейсов, соблюдающих стандарты доступности. Использует GRPO (Group-Relative Policy Optimization) с reward-функцией на основе нарушений WCAG (Web Content Accessibility Guidelines). После генерации кода модель запускает Axe-core — аудит доступности, который находит нарушения и классифицирует их по серьёзности: Minor, Moderate, Serious, Critical. Каждый уровень получает вес (0.1–0.4), суммируется penalty, преобразуется в reward. Этот reward направляет обучение через GRPO.

Главная находка: LLM обучены на миллиардах веб-страниц, 96% которых содержат нарушения доступности — отсутствие alt-текстов, плохой контраст, неправильные ARIA-атрибуты, смешанные landmarks. Модели репродуцируют эти паттерны из тренировочных данных. Промптинг помогает частично (Feeda11y), но требует 3 итерации на каждый запрос и всё равно оставляет 21% inaccessibility rate. Fine-tuning через SFT невозможен — нет датасетов с парами "запрос → доступный код". GRPO решает обе проблемы: учит модель напрямую из сигнала нарушений, без примеров.

Суть метода: GRPO генерирует 6 вариантов кода для одного запроса → Axe-core проверяет каждый → нарушения конвертируются в penalty с весами → reward = 2.0 - penalty → GRPO обновляет веса модели, повышая вероятность паттернов с меньшими нарушениями. Два прохода по 6.8K синтетических UI-запросов дают -60% inaccessibility rate при сохранении визуального качества.


🔬

Схема метода

[Один цикл обучения GRPO]

1. ROLLOUT
 Запрос UI → Policy модель генерирует 6 вариантов кода
 
2. REWARD
 Каждый код → Axe-core находит нарушения WCAG
 → Penalty = Σ(количество_узлов × вес_серьёзности)
 → Reward = 2.0 - Penalty (clip to 0)
 
3. UPDATE
 GRPO нормализует rewards внутри группы из 6
 → Advantage = (reward - mean) / std
 → Обновляет веса модели в сторону кода с меньшими нарушениями
 
[Повторить ~6800 раз × 2 эпохи]

Важно: Метод требует fine-tuning инфраструктуры (8× A6000 GPU, vLLM, Axe-core в headless Chrome). Но принципы и список нарушений применимы в промптинге.


📋

Extractable принципы для промптинга

Хотя A11yn — это система fine-tuning, из исследования можно извлечь конкретные требования WCAG, которые работают в обычном чате:

📌

Топ-5 нарушений, которые убирает A11yn

  1. Region landmarks (894→143 violations)
    • Весь контент страницы должен быть внутри <main>, <nav>, <header>, <footer>
    • Screen readers используют landmarks для быстрой навигации по секциям
  2. Color contrast (702→418 violations)
    • Минимум 4.5:1 контраст между текстом и фоном (WCAG 2.0 AA)
    • Критично для слабовидящих пользователей
  3. Landmark-one-main (164→17 violations)
    • Ровно один <main> landmark на странице
    • Определяет основной контент для assistive technologies
  4. Link names (129→47 violations)
    • Каждая ссылка должна иметь дескриптивный текст
    • ❌ "click here", "read more"
    • ✅ "Скачать отчёт Q3 2024", "Перейти к статье про GRPO"
  5. Image alt text (Table 7 rules)
    • Все <img> должны иметь alt="описание"
    • Декоративные изображения: alt="" или role="presentation"
📌

Другие критичные правила

  • ARIA attributes: используй правильные роли и атрибуты (Tables 6, 17)
  • Forms: каждый <input> с <label> (Table 10)
  • Headings: иерархия <h1><h2><h3> (Table 19)
  • Buttons: текст внутри или aria-label (Table 10)

🚀

Пример применения

Задача: Создать лендинг для российского EdTech стартапа "Учи.Код" — курсы программирования для школьников

Промпт:

Создай landing page для EdTech стартапа "Учи.Код" — онлайн-курсы Python для школьников 10-14 лет.

Секции: hero с видео, преимущества курса (3 карточки), тарифы (2 опции), отзывы (slider), форма записи, футер.

Соблюдай WCAG 2.0 Level AA:
- Используй семантические landmarks: <header>, <main>, <section>, <footer>
- Только ОДИН <main> на странице
- Контраст текста/фона минимум 4.5:1 (проверь тёмный текст на светлом фоне)
- Alt-текст для всех изображений (описательный, не "image1.jpg")
- Дескриптивные названия ссылок (не "подробнее", а "Посмотреть программу курса Python")
- Каждый <input> с соответствующим <label>
- <button> с понятным текстом внутри
- Heading иерархия: <h1> для заголовка, <h2> для секций, <h3> внутри секций
- Для видео добавь <figcaption> с описанием содержимого

Результат:

Модель сгенерирует HTML с:

  • Корректной структурой landmarks (header > main > sections > footer)
  • Высоким контрастом (например, #333 текст на #fff фоне = 12.6:1)
  • Alt-текстами: <img src="kid-coding.jpg" alt="Школьник 12 лет пишет код на Python в редакторе VS Code">
  • Ссылками: Скачать полную программу курса вместо Здесь
  • Формой:

Не факт, что будет 100% compliance (A11yn с fine-tuning даёт 85% точности), но значительно лучше чем без требований (промптинг даёт примерно 40-50% улучшения vs базовая модель).


🧠

Почему это работает

Слабость LLM: Модели обучены на триллионах токенов веб-страниц, где 96% сайтов нарушают WCAG. Частотный паттерн "недоступного кода" закодирован в весах. LLM генерирует наиболее вероятный код = репродукция типичных ошибок: <div> вместо <main>, серый текст на белом (2.1:1 контраст), click here, отсутствие alt-текстов.

Сильная сторона LLM: Модели отлично следуют явным инструкциям, особенно когда они конкретные и проверяемые. "Контраст минимум 4.5:1" — чёткое числовое требование. "Используй <main>" — конкретный тег. "Дескриптивные ссылки" — понятный принцип с примерами.

Как метод использует сильную сторону:

  1. Fine-tuning (A11yn): Во время обучения Axe-core даёт количественный penalty за каждое нарушение. GRPO сдвигает распределение вероятностей в сторону WCAG-compliant паттернов. После 2 эпох модель "помнит" что <main> лучше <div>, потому что этот паттерн систематически получал выше reward.
  2. Промптинг (extractable): Явные требования WCAG в промпте переопределяют частотные паттерны из обучения. Вместо генерации "наиболее вероятного" (недоступного) кода, модель генерирует "соответствующий инструкциям" (доступный) код. Эффект слабее чем fine-tuning (40-50% vs 60%), но работает без инфраструктуры.

📋

Шаблон промпта

Создай {тип_страницы} для {описание_проекта}.

{Опционально: список секций/компонентов}

Соблюдай WCAG 2.0 Level AA:
- Семантические landmarks: <header>, <main>, <section>, <nav>, <footer>
- Ровно ОДИН <main> landmark
- Контраст текста/фона минимум 4.5:1
- Alt-текст для всех <img> (описательный, не filename)
- Дескриптивные названия ссылок (не "click here"/"подробнее")
- Каждый <input> с соответствующим <label>
- <button> с текстом внутри или aria-label
- Heading иерархия: <h1> один на странице, потом <h2>, <h3>...
- Для медиа (<video>, <audio>) добавь описание/субтитры
- Используй HTML5 семантику вместо 
где возможно

Плейсхолдеры:

  • {тип_страницы} — landing page, dashboard, форма, блог, портфолио
  • {описание_проекта} — что делает сервис/продукт, для кого, какие функции
  • Список секций — опционально, если нужна конкретная структура

Адаптация под задачу:

  • Для форм: добавь "валидация с aria-invalid и aria-describedby для ошибок"
  • Для SPA: добавь "aria-live регионы для динамического контента"
  • Для таблиц: добавь "используй для заголовков"
  • Для чатов/комментариев: добавь "role='log' для новых сообщений"

⚠️

Ограничения

⚠️ Эффективность промптинга ниже fine-tuning: A11yn с GRPO даёт -60% inaccessibility rate, промптинг с WCAG требованиями даёт примерно -40-50%. Frontier модели (GPT-4.1, Claude Sonnet 4) показывают 27-29% inaccessibility rate даже без специальных инструкций — промптинг улучшит, но не до уровня A11yn.

⚠️ Нет автоматической проверки: Промптинг полагается на способность LLM интерпретировать требования. Для гарантии compliance нужен ручной аудит через Axe DevTools, WAVE, Lighthouse или другие инструменты.

⚠️ Сложные ARIA паттерны: Модели часто неправильно используют ARIA для интерактивных компонентов (modals, tabs, accordions). Требуются дополнительные примеры или проверка документации.

⚠️ Промптинг добавляет токены: Шаблон выше ~100 токенов. Для частых генераций UI это может быть накладно. A11yn не требует дополнительных токенов после fine-tuning.

⚠️ Визуальная доступность vs промптинг: Контраст цветов требует точных hex-кодов. LLM может ошибиться в расчётах (сгенерировать #777 на #fff = 4.47:1 вместо требуемых 4.5:1). Для критичных проектов нужна проверка.


🔍

Как исследовали

Команда из Yonsei University взяла Qwen2.5-Coder-7B-Instruct и обучила через GRPO на 8× NVIDIA A6000. Создали UIReq-6.8K — синтетический датасет из 6800 UI-запросов через GPT-4o-mini, охватывающий 68 категорий (бизнес, здоровье, образование, e-commerce...). Каждый запрос детальный: "Создай community forum для музыкантов с темной темой, sidebar навигацией, постами с комментариями, профилями участников".

Для каждого запроса модель генерировала 6 вариантов кода (temperature 0.7 для разнообразия). Каждый вариант рендерился в headless Chrome → Axe-core сканировал DOM и возвращал нарушения с severity levels. Penalty = сумма взвешенных нарушений (Minor×0.1 + Moderate×0.2 + Serious×0.3 + Critical×0.4). Reward = 2.0 - penalty. GRPO нормализовал rewards внутри группы из 6 → обновлял веса в сторону кода с меньшими penalties.

Почему 2 эпохи дали результат? Axe-core проверяет ~100 правил WCAG. При 6800 запросах × 6 вариантов × 2 эпохи = 81,600 code samples с количественным feedback. Модель быстро научилась паттернам: "используй <main> → меньше penalty", "добавь alt → меньше penalty", "контраст 4.5:1 → меньше penalty". Статистический learning очень эффективен для таких структурных правил.

Оценивали на RealUIReq-300 — 300 запросов из реальных сайтов (вручную кураторовали из публичных веб-страниц, убрали PII). Сравнивали с базовой моделью, Feeda11y (итеративный промптинг), Qwen 14B, GPT-4.1, Claude Sonnet 4.

Неожиданный результат: Frontier модели (GPT-4.1, Claude Sonnet 4) показали ХУЖЕ accessibility чем базовый Qwen 7B + Feeda11y. GPT-4.1: 27% inaccessibility rate, Claude: 29%, Qwen+Feeda11y: 21%. Почему? Frontier модели обучены генерировать визуально привлекательный код, но не специально на accessibility. A11yn с GRPO: 15% inaccessibility rate — на 43% лучше чем лучший baseline.

Ключевой инсайт: Scale (14B parameters, GPT-4.1) НЕ решает accessibility автоматически. Нужен явный feedback signal из WCAG-аудита. Промптинг помогает, но GRPO даёт систематическое улучшение через statistical learning на тысячах примеров.


🔗

Ресурсы

A11yn: Aligning LLMs for Accessible Web UI Code Generation

Janghan Yoon, Jaegwan Cho, Junhyeok Kim, Jiwan Chung, Jaehyun Jeon, Youngjae Yu

Yonsei University, Seoul National University

arXiv preprint (2025)

Важные отсылки:

  • WCAG 2.0 Guidelines: w3.org/WAI/WCAG20/quickref — полный список правил доступности
  • Axe DevTools: deque.com/axe/devtools — расширение для браузера, проверяет accessibility
  • Feeda11y (2025): итеративный промптинг для accessibility через ReAct feedback loops
  • GRPO (DeepSeekMath, 2024): алгоритм policy optimization без critic network

📋 Дайджест исследования

Ключевая суть

Обнаружено: LLM обучены на триллионах токенов веб-страниц, 96% которых нарушают стандарты доступности — отсутствие alt-текстов, серый текст на белом (контраст 2:1 вместо 4.5:1),
вместо семантических тегов. A11yn позволяет дообучить модель генерировать веб-интерфейсы, доступные для людей с инвалидностью (слепота, слабое зрение, моторные нарушения). Метод использует GRPO — после генерации кода запускается Axe-core (аудит WCAG), нарушения конвертируются в penalty (Critical: −0.4, Serious: −0.3...), преобразуются в reward. GRPO обновляет веса модели в сторону паттернов с меньшими нарушениями — −60% inaccessibility rate за 2 эпохи обучения.

Принцип работы

GRPO генерирует 6 вариантов кода для одного запроса → каждый проверяется через Axe-core (аудит в headless Chrome) → нарушения классифицируются по серьёзности (Minor/Moderate/Serious/Critical) → каждый уровень получает вес (0.1–0.4) → суммируется penalty → reward = 2.0 − penalty. GRPO нормализует rewards внутри группы из 6 вариантов и обновляет веса модели — паттерны с меньшими нарушениями становятся более вероятными при следующей генерации. Два прохода по 6.8K синтетических UI-запросов сдвигают распределение к WCAG-compliant коду.

Почему работает

LLM генерируют "наиболее вероятный" код из обучающих данных. Если 96% обучающих данных содержат
вместо
, серый текст на белом, ссылки "click here" — модель копирует эти ошибки как частотные паттерны. GRPO ломает это: во время обучения Axe-core даёт количественный penalty за каждое нарушение (например, 894 violations для region landmarks → penalty ~268 баллов). Модель систематически получает выше reward за WCAG-compliant паттерны. После 2 эпох топ-5 нарушений падают на 60-80%: Region landmarks с 894 до 143, Color contrast с 702 до 418, Landmark-one-main с 164 до 17, Link names с 129 до 47. Промптинг помогает слабее (~40-50% улучшения), но работает без дообучения — достаточно добавить конкретные WCAG требования в запрос.

Когда применять

Генерация веб-интерфейсов → конкретно для проектов где доступность критична (публичные сервисы, государственные порталы, EdTech, HealthTech, FinTech), особенно когда пользователи работают с assistive technologies (screen readers, voice control, клавиатурная навигация). В РФ государственные сайты с 2016 обязаны соблюдать ГОСТ Р 52872-2019 (аналог WCAG 2.0). НЕ подходит для внутренних админок на 5 человек — overhead не окупится.

Мини-рецепт

1. Добавь WCAG требования в промпт: Семантические landmarks (
,
,
,
), ровно ОДИН
на странице, контраст текста/фона минимум 4.5:1, alt-текст для всех (описательный, не filename), дескриптивные названия ссылок (не "click here"/"подробнее", а "Скачать отчёт Q3" или "Перейти к статье"), каждый с соответствующим ,

Примеры

[ПЛОХО] : Создай landing page для онлайн-школы программирования. Секции: hero с видео, преимущества (3 карточки), тарифы, форма записи, футер
[ХОРОШО] : Создай landing page для EdTech стартапа "Учи.Код" (курсы Python для школьников 10-14 лет). Секции: hero с видео, преимущества (3 карточки), тарифы (2 опции), форма записи, футер. Соблюдай WCAG 2.0 AA: используй
,
,
,
(только ОДИН
на странице), контраст текста минимум 4.5:1, alt-текст для изображений (описательный: "Школьник 12 лет пишет код Python в VS Code", не "img1.jpg"), дескриптивные ссылки (не "подробнее", а "Скачать программу курса Python"), каждый с

внутри карточек, для видео добавь
с описанием содержимого

Источник: A11yn: Aligning LLMs for Accessible Web UI Code Generation
ArXiv ID: 2510.13914 | Сгенерировано: 2026-01-12 00:08

Концепты не выделены.

📖 Простыми словами

A11yn: обучение LLM генерировать доступный веб-код через reward-сигнал из WCAG-аудита

arXiv: 2510.13914

Современные нейронки пишут код для сайтов, просто копируя ошибки из интернета. Проблема в том, что 96% существующих сайтов — это мусор с точки зрения доступности для незрячих или людей с нарушениями моторики. Модели обучались на этих триллионах строк кривого кода, поэтому они по умолчанию выдают недоступный интерфейс: кнопки без подписей, серый текст на сером фоне и дикую верстку, которую не прочитает ни один экранный диктор. LLM просто воспроизводит самый вероятный паттерн, а в нашей сети этот паттерн — полный провал в плане инклюзивности.

Это как если бы ты учил повара готовить, показывая ему только видео из привокзальных чебуречных. Формально еда есть, но есть её опасно. Метод A11yn — это строгий санитарный инспектор, который стоит над душой у повара. Вместо того чтобы просто надеяться на чудо, систему заставляют переделывать блюдо до тех пор, пока оно не будет соответствовать стандартам. Это не просто «сделай красиво», это жесткая дрессировка на соблюдение правил, которые большинство разработчиков привыкли игнорировать.

В основе лежит метод GRPO, который работает как групповой кастинг. Модель генерирует сразу 6 вариантов кода на один запрос, а затем их прогоняют через Axe-core — это автоматический аудит, который ищет нарушения мирового стандарта WCAG. Каждому косяку присваивают вес: за мелкую фигню штрафуют на 0.1, а за критическую ошибку, которая делает сайт бесполезным, прилетает 0.4. В итоге модель получает reward, который зависит от того, насколько мало правил она нарушила. Чем чище код, тем выше награда, и нейронка быстро понимает, что за семантическую верстку «кормят» лучше.

Хотя систему тестировали на создании веб-интерфейсов, этот принцип выравнивания через аудит универсален. Его можно натравить на безопасность кода, на юридическую чистоту текстов или на проверку фактов. Мы переходим от эпохи «просто спроси нейронку» к эпохе автоматического контроля качества, где на каждый чих модели есть свой цифровой ревизор. SEO умирает, GEO рождается, а вместе с ним рождается и стандарт кода, который наконец-то можно использовать без ручной переделки за нейросетью.

Короче: хватит надеяться, что база знаний LLM сама выдаст идеальный результат — она слишком замусорена плохими примерами. Нужно внедрять циклы обратной связи с жесткими штрафами за ошибки. Метод A11yn доказал, что даже безнадежно «кривую» модель можно выдрессировать писать эталонный код, если бить её по рукам за каждое нарушение WCAG. Кто первым внедрит такие фильтры в свой продакшен, тот получит продукт, который работает для всех, а не только для тех, кому повезло со зрением.

Работа с исследованием

Адаптируйте исследование под ваши задачи или создайте готовый промпт на основе техник из исследования.

0 / 2000
~0.5-2 N-токенов ~10-30с
~0.3-1 N-токенов ~5-15с