В современном мире технологии неуклонно проникают во все сферы нашей жизни, и образование — не исключение. Одним из ярких примеров могут стать большие языковые модели. Так, заметим, что за последние несколько лет сформировался отдельный термин 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 века.