데보션앱 소개페이지 바로가기

인재 DB 등록 시 유의사항

CLOSE

채용공고 지원 시 유의사항

CLOSE
로그인 선택

신고하기

CLOSE
신고사유 (대표 사유 1개)
상세내용 (선택)
0/200
  • 신고한 게시글은 더 이상 보이지 않습니다.
  • 이용약관과 운영정책에 따라 신고사유에 해당하는지 검토 후 조치됩니다.
  • 허위 신고인 경우, 신고자의 서비스 이용이 제한될 수 있으니 유의하시어 신중하게 신고해 주세요.
(이 회원이 작성한 모든 댓글과 커뮤니티 게시물이 보이지 않고, 알림도 오지 않습니다.)

AI 큐레이션 강의 추천을 위한 챗봇엔진 개발 - 연구결과(3)

yeen214 22.11.15
1411 9 0

안녕하세요 여러분의 성장을 돕는 쌤, AI 큐레이션 강의 추천을 위한 챗봇 엔진 개발을 맡은 DHE 입니다.

어느덧 6개월이 지나고 마지막 연구 결과를 전해드리게 되었네요. 그럼 마지막 6개월간 과제를 진행하면서 했던 고민들, 멘토님부터로의 배움들, 그리고 저희 연구 결과를 소개해 드리도록 하겠습니다.

먼저, 프로젝트 개요를 살펴보도록 하겠습니다. 저희가 개발하고자 하는 챗봇 엔진은 sk 사내 강의 교육 사이트인 AIC에 적용되는 챗봇입니다. 그리고 이 챗봇의 이름은 이구요!


과거 쌤 서비스를 먼저 살펴보면 개인의 학습 이력을 기반으로 추천 모델을 통해 유저에 맞는 강의 내역을 추출합니다. 그리고 이렇게 추출한 강의 내역을 서비스를 신청한 분들에게 제공하는 단방향 강의 추천 서비스였습니다.

이 과제를 통해 쌤이 대화를 통해 유저의 의도를 적절히 파악하고 그에 맞는 강의, 그리고 강의 뿐만 아니라 기타 부가 서비스를 제공하는 러닝 에이전트로 전환될 수 있도록 하는 연구를 진행했습니다.

저희 프로젝트의 핵심적인 부분은 사용자의 발화 의도를 파악하고 그에 대한 적절한 대응을 할 수 있는 대화 시스템과 사용자 맞춤형 강의 추천을 할 수 있는 추천 시스템입니다.


그럼 저희가 어떻게 제안한 챗봇 시스템을 구현했는지 설명해보도록 하겠습니다.


먼저 저희팀에서 멘토님들과의 회의를 통해 쌤이 처리할 수 있는 발화의도는 다음과 같이 7개로 정의 하였습니다. 이러한 기준에 따라 user 발화가 들어오면 intent 분류 모델이 user 발화의 의도를 7개로 분류합니다.

강의 추천과 거절은 이후에 추천 프로세스를 거칩니다. 다음으로 강의 정보조회는 강의명을 추출해서 강의 정보를 제공합니다. 마이페이지의 경우, user가 쌤 페이지에 있는 기능을 사용하고 싶다고 했을 때 해당 기능을 사용할 수 있도록 버튼을 생성합니다. user가 쌤 서비스에 대한 전반적인 질문을 했을 때에는 기존 FAQ 에서 비슷한 질문을 찾아 답을 제공합니다.

또한, 일반 대화 모델을 추가하여 목적 지향 대화 뿐만 아니라 일반대화가 가능하도록 하였습니다. 이를 통해 보다 친숙하고 재밌는 쌤이 될 수 있도록 하였습니다. 마지막으로 ODD는 위의 6가지 인텐트 이외에, 쌤이 답할 수 없는 질문이 들어왔을 경우에 해당합니다. 이럴 경우에는 담당자에게 문의를 할 수 있도록 담당자 메일을 제공합니다.



강의 추천 프로세스는 세부적으로 유저가 받아 보고싶어하는 추천 종류에 따라 추천 결과를 다르게 낼 수 있도록 하였습니다. 따라서 저희는 사용자 맞춤형 추천 뿐만 아닌 추천의 목적에 따른 맞춤형 추천이 가능한 시스템을 구현하였습니다.


중간 발표 이후 진행한 연구한 부분은 다음과 같습니다.


대화 처리 부분에서는 완성도 높은 강의 추천 대화 시스템 구축을 위해 다회턴 대화 프로세스 구축(거절), 멀티 유저 처리, 강의 정보 조회 구현 부분을 보완하였습니다.

추천 시스템 부분에서는 추천 목적에 맞게 다른 결과를 제공하도록 추천 시스템을 다각화하였습니다.

또한, 저번에는 슬렉으로 데모를 보여드렸는데, 이를 발전시켜 웹 데모 프로세스를 구현하였습니다.


그럼 대화 모델에 대한 세부 내용을 설명 드리겠습니다.

이 과제에서 사용한 데이터는 Ai hub에서 공개한 용도별 목적 대화 코퍼스입니다. 이 코퍼스 중 교육 도메인 데이터를 저희가 앞에서 정의한 7가지 intent에 맞게 재라벨링 및 증강을 진행하였습니다.


이 부분에 대해 멘토님들께서 기존의 강의명이나 sk 조직명 등이 지속적으로 업데이트 되기 때문에 unseen 데이터에 대하여 일반화 성능도 테스트를 해봐야한다고 피드백을 해주셨습니다. 그래서 중간 발표 이후 데모 테스팅에서 발견한 문제점들에 기반하여 데이터를 검수하고, 데이터 클렌징하여 재학습을 했습니다.



학습에 사용한 모델은 electra 모델입니다. 이 모델은 fake 토큰을 맞추는 방식으로 학습하여 분류 task에서 강력한 성능을 보인 모델입니다. 이 모델을 한국어 데이터에 대하여 사전학습된 ko-electra 모델을 본 데이터에 파인튜닝하여 사용했습니다.



중간 발표 때 말씀드린 것처럼 정제 전 데이터로 학습한 모델은 새로운 샘플 100개에 대하여 정확도가 80 이 나왔습니다. 이때의 새로운 샘플은 train, dev, test와 겹치지 않는 데이터에 기존 sk 강의명 데이터와 조직명을 넣어 만든 데이터들이었습니다.

이번에는 아예 외부 온라인 강의 사이트들의 강의명과 외부 조직명을 기반으로 새로운 샘플 170개의 unseen 데이터로 실험을 진행하였습니다. 이때 기존 모델은 성능이 감소하였습니다. 하지만 데이터 클렌징을 거친 데이터를 학습한 새로운 모델은 동일한 성능을 유지하는 것을 확인하였습니다

이 모델은 앞으로 쌤에 새로운 강의, sk 내에 새로운 조직이 추가된다고 하더라도 성능 저하를 최소화할 수 있음을 확인하였습니다.



다음으로 일반 대화 모델은 autoregressive decoder 구조인 gpt 모델을 한국어로 사전학습한 kogpt2를 ai-hub 주제별 텍스트 일상대화를 학습하였습니다. 예시는 그림과 같습니다. 저희 쌤은 skt vip!


추가적으로, 내부 데모 테스팅에서 일반대화 발화는 나머지 의도에 해당하는 발화와는 성격이 다르다는 것을 확인하였습니다.


이를 보완하기 위해 데모 테스팅에서 나온 일반 대화를 수집하여 추가 학습 데이터로 활용하였습니다. 그 결과 기존 모델보다 교육 도메인에 어울리는 대화가 생성됐음을 확인하였습니다.



NER 모델은 저희 개체명에 맞게 재라벨링한 11만개의 데이터로 koelectra 모델로 학습하여 성능은 f1 score 89가 나왔고, 특히 강의명 태그는 f1 score 90을 달성하였습니다.


다음으로 저희의 추천 모델에 대해 설명드리겠습니다.

저희는 skt 강의 데이터를 분석했을 때 강의에서 source_item , category, keyword 등 side information으로 활용할 수 있는 feature가 존재하는 걸 확인했습니다. 아이템에 대한 여러 feature들을 지식 그래프로 구축할 수 있다면 이를 기반으로 추천이 가능하다고 생각했습니다.


참고했던 논문은 Recurrent Knowledge Graph Embedding for Effective Recommendation(2018)입니다. 이 논문은 아이템에 대한 사용자의 선호도를 학습하기 위해 지식그래프를 구축하는 방법을 제시했습니다. entity와 entity 사이의 path에 대해서 semantic한 representation 을 지식 그래프 임베딩을 자동으로 학습합니다.

먼저 구축한 지식그래프에 대해서 사용자가 시작 노드가 되고, 사용자가 소비한 아이템을 타켓 노드로 하는 그래프 위의 path를 찾습니다. 그리고 RNN 기반의 모델을 통해 이를 학습하고 최종적으로 얻은 사용자와 아이템의 임베딩 값의 내적을 통해 추천의 score를 계산합니다.



저희는 이 모델에 self attention layer를 추가였습니다. 지식그래프 위에서 user에서 item으로 가는 여러 path들의 반영하는 하나의 context vector를 통해 학습하였습니다.

이 모델의 본 연구에서의 contribution으로는

먼저 path level의 semantics 를학습하고 이를 추천에 통합시키는 end-to–end deep learning model을 개발했다는 것입니다. 또한 SKT 강의 수강 데이터셋을 사용하는 path 기반의 추천은 왜 이러한 추천을 했는지에 대한 설명성을 더 잘 드러낼 수 있습니다. 더불어 아이템에 대한 side information으로 지식 그래프를 형성하고 이를 활용하기 때문에 사용자의 아이템에 대한 선호도뿐만 아니라 아이템의 특정한 피쳐에 대한 선호도를 반영할 수 있습니다.

그러면 이 모델을 강의 데이터셋에 어떻게 적용했는지 설명드리겠습니다.

우선적으로 user, 강의, 강의의 category, 강의 출처를 노드로 오른쪽 그림과 같은 구조의 Graph를 생성했습니다.

훈련데이터는 learning 데이터를 timestamp 기준으로 정렬해서 유저마다 train test를 나눴습니다. 추천의 원활한 학습을 위해 사용자가 수강하지 않았던 아이템에서 negative sample를 생성하였습니다. 이때 negative sample은 positive sample의 0.1 비율로 추출하였습니다.

모델의 훈련과정은 다음과 같습니다. 먼저, positive , negative 데이터에 대해서 한 (user, item) 당 5개의 path를 생성합니다. 그리고 Bi-GRU 통해 path에 대한 임베딩값을 구합니다. 이후 self attention layer를 거쳐서 학습이 진행됩니다. 최종적으로 얻은 user와 item의 임베딩 값의 내적의 score로 기준으로 user에 대한 추천 리스트를 형성합니다.

학습한 추천 모델의 결과는 그림과 같습니다.


탑1 3 10의 추천 리스트에 대해서 precision과 탑텐 mrr로 성능을 측정했습니다. Precision은 추천한 아이템 K개 중에 실제 사용자가 관심있는 아이템의 비율이 어떻게 되는지에 대한 지표입니다. Mrr 은 사용자가 선호하는 아이템이 리스트 중 어디에 위치해 있는지에 중점을 둔 평가 기법입니다.

추천 시스템의 성능과 속도 향상을 위해 지식 그래프 노드 조합에 대한 실험을 진행했습니다.

그 결과 category와 강의 출처를 노드로 생성하는 것이 그래프의 density가 높으면서 좋은 성능을 내었습니다. 추가적으로 그래프의 노드를 많이 생성하면 오히려 성능이 떨어지고 시간도 더 오래 걸리는 것을 확인하였습니다.

지식 그래프 추천을 활용하여 자격증/ 컨퍼런스 추천도 진행했습니다.


자격증/컨퍼런스 데이터의 경우는 사용자의 interaction 데이터가 없습니다. 따라서 지식 그래프를 직접적으로 사용할 수는 없었습니다. 그래서 앞에서 설명한 지식 그래프 기반의 추천 결과에서 가장 추천 score 값이 높은 강의를 사용하였습니다. 추천 score가 가장 높다는 것은 사용자가 가장 관심을 가질 만한 강의라는 가정을 하였습니다. 그 강의의 카테고리를 가져와서 같은 카테고리의 자격증 / 컨퍼런스를 추천하도록 하였습니다. 그림과 같이 사용자가 가장 좋아할 만한 강의가 AI 카테고리라면 그와 관련된 자격증과 컨퍼런스를 추천하게 됩니다.

다음은 소속 관련 추천입니다.

소속 관련 추천은 ‘나 HR 팀인데 관련 강의 좀‘ 처럼 조직 관련 키워드가 등장하면 조직 정보에 기반한 추천 결과를 제공하도록 하였습니다. 이때 정확도 향상을 위해 통계 기반의 룰을 사용하여 추천 리스트를 구성하였습니다. 구체적으로 전체 유저 추천 리스트를 활용하여 조직별로 가장 많이 추천 되었던 Top 5 과목 DB를 구축하여 각 조직에 대한 추천 리스트를 추출하였습니다.



다음은 저희가 추가로 제안한 기능인 관심사 변경을 소개해드리겠습니다.


만약 사용자가 쌤의 추천 결과가 맘에 들지 않아서 본인의 관심사를 직접 추천에 반영하고 싶거나 학습 이력이 없는 유저의 경우에 적용할 수 있는 학습 방식입니다. 사용자에게 랜덤으로 강의 목록을 제시하고 그 중에서 관심있는 강의를 고르게 합니다. 이를 통해 유저가 관심있는 강의들을 선택하면 추후 모델을 학습할 때 이를 반영하여 재학습하고 관심있는 강의를 추천하는 방식입니다.

실험 결과, 재학습한 후 추천 결과가 변경 되려면 최소 5개의 관심 강의가 필요하다는 것을 확인하였습니다.



이로써 쌤은 대화 부분에서는 의도 분류 모델 정확도 80 이상, NER f1-score 89 이상, 그리고 추천 모델에서 MRR@10 0.18 을 달성하여 제법 똑똑한 챗봇이 되었습니다.

좀 더 센스있는 쌤이 되기 위해 저희는 날씨 기반 인문학 기반 강의 추천을 추가적으로 구현하였습니다.


데모 테스팅 중 일반 대화 시에 쌤에게 날씨는 묻는 경우가 많은 것을 발견하였습니다. 그래서 저희는 이 둘을 결합하여 날씨를 물으면 날씨 정보와 함께 관련된 인문학 강의를 제공하고자 하였습니다. 이때 실시간 날씨 정보를 이용하기 위해 기상청 API를 사용하였고, 날씨 클래스별로 인문학 강의를 매칭하여 DB를 구축하였습니다. 그 예시는 그림과 같습니다. 이를 통해 기술적인 강의 뿐만 아니라 인문학 강의도 추천하여 보유한 데이터를 십분 활용할 수 있는 센스 넘치는 쌤이 되도록 하였습니다.


실제 서비스에 적합한 챗봇 데모를 구현하였습니다.

실제 서비스에서는 웹으로 챗봇이 구현될 예정입니다. 그러므로 구축한 강의 추천 대화 시스템 파이프라인을 API로 제공하고, 웹브라우저에거 접근할 수 있도록 하였습니다. 또한 실제 서비스 적용을 위해 gpu가 아닌 cpu 환경으로 프로세스 환경을 변경하였습니다.

추가적으로 추후 연구를 위해 풍부한 데모 테스팅을 할 수 있도록 slack 데모를 멀티 유저에 대한 관리를 통해 각 유저별로 독립적 프로세스 관리가 가능하게 하였습니다.


마지막으로 본 프로젝트의 향후 계획을 설명드리겠습니다.

먼저, 현재 구축 되어있는 강의 도메인에서 확장하여 멀티 도메인이 될 수 있도록 데이터를 구축하는 것입니다.

또한, 프로젝트를 진행하면서 나왔던 아이디어 중 꼭 필요하다고 생각하는 기능은 난이도 기반 추천, 룰엔진 구현, 강의 큐레이팅 등입니다. 이 기능들이 추가적으로 개발된다면 보다 사용자 의도에 맞춤화 된 챗봇을 훈련하여 사용할 수 있을 것이라 기대합니다.


SSAM이 누군가의 좋은 학습 파트너가 되길 바라며, 지금까지 AI 큐레이션 강의 추천을 위한 챗봇 엔진 개발 DHE 팀이었습니다.

yeen214 님의 최신 블로그

더보기

관련 블로그