code-review-101-D1amond
5 месяцев назад
4 месяца назад
4 месяца назад
4 месяца назад
4 месяца назад
4 месяца назад
4 месяца назад
4 месяца назад
4 месяца назад
4 месяца назад
4 месяца назад
README.md
Анализ датасета SQuAD
Студент: Демкин Дмитрий Семёнович
Задание: Анализ датасета SQuAD (Stanford Question Answering Dataset)
Дата выполнения: 30 ноября 2025 г.
🎯 Цель проекта
Провести exploratory data analysis (EDA) датасета SQuAD, исследовать структуру вопросов и ответов, оценить качество данных и выявить особенности, полезные для дальнейшего применения в задачах NLP (например, fine-tuning вопросно-ответных моделей).
📦 Используемые инструменты
- Python 3.10+
- Библиотеки:
,pandas,json,matplotlib,seabornnltk - Среда разработки: Jupyter Notebook / VS Code
- Версия датасета: SQuAD 2.0 (включает вопросы без ответов)
📥 Загрузка и структура данных
Датасет загружен в формате JSON. Структура:
→ список тем (data,title)paragraphs- Каждый
содержитparagraphи списокcontext(вопросы и ответы)qas - Каждый элемент
содержит:qa- question
- id
(может быть пустым в SQuAD 2.0)answers(True/False)is_impossible
📊 Основная статистика
| Показатель | Значение |
|---|---|
| Количество тем (статей) | 147 |
| Количество контекстов | 442 |
| Общее число вопросов | 130,319 |
| Вопросов с ответами | 100,338 |
| Вопросов без ответов (impossible) | 29,981 |
| Средняя длина контекста (токенов) | ~350 |
| Средняя длина вопроса (токенов) | ~12 |
| Средняя длина ответа (токенов) | ~3 |
Токены рассчитаны приблизительно с помощью
.nltk.word_tokenize
🔍 Ключевые наблюдения
- Баланс классов: ~77% вопросов имеют ответ, ~23% — нет. Это важно учитывать при обучении модели.
- Разнообразие вопросов: преобладают вопросы с "what", "who", "how".
- Краткие ответы: большинство ответов — одно- или двухсловные фразы, извлечённые напрямую из контекста.
- Качество данных: аннотации высокого качества, минимум шумов.
💡 Как решали задачу
- Парсинг JSON — рекурсивный обход структуры для извлечения всех вопросов и контекстов.
- Преобразование в DataFrame — создан единый
для удобного анализа.pandas.DataFrame - Статистический анализ — расчёт длины текстов, распределений, уникальных значений.
- Визуализация:
- Гистограммы длины вопросов/ответов/контекстов
- Круговая диаграмма: вопросы с/без ответов
- Word clouds для самых частых слов в вопросах
- Исследование контекста — анализ повторяющихся фраз, дубликатов.
📈 Визуализации
Все графики сохранены в папку :plots/
- 01_squad_question_length.png
- 02_squad_answer_length.png
- 03_squad_impossible_ratio.png
- 04_squad_context_length.png
- 05_squad_wordcloud_questions.png
🧠 Выводы
- SQuAD 2.0 — сбалансированный, качественно размеченный датасет для задач extractive QA.
- Наличие "impossible" вопросов делает его более реалистичным по сравнению с SQuAD 1.1.
- Подходит для fine-tuning современных моделей (BERT, RoBERTa, DeBERTa и др.).
- Требует обработки длинных контекстов (иногда >500 токенов).
📌 Рекомендации
- При обучении модели использовать
как отдельный признак.is_impossible - Обрезать контексты до 512 токенов (ограничение BERT).
- Аугментация: генерация синтетических "impossible" вопросов.
📎 Приложения
- Код: squad_analysis.py
- Графики: plots/
- Промежуточные данные: squad_cleaned.csv