이번 호에서는 컴퓨터를 기반으로 한 온라인 학습에서 사용자가 유형 별 문제에 대하여 입력한 답에 대한 정답 과 오답 즉, 0 과 1 의 데이터가 누적된 데이터들을 기반으로 AI 가 기계학습을 수행하여 해당 문제의 마지막 문제를 맞출 확률을 예측하는 문제를 살펴보고자 한다. 학생의 학습 활동 들로부터 학생의 지식 상태를 모델 화하는 일은 컴퓨터기반 교육분야에서 폭넓게 연구되어 온 문제다. 이 분야를 지식 추적(Knowledge Tracing)이라고 하며 그동안 Baysian 방식의 모델(BKT), Hidden Markov Model 등으로 연구되어 왔으며, 재귀신경망(Recurrent Neural Network)을 사용한 Deep Knowledge Tracing, 문제의 유형(컨셉)을 Key 와 Value 로 추적하는 Dynamic Key-Value Network, Transformer 를 사용하는 모델, attention 기반의 Attentive Knowledge Tracing 모델로 발전해왔다. 이번 호에서는 스탠포드대, 구글, Kahn Academy에서 RNN 기반 신경망모델로 발표하여 기존 Baysian 방식에 비해 AUC 를 25% 증가시킨 모델을 중심으로 살펴 보고자 한다. 논문은 여기. Hidden Markov Model 은 이전 뉴스레터8호, RNN 은 이전 뉴스레터 9호를 참고.
심층 지식 추적(Deep Knowledge Tracing)
Deep Knowledge Tracing(DKT)는 앞에 설명한 바와 같이, 지식 추적(Knowledge Tracing) 앞에 Deep 이 붙은 것처럼, 순차적 자연어처리에 사용되는 Recurrent Neural Network 을 사용하여 문제를 풀어보려는 접근법이다. 아래 그림 1 처럼 논문에 있는 Khan Academy 의 8th grade 수학 커리큘럼의 50문제를 학생이 문제 풀이를 한 결과를 가지고 살펴보자.
학생은 문제에 대해 응답(0 혹은 1)을 남기면서 아래 그림과 같이 50 문제를 풀어간다.
아래 그림의 종축은 Line graph intuition, Slope of a line 과 같은 8학년 수학 문제 유형 6 가지를 의미하고 횡축은 해당 유형에 대해 풀어간 50 문제 풀이 이력을 나타낸다. 그림에서 맞춘 경우는 채워진 원을, 틀린 경우 속이 빈 원으로 표시하고 있다. ③은 확률예측으로 초록색에 가까울 수록 1, 즉 맞출 확률이 높은 것이고, 파랑색에 가까울수록 0, 즉 맞출 확률이 낮은 것으로 표시한다. ① 은 y 절편 풀이(solving for yintercept)로 문제 풀이가 진행됨에 따라 점차 초록색으로 변함을 알 수 있다. ② 의 선형방정식 그래프(Graphing linear equations) 유형의 경우는, 전반적으로 파란색으로 나타나고 있어 문제 풀이 진행에 어려움이 있음을 알 수 있다. 이 경우는 한 학생이
문제 유형별 지식 상태의 예측
아래 그림 2 와 같이 0,1,2,3 이라는 4 가지 유형의 문제를 풀어가는 이력을 DKT 모델에 입력하면 우측의 4 가지 유형별 정답 예측 결과를 출력하는 것이다. 여기서 4 가지 유형의 문제를 지식(skill)이라고 할 때, 각 지식에 대한 학생의 이해도(맞출 확률)를 지식 상태라고 한다. 따라서 이에 기반하여 이 문제 풀이 다음에 풀어야 할 문제의 유형에 대한 정답을 맞출 확률을 예측할 수 있다. 이러한 문제는 특히 컴퓨터기반 교육 분야 중 자격시험 등에서 학습자의 자주 틀리는 문제를 추천해 줌으로써 기출문제의 반복 풀이와 자주 틀리는 문제의 계속적인 학습이라는 학습 요구에 부응하는 문제 해결방식이다.
<그림 2. 문제 유형별 지식 상태의 예측>
심층망 모델
본 과제에서 사용할 심층망 모델은 RNN의 변형인 Long Short Term Memory(LSTM) 모델을 사용한다. RNN 의 단점인 gradient vanishing 문제를 보완한 LSTM 은 아래 그림3과 같이 순차적 입력 벡터인 x1, … xT 들을 출력 벡터들인 y1,…yT 로 매핑한다. 학생은 질문(q)에 대한 답(a)을 작성하여 문제를 풀어나간다. (q1, a1),… (qt, at) 는 주어진 문제들에 대한 문제와 정답 여부가 한쌍으로 된 학습 이력이다. 만약 이러한 학생의 학습 이력들을 질문과 답에 대하여 각각 정답과 오답으로 분류하여 각각 onehot-encoding 으로 구성한다면 비현실적으로 크기가 커져서 성능을 저하한다. 이를 위하여 아래 그림 4와 같이 one-hot-encoding 을 구성한다.
<그림 3. RNN 의 입력과 출력>
그림4의 예와 같이 0,1,2,3 이라는 문제에 대해 각각 정답과 오답이 있다고 가정해보자.
따라서 전체 8 개의 one hot encoding 이 그림과 같이 필요하다. 실제 본 과제의 LSTM 에 입력되는 input 은 skill(유형)과 answer(0 혹은 1) 값이 포함된 새로운 skill_with_answer 라는 feature 가 one hot encoding 되고 embedding 되어 입력된다. 신경망에 입력 값은 이 경우 최대 경우를 고려한 8 차원의 인코딩 값이다. 예를 들어 skill 이 25, 27, 31, 32 이라는 문제를 풀고 각각 정답이 0, 1, 0, 1 이었다면
skill_with_answer 는 25x2 +0 = 50, 27x2 + 1 = 55, 31x2 + 0 = 62, 32x2 + 1 = 65 와 같은 수로 입력되는 형식이다. 따라서 이 숫자만 보고도 skill 과 answer 를 쉽게 유추할 수 있다.
<그림 4. one hot encoding 예>
Deep Knowledge Tracing(DKT) 모델 및 추론 개발 절차
아래 그림 5 와 같이 모델 개발 및 추론 절차가 진행된다. 전 처리 후 사용자별 sequence 를 생성하고 dataset 을 만든 후에 앞에서 설명한 input feature 인 skill_with_answer 의 원핫인코딩 그리고 masking, padded batch 작업 후에 LSTM 모델 생성과 검증 그리고 저장된 weights 로부터 모델을 로드 하여 추론을 실시한다.
<그림 5. DKT 모델 개발 절차>
데이터
모델 평가에 사용될 데이터는 ASSISTment2015 라는 실제 학습 현장에서 100 가지 skill(유형)에 대해서 19,917 명의 학생이 708,631 개의 문제를 풀이한 결과가 담긴 데이터 세트이다.
데이터 로드 및 전처리
Assistment2015 에서 다운로드 받은 2015-assist.csv 파일을 로드하고 전처리를 진행한 후에 아래와 같은 그림 6 과 같은 데이터프레임으로부터 출발한다. ①의 판다스 factorize 는 sequence_id feature의 codes, uniques 를 리턴 한다. 따라서 df[‘skill’]은 sequence_id 의 중첩되지 않는 고유값 즉 ③의 skill feature 를 얻게 된다. 이는 다시 말해서, 사용자는 같은 유형(skill)의 문제를 여러 번 풀이할 수 있다는 뜻이기도 하다.
앞에서 설명한 바와 같이 assistment2015 데이터세트의 skill 수는 100 이다. ②는 2015-assist.csv 파일에 담겨있는 정답 여부 feature 이다.
<그림 6. skill feature 획득>
이제 또 하나 필요한 feature 는 앞에서 설명한 skill_with_answer 다. 아래와 같이 feature 를 생성한다. 현재 correct 값이 float 여서 skill_with_answer 도 float 값을 갖는다.
시계열(Time Series) 입력 과 출력
학생의 문제풀이 과정을 LSTM 을 통해 훈련하려면, 문제 풀이 이력이 일정한 길이의 입력 벡터 xt 의 sequence 로 변환되어야 한다. 데이터세트가 유한한 숫자의 중복되지 않는 문제 풀이가 있다고 할 때, xt 는 {qt, at} 와 같이 문제와 답(0 과 1 로된)의 쌍으로 이루어진 학생 문제풀이 tuple 의 one-hot-encoding 으로 구성될 것이다. 이러한 시계열 입력으로는 이러한 skill_with_answer feature 의 one-hot-encoding
형태가 될 것이고, 출력 yt 는 skill(유형) 만큼의 길이를 갖는 벡터로 각 skill(유형)별 정답을 맞출 확률 예측치를 내보낸다. 따라서 at+1 의 예측은, qt+1 에 해당하는 yt 값을 통해 얻어진다.
Sequence 구성
아래 그림 7 과 같이 sequence 를 구성한다. user_id 별로 구성하되 , 순차적데이터이기때문에 과거 skill 과 correct 들로부터 skill_with_answer 가 도출되므로 ① 과 같이 skill_with_answer 를 한 칸 밀어서 짝을 맞추어 준다. 이에 따라, ②와 같이 skill_with_answer 는 마지막 데이터가 남게 되고 파란색 사각형 안에 있는 데이터만 데이터세트로 다루게 된다. 아래 그림은 user_id 가 223523 인 sequence 의 예를 들어 보여준다.
<그림 7. sequence 구성>
데이터세트 구성을 위한 범주용 features 인코딩
아래 ①과 같이 범주형 feature 인 skill_with_answer 를 입력으로 원 핫 인코딩하고 ②와 같이 skill feature 를 원핫 인코딩하면서 label 컬럼 벡터를 concatenate 한다. 이렇게 loss 를 산출하기위해 skill 과 해당하는 label 즉 0 혹은 1 의 값을 concatenate 시켜 단일 array 로 만드는 것은 범주형 데이터와 수치
데이터가 혼합될 경우에, 이렇게 concatenate 시키는 것이 모델의 fitting 과 평가성능을 향상시킨다.
<그림 8. features 와 skill+label 원핫 인코딩>
② 에서 만약 예를 들어 skill 이 6 인 one hot encoding 과 컬럼 벡터인 Label 이 있다면, 결합(concatenate)되어 오른쪽과 같은 (6, 7)의 행렬로 만들어진다고 볼 수 있다.
<그림 9. Loss 연산을 위한 skill 과 label 결합>
지금까지 심층지식추적(DKT) 개요, 심층망모델, 모델 및 추론 개발 절차, 데이터 로드및 전 처리, 시계열 입력과 출력, 시퀀스 구성, 데이터세트를 위한 원 핫 인코딩에 대해서 살펴보았다.
2 편에서는 훈련을 위한 데이터세트 구성 및 분할, 모델 정의 및 검증, 모델 구축 및 훈련, 그리고 추론 절차에 대하여 살펴보겠다.
댓글 없음:
댓글 쓰기