Рекомендации по машинному обучению связывают пользователей с нужным им контентом. Например, Amazon рекомендует ниже книги для «Властелина колец».

Порядок времени не имеет большого значения в рекомендациях по продуктам, предлагаемых Amazon или Netflix. Вы можете сначала прочитать «Властелин колец» или «Игру престолов» перед другими.

Для образовательного содержания более важен порядок. Knewton имеет явный граф предварительных условий (знаний), в котором указано, что вы изучаете концепцию X перед концепцией Y. Например, вы сначала выполняете сложение одной цифры 3+4 перед тем, как переходить к более сложным добавлениям, таким как 13+4.

В этом сообщении блога я объясняю, как расширить рекомендательные алгоритмы простой совместной фильтрации (CF) для использования временного порядка. Основное внимание уделяется области образования, где временной порядок содержания также говорит о:

  • средняя траектория обучения, которую выбирают ученики, или
  • возможно, даже обязательный граф понятий.

Содержание этого сообщения в блоге взято из работы по науке о данных, выполненной для платформы адаптивного обучения Bingel компании VANIN. Большое спасибо VANIN за возможность поделиться некоторыми примерами в этом сообщении в блоге!

Простые алгоритмы совместной фильтрации

Давайте сначала познакомимся с простыми, но мощными алгоритмами совместной фильтрации (CF) типа:

  • пользователи, просмотревшие X, также купили Y.
  • пользователи, купившие X, также купили Y.

Неявное косинусное сходство элементов данных - один из алгоритмов их формализации. Мы определяем косинусное сходство, чтобы позже можно было сравнить его с алгоритмом, в который включен временной порядок. В нем ваши данные - это неявные данные типа «мне нравится», например пары (user, content). Затем для всех пар содержимого (X, Y) вы вычисляете:

count(X, Y):
number of users who bought both X and Y.
count(X):
number of users who bough X.
similarity(X, Y):
count(X, Y) / sqrt( count(X) * count(Y) ).

Для X вы рекомендуете Y, имеющее высокое значение для similarity(X, Y). Я опускаю некоторые технические детали, например, как правильно обрабатывать контент с небольшим количеством данных.

Включение временного порядка в совместную фильтрацию

Простые алгоритмы CF вдохновляют упорядоченные по времени отношения для образовательного контента:

follows(X => Y): 
probability that exercise Y follows exercise X.
precedes(X => Y): 
probability that exercise X precedes exercise block Y.
prerequisite(X of Y): 
balanced approach of the above two, so both Y should be done after X and X has been done before Y. Let’s say 
prerequisite(X of Y) = sqrt(follows(X => Y) * precedes(X => Y)).

Вышеуказанные отношения немного нечеткие, поэтому мы их позже формализуем. Перед этим давайте посмотрим на пример из реального набора данных!

Пример: схема обучения Бингеля для упражнения «Считать часы».

Bingel - это адаптивная платформа для обучения и упражнений для начального образования, которой пользуются более 600 000 учеников в Бельгии, Финляндии и Швеции. За последние 5 лет на Бингеле было выполнено более 1 миллиарда упражнений.

В 2017 году мы провели исследование временной последовательности упражнений с данными Bingel. В ходе исследования были выведены временные отношения из пар данных (pupil made exercise, teacher given homework exercise). Обратите внимание на то, что упражнение справа (в будущее левой стороны) должно выполняться учителем как домашнее задание, а слева может быть любое упражнение, выполняемое учеником.

На изображениях ниже представлены 5 основных упражнений для различных соотношений временного порядка для математического упражнения «Считайте часы» в главе 2 учебника для 3-го класса в начальной школе.

В этом единственном примере в верхнем списке предварительного отношения было больше релевантных упражнений, чем в предшествующем отношении.

Формализация упорядоченной по времени совместной фильтрации

Вы можете выполнять формализацию разными способами, и то, что следует ниже, является лишь одним из них, но именно он сработал для нас.

Входные данные - это большой набор записей

(user, exercise, timestamp),

которые мы преобразуем в упорядоченные пары упражнений

(user, X, Y, t),

где X - упражнение, выполненное перед упражнением Y пользователем, а промежуток времени в днях равен t. Мы делаем (user, X, Y) уникальным, отфильтровывая первое упражнение, выполняемое пользователем.

Давайте посмотрим на пример. На изображении ниже показаны два ученика, Алиса и Боб, и упражнения, которые они выполняли за три дня.

Входные записи:

(user,  exercise, day)
(Alice, X,        Monday)
(Alice, Y,        Tuesday)
(Alice, Z,        Wednesday)
(Bob,   Z,        Monday)
(Bob,   X,        Tuesday)
(Bob,   Y,        Wednesday)

И пары упражнений:

(exercise before, exercise after, time in between)
(X, Y, 1d)
(X, Z, 2d)
(Y, Z, 1d)
(Z, X, 1d)
(Z, Y, 2d)
(X, Y, 1d)

Далее вычисляем промежуточные значения:

count(X = > Y):
number of times the exercise pair (X, Y) occurs.
count_before(X):
number of times X occurs at the left side of exercise pair (X, _).
count_after(Y):
number of times Y occurs at the right side of exercise pair (_, Y).

А с промежуточными значениями получаем желаемые отношения:

follows(X => Y):
count(X => Y) / count_before(X)
precedes(X => Y):
count(X => Y) / count_after(Y)
prerequisite( X of Y ):
sqrt ( follows(A => B) * precedes(A => B) )

В нашем примере:

follows(X => Y) = 2/3
follows(X => Z) = 1/3

Включая временной интервал между упражнениями

Выше у нас было супер-простое соотношение до и после, которое не принимало во внимание, был ли перерыв в один день или 100 дней между упражнениями. Однако вы получите лучшие результаты, если будете лучше справляться с дистанцией во времени.

Один из простых способов - привязать временной вес к упражнению pair(X, Y, t). Например, time_weight(t) = exp(-t/20). Затем измените count(X=>Y) на сумму временных весов для пар упражнений(X, Y) вместо подсчета таких пар. Сделайте то же самое для всех count функций.

Есть и другие способы взвешивания пар упражнений, и то, какое взвешивание работает, зависит от ваших данных. Приведенный здесь способ подходит для данных, собранных за один учебный год.

Связанных с работой

Я рад слышать о подобной работе, проделанной в другом месте. Мы собрали некоторые работы, связанные с этим документом.