[AI 이야기]


기존 대화 모델에서 발견된 한계를 극복하기 위한 지식 그래프를 활용하는 방법
지식 그래프에서 경로를 탐색하는 모델 ‘AttnIO’ [AI 이야기]
[한경비즈니스 칼럼=이수경 카카오엔터프라이즈 AI Lab, 정재훈 카카오엔터프라이즈 AI Lab, 류성원 카카오엔터프라이즈 AI Lab, 손보경 카카오엔터프라이즈 AI Lab, 카카오엔터프라이즈 기술블로그 Tech&(테크앤)] 이상형에 관한 설문 조사를 보면 상위권에 오르는 유형 중 하나가 바로 ‘대화가 통하는 사람’이다. 사람과 대화를 나누는 기계를 만들 때도 ‘대화가 잘 통한다’는 느낌을 제공하는 게 중요하다. 물론 지금 당장은 감정적 교감을 나누는 기계의 구현은 먼 미래의 일이다. 이에 현재 산·학계에서는 대화 맥락에 어울리는 유일한 정보를 제공하는 과제부터 순차 해결하는 데 집중하고 있다.


오늘날의 많은 대화 시스템은 언어 모델을 이용해 문장을 생성한다. 특정 대상에 대한 지식을 보다 원활하게 획득하기 위해 최근에는 외부 지식 베이스를 활용하는 방식도 고려되고 있다.

2020년 EMNLP에 게재된 카카오엔터프라이즈 AI 랩(Lab)의 논문에서는 바로 이 지식 베이스에서 대화 맥락에 어울리는 (답변) 경로를 효과적으로 탐색하는 모델인 AttnIO를 제안했다. 자연어 처리에서 경험적 방법론을 다루는 2020년 학회에서 총 3677개 중 754개의 논문이 통과됐다.


지식 그래프를 활용하는 대화 시스템

산업 현장에서는 Seq2Seq(sequence to sequence) 기반의 언어 모델을 활용한다. 이 언어 모델은 대량의 말뭉치를 사전 학습하기만 해도 외부 지식 일부를 습득할 수 있다. 영화에 대한 문서도 학습한 모델이라면 스필버그 감독에 관한 지식을 내뱉을 수 있다는 의미다. 언어 모델 그 자체를 지식 베이스의 일종이라고 볼 수 있다고 ‘지식 기반으로서의 언어 모델(Language Models as Knowledge Bases?)’이라는 논문이 이를 뒷받침한다.


하지만 언어 모델은 ‘스티븐 스필버그가 판타지 영화 해리포터를 연출했다’처럼 겉으로 보기엔 그럴싸해 보이지만 사실이 아닌 문장을 생성할 수 있다는 취약점을 지니고 있다. 언어 모델은 단어 시퀀스의 우도(likelihood)를 최대화하는 방식으로 주어진 단어 다음에 올 단어를 예측한다. 이 과정에서 모델은 스스로 문장에 포함된 의미가 사실에 근거하는지 아닌지를 구분하지 못한다. 그래서 ‘스티븐 스필버그는 SF 영화 ’A.I‘를 감독했다”는 옳은 문장만큼이나 위의 잘못된 예시 문장이 생성될 확률이 높아진다.


앞서 설명한 학습 방식으로 인해 언어 모델은 입력된 문장과 관계없는 상투적인 표현을 내뱉기도 한다. 이는 훈련 데이터 세트에 “안녕하세요”, “잘 몰라요”, “감사합니다”, “미안합니다”와 같은 표현의 높은 등장 빈도에 기인한 현상으로 분석된다. 또는 자주 함께 등장하는 주어와 동사 또는 목적어를 포함한 구체성이 떨어지는 문장이 생성될 수도 있다. 스티븐 스필버그가 누구인지 묻는 말에 “아니 몰라” 또는 “스티븐 스필버그는 연출했다”, “스티븐 스필버그는 태어났다”로 대답하는 식이다.


이에 외부 지식을 언어 모델에 내재화하거나 따로 저장한 외부 지식을 학습에 활용하는 메커니즘에 대한 필요성이 커지게 됐다. 2019년부터 외부에 구축해 둔 지식 베이스를 활용한 연구가 본격적으로 제안됐다. 특히 지식 그래프(knowledge graph)에서 대화 맥락에 어울리는 개체(entity)와 관계(relation)를 찾는 경로 탐색에 관한 연구가 활발하게 이뤄지고 있다. ‘(스티븐 스필버그)→감독하다→(A.I)→장르→(SF)’와 같은 경로를 만들어 낼 수 있다면 글 도입부 예시와 같은 적절한 응답 문장을 수월하게 생성할 것이라는 판단에 근거한 접근이다.


페이스북은 ‘OpenDialKG’ 논문에서 RNN 디코더를 제안했다. n 단계에서의 출력 값을 이용해 n+1 단계에서의 상태를 예측하는 재귀적 구조를 이용해 탐색 각 단계에서 가장 최고의 답을 만드는 하나의 노드를 선택하는 탐욕적 탐색(greedy search)을 진행한다. 바이두는 강화 학습 기반의 에이전트로 탐욕적 경로 탐색을 구현했다.


하지만 이런 기존의 접근 방식에는 다음과 같은 한계가 존재한다. 우선 인코더가 지식 그래프의 구조 정보를 반영하지 못한다. 오픈 도메인 대화 시스템에 사용되는 지식 그래프 규모만 해도 노드가 11만 개, 관계가 100만 개 이상일 정도로 그 규모가 상당하다. 따라서 실제 대화에서 사용되는 극소수의 지식을 매우 효과적으로 찾기 위해서는 노드와 이웃 노드 간의 관계를 함축적으로 표현하는 인코딩 기법이 필요하다. 하지만 기존의 그래프 임베딩(graph embedding)은 각 노드의 주변 정보를 효과적으로 반영하는 데 한계가 있다.


둘째, 탐색 방식의 한계다. “누가 영화 ‘A.I’를 감독했어”라는 질문에 대한 답이 “스티븐 스필버그” 하나인 예시처럼 정답이 정해진 닫힌 질문에서는 기존의 탐욕적 탐색 방식만으로도 적합하다. 이 때문에 “스티븐 스필버그가 누구야”라는 질문처럼 “미국인” 또는 “영화감독”, “케이드 캡쇼의 남편”과 같은 여러 답변이 존재하는 열린 질문에는 적합하지 않다. 매 탐색의 순간 가장 높은 확률 값이 할당된 간선과 연결된 노드를 선택하는 방식으로 단일 경로를 생성하기 때문이다.


셋째, ‘대화 말뭉치, 지식 경로’로 구성된 대규모 병렬 코퍼스 구축에 큰 비용과 많은 시간이 필요하다. 앞에서 계속 예시로 언급한 스티븐 스필버그 감독과 그가 연출한 작품을 두고 대화를 나누는 모델을 만들기 위해서는 라벨링된 학습 데이터로 감독 학습을 진행해야 한다. 이미 구축된 지식 그래프를 토대로 사람이 직접 학습에 이용할 대화 말뭉치와 지식 경로를 하나하나 만들어야 한다는 의미다.


AI 랩이 제안한 AttnIO의 동작 방식

AI 랩은 인코딩 과정에서 지식 그래프의 구조 정보를 반영하고 대화 맥락에 따라 경로를 생성하며 정답 경로의 첫째 노드와 마지막 노드만을 이용한 약감독 학습(weakly-supervised learning)으로도 감독 학습에 버금가는 성능을 달성한 새로운 지식 경로 탐색 모델인 AttnIO를 제안했다. 인플로(in-flow : incoming attention flow)에서 각 노드는 자신과 연결된 이웃 노드와 그 관계를 표현하는 벡터를 생성하며 아웃플로(out-flow : outgoing attention flow)에서는 대화 맥락에 따른 최적의 경로를 탐색한다.


다이얼로그 인코더(dialog encoder)

대화의 맥락과 질문의 의도를 효과적으로 반영한 콘텍스트 벡터를 생성하는 모듈로, 사전 학습을 마친 ALBERT(A Lite BERT)의 인코더로 구현됐다. AI 랩은 문장을 구성하는 모든 토큰의 응축된 의미를 가진 CLS(Special Classification token)에 해당하는 벡터를 콘텍스트 벡터로 활용했다.


인플로(in-flow)

인플로는 그래프 신경망(GNN : Graph Neural Networks)을 이용한다. 우선, 각 노드와 간선에 해당하는 데이터를 벡터로 변환한다. 그런 뒤 특정 노드는 진입 간선(incoming edge)으로 연결된 이웃 노드와 이 간선을 합쳐 새로운 값으로 업데이트된다. 이 업데이트 과정을 반복하면 특정 노드는 그래프 구조상의 주변 정보도 표현할 수 있게 된다.


A에서 나가는 간선이 2개인 ‘C(학생)←이다←A(해리포터)→사랑한다→B(지니 위즐리)’를 예로 들어보자. 시작 노드가 A라고 한다면 C 노드는 “해리포터는 학생이다”, B 노드는 “해리포터는 지니 위즐리를 사랑한다”라는 정보를 표현하는 벡터를 갖게 되는 것이다.


엔티티 콘텍스트 퓨전(Entity-Context Fusion)이라는 모듈에서 인플로의 출력인 각 노드 벡터와 다이얼로그 인코더(dialog encoder)의 출력인 콘텍스트 벡터를 합치면 각 노드 벡터는 대화의 맥락과 질문의 의도까지 표현할 수 있게 된다. 예를 들어 스티븐 스필버그 감독과 관련된 여러 지식 중 그가 감독한 영화 관련 지식을 노드 벡터에 더 많이 반영하게 된다.

아웃플로(out-flow)

대화에 따라서는 “해리포터는 지니 위즐리를 사랑한다”는 지식이 필요할 수도 있고 “해리포터는 학생이다”는 지식이 필요할 수도 있다. 이처럼 현재의 대화 맥락에 따라 경로의 중요도를 계산하는 게 아웃플로의 역할이다.


아웃플로는 어텐션(attention)을 전파하는 방식으로 경로를 탐색한다. 어텐션은 특정 시퀀스를 디코딩할 때 관련된 인코딩 결과를 참조하게 만드는 기법을 일컫는다. 여기서는 특정 노드에 연결된 진출 간선(outgoing edge) 중 대화 맥락에 더 어울리는 쪽에 더 높은 어텐션 값을 전파하는 것을 의미한다. 우선, 대화의 첫 발화 문장과 관련된 노드의 어텐션을 초기화(initial attention computation)하고 연속해 어텐션을 전파한다. 어텐션 전파를 완료한 후 각 탐색 단계에서 어텐션이 가장 많이 전파된 노드와 간선을 선택해 최종 경로를 생성한다.


위의 예시를 다시 예로 들어보자. 대화 맥락에 따라 ‘A→사랑한다→B’라는 지식이 필요하면 아웃플로는 A의 어텐션 값 대부분을 ‘사랑한다’는 간선을 통해 B로 보낸다. 반대로 ‘A→이다→학생’이 필요한 대화에서는 ‘이다’라는 간선을 통해 C쪽 방향 쪽 위주로 어텐션 값을 보낸다.


기존 대화 모델에서 발견된 한계를 극복하기 위한 지식 그래프를 활용하는 방법을 소개했다. 대화 시스템뿐만 아니라 텍스트 생성과 관련된 거의 모든 태스크에서는 사실이 아닌 문장이나 지나치게 단순한 문장이 생성되는 현상이 꾸준히 보고되고 있다.

[본 기사는 한경비즈니스 제 1309호(2020.12.28 ~ 2021.01.03) 기사입니다.]