Search
🤖

[논문리뷰] ConveRT: Efficient and Accurate Conversational Representations from Transformers

Created
3/7/2021, 12:26:24 PM
Tags
Dialog
💡
논문 리뷰: 실 서비스를 위한 가볍고 빠른 대화 모델을 만들어 보자

개요

Data-driven 한 기능형 대화 시스템(task-oriented dialog system)은 테스크에 해당되는 레이블링 데이터가 필요로 하지만, 각 테스크 별로 대량의 레이블링된 데이터셋을 만드는 것은 굉장히 어려운 일입니다. NLP 분야에서는 BERT 같은 pretrained model을 같이 사용하게 되면 필요로 하는 도메인 특화 데이터의 양을 줄일 수 있음을 여러 연구를 통해서 보여주었습니다. 본 논문에서는 language model(LM)을 대화 모델의 사전학습의 objective 로 사용하는 것은 효과적이지 않다고 주장하며, 답변 선택(response selection) 테스크가 보다 적합한 방법임을 제안합니다.
대화 선택 테스크는 기존의 대화 히스토리를 고려하여 주어진 답변 중, 모델이 제일 적절한 답변을 선택하도록 하는 문제입니다. 이 테스크는 retrieval 기반의 대화 모델의 핵심이 되는데, 주로 context(대화 문맥)를 encoding 하고, 같은 공간에 사상되어 있는 대량의 답변들의 모음들 중 context와 가장 관련이 있는 답변 후보를 선택하는 방식으로 답변을 선택합니다. 이러한 방식은 대량의 레이블링이 없는 대화 데이터셋(예: Reddit) 으로 학습을 할 수 있고, 최근에 많이 사용되는 retrieval 기반의 대화 모델에 바로 적용할 수 있는 이점을 갖고 있습니다. 이러한 이유로 dual-encoder 구조의 답변 선택 테스크로 사전학습된 모델이 많이 사용되고 있습니다.
하지만 사전학습된 모델은 너무 많은 parameter 를 사용하여 추론을 수행할 때 많은 연산량이 필요로 하다는 근본적인 문제가 있습니다. 이러한 문제점은 제품 관점에서 쉽게 확장 또는 작은 기기에 이식할 수 없는 문제점을 야기하고, 빠른 주기의 리서치를 불가능하게 합니다. 이러한 문제를 해결하기 위해서 여러 최적화 기법(distillation, quantization, pruning)들이 제안되었지만, 이러한 방법들은 BERT와 같은 LM기반의 모델을 최적화 하는데 집중되어 있습니다.
본 논문에서는 기존의 Dual-Encoder 구조의 모델(444MB)의 모델에 비해 가볍고 빠른 ConveRT 모델(59MB)을 제안합니다. 이러한 최적화를 할 수 있었던 요인으로는 8-bit embedding quantization 과 quantization 을 고려한 학습 방법, subword parameterization, self-attention 의 pruning 을 제시하였습니다. 또한 동일 저자의 이전 연구 에서는 직전 한턴의 대화만을 context 로 사용하였는데, 이번 연구에서는 여러턴의 대화 기록을 context로 사용하여 성능 향상을 이루었다고 보고하였습니다. 또한 사전학습된 모델을 이용해서 다른 테스크(intent classification)로 fine-tune 하여 높은 성능 향상을 확인할 수 있었다고 주장합니다.

모델 구조

BERT와 구조가 거의 동일했다면 좀더 쉬웠을 텐데 ㅠㅠ 구조의 변형이 생각보다 많이 수행되었습니다.
Self-Attention 의 입력으로 들어오는 representation은 기존의 Transformer 구조와 유사하게 subword token embedding 과 position embedding 의 합을 사용하지만, 본 모델에서는 position embedding 을 게산하는 로직이 기존과 조금 차이가 있습니다. Positional embedding 을 두개의 embedding (M1: [47, 512], M2: [11, 512]) 으로 쪼갠 후, 실제 position 값인 i를 47과 11로 나눈 나머지 값을 이용해 embedding 을 계산합니다. 식은 다음과 같습니다. Mimode471+Mimode112. 사실 본 식에 대한 저자의 의도를 잘 이해할 수는 없지만, 두개의 작은 metrix로 나눔으로서 저장 공간을 축소할 수 있는 효과를 얻기 위함이었지 않았을까 생각하였습니다.
Encoder는 기존 transformer layer와 유사하지만 약간의 변형을 주었습니다. 총 6개의 transformer layer 에 대해서 maximum relative attention 을 각각 [3, 5, 48, 48, 48, 48] 으로 설정하였습니다. 이러한 방법은 모델로 하여끔 긴 sequence 와 먼거리 간의 상관관계를 보다 더 잘 이해할 수 있도록 하는 효과를 발휘합니다. 초기의 layer 는 보다 구에 대한 의미에 집중하도록 하고, 이후의 레이어들에서 보다 큰 그림을 그릴 수 있도록 해 줍니다. 또한 본 논문에서는 computation 효율성을 개선하기 위해서 multi-head attention 대신 single-head attention 을 사용하였습니다.
또한 self-attention 내에서 softmax 연산을 수행하기 이전에, attention score 에 bias 를 추가해 줍니다. 이는 다음과 같은 식으로 표현할 수 있는데, aij→aij+Bn−i+j 이때 B는 학습가능한 파라미터 입니다. 이러한 기법은 모델이 상대적인 위치(relative position)을 보다 더 잘 알 수 있게 하면서, 연산적으로 보다 효율적임을 주장합니다. 또한 긴 시퀀스에 대해 모델이 더 일반화 될 수 있도록 하는 효과가 있다고 합니다.
총 6개의 transformer block 은 attention weight 를 계산하는 64-dim 의 projection layer, 2048-dim의 kernel(fead-forward in Figure) 그리고 512-dim 의 embedding 을 사용합니다. Query와 Response encoder 의 transformer layer의 파라미터는 모두 공유됩니다. Universal Sentence Encoder 처럼 square-root-of-N reduction 을 사용해서 embedding sequence 를 고정된 크기(dim)의 vector로 만들었습니다. 두개의 self-attention head 는 각자 weighted sum 을 하기 위해서 필요한 weight 를 계산하는데, 문장 길이의 square root 로 weight 를 scaling 합니다.
각 reduction layer 의 출력(figure 에서 rx, ry로 표기)은 공유되지 않는 각각의 3-layer 짜리 1024-dim 크기의 fully connected fead-forward network 을 거치게 됩나다. 각 layer 간에 skip-connection, layer-normalization, orthogonal initialization 이 적용되어 있습니다. activation function 으로는 fast GeLU approximation 을 사용합니다. 맨 마지막 레이어는 최종적으로 L2-normalized 된 512-dim 크기의 representation 으로 결과를 mapping 시켜 줍니다.
위에서 언급했듯이 ConveRT 에서는 multi-turn context 를 고려하는 구조를 제안합니다. multi-turn 의 경우 이전 10턴의 대화를 사용합니다. 또한 context representation 을 계산할 때, 직전 턴의 encoding 결과와 10턴 전체 문장을 string으로 concat한 입력의 encoding 결과를 평균하여, fead-forward network로 projection 된 결과값을 최종 context representation 으로 사용합니다.
흥미로운 점은 학습시 답변간의 similarity 만을 계산하는 것이 아닌, 직전턴-답변, 직전10턴-답변, 직전턴&직전10턴 평균-답변 총 이렇게 3가지의 variation 을 모두 고려하여 학습을 수행한다는 점입니다. 저자가 이에 대한 분명한 이유를 밝히지는 않았지만, 제 추측으로는 단순히 평균된 representation 만으로 위와 같은 인과관계를 학습하기에는 어려움이 있었기 때문이지 않나 생각을 합니다.

학습 방법

학습은 context에 대해서 정답 답변 한개와, 정답이 아닌 답변 후보들이 있다고 한다면 정답 답변이 전체 후보들 중에서 제일 높은 cosine-similarity 를 갖도록 cross-entropy를 이용해 학습하는 방법을 사용합니다. 이때 정답이 아닌 답변 후보는 batch 내의 다른 질의의 정답들을 사용합니다 (in-batch negative sampling).
추가적인 최적화를 위해서 quantization 을 적용하여 embedding 관련 parameter는 8-bit 를 사용하고, 다른 모델의 파라미터들은 16-bit 만을 사용합니다. 또한 mixed-precision training 을 사용하여 학습을 수행하여 FP16으로 inference가 가능하도록 하였습니다. 하지만 layer-norm , L2-norm, softmax 와 같은 연산은 안정성을 위하여 FP32를 사용하여 추론을 수행합니다. 결과적으로 quantization 을 통해서 2배의 batch-size 를 사용할 수 있었고, negative sample 을 더 많이 볼 수 있게 되는 이점을 얻을 수 있었음을 주장합니다.
학습 데이터로는 Reddit 데이터를 사용하였으며 (input, response)를 이루는 총 pair의 갯수는 727M입니다. 전체 모델에서 사용된 hidden-dim 은 512dim 를 사용하였으며, fead-forward 2에서는 1024dim 을 사용하였습니다. 학습을 총 12개의 K80GPU를 사용하여 18시간 동안 수행되었으며, GCP에서 $85정도의 비용을 사용함을 보이면서 굉장히 적은 비용으로 효율적인 학습을 수행할 수 있음을 제안합니다.

실험

베이스라인으로 사용한 1-3번 모델은 MAP라는 기법을 이용해서 학습이 되었는데, 간단하게 요약을 하자면 베이스라인에 명시되어 있는 모델로 context와 reply 를 encoding 하고 cosine-similarity 를 이용해서 계산하는 방식입니다.추가적으로 reply representation에 linear projection을 적용하여 context와 같은 공간에 사상될 수 있도록 하였습니다. 보다 자세한 내용은 다음 논문을 통해서 확인하실 수 있습니다.
평가는 Reddit, DSTC7-Ubuntu 데이터셋을 이용하여 수행되었으며, metric으로는 R100@1과 MRR 두가지를 사용하였습니다. 평가 결과 기존의 baseline 모델보다 우수한 성능을 보여 주었으며, 저자는 LM을 기반으로 하는 pretraining보다 response selection 기반으로 하는 학습 방법에서 큰 이점이 있음을 주장하였습니다. 또한 multi-context 를 사용하는 것이 성능 향상에 도움이 되었음을 시사하였습니다.
별도로 표를 발췌하지는 않았으나, 저자는 학습된 context encoder를 intent classification task 로 fine-tuning 시켰을 때 기존의 bert 기반의 모델과 거의 동일하거나 조금 더 높은 성능을 보였음을 보고하였습니다.

결론

가볍고, 대화 모델 학습에 있어서 이점을 갖는 dual-encoder 구조의 ConveRT을 제안합니다.
Response Selection Task로 사전학습을 수행하며, Multi-Turn Context 를 고려합니다.
실험을 통해 LM기반으로 사전학습된 BERT를 사용하는 것 보다, 우수한 성능을 보여 주었습니다.
73MB 크기밖에 되지 않으며, GCP에서 85 USD의 비용으로 pretraining 을 모두 수행할 정도로 가벼움을 강조합니다.