4. fastText
형태소/단어 벡터의 mean을 문장 벡터로 보고 분류를 해결한 사례도 있었다. (Armand Joulin, Arxiv, 2016)에서 제안한 fastText는 문장에 존재하는 단어의 mean과 추가로 n-gram 벡터를 사용하여 hidden layer를 구성하고 Hierarchical softmax로 output symbol을 결정하는 간단한 구조의 network이다. 여기서의 hidden layer는 문장 내 모든 단어/형태소의 정보가 포함되어 있다고 생각할 수 있고, 그것을 이용하여 문장 분류를 수행하며 높은 성능을 달성한 바 있다. 또한 fastText는 학습/추론 속도도 다른 아키텍쳐에 비해 상당히 빠르다.
기존의 QA
자연언어 질의를 쿼리로 변경하는 방법은 '정보추출'에 의한 방법과 '의미분석'에 의한 방법이 있다.
정보추출에 의한 방법은 목표 지식베이스에 촛점이 마춰 분석이 이뤄지기 때문에 분석이 상대적으로 쉽고 높은 정확도를 보인다. 그러나 목표 지식베이스에 의존적이므로 목표 지식베이스의 완성도와 표현 범위에 크게 의존할 수 밖에 없다.
의미분석 방법은 지식베이스에 관계없이 질의가 표현하는 의도와 의미를 분석하는 것을 목표로 한다. 목표 지식베이스에 의존적이지 않기 때문에 범용적 질의 분석에 유용하다. 의미분석 방법은 또한 정보추출을 사용하는 방법에 비해 자연언어에 나타난 의미를 보다 풍부하게 해석하여 질문 의도를 파악할 수 있다. 예를 들어 '최소', '최고'와 같은 한정사, ... 와 같은 모달리티와 같은 어휘를 분석하여 정보추출 방식보다 의미를 일관성 있고 정확하게 분석한다.
이동건, 2016 HCLT
이러한 시도는 기존에도 있었다(이동건, 오교중, 최호진, 허정, 2016 HCLT).
(이동건, 2016 HCLT)에서는 GRU 인코더를 이용해 현재 형태소를 입력하였을 때, 다음 형태소가 출력되도록 인코더를 학습하였다.
마지막 형태소까지 인코더에 입력하였을 때의 GRU state를 문장 분산 표현이라고 한다.
(이동건, 2016 HCLT)는 문장의 유사도를 이용해 주어진 질의와 관련있는 문장(증거문장)을 찾아내는 시스템을 개발하였고, 위키피디아 문서로 학습한 GRU encoder는 높은 성능을 내었다.
또 증거문장 지식베이스로 TV 프로그램에서 출제된 질의의 증거문장들을 사용하였다.
우리는 이와 유사한 구조를 가지지만 GRU encoder 대신 skip-thought를 사용하였다.
그리고 우리는 증거문장 대신 DBpedia의 트리플로 생성한 문장을 사용하였다는 점이 차이가 있다.
또 형태소 임베딩 차원, 문장 벡터 차원이 다르고, (이동건, 2016 HCLT)는 형태소에 어깨번호까지 부착되어 있지만 우리는 그렇지 않다.
<제안방법>
skip-thought encoder 학습
본 논문에서는 입력된 질의에 해당하는 지식을 KB로부터 retrieve하는 것을 목표로 한다. 그 방법으로 skip-thought를 사용하였다.
skip-thought 학습을 위해 위키피디아(wikipedia 레퍼런스) 문서와 인터넷 신문, 세종 코퍼스(세종계획 21)를 사용하였다.
한국어는 교착어의 특성상 형태소 분석하는 것이 효과적이다. 따라서 형태소 분석이 수행되지 않은 위키피디아 문서와 인터넷 신문 문서는 (홍진표, espresso)를 사용하여 형태소분석한 후 skip-thought 인코딩을 수행하였다.
학습에 사용한 코퍼스의 통계는 다음과 같다.
문장 수 : 7,629,639
어절 수 : 125,595,820
형태소 수 : 288,564,883
우리는 한국어 형태소를 영어의 단어와 같은 의미 단위로 보고, 문장의 형태소열을 그대로 skip-thought에 인코딩 입력으로 사용한다.
예를 들어 다음과 같이 입력한다.
"뉴욕타임즈/NNP 는/JX 미국/NNP 의/JKG 대표/NNG 적/XSN 이/VCP ㄴ/ETM 일간지/NNG 로/JKB ,/SP 1851/SN 년/NNB 에/JKB 창간/NNG 되/XSV 었/EP 다/EF ./SF" (The New York Times is the leading daily newspaper in the United States and was founded in 1851.)
skip-thought encoder로 벡터 생성
skip-thought encoder가 학습이 완료되고, 우리는 skip-thought encoder로 KB와 질의를 encoding한다. RNN based encoder로 입력을 인코딩하는 것과 마찬가지로, 주어진 질의와 Knowledge를 형태소 단위로 skip-thought model에 forward propagate한다. 그리고 최종 형태소까지 propagate한 후의 hidden state를 질의와 지식의 인코딩 상태. 즉, sentence vector라 생각한다.
이로써 질의를 KB에 검색하여 가장 유사한 지식을 retrieve할 수 있게 된다. 그리고 입력된 질의와 가장 유사한 지식을 출력하여 그 지식을 입력된 질의의 응답으로 사용자에게 내어준다. (이동건, 2016 HCLT)에서는 이러한 지식을 '증거문장'이라 명명하였다.
<실험 및 결과>
데이터와 전처리
우리는 실험을 위해, (Younggyun Ham, Sangha Nam, Key-Sun Choi, 2016, HCLT)에서 실험에 사용하였던 NLQ400과 DBpedia(S. Auer, C. Bizer, G. Kobilarov, J. Lehmann, R. Cyganiak, Z.Ives, 2007.)에서 수집한 트리플 25만여 개를 사용한다. NLQ400에는 384개의 질의에 대한 질의, 정답, 해설, 그로부터 작성할 수 있는 triple이 포함되어 있다.
모든 쿼리에 대한 정답이 KB에 존재하여야 한다. 따라서 NLQ400의 트리플을 DBpedia에서 수집한 트리플과 합쳐 KB를 구성하였다. 우리의 skip-thought는 문장으로부터 학습된 것이기 때문에 triple을 직접 입력하기에는 부적절하다고 판단하였다. 따라서 문장생성 규칙을 통해 트리플로 문장을 생성하였고, 그 결과와 벡터를 보관하였다.
우리 시스템은 NLQ400의 질의를 KB에 검색하여 질의를 풀이할 수 있는 문장을 얻어내는 것을 목표로 한다. 따라서 트리플과 규칙으로 생성한 문장과 질의 문장의 cosine similarity가 높아야 한다. 그러기 위해서는 하나의 질의 문장이 하나의 의미를 가져야 하는데, 실제 질의들은 그렇지 않다. 다음은 질의 중 한 예이다.
"태종무열왕과 문무왕을 도와 신라의 삼국 통일 전쟁을 보좌하였으며, 진평왕부터 문무왕에 이르는 다섯 명의 왕을 섬겨 신라 정권의 중추적 인물로 성장하였으며, 신하로서 왕으로 추봉된 유일한 인물이고, ... 흥무대왕으로 추존된 이 사람은?"
위 질의는 하나의 문장으로 이루어져 있지만 내부에 여러 phrase를 갖고 있다. 이러한 경우 위에서 생성한 문장과의 매치가 효율적이지 않을 것이라고 판단하였다. 따라서 우리는 NLQ400의 질의를 트리플과 매치할 수 있는 의미 단위로 자르고자 했고, 다음과 같은 규칙으로 질의를 정제하였다.
1. 문장 단위 분리
2. 연결어미로 여러 의미가 나열된 문장은 연결어미로 분리
3. '다음에서 연상되는 인물은 무엇인가?' 등 의미있는 사실정보를 포함하지 않는 문장 삭제
위 작업으로 상당히 많은 문장이 삭제되었고, 특정 사실관계가 가능한 적게 포함되도록 문장을 정제하고자 하였다.
하지만 다음과 같은 예들은 분리하지 않고 그대로 사용하였다.
"이것은 유일하게 우리나라에서 만들어진 구기 종목으로 군대에서 간편하게 배구장 네트를 땅에 내려놓고 하던 데서 발전된 운동인데, 무엇일까?"
위 문장은 먼저 2번 규칙에 의해 마지막 '무엇일까?'가 분리되고 3번 규칙에 의해 '무엇일까?'는 제거된다. 그리고 남은 문장은 다음과 같다.
"이것은 유일하게 우리나라에서 만들어진 구기 종목으로 군대에서 간편하게 배구장 네트를 땅에 내려놓고 하던 데서 발전된 운동인데,"
여기에 포함되는 트리플은 두 개이다. (X, 발생지, 대한민국), (X, 유래, 군대에서 간편하게 네트를 땅에 내려놓고 하던 것).
그러나, 두 의미 사이 연결이 조사 '으로'로 인하였기 때문에 분리하지 않고 그대로 사용한다.
실험 결과
테스트를 위해 위 전처리 과정을 거친 후의 질의 155 쿼리를 skip-thought로 encode하였다. 그리고 KB의 문장들을 모두 skip-thought로 encode하였다.
155쿼리와 KB에 포함된 문장 모두를 cosine유사도 측정하여, 가장 높은 cosine 유사도를 가지는 지식 1문장씩을 매칭하였다.
그리고 그 트리플 문장이 실제 쿼리의 정보와 일치하는 지 체크하여 성능을 측정하였다.
실험에 사용한 트리플은 모두 다른 지식을 표현하고 있어, 하나의 문장에 대해 여러 개의 정답이 존재하지는 않는다.
아래는 질의와 제안 시스템의 결과가 얼마나 유사한지 Likert Scale 평가를 수행한 결과이다.
Likert scale의 보기는 다음과 같다.
- Score 1 : (쿼리와 시스템의 결과가) 관련 없음.
- Score 2 : Subject, Object, Property 중 하나가 관련이 있음.
- Score 3 : Subject, Object, Property 중 둘 이상이 관련이 있음.
- Score 4 : (쿼리와 시스템의 결과가) 같은 Subject, Object, Property를 설명하고 있음.
<<Likert scale 평균>>
다음은 평가자 A, B의 평가 결과에 대한 Cohen’s kappa 계수 분석 결과이다. Score 1, 2는 False로, Score 3, 4는 True로 계산하였다. 도출된 Kappa 계수는 0.898로 평가 결과가 평가자 사이에서 유사하였음을 알 수 있다.
<<Cohen's kappa>>
다음은 시스템 결과의 예이다. 정답은 굵게 표시하였고, 괄호 내의 숫자는 cosine 유사도이다.
다음에서 첫번째 예의 첫번째 출력 문장은 뉴딜정책의 내용에 대해서 이야기하고 있으며, 실제 입력 문장도 뉴딜정책의 소개이자 그 정책의 이름을 묻는 질의의 일부분이다.
두번째 예는 정답이 4등에 랭크되었고, 1번과 2번은 스포츠라는 같은 카테고리의 문장이 랭크되었음을 알 수 있다. 또한 3번과 5번은 '사단법인이다.'라는 어휘를 그대로 가져 높은 유사도를 보이는 것이라 생각할 수 있다.
세번째 예는 조선시대 인물인 '논개'에 대한 설명 중 일부인데, 질의의 처음에 임진왜란이 나타났고 지식들은 임진왜란과 선조에 대한 설명이 나타났다. 정답 지식과 입력 질의에 같은 어휘가 연속으로 나타남에도 틀린 결과를 낸 것은 특정 개체명 또는 명사의 유사에 많은 영향을 받도록 학습된 것이라 예상할 수 있다. 표에서 출력 문장의 마지막 'G'는 정답 문장이다
<<시스템 결과 (입력 쿼리/출력 문장/유사도)>>
다음은 Best1/5 모델의 성능이다. 아래 표의 성능은 4.1.에서 설명하였던 NLQ400의 트리플 문장당 각 하나가 Best1/5에 진입하는 경우에만 True, 나머지는 False로 설정하였다.
<<NLQ400 트리플 매칭 성능 (best1/best5)>>
<Conclusion>
본 논문은 자연언어 질의를 skip-thought encoder를 이용하여 인코딩하고, 인코딩된 벡터를 지식베이스에 검색하는 방식으로 QA 시스템을 구현하였고 그 성능을 측정하였다.
기존 지식베이스 기반 질의응답 시스템이 지식베이스에 적합한 쿼리를 생성하는 등 여러 단계를 거쳐야 하며, 따라서 목표 지식베이스에 크게 의존하는 경향이 있었다.
본 시스템은 자연어 문장을 그대로 인코딩하여 지식베이스의 자연어 문장과 비교를 수행하므로 그러한 프로세스가 간략화 되며, 그럼에도 불구하고 강건한 성능을 보였다.