В современном мире технологии неуклонно проникают во все сферы нашей жизни, и образование — не исключение. Одним из ярких примеров могут стать большие языковые модели. Так, заметим, что за последние несколько лет сформировался отдельный термин LLM4EDU. По данным Gan W. и соавторов [1] LLM4EDU уже сегодня могут активно использоваться в разных сферах образовательной деятельности:

Однако нейросети могут решать и другие проблемы в образовательной сфере. Так, наша команда столкнулась с необходимостью анализа качества онлайн-обучения.
Изучив возможности решения данной проблемы мы выявили, что на сегодняшний день общепринятыми методами оценки качества обучения в онлайн-среде являются:
прямое сравнение ответов учеников с желаемыми решениями (тесты, контрольные задания и т.д.);
оценка метрик качества обучения (процент возвратов, Completion Rate, Transformation Rate / Success Rate, статистика посещаемости).
Данные методы уже показали свою эффективность на практике, тем не менее, они не позволяют систематически информировать учителей, родителей и разработчиков онлайн-курсов об успехах и неудачах учащихся. Более того, учитывая большое количество проводимых уроков некоторые из данных подходов становятся невозможными.
Поэтому в последние годы активно внедряются автоматические системы анализа качества обучения, основанные на методах машинного обучения. По данному пути пошли и мы.
Функционально разработанная у нас система включает в себя модуль анализа аудио и модуль анализа видео, которые позволяют оценить вовлеченность участников видеоконференцсвязи, их эмоциональный фон и ряд других параметров.
Несмотря на кажущуюся сложность задачи в современных реалиях собрать подобную систему не представляет большой сложности. Ниже соберем подобный проект в качестве доказательства ?
Анализ аудио
В аудио мы будем оценивать эмоциональный фон. Отметим, что аудио представляют собой особую сложность для анализа, так как в аудиозаписях часто имеются посторонние звуки, существуют языковые и индивидуальные особенности проявления эмоций.
Для выявления эмоций возьмем модель HuBERT fine-tuned on DUSHA dataset for speech emotion recognition in russian language. Данная языковая модель обучена на датасете Dusha, который на сегодня является самым большим открытым датасетом для распознавания эмоций в устной речи на русском языке.
Плюсом данной модели являются довольно высокие метрики качества:
accuracy = 0.86
balanced = 0.76
macro f1 score = 0.81 on test set
Заметим, что люди могут распознавать эмоции с точностью от 10 до 95% (в среднем около 65-70%).
Воспользуемся кодом из Hugging Face преобразовав его в функцию:
from transformers import HubertForSequenceClassification, Wav2Vec2FeatureExtractor import torchaudio import torch feature_extractor = Wav2Vec2FeatureExtractor.from_pretrained("facebook/hubert-large-ls960-ft") model_em = HubertForSequenceClassification.from_pretrained("xbgoose/hubert-speech-emotion-recognition-russian-dusha-finetuned") num2emo = {0: 'нейтральная', 1: 'злость', 2: 'позитивная', 3: 'грусть', 4: 'другая'} def recognize_emotion(chunk): """Данная функция распознает эмоции из чанков""" waveform, sample_rate = torchaudio.load(chunk, normalize=True) transform = torchaudio.transforms.Resample(sample_rate, 16000) waveform = transform(waveform) inputs = feature_extractor( waveform, sampling_rate=feature_extractor.sampling_rate, return_tensors="pt", padding=True, max_length=16000 * 10, truncation=True ) logits = model_em(inputs['input_values'][0]).logits predictions = torch.argmax(logits, dim=-1) predicted_emotion = num2emotion[predictions.numpy()[0]] return predicted_emotion
Прежде чем анализировать эмоции необходимо убрать из файла тишину и разбить его на чанки по паузам в речи. Для этого воспользуемся библиотекой pydub.
# !pip3 install pydub from pydub import AudioSegment from pydub.silence import split_on_silence def split_audio_into_chunks(filepath): """Данная функция разбивает аудио на чанки для дальнейшего выявления эмоций""" # открываем аудиофайл с pydub sound = AudioSegment.from_file(filepath) # разбиваем аудио по тишине (700ms и больше) chunks = split_on_silence(sound, min_silence_len=700, silence_thresh=sound.dBFS-14, keep_silence=700) # создадим список для добавления эмоций whole_emotions = [] for i, audio_chunk in enumerate(chunks, start=1): # чтобы не сохранять чанки в виде аудиофайлов # преобразуем их в байты, которые подходят для анализа эмоций buffer = io.BytesIO() audio_chunk.export(buffer, format="wav") buffer.seek(0) # применим написанную нами функцию whole_emotions.append(recognize_emotion(buffer)) return whole_emotions
В результате мы получаем список всех эмоций из аудиофайла в хронологическом порядке. Итак, с анализом аудио разобрались. Далее рассмотрим, какую полезную информацию мы можем извлечь из видео.
Анализ видео
При анализе видео мы можем определить расположение лица в кадре, направление взгляда, направление лица. Решение подобной задачи можно осуществить при помощи специальных библиотек, например, Pygaze. Всего несколько строк кода и мы можем провести детекцию лица/лиц, определить расстояние до камеры, углы взгляда, лица, факт взгляда в камеру:
#!pip3 install pygaze from pygaze import PyGaze, PyGazeRenderer import cv2 image = cv2.imread("jonas.jpg") pg = PyGaze() print(pg.predict(image))
Также по видео мы можем распознать эмоции. Среди наиболее популярных библиотек для решения этой задачи можно выделить FER и DeepFace.
В отличие от FER DeepFace предоставляет комплексный анализ изображения:
# !pip3 install deepFace import cv2 import matplotlib.pyplot as plt from deepface import DeepFace img = '/content/joseph-gonzalez-iFgRcqHznqg-unsplash.jpg' imageFace = cv2.imread(img) plt.imshow(imageFace[:,:,::-1]) analyze = DeepFace.analyze(img) print(analyze)

Фото взято с https://unsplash.com/
Остается лишь разделить видеозапись на фреймы и анализировать каждый по отдельности. С этим нам поможет библиотека imageio:
#!pip3 install imageio[pyav] import imageio.v3 as iio for i, frame in enumerate(iio.imiter(video_file_path, plugin="pyav")): face = DeepFace.analyze(img) print(face) gaze = pg.predict(image) print(gaze)
В дальнейшем эти данные необходимо собрать для анализа, что позволит:
определить тенденции в эмоциональном фоне ученика и учителя;
проанализировать вовлеченность учителя и ученика в процесс обучения.
Также выходные данные можно использовать для прогнозирования приверженность ученика обучению, модерации работы учителя, но об этом в следующих статьях :-)
В будущем, благодаря подобным технологиям, образование станет еще более качественным, безопасным и интегрированным с реальными потребностями и интересами учеников, обеспечивая не только академические знания, но и развитие ключевых навыков XXI века.
