NL-079, Poly-encoders: Transformer Architectures and Pre-training Strategies for Fast and Accurate Multi-sentence Scoring (2020-ICLR)

■ Comment

  • 2020-ICLR로 채택될 정도인가? 싶은 논문이기는 하다.
  • 여기서 주로 다루는 task는 candidate selection(simliarity), IR 등의 느낌이다.
    • 즉 대화에서 다음 모델의 답변 후보 중에 무엇을 내뱉을까? 이런 개념이다.
  • 모델의 구조에 대해 말해보면
    • Cross-encoders / Bi-encoders / Poly-encoders 3가지에 대해 언급을 한다.
    • Cross는 기존의 BERT와 똑같은 방법론이고 fine-tune을 할 때도 입력으로 간주되는 것을 concat해서 처리하는 것을 말한다.
    • Bi 방법은 입력을 분리해서(context, candidate) 각자 transformer을 태우고 위에서 두 최종 출력 vector을 이용해서 fine-tune하는 것이다.
    • Poly-encoder는 두 방법의 장점을 섞은 것이라고 하는데, 실제로는 Bi 방법에서 뒤에 layer을 더 쌓은 것이라 보면 된다.
    • MRC 논문을 그렇게 많이 읽어보지는 않았지만, 사실 이러한 방법은 MRC에서 passage/question로 나뉘어서 진작에 많이 쓰이고 있지 않나? 싶은 거다.
    • 즉 새로운 구조나 방법론은 아닌 거 같은데;;
  • Poly의 장점
    • Cross와 같은 경우는, 성능이 좋으나 context, candidate 모든 쌍에 대해 매번 transformer을 태워야하니까 시간이 오래 걸린다.
    • Poly나 Bi는 candidate을 transformer 태운 결과를 캐시로 가지고 있을 수 있다.
    • 즉 실제 인퍼런스 할 때 context가 들어오면 빠르게 계산할 수 있다는 장점이다.
    • 또한 성능은 꽤 잘나온다는 결론이다.
  • 또 다른 contribution
    • pre-training을 여기서는 downstream task와 관련이 있는 코퍼스 등으로 하면 성능이 좋아진다는 것이다.
    • 얼핏보면 당연한 얘기지만, 실험적으로 보여준 것이다.
    • 근데 의아한점은 여기선 BERT 조차 다시 학습했다는 것인데.. 굳이 그럴필요가 있었을 까 싶다.(이미 모델이 오픈소스로 공개되어있는데..)
    • 근데 이러한 사실을 알아도, 많은 연구자/개발자들은 pre-training 모델을 downstream task에 맞게 매번 구축하는 게 힘들 것이다.
    • 애초에 pre-training 모델은 하나로 가져가는게 편할 것이고 그러기 때문에 장점이 있다는 것인데
    • 여기서는 downstream 테스크에 맞게 다시 구축하면 좋다는 것이니 큰 실용성이 있을까? 싶다..

0. Abstract

  • deep pre-trained transformers의 사용은 많은 어플리케이션에서 놀라운 상황을 이끌어왔다.
  • 시퀀스들 사이의 쌍으로 비교하는 테스크들에서 corresponding 레이블을 가진 입력이 주어질때 매칭하는 것은 일반적으로 2가지 접근법이 있다.
    • Cross-encoders
    • Bi-encoders
  • Cross-encoders은 일반적으성능이 좋으나 실제로 쓰기에는 매우 느리다.
  • 이 연구에서는, 새로운 트랜스포머 구조인 Poly-encoder을 개발하고 이것이 token level에서의 self-attention features보다는 global한 학습을 하도록 한다.
  • 우리는 pre-training와 fine-tunning 전략이 잘 작동하는 것을 포함하여 3가지 접근법의 자세한 비교를 수행한다.
  • 우리는 우리의 모델들이 4가지 테스크에서 SoTA를 달성함을 보여준다.
    • Poly-encoder는 Cross-encoder보다 빠르며 Bi-encoder보다 정확하다.
    • 두 방법의 중간정도 되는 느낌일 듯
    • 다운 스트림 작업과 유사한 대규모 데이터 세트에 대한 사전 교육을 통해 SoTA을 얻는다고 한다.

1 Introduction

  • 최근, 다양한 language understanding 테스크에 대한 SoTA 벤치마크에 대한 중요한 향상은 deep pre-trained language models을 fine-tuning 하면서 달성되었다.
  • 이 연구에서 우리는 아래 테스크의 클래스를 위한 접근법으로 접근 방식의 향상을 탐구한다.
    • 테스크: input context가 주어졌을 때, retrieval(검색) 및 대화 테스크 사이들에서 공통적인 설정에서 다중 문장을 scoring하는 것으로 candidate labels의 셋을 점수매긴다.
  • 이러한 테스크에서의 성능은 두 가지 측면에서 평가된다.
    • prediction quality
    • prediction speed (많은 candidates을 scoring하는 것은 매우 느릴 수 있기 때문)
  • 최근 SOTA는 pre-training한 BERT을 사용한 모델에 초점을 맞추는 것으로 다음의 일반적인 주제에 대해 학습이 된다.
    • Wikipedia and the Toronto Books Corpus (Zhu et al., 2015). 
  • fine-tuned 구조는 일반적으로 top에 다음과 같이 두 가지 구조가 있을 수 있다.
    • Bi-encoders and Cross-encoders. 
  • 이제 말하는 것은 논문의 그림을 보면 이해하기 쉬우니 밑에 그림 1을 먼저 봐보자..
  • Cross-encoders (Wolf et al., 2019; Vig & Ramea, 2019)은 주어진 input과 label 후보들에대해 full (cross) self-attention을 수행하고 더 높은 정확도를 달성하는 경향이 있다.
  • Bi-encoders (Mazare et al., 2018; Dinan et al., 2019)은 input과 label 후보에 대해 self-attention을 분리해서 하고 final representation에서 결합하는 식이다.
  • representations이 분리되어 있기 때문에, Bi-encoders은 encoded candidates을 캐시로 가져가고 이들의 representations을 각 입력에 대해 재사용해서 빠른 prediction 시간을 얻을 수 있다.
  • Cross-encoders은 각 input과 label에 대해 encoding을 재계산해야되고 그 결과로 테스트 타임에서는 매우 느리다.
  • 이 연구에서는, 우리는 현재 SoTA에 비해 quality와 speed 모두 향상시키는 새로운 contributions을 제공한다.
  • 우리가 소개하는 것은 Poly-encoder으로 추가적인 attention 메커니즘을 배워서 self-attention을 수행하는 것보다 많은 global features을 표현한다.
    • 결과로 Bi-encoders에 비해 성능 이득을 얻고 Cross-encoders에 비해 속도 이득을 얻는다.
  • 우리 구조를 pre-train을 하기위해, 우리는 다운스트림과 유사한 방대한 데이터를 선택하면, BERT pre-training 보다 눈에띄는 이득을 얻는다.
    • pre-train과 fine-tune 테스크가 비슷한 데이터로 한다?
  • 우리가 시도하는 모든 다른 구조 선택과 다운스트림 테스크에서도 마찬가지입니다.
  • 우리는 새로운 접근법들을 비교하는 실험을 진행한다.
    • 추가적으로 기존의 방법들의 다양한 셋업에서 최고로 작동하는 것을 분석한다.
    • dialogue , information retrieval (IR) 영역의 기존의 4가지 데이터세트에서 Wikipedia/Toronto Books에 대비하여 Reddit을 기반으로한 pre-training 전략을 사용하여 분석한다.
    • 즉 pre-training할 때, 코퍼스도 바꿔보고 데이터세트는 dialogue, IR에서 쓰이는 4가지에 대해 분석한다는 말
  • 우리는 4가지 데이터세트에서 SoTA을 달성하는 우리의 최고 구조와 pre-training 전략을 얻었을뿐 아니라 real-time에서 사용하기위한 실용적인 implementations을 할 수 있다.
  • Our code and models will be released open-source.

2 Related Work (번역)

  • 입력 컨텍스트가 주어지면 후보 레이블에 점수를 매기는 작업은 기계 학습의 고전적인 문제입니다. 
    • 멀티 클래스 분류는 특별한 경우이지만보다 일반적인 작업은 후보를 개별 클래스가 아닌 구조화 된 객체로 포함합니다. 
    • 이 연구에서 우리는 입력과 후보 레이블을 일련의 텍스트로 간주합니다.
  • 입력과 후보 레이블을 공통 피처 공간에 개별적으로 매핑하는 광범위한 모델 클래스가 있으며, 일반적으로 내적, 코사인 또는 (파라미터 화 된) 비선형 성이 유사성을 측정하는 데 사용됩니다.
    • 우리는이 모델들을 바이-인코더라고합니다. 이러한 방법에는 벡터 공간 모델, LSI, 감독 된 임베딩 및 클래식 샴 네트워크가 포함됩니다.
    • 이 연구에서 고려할 다음 발언 예측 작업을 위해, 여러 Bi-encoder 신경 접근법, 특히 입력 및 후보 레이블을 개별적으로 인코딩하는 LSTM 및 CNN뿐만 아니라 메모리 네트워크 및 트랜스포머 메모리 네트워크가 고려되었습니다.
    • Bi-encoder 방법의 주요 장점은 크고 고정 된 후보 세트의 표현을 캐시하는 기능입니다. 
    • 후보 인코딩은 입력과 독립적이므로 Bi-encoder는 평가 중에 매우 효율적입니다.
  • 연구자들은 또한 입력과 후보 라벨 사이의 유사성 점수 함수에 대해 어떠한 가정도 하지 않는 크로스 엔코더(Cross-encoder)라고 부르는 보다 풍부한 등급의 모델들을 연구했다. 
    • 대신 입력과 지원자의 결합은 원하는 의존성을 기반으로 일치점을 매기는 비선형 함수에 대한 새로운 입력으로 작용한다. 
    • 이는 순차적 매칭 네트워크 CNN 기반 아키텍처, 딥 매칭 네트워크, 게이트 자체 주의력 및 가장 최근의 변압기를 통해 탐구되었다.
    • 후자의 경우, 텍스트의 두 시퀀스를 연결하면 모든 계층에 자기 주의력을 적용하게 된다. 
    • 이것은 후보 라벨의 모든 단어가 입력 컨텍스트의 모든 단어와 그 반대편에 있을 수 있기 때문에 입력 컨텍스트와 후보 사이의 풍부한 상호작용을 산출한다. 
    • 우르바넥 외 연구진(2019)은 사전 훈련된 BERT 모델을 채용하고, Bi와 Cross-encoder를 모두 미세 조정하여 대화와 행동 과제에서 명시적으로 비교하고, Cross-encoder가 더 잘 수행한다는 것을 알아냈다. 
    • 그러나 성능 향상에는 상당한 계산 비용이 소요된다. 
    • 교차 인코더 표현은 계산이 훨씬 더 느려서 일부 응용 프로그램을 실행할 수 없게 만든다.

3 Tasks

  • 우리는 대화에서 sentence selectionIR에서 article search의 테스크를 고려한다.
  • 대화에서 sentence selection은 많은 연구가되었고 최근에 두가지 컴페티션이 있었다.
    • Neurips ConvAI2 competition (Dinan et al., 2020), 
    • DSTC7 challenge, Track 1 
  • 우리는 이 두자기 테스크를 추가적으로 비교하고, 우리는 유명한 Ubuntu V2 corpus로 테스트해본다.
  • IR에서는 우리는 Wikipedia Article Search task of Wu et al. (2018)을 사용한다.
  • The ConvAI2 task is based on the Persona-Chat dataset (Zhang et al., 2018a) which involves dialogues between pairs of speakers. 
    • 각 화자에게는 페르소나가 주어지며, 예를 들어 모방 할 인물을 묘사하는 문장이 몇 개 있습니다.
    • 예) “I love romantic movies”
    • 그런 다음 모델은 대화 기록 및 페르소나 라인에서 선택한 응답을 조정해야합니다.
    • 경쟁에서 자동 측정 기준으로 각 반응에 대해 모델은 20 개의 선택 세트에서 올바른 주석이 지정된 발화를 선택해야하며, 나머지 19 개는 평가 세트에서 임의로 무작위로 선택된 발화입니다.
    • 그러나 최종 시스템에서는 100k 이상의 발화로 구성된 전체 교육 세트에서 검색하지만 일반적인 평가 설정의 속도 때문에 피할 수 있습니다.
    • 이 작업에서 23 명의 참가자 중 최고의 성과를 거둔 경쟁 업체는이 작업에 맞게 미세 조정 된 사전 훈련 된 Transformer를 사용하여 테스트 세트에서 80.7 %의 정확도를 달성했습니다 (Wolf et al., 2019).
  • DSTC7 challenge (Track 1)Ubuntu chatlogs으로부터 대화를 추출하여 구성한 것이다.
    • 한 파트너는 다른 파트너로부터 다양한 우분투 관련 문제에 대한 기술 지원을 받는다.
    • 가장 좋은 성능을 가진 competotr (with 20 entrants in Track 1)은 64.5% R@1이다.
    • Ubuntu V2는 비슷하지만 더 큰 유명한 코퍼스이며 competition전에 만들어졌다 (Lowe et al., 2015).
    • we report results for this dataset as well, as there are many existing results on it.
  • 마지막으로는, 우리는 Wikipedia Article Search으로 평가를 한다.
    • 영어 위키백과 2016-12-21 덤프(약 5M 기사)를 이용해 search query로 article에서 문장을 받아 출처 article를 찾는다. 
    • 평가에서는 retrieval metrics를 사용하여 실제 article(문장을 뺀 것)를 다른 기사 1만 개와 비교하여 순위를 매긴다. 
    • 이것은 가장 관련성이 높은 기사(웹 문서)를 검색하고자 하는 시나리오와 같은 웹 검색을 모방한다. 
    • 가장 잘보고 된 방법은 fastText, SVM 및 기타 기준을 능가하는 학습 순위 매립 모델 인 StarSpace입니다.
  • 4개의 데이터 집합과 그 통계를 표 1에 요약한다.

4 Methods 

4.1 Transformers and Pre-training Strategies

  • Transformers
    • Our Bi-, Cross-, and Poly-encoders, described in sections 4.2, 4.3 and 4.4 respectively, are based on large pre-trained transformer models with the same architecture and dimension as BERT-base (Devlin et al., 2019), which has 12 layers, 12 attention heads, and a hidden size of 768. 
    • As well as considering the BERT pre-trained weights, we also explore our own pre-training schemes.
    • --> 구체적으로, BERT-base와 똑같은 구조를 사용하여 두 개의 transformers을 pre-train한다.
    • 하나는 BERT-base와 유사한 훈련 설정을 사용하여 Wikipedia and the Toronto Books 코퍼스에서 추출한 [INPUT, LABLE]의 1억 5천만 개를 학습하고
    • 다른 하나는 온라인 플랫폼 Reddit(Mazare et al., 2018)에서 추출한 [INPUT, LABLE]의 예시 1억 7억 7천 4백만개를 학습하는데 사용하는데, 이는 대화에 좀 더 적응된 데이터 집합이다.
    • 전자는 BERT와 유사한 설정을 재현하는 것이 이전에 보고된 것과 동일한 결과를 우리에게 제공하는지 확인하기 위해 수행되며 (즉 기존의 BERT와 똑같고)
      • 그런데 기존의 BERT는 모델이 이미 있는데 똑같은 작업을 왜 굳이 재현하는 거지?
    • 후자는 관심있는(여기서 수행할) 다운스트림 작업과 더 유사한 데이터에 대한 pre-training이 도움이 되는지 테스트한다. 
    • 두 가지 새로운 설정을 모두 교육하기 위해 XLM(Lample & Connectau, 2019)을 사용했다.
  • Input Representation
    • Our pre-training input is the concatenation of input and label [INPUT,LABEL], where both are surrounded with the special token [S], following Lample & Conneau (2019). 
    • Reddit에서 pre-training을 할 때 input은 context, label은 next utterance이 된다.
    • Wikipedia and Toronto Books에서 pre-training을 할 때, BERT처럼 input은 하나의 문장, label은 next sentence이다.
    • 각 token은 3가지 embeddings의 합으로 표현이 된다.
      • the token embedding
      • the position (in the sequence) embedding 
      • the segment embedding. 
    • 입력 tokens의 segments은 0이고 label tokens은 1이다.
  • Pre-training Procedure
    • 우리의 pre-training 전략은 masked language model (MLM) 테스크로 BERT와 동일하다.
    • Wikipedia and Toronto Books을 pre-training을 할 때, 우리는 next-sentence prediction task을 BERT 학습할 때와 똑같이 추가하였다.
    • Reddit으로 pre-training할 때, next-utterance prediction task을 추가하였고 이것은 several sentences으로 utterances가 구성될 수 있어서 이전의 것과는 조금 다르다. (signle next sentence가 아닌 multiple next sentence 라는 것)
    • 학습 중 candidate는 50%가 실제 sentence/utterance이고 50%는 데이터 집합에서 무작위로 추출한 sentence/utterance이다.
    • 우리는 MLM tasknext sentence/utterance prediction task 사이를 번갈아 학습한다.
    • Lample & Conneau (2019)와 같이 우리는 Adam optimizer로 다음과 같은 세팅을 가진다.
      • learning rate of 2e-4, β1 = 0.9, β2 = 0.98
      • no L2 weight decay
      • linear learning rate warmup
      • inverse square root decay of the learning rate. 
    • 우리는 모든 layers에서 dropout 확률을 0.1을 사용하고 비슷한 길이를 가지는 [INPUT, LABEL]의 concatenations으로 구성된 32000 tokens을 batch로 사용한다.
    • We train the model on 32 GPUs for 14 days.
  • Fine-tuning
    • pre-training 이후에는, multi-sentence selection task을 tine-tune한다.
    • 우리는 transformer를 fine-tune하는 세 가지 아키텍처를 고려한다: 
      • Bi-encoder, Cross-encoder and newly proposed Poly-encoder.

4.2 Bi-encoder 

  • In a Bi-encoder, both the input context and the candidate label are encoded into vectors:
    • T1와 T2는 두 개의 transformers으로 4.1에서 말한 pre-trained 과정을 따른 것이다.
    • 이 둘은 같은 weights으로부터 시작하나 fine-tuning되면서 분리되서 업데이트 된다.
    • T(x) = h1, .., hN is the output of a transformer T 
    • red(·) is a function that reduces that sequence of vectors into one vector. 
    • 입력과 label은 분리되어서 encoded 되기 때문에 여기서는 segment tokens이 0으로 동일하게 설정한다.
    • pre-training 하는 것과 비슷하게 하기 위해, input과 label 모두 special token [S]으로 둘러싸여있고 그래서 h1은 [S]에 대응된다.
    • 위 pre-training할 때, input과 label 구분짓는 [S]을 사용했었던 걸 그대로 함.
    • 우리는 red(·)을 통하여 output을 하나의 representation로 줄이는 것을 3가지 방법으로 고려한다.
      1. choose the first output of the transformer (corresponding to the special token [S]), 
      2. compute the average over all outputs 
      3. the average over the first m ≤ N outputs. 
    • 우리는 이것을 Appendix에 있는 Table 7에서 비교한다.
    • 결론은 우리는 transformer의 first output을 실험에서 사용했고 이것이 조금 더 좋은 결과를 보여준다.
  • Scoring
    • dot-product 가 주어질 때, candidate cand_i의 점수이다.
    • 네트워크는 들의 logits이 cross-entropy loss을 최소화호도록 학습이되고 이 correct label이다.
    • Similar to Mazare´ et al. (2018), during training we consider the other labels in the batch as negatives. 
    • 이것은 학습이 더욱 빨라지게하고 각 candidate에 계산된 embeddings을 재사용할 수 있고 더 큰 batch size을 사용할 수 있다.
    • 우리의 실험은 ConvAI2에서 했고 512 batches을 사용할 수 있다.
    • ConvAI2의 데이터세트에서 context(대화 히스토리)와 next sentence 사이의 점수를 매기는 네트워크를 학습할 때, distractor은 negative samples로 사용이 되었다는 말이다.
  • Inference speed
    • 우리가 알고있는 candidates에서 검색의 세팅에서 Bi-encoder은 시스템에서 모두 가능한 candidates의 embeddings을 미리 계산하도록 한다.
      • 즉 입력이 들어올 때마다 계산하는게 아니고, candidates는 바뀌지 않으니까 미리 계산한다는 것이다.
    • context embedding 를 계산한 후, 유일하게 남은 작업은 와 모든 candidate embedding 사이의 dot product이며, 이는 현대 GPU의 수백만 명의 candidates로 확장될 수 있으며, FAISS(Johnson et al., 2019)와 같은 가장 가까운 라이브러리를 사용하여 잠재적으로 수십억 개의 dot product을 사용할 수 있다.

4.3 Cross-encoder

  • Cross-encoder은 input context와 candidate label 사이를 rich interactions을 하는 것으로 그들이 jointly encoded되어 final representation을 얻는다.
  • pre-training 과정과 유사하게, context와 candidate는 special token [S]으로 둘러싸이고 single vector으로 concatenated되어 하나의 transformer만을 사용한다.
  • We consider the first output of the transformer as the context-candidate embedding:
    • first는 transformer을 통과한 시퀀스 vectors 중 첫 번째 vector을 취한다라는 것이다.
    • 하나의 transformer을 사용함으로써, Cross-encoder은 context와 candidate 사이를 self-attention 수행하여 Bi-encoder보다 더 부유한 extraction을 얻을 수 있다.
    • trasnformers의 layers중에 candidate label은 input context을 취함으로써 Crossencoder은 candidate-senstivie input representation을 만들 수 있다.
    • 그러나 Bi-encoder은 그럴 수 없다.
    • For example, this allows it to select useful input features per candidate.
  • Scoring
    • 하나의 candidate에 대해 score을 매기기 위해, linear layer W을 embedding 에 적용해서 vector을 scalar로 만들어줘야 한다.
      • 즉 모든 cand에 대해서 위와 같이 매번 계산해야한다는 말
    • Bi-encoder에서 하는 것과 유사하게, 네트워크는 cross entropy loss을 최소화하도록 학습이 된다.
    • logits들은 s(ctxt, cand_1), ..., s(ctxt, cand_n)으로 cand_1이 correct candidate고 나머지는 negatives로 학습 셋에서 가져온 것이다.
    • Bi-encoder와 달리, 우리는 negative로서 batch의 다른 labels을 재사용할 수 없기 때문에 우리는 training세트에 제공된 외부 부정적인 라벨을 사용한다.
    • 학습 데이터세트에서 candidates와 embeddings을 1대1 매칭을 할 수 가 없기 때문에 각 (ctxt, cand)쌍에 대해 매번 계산해야 된다는 것이다.
    • Bi-encoder은 따로 embedding을 하니까 각 cand와 embeddings을 1대1 매칭해둬서 재사용이 가능하다는 것이다.
    • The Cross-encoder uses much more memory than the Bi-encoder, resulting in a much smaller batch size.
  • Inference speed 
    • 운나쁘게도, Cross-encoder은 candidate embeddings을 미리 계산할 수 없다.
    • inference time에서 candidate는 input context와 concatenated 해야만 하고 전체 모델의 forward pass을 통과해야만 한다.
    • 그래서 이 방법은 큰 규모의 candidates으로 확장할 수 가 없다.
    • 우리는 section 5.2에서 이러한 bottleneck에 대해 다룰 것이다.

4.4 Poly-encoder

  • Poly-encoder 구조는 Bi- and Cross-encoder의 두 세계의 장점을 가지는 목표를 가지고 있다.
  • candidate label은 Bi-encoder와 같은 방법으로 one vector로 표현한다.
    • 이것은 fast inference time을 위해 candidates을 캐싱할 수 있게 한다.
    • 또한 더 많은 정보를 추출하기 위해 Cross-encoder와 같이 input context는 candidate와 joiny하게 encoded할 수 있다.
  • Poly-encoder은 Bi-encoder와 비슷하게 context와 label을 위해 두 개의 transformer을 분리해서 사용하고 candidate는 single vector 으로 encode된다.
    • Bi-encoder에서 설명되어있지만, aggregate을 간단하게 첫 번째 token인 [S]의 vector로 사용한다고 한다.
  • Poly-encoder은 encoded responses의 캐시를 미리 계산해서 수행할 수 있는 방법이다.
  • 그러나, input context는 전형적으로 candidate보다 길고 이는 m개의 vectors 으로 구성된다.
    • 즉 Bi-encoder와 같이 한 개 대신 m개 vectors로 있고 m는 inference speed에 영향을 미친다.
  • 이러한 input을 표현하는 m global features을 얻기 위해 우리는 m context codes 을 학습한다.
    • 는 representation 을 이전의 layer의 모든 출력을 attending하여 추출한다.
  • 다시 말해, 우리는 은 다음과 같다:
    • 그림하고 비교해보면, h는 transformer ouput을 말하는 것 같다.
    • 그것과 i-th 토큰에 해당하는 code ci을 이용해서 weight w을 구해서 weighted sum을 한게 =Emb가 되는 것이다.
  • m context codes는 랜덤 초기화 되며, finetuning 동안 학습이 된다.
    • 즉 c는 랜덤 초기화후 학습이 된다는 것이다.
  • 마지막으로는, m global context features이 주어지고, 우리는 을 query로 사용하여 그것들을 attend 한다.
    • 그림하고 비교해보면, =Emb와 =Cand emb 이용해서 위 식처럼 weighted sum해서 하나의 vector로 만든다.
  • 최종 candidate label에 대한 최종 score은 으로 Bi-encoder와 비슷하게 매겨진다.
  • m < N일 때 (N은 tokens의 수), context-candidate attention은 오직 top layer에서만 수행이되고 이것은 Cross-encoder의 full self-attention보다 매우 빠르다.
    • 아마 말하고자 하는게, cross-encoder은 첫 번째 layer부터 full self-attention으로 차곡차곡 쌓는 형식이다.
    • 하지만 poly-encoder은 각자 transformer을 태우고 맨 윗단에서 조합하는 식이다.
    • 사실 이러한 방법이 MRC 논문들 보면 자주 등장하는 구조라 특별한 것은 없다.
    • 개인적으로 구조자첸 컨트리부션이 없는데, 이렇게 하는 것이 속도도 빠르고 성능도 좋다는 것이 컨트리부션 아닐까 싶다.

5 Experiments

  • 번역기 돌려서 간단히만 보자..
  • 다양한 실험을 수행하여 4 가지 작업에 대한 모델 아키텍처 및 교육 전략을 테스트합니다. 
  • 측정 항목의 경우 각 테스트 예에서 R @ k / C로 약칭 된 C 가능한 후보와 MRR (Mean Reciprocal Rank)을 선택할 수있는 Recall @ k를 측정합니다.

5.1 Bi-encoders and Cross-encoders

  • 먼저 Devlin 등이 제공 한 가중치로 초기화 된 Bi- 및 Cross-encoder 아키텍처의 미세 ​​조정에 대해 조사합니다. 
  • (2019), 다른 하이퍼 파라미터의 선택을 연구합니다 (섹션 5.3의 자체 사전 훈련 계획을 살펴보십시오). 
  • Bi-encoder의 경우 다른 배치 요소를 음수 훈련 샘플로 고려하여 임베딩의 재 계산을 피함으로써 많은 수의 음을 사용할 수 있습니다. 
  • Nvidia Volta v100 GPU 8 개에서 반 정밀도 연산 (즉, float16 연산)을 사용하면 ConvAI2에서 512 개의 요소를 일괄 처리 할 수 ​​있습니다. 
  • 표 2는이 설정에서 더 큰 배치 크기, 즉 더 많은 네거티브로 더 높은 성능을 얻는다는 것을 보여줍니다. 
  • 여기서 511 네거티브가 최상의 결과를 산출합니다. 다른 작업의 경우 데이터 세트의 긴 시퀀스가 ​​더 많은 메모리를 사용하므로 배치 크기를 256으로 유지합니다. 
  • 크로스 엔코더는 (컨텍스트, 후보) 쌍에 대한 임베딩이 매번 재 계산되어야하므로 더 계산 집약적입니다. 
  • 따라서 배치 크기를 16으로 제한하고 훈련 세트에서 음수 임의 샘플을 제공합니다. DSTC7 및 Ubuntu V2의 경우 15 가지 부정을 선택합니다. 
  • ConvAI2의 경우 데이터 세트는 19 개의 음을 제공합니다.
  • 위의 결과는 첫 번째 출력을 기반으로 Bi-encoder 집계로보고됩니다. 
  • 대신 모든 출력에 대한 평균을 선택하는 것은 매우 유사하지만 약간 더 나쁩니다 (83.1, 평균 5 회 이상). 
  • We also tried to add further non-linearities instead of the inner product of the two representations, but could not obtain improved results over the simpler architecture (results not shown).
    • 즉 뒷 layer에 이것저것 붙이는 것은 크게 효과적이지 않다.
  • 우리는 두 가지 최적화 프로그램을 시도했습니다 
    • Adam (Kingma & Ba, 2015) with weight decay of 0.01 (as recommended by (Devlin et al., 2019)) 
    • Adamax (Kingma & Ba, 2015) without weight decay; based on validation set performance
    • we choose to fine-tune with Adam when using the BERT weights. 
  • 학습 속도는 Bi 및 Poly 인코더의 경우 100 회, Cross-encoder의 경우 1000 회의 예열로 5e-5로 초기화됩니다. 
  • 학습 속도는 반 에포크마다 유효한 세트에서 평가 된 손실이 정체 될 때 0.4의 계수만큼 감소합니다. 
  • 표 3에는 감쇠 최적화 기능이있는 Adam을 사용하여 (Devlin et al., 2019)에서 제공하는 다양한 가중치 계층을 미세 조정할 때의 검증 성능이 나와 있습니다. 
  • 단어 포함을 제외하고 전체 네트워크를 미세 조정하는 것이 중요합니다. 
  • 위에서 설명한 설정을 사용하여 데이터 세트에서 Bi 및 Cross 인코더를 미세 조정하고 결과를 표 4에보고합니다.
  • BERT 가중치를 미세 조정할 때 Bi- 인코더와 크로스 엔코더는 처음 세 가지 작업에서 문헌에서 기존의 최상의 접근 방식을 능가합니다. 
  • 예를 들어, Biencoder는 ConvAI2에서 81.7 % R1, DSTC7에서 66.8 % R1에 도달하는 반면, Cross-encoder는 ConvAI2에서 84.8 % R1, DSTC7에서 67.4 % R1의 높은 점수를 얻습니다. 
  • 전반적으로 Cross-encoders는 Bi-encoder를 포함하여 3 가지 대화 작업에 대한 이전의 모든 접근 방식을 능가합니다 (예상).
  • 테스트 세트가 해당 데이터 세트에 대한 사전 훈련의 일부가 아님을 보장 할 수 없으므로 Wikipedia IR에 대한 BERT의 미세 조정은보고되지 않습니다. 
  • 또한 크로스 엔코더는 후보가 10k 인 해당 작업의 평가 설정을 평가하기에는 너무 느립니다.

5.2 Poly-encoders

  • Bi-encoder 실험에서와 동일한 배치 크기와 옵티 마이저 선택을 사용하여 Poly-encoder를 훈련시킵니다. 
  • m 개의 컨텍스트 벡터의 다양한 값에 대한 결과가 표 4에보고되어있다. 
  • Poly-encoder는 모든 작업에서 Bi-encoder보다 성능이 뛰어나며 코드가 많을수록 일반적으로 더 크게 개선됩니다. 
    • Our recommendation is thus to use as large a code size as compute time allows (see Sec. 5.4).
    • poly-encoders와 같이 구성할 땐 code를 큰 dimmension으로 설정하면 좋다는 팁
  • DSTC7에서 BERT 프리 트레이닝이 포함 된 Poly-encoder 아키텍처는 360 개의 중간 컨텍스트 코드로 68.9 % R1에 도달합니다. 
  • 이는 실제로 크로스 엔코더 결과 (67.4 %)를 능가하며 Bi- 엔코더 결과 (66.8 %)보다 눈에 띄게 좋습니다. 
  • Ubuntu V2 및 ConvAI2에서도 비슷한 결론이 나오지만, 후자에서는 크로스 엔코더가 약간 더 나은 결과를 제공합니다. 
  • 우리는 결과를보고 한 이후 Li et al. (2019)는 ConvAI2에 대한 인간 평가 연구를 수행했으며, 폴리 엔코더 아키텍처는 경쟁 승자를 포함하여 생성 및 검색 기반의 다른 모든 모델보다 성능이 뛰어납니다.

5.3 Domain-specific Pre-training

  • 우리는 네 가지 작업 모두에서 Reddit 사전 훈련 된 변압기를 미세 조정합니다. 
  • 또한 BERT와 동일한 데이터 세트, 특히 Toronto Books + Wikipedia에 사전 훈련 된 변압기를 추가로 미세 조정했습니다. 
  • 사전 훈련 된 가중치를 사용할 때 Adamax 최적화 프로그램을 사용하고 임베딩을 포함하여 변압기의 모든 레이어를 최적화합니다. 
  • 가중치 감소를 사용하지 않기 때문에 최종 레이어의 가중치는 BERT의 최종 레이어의 가중치보다 훨씬 큽니다. 
  • Poly-encoder에서주의 레이어의 채도를 피하기 위해 출력의 표준 편차가 BERT와 일치하도록 마지막 선형 레이어의 크기를 조정하여 좋은 결과를 얻는 데 필요한 것으로 나타났습니다. 
  • 우리는 사전 훈련 된 가중치를 사용하여 미세 조정 결과를 표 4에보고합니다. 
  • Reddit에 대한 사전 훈련은 BERT를 사용한 이전 결과에 비해 최첨단 성능을 제공한다는 것을 보여줍니다. 
  • 및 세 아키텍처 모두 Toronto Books + Wikipedia에서 사전 훈련 된 자체 변압기에서 미세 조정을 통해 얻은 결과는 원래 BERT 가중치로 얻은 결과와 매우 유사합니다. 
  • 이는 모델을 사전 훈련하는 데 사용 된 데이터 세트의 선택이 최종 결과에 영향을 미치지 않음을 나타냅니다. 
  • 우리의 훈련에서 다른 세부 사항. 실제로, 두 가지 설정이 비슷한 크기의 데이터 세트로 사전 훈련하므로, 관심있는 다운 스트림 과제 (예 : 대화)와 유사한 사전 훈련 작업 (예 : 대화 데이터)을 선택하는 것이 이러한 성능에 대한 설명 일 가능성이 있다고 결론 내릴 수 있습니다. 
  • 유사한 결과를 가진 멀티 태스킹을 보여주는 이전 결과에 따른 이득은 다른 것들보다 더 유용하다 (Caruana, 1997). 

5.4 Inference Speed

  • Poly-encoder 아키텍처의 중요한 동기는 Biencoder보다 더 나은 결과를 달성하면서 합리적인 속도로 수행하는 것입니다. 
  • 크로스 엔코더는 일반적으로 강력한 결과를 생성하지만 엄청나게 느립니다. 
  • Poly-encoder의 성능 향상과의 균형을 결정하기 위해 속도 실험을 수행합니다. 
  • 구체적으로, 우리는 모델이 C개의 후보들을이 경우 훈련 세트에서 선택) 점수 매기는 ConvAI2 검증 세트에서 100 개의 대화 예제에 대한 다음 발화를 예측합니다. 
  • 이 실험은 CPU 전용 및 GPU 설정 모두에서 수행됩니다. 
  • CPU 계산은 80 코어 Intel Xeon 프로세서 CPU E5-2698에서 실행되었습니다. 
  • GPU 계산은 cuda 10.0 및 cudnn 7.4를 사용하여 단일 Nvidia Quadro GP100에서 실행되었습니다. 
  • 우리는 표 5에 각 아키텍처에 대한 예제 당 평균 시간을 보여줍니다. 
  • Bi-encoder와 Poly-encoder 아키텍처 사이의 타이밍 차이는 모델에 대해 고려할 후보가 1000 명일 때 약간 미미합니다. 
  • Poly-encoder 변형에 대해 5-6 배의 속도 저하를 볼 때보다 현실적인 설정 인 100k 후보를 고려할 때 차이가 더욱 두드러집니다. 
  • 그럼에도 불구하고 두 모델 모두 여전히 다루기 쉽습니다. 
  • 그러나, 크로스 인코더는 바이 인코더 및 폴리 인코더보다 2 배 더 느리므로 실시간 추론을 위해 다루기가 어려워진다. 
  • 대화 에이전트와 상호 작용하거나 많은 문서 세트에서 검색 할 때. 따라서, 바람직한 성능 및 속도 상충 관계를 고려하여 폴리 엔코더가 선호되는 방법입니다. 
  • 또한 부록, 표 6에 교육 시간이 보고되어 있습니다.
  • 폴리 인코더는 또한 크로스 인코더보다 3-4 배 빨리 훈련 할 수 있다는 이점이 있습니다 (훈련 시간은 바이 인코더와 유사 함). 

6 Conclusion

  • 이 논문에서, 우리는 candidate selection tasks에서 deep bidirectional transformers을 위한 새로운 구조와 pre-training 전략을 제시한다.
  • 우리는 Poly-encoder 방법을 소개하고 이는 label candidate을 사용한 context 위에서 attending을 하는 것이다.
    • 그러면서 각 candidate들의 representation을 미리 계산할 수 있는 능력을 유지한다.
    • 그러다보니 빠른 real-time 인퍼런스를 프로덕션 셋업에서 가질 수 있고 accuracy와 speed 사이의 trade-off의 향상을 가진다.
  • 우리는 Bi-, Poly- and Cross-encoders에 대한 trade-offs에 대한 실험적인 분석을 제공한다.
    • Poly-encoders은 Bi-encoders보다 좀 더 정확하고 Cross-encoders보다 빠르다.
    • Cross-encoders real-time use에서 비실용적이다.
  • 이러한 구조를 학습하는 관점에서, 우리는 pre-training 전략이 downstream task와 관련이 깊으면 좋은 성능을 가져온다는 것을 보여준다.
  • 특별히, Reddit으로부터의 pre-training은 BERT를 통해 얻은 결과보다 더 좋음을 보여준다.
    • 결과는 세 가지 모델 아키텍처와 세 가지 대화 데이터 세트 모두에 적용된다.
  • 그러나, 이 연구에서 소개된 이러한 방법들은 dialogue에 특화해서 작동하는 것은 아니고, candidates의 셋에 대해 scoring매기는 information retrieval와 같은 어떠한 task에도 사용될 수 있다.

댓글