<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>tobigs-nlp.log</title>
        <link>https://velog.io/</link>
        <description>투빅스 NLP 논문세미나입니다!</description>
        <lastBuildDate>Thu, 15 Sep 2022 11:28:59 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>tobigs-nlp.log</title>
            <url>https://images.velog.io/images/tobigs-nlp/profile/43fb9871-5e80-4c55-8cc5-9b5d2143200a/social.png</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. tobigs-nlp.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/tobigs-nlp" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[PADA: Example-based Prompt Learning for on-the-fly Adaptation to Unseen Domains]]></title>
            <link>https://velog.io/@tobigs-nlp/PADA-Example-based-Prompt-Learning-for-on-the-fly-Adaptation-to-Unseen-Domains</link>
            <guid>https://velog.io/@tobigs-nlp/PADA-Example-based-Prompt-Learning-for-on-the-fly-Adaptation-to-Unseen-Domains</guid>
            <pubDate>Thu, 15 Sep 2022 11:28:59 GMT</pubDate>
            <description><![CDATA[<ul>
<li>2020, TACL</li>
<li>OOD</li>
<li>Zero-shot classification</li>
</ul>
<h2 id="1-introduction">1. Introduction</h2>
<p>대부분의 자연어처리 모델들은 다음과 같은 가정에 의존한다:</p>
<blockquote>
<p>학습데이터와 테스트 데이터가 같은 분포를 가진다</p>
</blockquote>
<p>하지만 텍스트라는 데이터 자체가 굉장히 많은 소스에서 올 수 있고 각 소스들은 별개의 분포를 가지기 때문에 학습데이터에서 얻어낸 것 이상의 일반화된 분포를 찾아내는 것 자체가 자연어처리에서는 굉장히 챌린징한 과제이다. </p>
<p>이 점이 중요한 이유는 NLP 알고리즘들이 out-of-distribution examples를 만났을 때, 크게 성능이 하락하기 때문이다.
out-of-distribution, 줄여서 OOD를 해결하기 위해 NLP에서는 크게 두 가지 접근을 한다. </p>
<ol>
<li>OOD를 찾아내 따로 처리하게 하거나 </li>
<li>일반화 성능을 향상시키 위해 Domain Adaptation (DA)을 수행하거나. </li>
</ol>
<p>오늘 소개할 논문은 2번 Domain Adaptation (DA)을 수행한다. 
DA란 간단하게 이야기하면 타켓 도메인(OOD)에 잘/효율적으로 작동하게 하기 위한 목적을 가지고 소스 도메인으로 학습시키는 것이다. </p>
<p>2020년 이전에는 소스 도메인에 대해서는 레이블을 가지되, 타겟 도메인에 대해서는 레이블을 가지지 않는 데이터들로 학습을 시켰다. 하지만, 해당 논문은 아예 학습과정에서 타겟 도메인에 속하는 데이터를 보지 못하고, 추론과정에서 처음 보는 형태로 학습시켜야만 Any-domain Adaptation, 즉, 어떠한 도메인의 데이터도 처리할 수 있다고 주장한다. </p>
<p>저자들이 제안한 example-based autoregressive Prompt learning algorithm for on-the-fly Any-Domain Adaptation, 줄여서 PADA 알고리즘에 대해 알아보자. </p>
<h2 id="2-related-work">2. Related Work</h2>
<h3 id="21-unsupervised-domain-adaptation-uda">2.1 Unsupervised Domain Adaptation (UDA)</h3>
<p>기존에는 다음과 같은 방식들이 사용되었다. </p>
<ol>
<li><p>DNN-based autoencoders </p>
<ul>
<li>to learn latent representations.</li>
<li>trained on unlabeled source and target data with an input reconstruction loss</li>
</ul>
</li>
<li><p>pivot features</p>
<ul>
<li>to bridge the gap between a source domain and a target domain</li>
</ul>
</li>
</ol>
<p>위와 같은 방법들은 모두 타켓 도메인에 있는 레이블링 되지 않은 데이터에 접근할 수 있다는 가정을 따른다. 
즉, 완전한 일반화라기보다는 훈련 데이터 분포와 테스트 데이터의 분포에 대한 기존의 가정을 살짝 릴렉스 시킨 것이라고 할 수 있는 것. 하지만 이러면 새로운 도메인이 생겨날 때마다 새로운 모델이 필요하다는 단점이 존재하기에, 아예 학습 시간에 타겟 도메인/데이터에 접근하지 않는 방식이 필요하다</p>
<p>우선 이 논문애서는 pivot features를 활용한다. 기존의 pivot-based에서 좋은 pivot features란 레이블과 관련도가 높은 단어들이다. 즉 단어들과 레이블 사이에서 더 높은 연관성을 보이는 단어가 좋은 피쳐. (감성분석)</p>
<p>그런데, 이러한 관계는 한계가 있다. NLI를 생각해보자.  (entailment, contradiction, neutral)
단어 하나하나와 레이블 사이에 관계가 있다고 하기가 어렵다. </p>
<p>이렇기 때문에 이 논문에서는 task-invariant feature를 정의한다. 즉, 레이블과의 관계가 아닌 단어와 도메인 사이의 관계로 피봇을 선정하는 것이다. 당연히 도메인과 단어는 연관성이 있을 수밖에 없기 때문에 상대적으로 안정적이다. </p>
<h3 id="22-multi-source-domain-adaptation">2.2 Multi-Source Domain Adaptation</h3>
<ul>
<li><p>prominent approach</p>
<ul>
<li>fuse models from several sources</li>
<li>classifier (each domain) =&gt;  voting</li>
</ul>
</li>
<li><p>adversarial-based methods</p>
<ul>
<li>used unlabeled data to align the source domains to the target domains</li>
<li>Mixture of Experts (MoE) model<ul>
<li>relationship between a target example and each source domain.</li>
<li>naive weighting approach : effective</li>
</ul>
</li>
</ul>
</li>
</ul>
<p>3가지 한계점</p>
<ol>
<li>해당 방식은 모든 도메인의 엑스퍼트 모델이 있어야함<ul>
<li>이 도메인 수에 비례하게 파라미터의 수가 증가하고 이는 솔루션의 scalability를 저해</li>
<li>작은 모델로 할 수도 있겠지만 이는 수행능력의 저하로 이어짐</li>
</ul>
</li>
<li>OOD 데이터에 대해서 <ul>
<li>MoE ensemble: heuristic methods,(simple average, weighted average) --&gt; sub-optimal!</li>
</ul>
</li>
<li>domain partitioning: arbitrary<ul>
<li>dvd and movie domains</li>
<li>more lenient approach towards domain boundaries</li>
</ul>
</li>
</ol>
<p>해당 논문에서는 단일 모델 사용.</p>
<h3 id="23-autoregressive-lms-and-prompting">2.3 Autoregressive LMs and Prompting</h3>
<p>T5의 등장으로,task specific network를 추가할 필요가 없어졌고, Prompting의 중요성이 강조되고 있다.
해당 연구에서도 “Prompt+LM Tuning”의 방법을 사용한다. </p>
<ul>
<li>prompt-relevant parameters are fine-tuned together with some or all of the parameters of the pre-trained model</li>
</ul>
<p>T5’s prompting mechanism을 사용하여 모델이 모르는 도메인에서 온 문장과 관련된 domain-specific characteristics을 뽑아낼 수 있도록 할 것. </p>
<p>단지 조금 다른 점은: 
일반적인 prompt tuning approach들은 representation level tuning을 목적으로 하지만, 해당 연구에서는 T5로 하여금 domain-specific 정보들을 담아내는 단어들을 생성하도록 학습시켰다는 것. </p>
<h3 id="24-any-domain-adaptation">2.4 Any-Domain Adaptation</h3>
<p>그래서 저자들이 주장하는 Any-Domain Adaptation이란 무엇인가. 이는 transductive transfer learning의 한 케이스라고 할 수 있다. </p>
<p>다시 말해, 소스 태스크와 타겟 태스크 ($T_S$, $T_T$)는 동일하되, 도메인 $D_S^T$, $D_T^T$는 다른 것이다. 
정리하면, DA의 목적은 소스 도메인 셋 ${D_{S_i}}<em>{i=1}^K$을 통해 함수 $f$를 배우고, 이를 이용해 타겟 도메인 ${D</em>{T_i}}_{i=1}^M$에서 잘 작동하는 것이다. </p>
<p>이때 중요한 것은 domain robustness이다. 기존의 알고리즘들은, 알지 못하는 분포에 대한 일반화를 위해 다양한 optimization method들을 사용한다. 보통 모델로 하여금 domain-invariant한 피쳐들에게 집중하게 해서 태스크를 수행한다 (general across domains).</p>
<p>그러나, 이 논문에서는 domain-invariant feature들 뿐 아니라 domain-specific도 사용한다는 차별점이 있다. </p>
<h2 id="3-example-based-adaptation-through-prompt-learning">3. Example-based Adaptation through Prompt Learning</h2>
<h3 id="31-model">3.1 Model</h3>
<p>저자들의 아이디어는 단순하게: 처음보는 도메인에 대한 좋은 일반화를 위해서는 다양한 알고있는 도메인의 지식들을 이용해야 한다는 것. </p>
<p>어떠한 도메인에 대한 일반화도 가능하게 하기 위해, 저자들은 PADA 알고리즘을 제안한다. </p>
<p>PADA 알고리즘은 새로운 도메인의 데이터가 들어왔을 때, 다음의 두 가지 스텝을 거친다. </p>
<ol>
<li>Generate Properties(Example-Specific Prompt)<ul>
<li>seq of tokens</li>
<li>belongs to familiar domains</li>
<li>related to given example</li>
<li>used as a prompt for the example</li>
</ul>
</li>
<li>Model - Downstream task</li>
</ol>
<p>이때, 좋은 프롬프트를 만들기 위해서, Domain Related Features(DRF)를 정의한다. 이들은 소스 도메인 중 하나와 굉장히 밀접하게 연관되어 있는 토큰이며, domain-specific semantics를 encoding한다고 볼 수 있다. 즉, 소스 도메인들 사이의 공통,차이점을 드러내는 것. </p>
<p><img src="https://i.imgur.com/CGpeknn.png" alt="스크린샷 2022-09-15 오전 11.02.43"></p>
<p>해당 예시를 살펴보자. 
이때, 해당 모델이 restaurants, home-furniture, electronic-devices, movies 도메인에 익숙하다고 가정한다. 
새로운 도메인 airlines 등장하면, 모델은 문장의 토큰들을 열심히 순회하며, example-specific DRF 찾아낸다. </p>
<p>PADA가 만들어내는 Prompt는 예시와 같이 생겼다.
즉, 가장 유사하다고 여겨지는 domain name $N_i$를 만들고, 예시를 통해 얻어낸 단어들인 $R_i$를 붙인다. 
$S_i$의 예시를 그림을 통해 보면, 파란색은 restaurants, 초록색은 home-furniture domains과 연관. 
이렇게 만들어낸 프롬프트를 통해 해당 문장의 감성이 긍정인지 부정인지 classification할 수 있다. </p>
<p>이때, $N_i$와 $R_i$에 여러가지 단어들이 들어갈 수 있다는 것!</p>
<p><img src="https://i.imgur.com/SYMTTWM.png" alt="스크린샷 2022-09-15 오전 11.02.59"></p>
<p>다음과 같이 2스텝을 거친다는 것을 확인할 수 있다. 이때 모델은 T5 사용!</p>
<h3 id="drf">DRF</h3>
<p>이들은 각 도메인에 유의미한 semantinc signiture를 제공해야 한다. 만약 두 도메인이 의미적으로 비슷하다면 (restaurant, cooking) DRF도 겹치게 나와야 하는 것. 각 DRF는 해당 도메인 내에서 자주 등장해야하며, 다른 도메인에서보다 상대적으로 많이 나와야 힌다.</p>
<p>이들을 자동으로 뽑아내기 위해, Mutual Information(MI)을 채택. correlation, TR-IDF 등을 사용해보았으나 해당 방식이 가장 품질이 좋았다고 한다. 단순하게, 원하는 도메인의 레이블을 1 나머지를 0으로두고, 토큰과 레이블 간의 MI를 계산, 가장 점수가 높은 l개의 토큰을 선정하는 방식으로 후보군 셋을 마련한다. </p>
<p>이때, 다른 도메인에서도 자주 등장한 단어일 가능성을 고려해 N-gram의 count를 세서, threshold $\rho$를 지정. </p>
<p><img src="https://i.imgur.com/v3tjRhe.png" alt="스크린샷 2022-09-15 오전 11.03.12"></p>
<p>지정값에 따라 다른 양상을 확인할 수 있다. </p>
<h2 id="result">Result</h2>
<p><img src="https://i.imgur.com/abWbIqO.png" alt="스크린샷 2022-09-15 오전 11.44.59"></p>
<ul>
<li>Transformer-based Mixture of Experts (TrMoE)<ul>
<li>source domain, a separate transformer-based DistilBERT expert model
is trained on the domain’s training set, and an additional model is trained on the union of training sets from all source domains. At test time, the average of the class probabilities of these models is calculated and the highest probability class is selected. </li>
</ul>
</li>
<li>T5-MoE<ul>
<li>T5-based MoE ensemble model. </li>
</ul>
</li>
<li>T5-No-Domain-Adaptation (T5-NoDA) <ul>
<li>그냥 T5. fintuned</li>
</ul>
</li>
<li>T5-Domain-Adversarial-Network (T5-DAN)<ul>
<li>T5-NoDA + domain classifier</li>
</ul>
</li>
<li>T5-Invariant-Risk-Minimization (T5-IRM)<ul>
<li>established algorithms in the domain robustness literature</li>
</ul>
</li>
<li>Prompt-DN<ul>
<li>simplified version of our PADA
model: assigns only a domain name</li>
</ul>
</li>
<li>Prompt-RDW and Prompt-REW<ul>
<li>form prompts from Random-Domain-Words and Random-ExampleWords</li>
</ul>
</li>
<li>PADA-NP <ul>
<li>(No Prompt)</li>
</ul>
</li>
<li>PADA-NM <ul>
<li>(No Multi-task)</li>
<li>별개의 encoder</li>
</ul>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[TSDAE : Using Transformer-based Sequential Denoising Auto-Encoder for Unsupervised Sentence Embedding Learning]]></title>
            <link>https://velog.io/@tobigs-nlp/TSDAE-Using-Transformer-based-Sequential-Denoising-Auto-Encoder-for-Unsupervised-Sentence-Embedding-Learning</link>
            <guid>https://velog.io/@tobigs-nlp/TSDAE-Using-Transformer-based-Sequential-Denoising-Auto-Encoder-for-Unsupervised-Sentence-Embedding-Learning</guid>
            <pubDate>Mon, 29 Aug 2022 13:46:31 GMT</pubDate>
            <description><![CDATA[<h3 id="abstract">Abstract</h3>
<ul>
<li>사전 학습된 transformer와 Sequential Denoising Auto-Encoder를 기반으로하는 새로운 SOTA 방법을 제안<ul>
<li>in-domain supervised 방법의 93.1%까지 성능 달성</li>
</ul>
</li>
<li>TSDAE는 강한 domain adaptation이면서 MLM같은 다른 방식들 보다 뛰어난 문장 임베딩을 위한 사전 학습 방식</li>
<li>이전 연구에서 가장 큰 문제점은 좁은 평가 방식을 사용했다는 것<ul>
<li>대부분의 논문에서는 오직 STS만을 사용해 평가</li>
<li>하지만 STS는 도메인 지식이 필요하지 않음
=&gt; 제안된 방법이 다른 도메인과 태스크에 일반화할 수 있는지는 불명확!</li>
</ul>
</li>
<li>본 논문에서는 이러한 갭을 줄이기 위해 TSDAE와 비교 모델을 다양한 도메인에서 파생된 4가지 데이터셋을 사용해 평가</li>
</ul>
<h3 id="1-introduction">1 Introduction</h3>
<ul>
<li><p>Sentence embedding은 문장을 고정된 크기의 벡터로 인코딩하는 방식</p>
<ul>
<li>단, 의미적으로 유사한 문장들을 서로 가깝게 맵핑하는게 핵심!</li>
</ul>
</li>
<li><p>지금까지의 성공적인 방식들(InferSent, Universial Sentence Encoder, SBERT)은 보통 문장 임베딩 모델을 학습시키기 위해 라벨링된 데이터에 의존</p>
</li>
<li><p>이러한 한계를 극복하기 위해, 학습시 라벨링이 안된 코퍼스를 사용해 문장 임베딩을 학습하는 것을 제안</p>
</li>
<li><p>본 논문에서 제안하는 방식 : Transformer-based Sequential Denosiing Auto-Encoder(TSDAE)</p>
<ul>
<li>encoder-decoder 구조를 통해 이전 방법보다 뛰어남</li>
<li>학습시, corrupted sentence를 encode해서 고정된 크기의 벡터로 나타내고, decoder가 이러한 문장 임베딩에서 원래 문장을 reconstruct하도록 함</li>
<li>좋은 reconstruction quality를 위해서, 문장의 의미가 인코더로부터 문장 임베딩에 잘 담겨야 함</li>
<li>inference에서는 오직 encoder만들 사용해서 문장을 임베딩<ul>
<li>이전 비지도 방식의 치명적인 단점은 평가</li>
</ul>
</li>
<li>주로 STS로 평가하는데, 뒤의 장표를 보면 이 방식이 충분한 평가 방식이 아니라는 것을 알 수 있음</li>
<li>STS dataset는 도메인에 특화된 정보를 가진 문장을 포함하지 않아 해당 방식이 더 도메인 특화된 데이터에서 잘 될지는 불명확함</li>
<li>STS는 인위적인 점수 분포를 가지고 있음
=&gt; STS에 대한 성능과 다른 downstream task 성능은 상관관계가 없음
==&gt; 결론적으로 STS 점수만 보고는 다른 task에서 얼마나 잘 될지 모름!!<ul>
<li>이러한 문제를 해결하기 위해 TSDAE와 이전 비지도 문장 임베딩 방식들을 3가지 다양한 태스크(Information Retrieval, Re-Ranking과 Paraphrase Identification)에 비교</li>
<li>TSDAE의 경우 다른 SOTA 비지도 방식보다 6.4점정도 뛰어남</li>
<li>TSDAE는 같은 기준 혹은 USE-large와 같은 지도 모델보다도 뛰어남</li>
<li>TSDAE는 domain adaptation에서, 그리고 사전 학습 방식에서도 뛰어남</li>
</ul>
</li>
</ul>
<p>** Contribution**</p>
<ul>
<li>기존의 SOTA방식보다 6.4점 정도 뛰어난 성능을 보이는 TSDAE를 제안</li>
<li>이를 입증하기 위해 다양한 도메인에 대한 여러 태스크에 대해 비지도 문장 임베딩 방식을 비교</li>
<li>TSDAE가 사전 학습과 domain adaptation방식으로 MLM을 포함한 다른 방식들보다 더 뛰어남</li>
</ul>
</li>
</ul>
<h3 id="2-related-work">2 Related Work</h3>
<p>Supervised sentence embeddings</p>
<ul>
<li>문장간의 관계에 대한 정보를 제공하는 라벨을 활용</li>
<li>문장 임베딩은 문장 쌍의 유사도를 측정하는데에 사용되기 때문에, 보통 문장 간의 유사도를 라벨링</li>
<li>많은 연구에서 NLI(e.g. QA, conversational context dataset)가 문장 임베딩을 학습하는데에 성공적으로 사용될 수 있음을 밝힘</li>
<li>대표적으로 문장 임베딩 분야에서 사전 학습된 transforemr를 활용해 높은 성능을 달성한 모델이 Sentence-BERT</li>
</ul>
<p>Unsupervised sentence embeddings</p>
<ul>
<li>학습 동안 unlabeled corpus만 활용</li>
<li>최근에 다양한 training objectives와 pre-trained Transformer를 결합한 방식이 STS에서 SOTA를 달성<ul>
<li>Contrastive Tension(CT) : 단순히 동일한 문장을 positive example, 다른 문장을 negative example로 보고, 독립적인 2개의 encoder를 학습</li>
<li>BERT-flow : Gaussian쪽으로 임베딩 분포를 debiasing하면서 모델을 학습</li>
<li>SimCSE : contrastive learning을 기반으로 하고, 동일한 문장에 다양한 dropout mask를 적용한 것을 positive exmaple로 봄
==&gt; 이러한 모든 방식은 독립적인 문장을 요구</li>
<li>DeCLUTR : 문장 수준의 context를 활용하고 학습 시 긴 문서(적어도 2048 token)를 요구
==&gt; 하지만 본 논문에서는 학습시 하나의 문장을 사용하는 방법만을 고려</li>
</ul>
</li>
<li>대부분의 논문에서 STS로만 비교<ul>
<li>비지도 방식이 STS에 대해 특정해 학습되지 않았어도 바로 사용할 수 있는 지도 사전 학습 모델보다 성능이 훨씬 나쁨</li>
<li>STS에 대한 좋은 성능이 downstream task에 대한 성능을 보장하지 않음</li>
</ul>
</li>
</ul>
<h3 id="3-sequential-denoising-auto-encoder">3 Sequential Denoising Auto-Encoder</h3>
<ul>
<li>Sequential Denoising Auto-Encoder(SDAE)는 머신러닝에서 유명한 비지도 방식이지만, 이를 문장 임베딩 학습을 위해 사전 학습된  transformer와 어떻게 결합시킬지는 명확하지 않음</li>
<li>본 논문에서 처음으로 TSDAE의 training objective에 대해 소개하고, TSDAE의 최적 configuration을 제공</li>
</ul>
<h4 id="31-training-objective">3.1 Training Objective</h4>
<ul>
<li><p>TSDAE는 입력 문장에 특정 유형의 노이즈(e.g. deleting or swapping words)를 더해서 손상된 문장을 고정된 크기의 문장 임베딩을 학습</p>
</li>
<li><p>training objective는 다음과 같음
$$
J_{SDAE}(\theta) = \mathbb{E_{x \sim}}<em>D [log P</em>{\theta}(x|\widetilde{x})] 
= \mathbb{E_{x \sim}}<em>D [\sum</em>{t=1}^llog P_{\theta}(x_t|\widetilde{x})] 
= \mathbb{E_{x \sim}}<em>D [\sum</em>{t=1}^llog \frac{exp(h^T_t e_t)}{\sum_{i=1}^{N} exp(h^T_t e_i)}]
$$</p>
<ul>
<li>D : training corpus</li>
<li>$x=x_1x_2...x_l$ : l개의 token을 갖는 입력 문장</li>
<li>$\widetilde{x}$ : 손상된 문장</li>
<li>$e_t$ : $x_t$의 문장 임베딩</li>
<li>$N$ : size of vocabulary</li>
<li>$h_t$ : hidden state at decoding step $t$</li>
</ul>
</li>
<li><p>원래 transforemr encoder-decoder setup과의 큰 차이는 decoder에서 이용 가능한 정보!</p>
</li>
<li><p>우리의 decoder는 encoder에서 만들어진 오직 제한된 크기의 문장 표현만(e.g. [CLS] token) 사용해 decode함
=&gt; encoder에서 모든 contextualized word embedding을 사용하지 않음
=&gt; bottleneck를 야기시켜 encoder가 유의미한 문장 표현을 만들도록 함</p>
</li>
</ul>
<h4 id="32-tsdae">3.2 TSDAE</h4>
<ul>
<li><p>TSDAE의 모델 구조는 문장 임베딩만을 cross-attention의 key와 value로 사용</p>
</li>
<li><p>modified cross-attention을 식으로 나타내면 다음과 같다
$$
H^{(k)} = Attention(H^{(k-1)},[S^T],[S^T])
Attention(Q,K,V) = softmax(\frac{QK^T}{\sqrt{d}})V
$$</p>
<ul>
<li>$H^{(k)} \in \mathbb{R}^{t \times d}$ : $k$번째 레이어에서 $t$ decoding step안의 decoder hidden state, $d$는 sentence embedding의 크기</li>
<li>$[S^T] \in \mathbb{R}^{1 \times d}$ : sentence embedding vector를 포함하는 one-row matrix</li>
<li>$Q,K,V$ : 각각 query, key, value를 나타냄</li>
</ul>
</li>
<li><p>STS에 대해 다양한 실험 결과, 최적의 조합은 다음과 같음</p>
<ul>
<li>deletion을 input noise로, deletion ratio를 0.6으로 설정</li>
<li>[CLS] token의 결과를 고정된 크기의 문장 표현으로 사용</li>
<li>학습 시 encoder와 decoder 파라미터를 묶음</li>
<li>noise type과 noise ratio에 따른 성능 차이
<img src="https://velog.velcdn.com/images/lm_minjin/post/42b28fc3-5b0c-4489-9a11-cd8e49b16c6f/image.png" alt=""></li>
<li>mean pooling, max, cls에 따른 성능 차이
<img src="https://velog.velcdn.com/images/lm_minjin/post/17df90f2-6ff6-479e-b956-8543cc7d7d07/image.png" alt=""></li>
</ul>
</li>
</ul>
<h3 id="4-evalution">4 Evalution</h3>
<ul>
<li><p>STS dataset에 대한 평가 만드로는 다른 task에 대한 성능을 보장할 수 없음</p>
<ul>
<li>STS는 domain 특화 정보를 요구하지 X</li>
<li>유사한 쌍, 유사하지 않은 쌍에 대한 분포가 인위적
(현실에서는 dissimilar한 경우가 훨씬 더 많음)</li>
<li>STS에서는 dissimilar와 similar에 대한 rank를 둘다 잘해야 성능이 높지만, 현실에서는 similar에 대한 rank가 더 중요</li>
</ul>
</li>
<li><p>또한, 비지도 학습을 평가하는 경우 몇몇 라벨링된 데이터가 존재하는 것을 무시</p>
<ul>
<li>많은 경우에서, 특정한 task 혹은 유사한 task에 라벨링된 데이터가 존재함
==&gt; 좋은 방식은 몇몇 라벨링된 데이터가 이용 가능할 때도 성능이 나와야 한다.</li>
</ul>
</li>
<li><p>다음과 같은 3가지 setup에서 비지도 문장 임베딩을 평가</p>
<ul>
<li>Unsupervised Learning : target task에서 라벨링 되지 않은 문장들을 가지고 있다 가정하고, 이러한 문장들을 기반으로 우리의 방법을 적용<ul>
<li>Domain Adaptation : NLI와 STS에서 라벨링된 문장과 target task에서 라벨링되지 않은 문장을 가지고 있다고 가정하고 2가지 방법으로 학습
1) NLI+STS data로 학습한 후 target domain에 대해 학습
2) target domain에 대해 학습한 후 NLI+STS data로 학습</li>
</ul>
</li>
<li>Pre-Training : target task에 대해 라벨링되지 않은 대량의 코퍼스와 target task에 대해 소수의 라벨링된 문장이 있다고 가정</li>
</ul>
</li>
</ul>
<h4 id="41-datasets">4.1 Datasets</h4>
<p>다양한 도메인에서 다양한 task(Re-Ranking, Information Retrieval, Paraphrase Identification)에 대한 3가지 setting을 평가</p>
<ul>
<li>AskUbuntu(RR task)<ul>
<li>기술 포럼 AskUbuntu에서 user post 모음</li>
<li>모델은 20개의 후보 질문을 주어지는 input post와 유사한 순으로 다시 ranking해야함</li>
<li>평가는 Mean Average Precision(MAP) 사용</li>
</ul>
</li>
<li>CQADupStack(IR task)<ul>
<li>Stack-Exchange에서 다양한 토픽에 대한 forum post로 구성된 question retrieval dataset</li>
<li>세부적으로 12개의 포럼(수학, 영어, 안드로이드, 프로그래머, 통계 등)을 가짐</li>
<li>모델은 큰 후보풀에서 중복되는 질문을 찾아내야함</li>
<li>평가 지표는 MAP@100</li>
<li>모든 포럼에 대해 하나의 모델을 학습</li>
</ul>
</li>
<li>TwitterPara(PI task)<ul>
<li>2개의 유사한 데이터셋으로 구성됨 : Twitter Paraphrase Corpus, Twitter News URL Corpus</li>
<li>데이터셋은 트윗 쌍으로 구성되어 있고, 그 문장쌍이 paraphrase되었는지에 대한 점수가 라벨링되어 있음</li>
<li>평가 지표는 모델이 계산한 유사도 점수와 정답 confidence socre에 대해 Average Precision(AP)</li>
<li>SciDocs(RR task) <ul>
<li>scientific 논문에 대한 여러 task로 구성된 벤치마크</li>
<li>우리 실험에서는 Cite에 관한 task를 사용<ul>
<li>즉, 주어진 논문 제목에 대해 자주 co-cited/-read/-viewed되는 논문들을 찾는것</li>
</ul>
</li>
<li>논문 제목 하나가 query로 주어지면, 모델은 논문 제목 후보 30개 중에서 5개의 관련 논문 제목을 식별</li>
<li>negative example는 랜덤하게 선택됨</li>
<li>평가 지표는 MAP</li>
</ul>
</li>
</ul>
</li>
</ul>
<p>평가에서, 문장들은 우선 고정된 크기의 벡터로 인코딩되고, 문장 유사도를 계산하기위해 코사인 유사도 사용</p>
<p>또한, 세부 task로 나뉘는 데이터셋의 경우 각 세부 task에 대한 점수를 평균내 final score로 사용</p>
<h3 id="5-experiments">5 Experiments</h3>
<ul>
<li>TSDAE를 다른 비지도 모델, out-of-the box supervised pre-trained model(라벨링된 데이터로 학습한 후에 domain 특화된 데이터셋으로 평가)과 비교</li>
<li>비교군으로는 CT, SimCSE, BERT-flow 사용(각 논문에서 제안된 하이퍼파라미터 사용)</li>
<li>BERT-base-uncased를 base Transformer model로 사용</li>
<li>랜덤성을 줄이기 위해 5개의 random seed에 대해 평균냄</li>
</ul>
<h4 id="51-baseline-methods">5.1 Baseline Methods</h4>
<ul>
<li>Glove : 일반적인 도메인에서 큰 코퍼스에 대해 학습된 단어 임베딩을 평균내서 문장 임베딩으로 사용</li>
<li>Sent2Vec : bag-of-word모델이지만 in-domain unlabeled corpus에 학습됨</li>
<li>BERT-based-uncased with mean looling</li>
<li>Universial Sentence Embedding(USE) : NLI와 community question answering을 포함한 여러 지도 데이터셋에 대해 학습됨</li>
<li>SBERT-base-nil-v2 : SNLI+MultiNLI data에 대해 Nultiple-Negative Ranking Loss(MNRL)을 사용해서 학습됨</li>
<li>SBERT-base-stsb-v2 : STS bench-mark train set에 대해 MSE로 학습됨</li>
<li>BM25 : Elasticsearch를 사용</li>
</ul>
<p>비지도 방법의 상대적인 성능을 더 잘 이해하기 위해, SBERT모델을 in-domain supervised maner로 학습시켜서 이 점수를 upper bound로 봄</p>
<p>AskUbuntu, CQADupStack, SciDocs에 대해서는 상대적인 문장 비교가 라벨링되어 있으므로 in-domain SBERT모델을 MNRL로 학습</p>
<blockquote>
<p><strong>MNRL는 in-batch negatives에서 cross-entropy loss</strong>
: 연관 있는 문장 쌍의 배치 ${x^{(i)},y^{(i)}}^{M}<em>{i=1}$에서 MNRL는 라벨링된 문장을 postivie로, 다른 배치안의 조합을 negative로 봄
$$
J</em>{MNRL}(\theta) = \frac{1}{M}\sum^{M}<em>{i=1} log \frac{exp \sigma(f</em>{\theta}(x^{(i)}),f_{\theta}(y^{(i)}))}{\sum^{M}<em>{j=1}exp \sigma(f</em>{\theta}(x^{(i)}),f_{\theta}(y^{(j)}))}
$$</p>
<ul>
<li>$\sigma$ : 벡터들에 대한 특정 유사도 함수</li>
</ul>
</blockquote>
<ul>
<li>$f_{\theta}$ : 문장을 임베딩하는 문장 인코더
ex) TwitterPara에서는 관련도 점수가 라벨링되고, in-domain 모델 학습 시 MSE loss를 사용</li>
</ul>
<h4 id="52-mlm">5.2 MLM</h4>
<ul>
<li>Masked-Language-Model(MLM)은 BERT에서 소개된 fill-in-the-blank task</li>
<li>입력값을 마스킹하고 tarsforemr가 마스킹된 단어를 찾도록 함</li>
<li>문장 임베딩을 계산하기 위해, output token embedding의 mean-pooling을 사용</li>
</ul>
<h4 id="53-contrastive-tensionct">5.3 Contrastive Tension(CT)</h4>
<ul>
<li><p>CT는 contrastive-learning fashion에서 사전학습된 Transformer를 파인튜닝</p>
</li>
<li><p>각 문장에 대해서, 같은 문장을 관련 문장으로, K개의 랜덤 문장을 샘플링해서 관련 없는 문장으로 보고 binary cross-entropy를 구축</p>
</li>
<li><p>학습 과정을 안정화하기 위해, 각 문장 쌍 $(a,b)$에 대해, CT는 같은 초기값에서 시작한 두 개의 독립적인 encoder($f_{\theta_1}, f_{\theta_2}$)를 사용</p>
</li>
<li><p>이를 수식으로 나타내면 다음과 같음
$$
J_{CT}(\theta_1, \theta_2) = \mathbb{E}<em>{(a,b) \sim D}[ylog\sigma(f</em>{\theta_1}(a)^Tf_{\theta_2}(b))+(1-y)log(1-\sigma(f_{\theta_1}(a)^Tf_{\theta_2}(b)))]
$$</p>
</li>
<li><p>여기서 $y \in {0,1}$는 문장 a가 b와 동일한지를 나타내고, $\sigma$는 Logistic function을 나타냄</p>
</li>
<li><p>간단한 수식에도 불구하고, CT는 STS에서 SOTA 비지도 성능을 달성</p>
</li>
</ul>
<h4 id="54-simcse">5.4 SimCSE</h4>
<ul>
<li>CT와 유사하게, SimCSE는 같은 문장을 postivie examples로 봄</li>
<li>주요한 차이는 SimCSE는 다양한 dropout mask를 샘플링해서 embedding-level positive pair를 생성하고, in-batch negatives를 사용</li>
<li>이와 같이, learning objective는 동일하지만, encoder를 공유하고, MNRL-loss를 사용</li>
</ul>
<h4 id="55-bert-flow">5.5 BERT-flow</h4>
<ul>
<li><p>사전학습된 transformer의 파라미터를 파인튜닝하는 것 대신, BERT-flow는 distribution debiasing를 통해 이러한 사전 학습된 모델에 의해 인코딩된 의미 정보를 완전히 활용하는 것을 목표로 함</p>
</li>
<li><p>BERT-flow의 논문에서는 BERT 단어 임베딩이 단어 빈도수와 높은 연관성이 있다고 주장하고, 이는 차례로 MLM을 통해 hidden state에 영향을 끼침</p>
</li>
<li><p>결국, 이러한 hidden state에 대한 pooling으로 생성된 문장 임베딩을 편향될 수 밖에 없음
==&gt; 이를 해결하기 위해, BERT-flow는 편향된 문장 임베딩을trainable flow network $f_{\phi}$에 넣고, BERT model의 파라미터는 유지한 채로 표준 정규 분포에 fiting해 debiasing</p>
</li>
<li><p>training objective는 다음과 같다
$$
J_{BERT-flow}(\phi) = \mathbb{E}_{s \sim D}[log p\mathcal{U}] = \mathbb{E}_u[logp\mathcal{z}(f^{-1}_\phi(u))|det \frac{\partial f^{-1}_\phi(u)}{\partial u}]
$$</p>
<ul>
<li><p>u : biased embedding of sentence x</p>
</li>
<li><p>$z = f^{-1}_\phi(u)$ : deviased sentence embedding with follows a standard Gaussian distribution</p>
</li>
<li><p>BERT-flow는 transformer의 파라미터를 업데이트하지 않으므로, 본 논문에서는 BERT-flow에 대해 unsupervised learning과 domain adaptation NLI+STS -&gt; target task에 대한 점수만 보고</p>
</li>
<li><p>하지만, 우리가 사용한 다른 평가 setup과는 적합하지 않아 실험하지 않음</p>
</li>
</ul>
</li>
</ul>
<h3 id="6-result">6 Result</h3>
<p><img src="https://velog.velcdn.com/images/lm_minjin/post/223c48f5-38e0-4bb9-b4a8-eb10c1591c67/image.png" alt=""></p>
<p><strong>Unsupervised learning</strong></p>
<ul>
<li>TSDAE가 이전 최고 방법(CT)보다 최대 6.4점, 평균적으로 2.6점 높음</li>
<li>MLM방식이 STS에서는 성능이 안좋지만, 다른 최근 방식(CT, SimCSE, BERT-flow)에서는 2번째로 좋음</li>
<li>TSDAE와 MLM모다 input에서 단어를 제거해서 네트워크가 robust embedding을 만들도록 함</li>
<li>반대로, CT와 SimCSE의 input sentence는 수정되지 않았기 때문에, 덜 stable embedding한 결과를 냄</li>
<li>또한, 본 실험에서 out-of-the-box pretrained models(SBERT-base-nli-stsb-v2와 USE-large)의 경우 domain-specific fine-tuning없이 최근에 제안된 비지도 학습 방법을 뛰어 넘는 좋은 성능을 보임</li>
</ul>
<p><strong>Domain Adaptation</strong></p>
<ul>
<li>모든 비지도 방식에 대해서, target domain에 대해 먼저 학습하고, 이후에 라벨링된 NLI+STS를 사용해서 학습했을 때 더 좋은 결과를 냄</li>
<li>모든 방식에 대해, target domain에 대해서만 학습했을 때보다 더 높은 성능을 보임</li>
<li>평균적으로, TSDAE에선 1.3점 향상, MLM에선 3점 향상, CT에선 0.6점 향상, SimCSE에선 1.8점 향상</li>
<li>CT와 SimCSE는 이 환경에서는 out-of-the-box model SBERT-base-nli-stsb-v2보다 약간 높은 성능을 기록</li>
</ul>
<p><strong>Pre-training</strong></p>
<ul>
<li><p>평가된 방식의 사전 학습 성능을 비교</p>
</li>
<li><p>이용가능한 모든 unlabled sentence에 대해 사전학습을 하고,다양한 unlabseled training set size에 따른 in-domain supervised training성능을 비교</p>
</li>
<li><p>평가에 기록된 점수는 development set 기준
<img src="https://velog.velcdn.com/images/lm_minjin/post/a4db06f1-929d-467a-9083-2946ab5434d3/image.png" alt=""></p>
</li>
<li><p>TSDAE가 MLM보다 AskUbuntu를 제외한 모든 데이터셋에서 훨씬 뛰어남</p>
</li>
<li><p>라벨링된 학습 데이터의 크기가 커져도 TSDAE가 일관되게 뛰어남</p>
</li>
<li><p>결론적으로, TSDAE가 pre-training방법으로 뛰어나고, 더 큰 학습 데이터셋에서도 성능이 크게 향상됨</p>
</li>
<li><p>CT와 SimCSE의 경우 pre-training에서 뛰어나지 않음. </p>
</li>
</ul>
<h4 id="61-result-on-sts-data">6.1 Result on STS data</h4>
<ul>
<li><p>Wikipedia에서 문장을 샘플링해서 BERT-base-uncased모델을 다양한 비지도 학습 방법을 사용해 학습</p>
</li>
<li><p>아래 표를 보면 다양한 domain specific dataset에 대한 평균 성능과 STS test set에 대한 성능이 나타나 있음
<img src="https://velog.velcdn.com/images/lm_minjin/post/62a079da-51fe-43e0-98b1-d414daee0be1/image.png" alt="">
<img src="https://velog.velcdn.com/images/lm_minjin/post/e958c4a6-e9f3-4b5b-aff0-94d9121af880/image.png" alt=""></p>
</li>
<li><p>STS test set에 대한 성능과 domain specific dataset에 대한 성능이 일관되지 않음을 알 수 있음</p>
<ul>
<li>STS에 대해선 CT와 SimCSE가 뛰어나지만, domain-specific real-world task에서는 TSDAE와 MLM이 뛰어남</li>
</ul>
</li>
<li><p>결론적으로, STS data에 대한 높은 성능이 domain-specific task에 대한 좋은 성능을 나타내진 않음</p>
</li>
</ul>
<h3 id="7-analysis">7 Analysis</h3>
<ul>
<li>얼마나 많은 학습 문장이 필요한지, 관련 있는 context words가 인식하는지를 분석</li>
<li>TwitterPara를 제외한 모든 데이터셋에 대해서, development set을 바탕으로 분석</li>
<li>TwitterPara의 경우, test set을 사용(공식적으로 dev set이 나뉘어 있지 않음)</li>
</ul>
<h4 id="71-influence-of-corpus-size">7.1 Influence of Corpus Size</h4>
<ul>
<li>특정 도메인에서, 충분한 수의 문장을 얻는 것이 어려울 수 있음</li>
<li>그러므로, 적은 데이터로도 좋은 문장 임베딩을 만드는 것이 중요</li>
<li>이를 위해, 다양한 크기의 corpus(128~65536문장)에 대해 비지도 방식을 학습</li>
<li>각 실험에서 bert-base-uncased모델을 10epoch, 100 training setp까지 학습</li>
<li>모델은 각 epcoh의 끝에서 평가되고, development set에 대해 가장 좋은 점수가 기록됨
<img src="https://velog.velcdn.com/images/lm_minjin/post/dd9cef70-0d6a-47e1-b1e2-69c661386c5c/image.png" alt=""></li>
<li>TSDAE가 이전 비지도 방식보다 1000개의 unlabeled sentence만으로도 거의 뛰어남</li>
<li>10K의 unlabled sentences에서, downstream성능은 일반적으로 모든 비지도 방식에 대해 수렴</li>
<li>CQADupStack에 대해서만 데이터가 많으면 많을수록 도움이 됨<ul>
<li>CQADupStack의 경우 다양한 주제에 대한 글로 구성되어 있으므로 unlabled data가 더 필요한 것으로 여겨짐</li>
</ul>
</li>
<li>특정 도메인으로 사전 학습된 트랜스포머를 파인튜닝 하려면 비교적으로 10K 문장의 unlabeled data가 필요한 것으로 보임</li>
</ul>
<h4 id="72-relevant-content-words">7.2 Relevant Content Words</h4>
<ul>
<li><p>모든 종류의 단어가 문장의 의미를 결정하는데 큰 역할을 하지 않음</p>
<ul>
<li>nouns가 문장에서 가장 중요한 content words인 경우가 있음</li>
<li>반대로 preposition의 경우 덜 중요, context가 크게 변하지 않으면서 문장에서 빠지거나 더해질 수 있음</li>
</ul>
</li>
<li><p>이번 세션에서는 어떤 단어 종류가 다양한 문장 임베딩 방법에서 가장 relevant한지, 즉, 어떤 단어가 문장 쌍을 유사하다고 판단할 때 큰 영향을 끼치는지에 대해 분석한다</p>
</li>
<li><p>이를 위해, 관련 있다고 라벨링 된 문장 쌍 $(a,b)$을 선택해 (a,b)에 대한 코사인 유사도 점수를 가장 크게 감소시키는 단어를 찾음</p>
</li>
</ul>
<p>$$
\hat{w} = argmax_{w} (cossim(a,b)-min(cossim(a \backslash w,b), cossim(a,b \backslash w)))
$$
(즉, w가 없으면 유사도가 크게 떨어지는 w를 찾음)</p>
<ul>
<li><p>이후, $\hat{w}$에 대한 POS tag를 기록(CoreNLP사용)하고, 모든 문장 쌍에 대한 POS tag의 분포를 계산</p>
</li>
<li><p>아래 결과를 보면, 4개의 데이터셋에 대해 평균한 값이 나타나 있음</p>
</li>
<li><p>POS tagging에 대한 in-domain supervised model(SBERT-sup)와 prior distribution를 비교해봤을 때, NN이 문장에서 가장 관련 있는 content word라는 것을 알 수 있음.</p>
</li>
<li><p>반면에, Preposition(IN)과 determiniator(DT)와 같은 function word는 모델 예측에서 가장 적은 영향력을 끼친다는 것을 알 수 있음</p>
</li>
<li><p>학습 방식마다 POS tagging 분포 차이는 거의 없음</p>
<ul>
<li>즉, 비지도 학습 방식의 경우, 라벨링된 데이터가 없어도 문장에서 어떤 종류의 단어가 중요한지 학습할 수 있다는 것</li>
<li>단점으로는, 비지도 방식은 명사가 가장 중요하지 않은 task에서는 문제가 될 수 있음
<img src="https://velog.velcdn.com/images/lm_minjin/post/fd3f8a30-5e5c-41bd-914f-25e3bcd5e91c/image.png" alt=""></li>
</ul>
</li>
</ul>
<h3 id="8-discussion">8 Discussion</h3>
<ul>
<li>본 논문에서는 사전 학습된 transformer encoder를 가지고 실험</li>
<li>단일 encoder외에, BART, T5와 같은 사전학습된  encoder-decoder 모델도 존재</li>
<li>그러나, 이미 일반적인 도메인에 대해 다양한 auto-encoder loss로 학습되었기 때문에, reconstruction behavior에 overfitting될거라 생각</li>
<li>이를 증명하기 위해, BART-base와 T5-base model을 TSDAE로 4가지 domain specific dataset에 대해 학습
<img src="https://velog.velcdn.com/images/lm_minjin/post/4d91ae4b-e5d0-45d5-8b23-a54cb318f2ea/image.png" alt=""></li>
<li>T5와 BART 모두 Scratch보다 평균적으로 낮은 성능을 보임</li>
<li>TSDAE는 single encoder checkpoint에서 시작하는 것이 overffiting을 피하면서 사전 학습된 정보를 활용할 수 있어 더 적합하다는 결론</li>
</ul>
<h3 id="9-conclusion">9 Conclusion</h3>
<ul>
<li>사전 학습된 트랜스포머에 기반한 새로운 비지도 문장 임베딩 학습 방법인 TSDAE(Transformers and sequential denoising auto-encoder)를 제안</li>
<li>TSDAE와 최근의 다양한 SOTA비지도 학습 방법을 4개의 다양한 도메인, 다양한 task를 가진 데이터셋으로 3가지 다양한 환경에서 평가 : unsupervised learning, domain adaptation, pre-training </li>
<li>TSDAE가 다양한 환경, 데이터셋에서 다른 방법보다 뛰어남</li>
<li>현재 비지도 문장 임베딩 학습 방식을 평가하는 방법이(STS 점수만 주로 활용) 충분하지 않음을 보임<ul>
<li>STS에 대한 성능과 다른 특정 task에서의 성능은 상관관계가 없음</li>
</ul>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[Learning to Repair- Repairing model output errors after deployment using a dynamic memory of feedback]]></title>
            <link>https://velog.io/@tobigs-nlp/Learning-to-Repair-Repairing-model-output-errors-after-deployment-using-a-dynamic-memory-of-feedback</link>
            <guid>https://velog.io/@tobigs-nlp/Learning-to-Repair-Repairing-model-output-errors-after-deployment-using-a-dynamic-memory-of-feedback</guid>
            <pubDate>Wed, 10 Aug 2022 05:31:49 GMT</pubDate>
            <description><![CDATA[<h2 id="abstract">Abstract</h2>
<hr>
<p>LLM이 등장함에 따라 많은 task들의 수준 높은 처리가 가능해졌지만, 여전히 LLM은 치명적인 약점들에 노출되어 있습니다. (Inconsistency, Factual Error, Bias answer, ...)</p>
<p>하지만 LLM자체를 재훈련시키는 것은 2가지 측면에서 문제점이 있습니다.</p>
<ol>
<li>재훈련 자체가 엄청난 비용을 야기함</li>
<li>새로운 데이터가 모델의 가중치를 어떻게 변경할지를 모름</li>
</ol>
<p>따라서 해당 논문에서는 freeze된 LLM이 틀린 정답을 내놓을 경우, 사용자가 틀린 정답에 대한 feedback을 주면 feedback과 틀린 정답을 활용해 원래 정답을 생성하려면 어떤 action = edit step이 필요한지를 예측하는 프레임워크를 제시합니다. </p>
<p>이렇게 적용된 feedback은 Memory에 write됩니다.</p>
<p>이러한 프레임워크가 가지는 큰 장점은 향후 유사한 edit이 필요한 경우, 과거 Memory에 저장한 유사한 feedback을 활용해 edit을 생성할 수 있어 효율적인 적용이 가능하다는 것입니다.</p>
<p>자세한 내용은 아래에서 소개드리도록 하겠습니다.</p>
<hr>
<h2 id="1-introduction">1. Introduction</h2>
<p>Abstract에서 언급한 것처럼 LM이 생성한 mistake를 수정하기 위해 모델을 재훈련하는 작업은 상당한 수준의 비용과 불확실성을 요구합니다.</p>
<p>따라서 본 논문에서는 모델이 내놓은 틀린 ouput에 대해서 corrective한 feedback을 주어 output을 교정하는 프레임워크를 제시합니다.</p>
<p>이 프레임워크를 위해서는 아래의 구성요소와 가정이 필요합니다.</p>
<ul>
<li><p>구성요소</p>
<ul>
<li><p>Growing, Dynamic Memory : 모델이 이전에 생성한 틀린 output들에 대해서 발생한 feedback을 저장해놓는 database. 향후 유사한 erroneous output에 대해서 비슷한 feedback을 활용하면 적절한 edit action을 inference할 수 있음</p>
</li>
<li><p>Corrector : erroneous output과 자연어 feedback을 입력으로 받아서 edit action을 생성해내는 모델</p>
</li>
</ul>
</li>
</ul>
<ul>
<li>가정<ul>
<li>model의 output이 repairable해야 한다. 즉 특정구조(ex. 그래프)를 가져야 명확하게 정의된 action으로 erroneous output을 edit할 수 있기 때문에.</li>
<li>비슷한 erroneous output들에 대해서는 유사한 feedback이 적용될 수 있어야 한다.</li>
</ul>
</li>
</ul>
<p>이러한 구성요소와 가정을 만족시키기 위해 저자들은 <em>scipt generation</em>이라는 task에 대해서 위의 프레임 워크를 제시합니다.</p>
<p><img src="https://velog.velcdn.com/images/tobigs-nlp/post/fdf32877-ed65-497b-91e4-d243d18a350f/image.png" alt=""></p>
<p><em>scipt generation*은 위의 그림에서 보여주는 것과 같이 *&#39;goal: see an aligator&#39;</em> 라는 prefix와 goal의 내용이 주어졌을 때, 이 goal을 위해 수행되어야할 일련의 action들을 생성하는 task입니다.</p>
<p>본 논문에서는 위의 task를 처리할 수 있는 proScript라는 모델을 활용합니다. 위의 모델은 <em>&#39;goal: see an aligator&#39;</em> 라는 입력을 받으면 goal을 달성하기 위해 수행해야하는 <em>&#39;turn on laptop -&gt; locate animal places online -&gt; .... - &gt; see an aligator&#39;</em> 와 같은 일련의 동작들을 생성합니다.</p>
<p>하지만 위의 그림에서 모델이 생성한 답은 <em>&#39;drive to zoo&#39;와 &#39;get in car&#39;</em> 가 어떤 순서로 발생해도 상관이 없다는 error를 내포합니다.</p>
<p>이 error를 보고 user가 <em>get in a car before driving&#39;</em> 이라는 feedback을 주면, Corrector Model <strong>G</strong>는 erroneous script와 feedback을 가지고 <em>&#39;add partial order type &#39;&lt;get in a car, drive to zoo&gt;&#39; &#39;</em> 라는 graph edit operation을 생성해야 합니다.</p>
<p>그리고 <em>get in a car before driving&#39;</em> 라는 feedback을 Memory에 저장해서 향후 비슷한 erroneous output을 edit할 때 retrieve하도록 합니다.</p>
<p>저자들은 자신들이 제안한 프레임워크를 FBNET이라고 명명하고, 아래 2가지 측면에서 FBNET을 평가합니다.</p>
<ol>
<li>FBNET이 자연어 feedback을 정확히 해석해 올바른 edit을 생성할 수 있는가?</li>
<li>FBNET이 prior mitake를 통해 unseen한 erroneous output을 올바르게 edit할 수 있는가?</li>
</ol>
<p>실험결과 질문 1에서는 feedback을 사용하지 않는 경우 댑 3%의 성능 향상을 얻었고 질문 2에 대해서는 7%의 성능 향상을 얻었다고 합니다.</p>
<hr>
<h2 id="2-related-work">2. Related Work</h2>
<hr>
<h2 id="3-fbnet">3. FBNET</h2>
<h3 id="31-overview-of-the-architecture">3.1 Overview of the Architecture</h3>
<p><img src="https://velog.velcdn.com/images/tobigs-nlp/post/f1f7a560-9a38-46ca-81b4-95700655f538/image.jpeg" alt=""></p>
<p>FBNET은 model <strong>B</strong>가 베포된 환경에서 (model B is freezed) erroneous output <em>$x$<em>가 주어질 경우 user가 natural language feedback *$fb$</em>을 주면 corrector model <strong>G</strong> 는 *$x$</em> 와 <em>$fb$*를 입력으로 받아 edit action *$y^{e}$</em> 를 생성해 erroneous output <em>$x$</em>를 correct output <em>$y$</em>로 수정합니다.</p>
<p>이때 매번 새로운 natural language feedback <em>$fb$</em> 는 Memory <em>$M$</em> 에 <em>$key x_{i}, - value fb_{i} $</em> 의 형태로 dynamic하게 저장됩니다.</p>
<p>이후에 새로운 query <em>$x_{j}$</em> 가 들어올 경우 FBNET은 lookup function $\Omega(x,M)$을 활용해 유사한 feedback을 retreive하여 edit action <em>$y^{e}$</em> 을 생성하고 erroneous output을 교정합니다.</p>
<h3 id="32-assumptions">3.2 Assumptions</h3>
<p>FBNET 실험을 위해서는 2가지 가정이 필요합니다.</p>
<ol>
<li><p>model <strong>B</strong>의 output은 <strong>repairable</strong>하다. 즉, model의 output은 구조적으로는 옮으나 (ex. 그래프 구조를 갖추고 있긴한데) 내용적으로는 틀렸다. (잘못된 노드가 있다던가, edge가 틀림)</p>
</li>
<li><p>feedback은 <strong>reusable</strong>해야 한다. retreival funciton $\Omega$는 유사한 error를 가지고 있는 $x_{i}, x_{j} &gt; e_{i}, e_{j}$ 에 대해서는 상호 작용할 수 있는 feedback  $fb_{i}, fb_{j}$가 retreive되어야 한다.</p>
</li>
</ol>
<h3 id="33-memory-m-and-omega">3.3 Memory M and Omega</h3>
<p>natural language feedback <em>$fb$</em> 은 Memory <em>$M$</em> 에 저장되며, 새로운 query에 대한 feedback은 error의 유사도를 가지고 feedback을 반환합니다.</p>
<h3 id="34-corrector-model-g">3.4 Corrector model G</h3>
<p>Corrector model <strong>G</strong>는 2 step으로 erroneous output을 교정하도록 설계하였습니다.</p>
<ol>
<li>erroneous output <em>$x$</em> 와 <em>$fb$*를 입력으로 받아 edit action *$y^{e}$</em> 를 생성</li>
<li><em>$y^{e}$</em> 가지고 erroneous output <em>$x$</em> 를 교정해 correct output <em>$y$</em> 를 생성</li>
</ol>
<p>이렇게 2 step으로 나누어서 훈련한 이유는 edit ation을 생성하는게 erroneous output <em>$x$</em> 를 직접 수정하는 것보다 간단하고 baseline과의 용이한 비교도 가능합니다.</p>
<p>그리고 당연히 edit action <em>$y^{e}$</em> 이 정해지면 correct output <em>$y$</em> 는 deterministic하게 정의되기 때문에 사실상 상관이 없습니다.</p>
<h3 id="35-training-and-inference">3.5 Training and Inference</h3>
<p>Corrector model <strong>G</strong> 훈련을 위해서는 (<em>$x$</em>,<em>$fb$</em>,<em>$y$</em>) 의 pair가 필요하고 <em>$fb$</em> 는 <em>$x$</em> 와 <em>$y$</em> 의 차이에 의해서 정의됩니다. </p>
<p>또한 <em>$x$</em> 와 <em>$y$</em> 는 일련의 순서를 갖는 그래프이지만 언어모델로의 학습을 위해 string representation을 갖는 graph description language DOT를 활용해 작성했다고 합니다. </p>
<hr>
<h2 id="4-application-script-generaiton">4. Application: Script Generaiton</h2>
<h3 id="41-task">4.1 Task</h3>
<p><img src="https://velog.velcdn.com/images/tobigs-nlp/post/96542acd-5cbf-450a-8e2f-64f99808d5f9/image.jpeg" alt=""></p>
<p>이전에 설명드린 것처럼 scipt description은 <em>bake a cake</em> 라는 Input을 가지고 이를 수행하기 위해 아래의 essential 한 event인 node와 event 발생 순서인 edge를 갖는 graph를 생성하는 문제입니다. </p>
<p>저자들은 위의 데이터셋에 T5-XXL로 훈련시킨 $PROSCRIPT_{gen}$ 이라는 모델을 활용했으며, 이 모델은 output을 graph를 string format인 DOT format으로 생성합니다.</p>
<p>이 실험에서는 edit이 많이 필요하지 않는 output들에 대해서 FBNET을 훈련시켰다고 합니다.</p>
<h3 id="42-feedback-data-collection">4.2 Feedback Data Collection</h3>
<p><img src="https://velog.velcdn.com/images/tobigs-nlp/post/a57894ec-50ec-4232-9eb8-4b49b580687c/image.jpeg" alt=""></p>
<p>$PROSCRIPT_{gen}$이 생성한 틀린 정답(좌)과 실제 gold label(우)를 활용해 위의 그림의 방법으로 저자들은 erroneous output을 수정할 feedback을 수집했습니다. 위의 장표에서 초록색으로 하이라이트 친 부분이 실제 실험에 활용된 feedback이라고 보시면 됩니다.</p>
<p><img src="https://velog.velcdn.com/images/tobigs-nlp/post/4d91169d-137f-4961-b55c-4f085d178bb6/image.jpeg" alt=""></p>
<p>위의 장표가 실험결과이며, 각각의 metric에 대해서는 아래에 설명하도록 하겠습니다.</p>
<h3 id="43-training-the-corrector-model">4.3 Training the Corrector Model</h3>
<p>Corrector model <strong>G</strong> 는 마찬가지로 T5-XXL을 fine-tuning해서 활용하였고, memory $M$ 은 Bert-base Sentence Encoder를 활용했고, threshold를 0.9로 둔 cosine-similarity를 활용해 유사한 matchinc key를 retreive했습니다.</p>
<hr>
<h2 id="5-experiments">5. Experiments</h2>
<h3 id="metric">Metric</h3>
<p>위의 장표에도 나와 있듯 edit action <em>$y^{e}$</em> 은 *&lt; Edit Type &gt; over &lt; ARG &gt; at &lt; Location &gt;* 을 따르는데, 전부 다 맞게 예측한 Exact Match, Type과 Location만 맞춘 Exact Match, 정답의 일부분만 맞추었는지 확인하는 BLEU와 ROUGE를 평가지표로 활용하였습니다.</p>
<h3 id="baseline">Baseline</h3>
<p>Baseline으로는 erroneous output <em>$x$</em> 를 input으로 넣고 edit action <em>$y^{e}$</em> 을 output으로 하도록 T5-XXL를 훈련했다고 합니다.</p>
<h3 id="51-how-well-does-fbnet-interpret-nl-feedback">5.1 How well does FBNET interpret NL feedback?</h3>
<p><img src="https://velog.velcdn.com/images/tobigs-nlp/post/fc14eba4-a96c-4a8b-9315-1852e042dffa/image.jpeg" alt=""></p>
<p>Oracle Feedback을 활용할 경우, feedback을 활용하지 않을 때에 비해서 성능이 크게 향상된 것을 알 수 있습니다.</p>
<h4 id="how-consistently-does-fbnet-interpret-similar-feedback">How consistently does FBNET interpret similar feedback?</h4>
<p><img src="https://velog.velcdn.com/images/tobigs-nlp/post/fc5b4b1b-ae21-4e63-a7b5-a4223b6a34fa/image.jpeg" alt=""></p>
<p>동일한 $(x,y)$ pair에 대해서 re-phrase된 feedback이 주어져도 같은 edit 결과를 보여주는 것이 robust 관점에서 중요한데, 60% 정도는 feedback이 re-phrase되어도 동일한 y를 생성했다고 합니다.</p>
<p>또한 위의 장표에서 보시는 것처럼 동일한 y를 생성하지 못하는 것은 re-phrase된 feedback안에 있는 phrase(=node 이름)이 달라서 inconsistent하지 사실상은 같은 결과라고 볼 수 있다고 합니다.</p>
<h4 id="how-well-can-fbnet-handle-wrong-feedback">How well can FBNET handle wrong feedback?</h4>
<p>lexically 동일하지만 semantically하게 틀린 feedback을 넣어준 경우 EM이 3%대로 하락해 FBNET이 feedback의 퀄리티에 상당히 sensitive함을 보입니다.</p>
<h4 id="how-well-does-fbnet-perform-across-error-types">How well does FBNET perform across error types?</h4>
<p>특정 순서를 제거하거나 삽입하는 &#39;parital order removal or addition&#39;과 새로운 node를 추가하는 &#39;generate missing node&#39;의 EM이 각각 10.5, 2.73으로 여러 노드 간의 관계와 순서를 고려해야 하는 error는 많이 어려운 문제라고 합니다.</p>
<h4 id="511-error-analysis">5.1.1 Error Analysis</h4>
<p>test set에서 발생한 50개의 incorrect edit (EM=0)에 대해서 분석을 했다고 합니다.</p>
<h4 id="lexical-variation-36">Lexical Variation (36%)</h4>
<p>Exact Match 특성상 정확히 일치해야 정답이라고 하기 때문에 &#39;insert node picking a book...&#39;이나 &#39;insert node choosing a book to read.&#39;는 사실상 같은 정답이어도 틀렸다고 평가했다고 합니다. </p>
<p>또한 &#39;swapping the order of edges A and B&#39;와 &#39;swapping the order of edges B and A&#39;도 틀렸다고 평가하면서 EM이 모델을 underestimate하는 경향이 있다고 주장합니다.</p>
<h4 id="challenging-feedback-24">Challenging feedback (24%)</h4>
<p>goal이 &#39;go to loacker room&#39;이고 <strong>B</strong>가 생성한 정답이 &#39;walk to the locker room&#39;을 반복한 상황에서 &#39;yon can&#39;t go where you already are&#39;과 같은 어려운 feedback이 전달될 경우 FBNET이 reorder edge between ‘⟨ walk towards the locker room , walk to the locker room ⟩’과 같은 잘못된 edit action을 생성하는 경향이 있다고 합니다.</p>
<h4 id="error-not-localized-20">Error not localized (20%)</h4>
<p>goal이 &#39;buy an xbox&#39; scipt가 &#39; 1. go to the store 2. talk to the cashier 3. make the transaction 4. get the receipt 5. load the video game into the car 6. get into the car 7. take xbox home.&#39;이고  feedback이 &#39;after a person makes a transaction, they then head to their car.&#39; 일 때 정답 edit은 
&#39;insert node ‘walk to the car’ after ‘get the receipt’&#39; 인데 feedback에서 receipt를 확인하지 못해 node를 정확히 localize하지 못한 &#39;insert node ‘get into the car’ after ‘make the transaction’&#39;가 생성된 경우도 있다고 합니다.</p>
<h4 id="alternative-answers-16">Alternative answers (16%)</h4>
<p>&#39;insert node ‘X’ before ‘step 4’ &#39;과 &#39;&#39;insert node ‘X’ after ‘step 3’ &#39;는 둘다 같은 의미인데 EM은 틀리게 평가한다고 합니다.</p>
<p>위의 error analysis를 보고 느낀점은 아무래도 새로운 데이터셋과 테스크에 대한 사후 실험이기 때문에 정확한 metric이 없어서 EM을 썼는데, 이게 본인들이 제시한 프레임워크의 효용성을 명확히 보여주는데 많은 아쉬움이 있었던거 같습니다.</p>
<h3 id="52-how-well-can-fbnet-learn-from-prior-mistakes">5.2 How well can FBNET learn from prior mistakes?</h3>
<p><img src="https://velog.velcdn.com/images/tobigs-nlp/post/83861e22-5181-433d-b989-6c7a2850e2c6/image.jpeg" alt=""></p>
<p>저자들은 72개의 test data에 대해서 perturbation을 주어 유사한 erroneous output들을 만들어 unseen한 erroneous output이 들어왔을때 유사한 feedback으로 올바른 edit action을 생성할 수 있는지를 확인하였습니다.</p>
<p>72개의 test data 중 20%는 inguistic perturbation을 (e.g., box &gt; carton, package), 80%는 유사하지만 조금은 더 어려운 task를 만들어서 (e.g., bus → train, and how to lift blinds → how to open oven door because the event structure is analogical) 실험을 진행했다고 합니다.</p>
<p>위의 장표를 보면 gold feedback만큼은 아니지만 괜찮은 성능을 기록한 것을 볼 수 있습니다.</p>
<h4 id="continually-learning-using-a-memory-of-errors">Continually learning using a memory of errors</h4>
<p><img src="https://velog.velcdn.com/images/tobigs-nlp/post/749dc907-1ce8-4bdf-b197-86346ea1b6c2/image.png" alt=""></p>
<p>위의 알고리즘을 바탕으로 실제 베포 환경에서처럼 unseen한 데이터에 대해서는 유사한 feedback으로 edit action을 생성하고, 생성된 edit action에 대해서 다시 user feedback을 받아 memory에 추가한 상황에서 실험한 결과는 아래와 같습니다.</p>
<p><img src="https://velog.velcdn.com/images/tobigs-nlp/post/07ee9460-3f88-493a-8c56-0c75b27a7926/image.jpeg" alt=""></p>
<p>보시면 메모리가 추가될 수록 FBNET의 성능이 계속 좋아지는 것을 볼 수 있습니다.</p>
<hr>
<h2 id="6-scope">6. Scope</h2>
<p>저자들이 제시한 본 연구의 향후 적용방향성입니니다.</p>
<h3 id="on-assumption-a1">On Assumption A1</h3>
<p>저자들은 erroneous output이 lexical하게는 옳지만 semantic하게 틀린 상황을 가정하고 실험을 진행하였습니다. </p>
<p>최근 LLM 모델들이 요약문 생성과 같은 task를 수행할 경우 fine-tuning시에 사용한 요약문의 lexical한 형태를 잘 따지만 내용은 inconsistent한 output을 생성할 때 본 연구에서 제시한 접근법이 좋은 해결책이 되어 보입니다.</p>
<h3 id="on-assumption-a2--consistent-memory">On Assumption A2 &amp; Consistent Memory</h3>
<p>본 연구에서 저자들은 feeback을 받을때 worker들에게 5살 짜리 애기에게 설명하듯이 작성해달라고 요구했습니다.</p>
<p>또한 이전 실험에서도 보았듯이 잘못된 feedback은 no feedback보다도 성능이 저하되기 때문에 보다 범용적인 상황에서 유사한 error에 대해서 유사한 feedback을 가져오는 환경을 위해서는 보다 개선된 feedback db 구축에 대한 고민이 필요하다고 제시합니다.</p>
<h3 id="using-multiple-feedbacks">Using Multiple Feedbacks</h3>
<p>유사한 feedback을 retreive하는데 있어서 더 발전된 방법론 적용이 필요하다고 제시합니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[SMART : Sentence as Basic Units for Text Evaluation]]></title>
            <link>https://velog.io/@tobigs-nlp/SMART-Sentence-as-Basic-Units-for-Text-Evaluation</link>
            <guid>https://velog.io/@tobigs-nlp/SMART-Sentence-as-Basic-Units-for-Text-Evaluation</guid>
            <pubDate>Mon, 08 Aug 2022 13:51:15 GMT</pubDate>
            <description><![CDATA[<h3 id="abatract">Abatract</h3>
<ul>
<li><p>SMART는 토큰 대신 문장을 matching시 기본 단위로 사용</p>
</li>
<li><p>또한 문장과 문장이 완전히 일치하는 방법이 아니라 matching function을 사용해 soft-matching되는 문장을 사용</p>
</li>
<li><p>Candidate 문장은 reference문장 뿐만 아니라 원문 문장과도 비교됨</p>
</li>
<li><p>결론적으로 SMART with model-based matching function는 system-level correlation에서 모든 metric과 비교해서 뛰어난 성능을 보임</p>
</li>
<li><p>SMART with string-based matching function은 현재의 model-based metric과 견줄만한 성능을 보임</p>
<h3 id="introduction">Introduction</h3>
</li>
<li><p>현재 텍스트 생성 태스크에서 발전을 저해하는 요소 중 하나는 바로 automatic evalutation!</p>
</li>
<li><p>현재의 automatic metric은 token-level의 matching에 의존하고 있음(ROUGE, BLEU)</p>
<ul>
<li>이러한 metric은 텍스트의 질을 평가하는 4가지 차원(coherence, factuailty, fluency, informativeness)에 대해 human judgment와 낮은 상관관계를 보임</li>
<li>이 때문에, 현재 텍스트 생성에서 평가는 소수의 데이터를 바탕으로 human elicitation study와 병행되고 있음</li>
</ul>
</li>
<li><p>혹은, 자동으로 모델이 생성한 텍스트를 평가하기 위해 pretrained language model를 leverage함</p>
</li>
<li><p>하지만 ROUGE와 LM-based metrics모두 3가지 큰 문제점을 가지고 있음</p>
<ul>
<li><p>이러한 metric은 문장이 길고, 여러 문장으로 되어있을수록 평가 성능이 낮아짐</p>
<ul>
<li>특히 ROUGE의 경우 긴 결과값에서 정보가 섞여있을 때 제대로 평가하지 못함(coherence를 평가하는데 있어 취약)</li>
<li>LM 기반의 평가 방식의 경우, max length가 정해져 있음
<img src="https://velog.velcdn.com/images/lm_minjin/post/39ccd3ac-8e9b-4407-8837-a82ecf2bc371/image.png" alt=""></li>
</ul>
</li>
<li><p>metric의 대부분이 평가시에 reference text만을 사용</p>
</li>
<li><p>LM 기반 모델들은 매우 느려질 수 있고, 이는 모델 development단계에서의 응용을 저해함</p>
<ul>
<li>그래서 이러한 단계에서는 ROUGE를 사용하지만, subdoptimal modeling으로 빠질 수 있음</li>
</ul>
</li>
<li><p>본 논문에선 automatic metric SMART(Sentence MAtching for Raring Text)를 제안</p>
<ul>
<li>길고 여러 문장인 텍스트를 잘 다루기 위해, matching시 basic unit을 token이 아닌 sentence로 사용</li>
<li>0과 1사이의 값이 나오는 soft-matching function을 사용</li>
<li>ROUGE와 유사하게 N에 따라 다양한 SMART버전의 평가 지표가 존재</li>
<li>SMART with BLEURT는 모든 차원에 대해서 뛰어난 성능을 보여줌</li>
<li>SMART with string-based matching function의 경우, 속도가 빠르고 별도의 자원이 필요하지 않음에도 기존의 model-based metric과 견줄만한 성능을 냄</li>
<li>또한, SMART는 더 긴 요약에 대해 뛰어나고, 특정 모델쪽으로의 biased가 덜함</li>
</ul>
</li>
</ul>
</li>
</ul>
<h3 id="related-work">Related Work</h3>
<p><strong>Strinb-based Text Evaluation</strong></p>
<ul>
<li>ROUGE</li>
<li>BLEU</li>
<li><em>Model-based Text Evaluation*</em></li>
<li>BERTScore</li>
<li>MoverScore</li>
<li>BLEURT</li>
<li>BARTScore</li>
<li><em>Factuality in summarization*</em></li>
<li>NLI based approaches</li>
<li>model-based approaches</li>
<li>QA based approaches</li>
</ul>
<h3 id="problem-definition">Problem Definition</h3>
<ul>
<li>$S$ : list of source document</li>
<li>$C$ : list of summaries generated for $S$ by a candidate system</li>
<li>$R$ : list of reference summaries produced by human annotators for $S$</li>
<li>$Q$ : list of dimensions of summary quality</li>
<li>$H_q$ : list of human-annotated scores for $C$ in temrs of a certatin summary quality $q$ (each $q \in Q$)</li>
<li>$f_q(S, R, C)$ : outputs a list of scores that correlates well with $H_q$</li>
<li>list of summary quality $Q$<ul>
<li>Coherence : The summary should be well structured and well-orgainzed. The summary should build from sentence to sentence to a coherent body of information about a topic</li>
<li>Factuality : The summary should only contain statements that are entailed by the source document</li>
<li>Fluency : The summary should have no formatting problems, capitalization errors or obviously ungrammatical sentences</li>
<li>Informativeness : The summary should include only important information from the source document</li>
</ul>
</li>
</ul>
<h3 id="sentence-matching-for-rating-text">Sentence Matching for Rating Text</h3>
<ol>
<li>sentence를 reference summaries와 system summaries사이의 matching basic unit으로 사용<ul>
<li>문장의 경우 완전히 일치하는 경우가 드물기 때문에, soft mathcing function을 사용</li>
</ul>
</li>
<li>SMART는 candidate summary와 reference summary, source document 모두를 고려해 점수 계산</li>
</ol>
<h4 id="smart-n">SMART-N</h4>
<ul>
<li>기본적으로 summaries를 문장 단위로 쪼개서 사용</li>
<li>SMART-N은 sentence macthing functino이 주어졌을 때 가장 높은 matching score를 가지는 $R$과 $C$사이의 sentence n-gram의 쌍을 찾음</li>
<li>문장 n-gram에서 문장의 수로 N을 사용하고, SMART-M은 다음과 같이 계산 가능
<img src="https://velog.velcdn.com/images/lm_minjin/post/1d81fea0-1382-4901-9730-01e547f2ca5b/image.png" alt=""><blockquote>
<p>직관적으로 안 와닿아서 생각해봤을 때, 
prec&#39;만 생각해보면 prec&#39;는 candidate의 max matching score의 합이고, 각각의 $c_j$는 r과 1:1매칭을 해서 나온 matching score의 N개를 평균 냈을 때 가장 큰 값을 택하는 것. 
즉, ref 문장 3개가 비슷한 내용에 대한 요약이고, cand 문장 3개도 비슷한 내용에 대한 요약이라면 둘의 위치가 유사하지 않아도 어차피 최대값을 택할 것이니까, 이에 대한 matching score는 크게 나올 것. (해석이 잘못 이상하다면 댓글 남겨주세요!)
<img src="https://velog.velcdn.com/images/lm_minjin/post/c7dfabda-b814-4300-afaa-6a57f9ae5629/image.png" alt=""></p>
</blockquote>
</li>
</ul>
<h4 id="smart-l">SMART-L</h4>
<ul>
<li><p>ref 요약과 candidate 요약에서 문장들의 Longest Common Sumbsequence(LCS)</p>
</li>
<li><p>원래 LCS와의 차이가 있다면, exact match가 아닌 soft match사용</p>
</li>
<li><p>$X = [x_i], Y= [y_j]$
Find two soft-subsequences $x_{i_1},...,x_{i_l}$ and $y_{j_1}, y_{j_l}$ of length with $i_{k-1}\leq i_{k} \leq i_{k+1}$ and $j_{k-1}\leq j_{k} \leq j_{k+1}$</p>
</li>
<li><p>normal subsequences와 달리, soft-subsequences는 이전 문장으로는 돌아갈 순 없지만 sentences의 반복은 허용($\leq$덕분에!)</p>
</li>
<li><p>이렇게 허용한 이유는, 한 문장 내용이 다른 요약문에선 여러 문장에 걸쳐서 나올 수 있기 때문
<img src="https://velog.velcdn.com/images/lm_minjin/post/b475c6a0-a835-4eec-b7a7-213e9bf9e2e3/image.png" alt="">
<img src="https://velog.velcdn.com/images/lm_minjin/post/eca301f9-0bc2-49fb-99af-6e0b48c5e597/image.png" alt=""></p>
<h4 id="comparing-with-source">Comparing with Source</h4>
</li>
<li><p>SMART는 candidate system을 reference summary와 비교할 뿐만 아니라 source document와도 비교!
1) candidate system summary $C$와 reference summary $R$비교
2) candidate system summary $C$와 source document $S$와 비교
3) 이 두 점수 중 큰 값을 최종 score로 사용
<img src="https://velog.velcdn.com/images/lm_minjin/post/a523367b-62e8-450a-87c8-1173f010b215/image.png" alt=""></p>
<h4 id="multiple-references">Multiple References</h4>
</li>
<li><p>각 reference에 대해서 SMART를 계산한 뒤, 최대값을 최종 점수로 사용</p>
</li>
<li><p>직관적으로 봤을 때, candidate system summary는 최소 하나
reference summary와 맞으면 되기 때문</p>
<h4 id="shorter-acronym">Shorter Acronym</h4>
</li>
<li><p>SMART의 여러 변형을 표기하기 위해 다음과 같이 씀
$S[1|2|L] - m$
여기서 m은 matching function을 의미
ex) SMART-1 with a BLEURT는 S1-BLEURT라고 씀</p>
</li>
</ul>
<h3 id="sentence-matching-functions">Sentence Matching Functions</h3>
<p>-SMART는 sentence matching function에 따라 다양한 버전을 만들 수 있음</p>
<ul>
<li>NMT와 summarization에 널리 사용되는 6가지 sentence matching functnions을 실험<ul>
<li>string-based<ul>
<li>ROUGE : It measures the number of overlapping textual units</li>
<li>BLEU : It is a precision-focused metric that calculates n-gram overlap between two texts and also includes a brevity penalty</li>
<li>CHRF : It calculates character-based n-gram overlap between system and reference sentences. It is more effective especially in morphologically-rich languages</li>
</ul>
</li>
<li>model-based <ul>
<li>BERTScore : It computes similarity scores by alignming tokens from reference and candidate summaries, and token alignments are computed greedily to maximize cosine similarity</li>
<li>T5-NALI : It used T5 finetuned on the ANLI dataset to produce a score between 0 and 1. We use the source/reference as premise and the candidate summary as hypothesis</li>
<li>BLEURT : It uses BERT that is trained to predict human judgment scores using a small-scale dataset. To make it more robust, the model is first pretrained with a large-scale synthetic dataset. Moreover, It is optimized using several objectives including ROUGE, BLEU, BERTScore, and entailments.</li>
</ul>
</li>
</ul>
</li>
</ul>
<h3 id="experiments-and-results">Experiments and Results</h3>
<h4 id="experimental-setting">Experimental Setting</h4>
<p><strong>Dataset and Evaluation</strong></p>
<ul>
<li>SummEval : a document summarization meta-evaluation suite consisting of summaries form the CNN/DM dataset<ul>
<li>Annotation은 2단계로 매겨짐</li>
<li>100개의 데이터에 대해 16개의 모델이 생성한 1600개의 요약문에 대해서 각 text qauilty aspect에 1~5점 사이의 점수를 매김</li>
<li>각 데이터는 또한 11개의 reference summaries를 가짐 : CNN/DM dataset에 원래 있던 정답 요약문 + 10명의 사람이 직접 작성한 요약문</li>
<li>평가를 위해서, 각 시스템의 점수를 평균내고, 이를 바탕으로 Kendall tau를 사용해서 system-level correlation을 계산</li>
</ul>
</li>
</ul>
<h4 id="smart-with-different-matching-functions">SMART with Different Matching Functions</h4>
<ul>
<li>우선 6가지 다양한 matching function을 서로 비교하는 실험을 진행
<img src="https://velog.velcdn.com/images/lm_minjin/post/617ffad4-8670-4fd8-b354-e14a9d359144/image.png" alt=""></li>
<li>각각의 coh, Fac, Flu와 Inf는 coherence, factuality, fluency, informativeness를 의미</li>
<li>string-based matching function에서는 CHRF가, model-based matching function에서는 BLEURT가 가장 우수한 성능을 보임<ul>
<li>그 이유는 논문에 따르면 BLEURT가 문장이 일치하는지에 대한 학습 뿐만 아니라 다양한 ROUCE, BLEU, BERTScore, entailment scores까지 예측하도록 최적화되었기 때문이라고 추측</li>
</ul>
</li>
<li>특이한 점은 T5-ANLI를 matching function으로 썼을 때, factuality부분에서 가장 성능이 떨어짐<ul>
<li>그 이유는 논문에서 문장을 넣을 때 주변 맥락 없이 matching function에 태웠기 때문이라고 추측</li>
</ul>
</li>
</ul>
<h4 id="smart-compared-to-other-text-evaluation-metrics">SMART Compared to Other Text Evaluation Metrics</h4>
<ul>
<li><p>3가지 종류의 SMART를 비교 - string-based, source-free, source-dependent model-based</p>
</li>
<li><p>String-based metrics</p>
<ul>
<li>ROUGE 1/2/L : reference와 output summaries사이의 token 단위의 overlap을 측정</li>
<li>BLEU : precision에 초점을 두고 referece와 output summaries간의 token단위의 overlap으 측정</li>
<li>CHRF : reference와 output summaries사이의 문자 기반의 n-gram의 overlap을 측정</li>
<li>S1/2/L-CHRF : string-based matching function을 사용한 최고 성능의 SMART metric</li>
</ul>
</li>
<li><p>Source-free model-based</p>
<ul>
<li>BERTScore : BERT모델을 기반으로 토큰 수준의 유사도 점수를 계산해서 aggregate</li>
<li>MoverScore : Word Mover&#39;s Distance를 사용해서 reference와 candidate summaries의 BERT n-gram 임베딩사이의 의미적 거리를 측정</li>
<li>BLEURT : gold/silver-standard human judgment scores를 가진 real and synthetic training data을 합쳐서 BERT를 finetune</li>
</ul>
</li>
<li><p>Source-dependent model-based metrics</p>
<ul>
<li>PRISM : leverages a zero-shot paraphrasing model and uses probailites from force-decoding the candidates summary given the source as input</li>
<li>$Q^2$ : question generation과 question answering모델을 사용해서 원문을 기반으로 생성한 질문을 요약문으로 답할 수 있는지(entail되는지) 확인</li>
<li>T5-ANLI : 원문을 premise로 요약을 hypothesis로 주어질 때 entailment score를 계산하도록 T5를 ANLI dataset으로 파인튜닝</li>
<li>BARTScore : evaluates text using probailities from force-decoding the candidate summary given the source as input using BART without finetuning with CNN/DM summarization dataset</li>
<li>BARTScore+CNN : evaluates text using probailities from force-decoding the candidate summary given the source as input using BART with finetuning with CNN/DM summarization dataset</li>
<li>S1/2/L-BLEURT : Table1에서 최고 성능을 기록한 model based matching function을 사용한 SMART metric
<img src="https://velog.velcdn.com/images/lm_minjin/post/79cf94fc-2949-4c9d-ba35-76bedcc209a6/image.png" alt=""></li>
</ul>
</li>
<li><p>SMART with BLEURT matching function은 가장 높은 correlation을 보임</p>
</li>
<li><p>SL-BELURT는 coherence와 informativeness에서 뛰어남</p>
</li>
<li><p>S1-BELURT와 S2-BELURT는 factuality와 fluency에서 각각 뛰어남</p>
</li>
<li><p>평균적으로 SL-BLEURT가 가장 좋은 성능을 보임</p>
</li>
<li><p>다양한 quality dimension에 대해 뛰어난 SMART버전이 다르므로 여러개를 사용하는 것을 추천</p>
</li>
<li><p>source-dependent metrics이 source-free보다 뛰어남</p>
<ul>
<li>즉, 요약문을 평가할 때 원문을 사용하는 것이 중요!</li>
</ul>
</li>
<li><p>또한, SMART의 경우 기존의 LM-based metrics보다 pretrained language models를 사용하지 않아도 견줄만한 성능을 보임</p>
</li>
</ul>
<h4 id="ablation-studies">Ablation Studies</h4>
<ul>
<li><p>SMART-X : SMART-1, SMART-2, SMART-L을 평균낸 것
<img src="https://velog.velcdn.com/images/lm_minjin/post/c7f308dc-989a-4254-8796-ea14441aa0ac/image.png" alt=""></p>
</li>
<li><p>compare SMARTs using precision or recall only(첫번째 블록)</p>
<ul>
<li>precision이나 recall만 사용한 SMART-X이 f-measure를 사용한 것 보다 훨씬 낮은 system-level correlation을 보임</li>
</ul>
</li>
<li><p>candidate summaries를 비교하는 SMART score를 aggregate하는 다양한 방법 비교(두번째 블록)</p>
<ul>
<li>reference or source만 사용할 때 SMART의 점수가 크게 나빠짐<ul>
<li>즉, source와 reference를 둘다 사용하는게 SMART에선 필수적!</li>
</ul>
</li>
<li>aggregation방법으로 average, minimum 등을 사용해봤지만 maximize하는게 제일 좋았음</li>
<li>특이한 점은 reference summaries만 가지고 SMART를 계산했을 때 모든 차원에서 음수가 나온 것<ul>
<li>CNN/DM의 정답 요약문은 사람의 평가 관점에서 모델이 생성한 요약문보다 좋지 않음</li>
</ul>
</li>
</ul>
</li>
<li><p>다양한 reference summary를 사용해서 평가(세번째 블록)</p>
<ul>
<li>SummEval의 reference summaries를 CNN/DM의 원래 summaries로 교체 --&gt; 표에서 CNN/DM</li>
<li>human score가 가장 높은 best system summary(generated summary)를 reference summary로 사용 --&gt; 표에서 best system</li>
<li>결과를 보면, ref-only(CNN/DM)의 경우 음수가 나옴</li>
<li>reference로 best system summary을 사용했을 때, 모든 차원에서 양수의 상관관계를 얻음</li>
</ul>
</li>
</ul>
<h3 id="further-analyses">Further Analyses</h3>
<p><strong>SMART Works Well with Longer Summaries</strong></p>
<ul>
<li>reference summary에 있는 평균 토큰의 수를 기반으로 데이터셋을 4개로 나눠서, 첫번째 bucket에는 가장 짧은 reference summaries를 가진 데이터로 구성</li>
<li>각 bucket에 대해서 모든 비교 metric의 system-level correlation을 계산
<img src="https://velog.velcdn.com/images/lm_minjin/post/b12d2bb3-6f77-4292-89e4-efb853502643/image.png" alt=""></li>
<li>모든 metric이 ROUGE에 비해 43개 토큰보다 긴 요약문에 대해선 뛰어남<ul>
<li>즉, ROUGE는 긴 요약문을 평가하는데에 있어 적합하지 않음</li>
</ul>
</li>
<li>ROUGE는 또한, 첫번째 bucket에서 가장 낮은 성능으 보이는데, 이는 ROUGE가 짧은 요약문을 평가하는데에도 적합하지 않다는 것을 의미</li>
<li>비교 metric중에서 SX-BLEURT가 전반적으로 뛰어난 성능을 보임</li>
</ul>
<p><strong>SMART is Less Biased towards Specific Models</strong></p>
<ul>
<li>각 quality dimension에 대해 다양한 요약 모델을 가지고 automatic metrics과 사람이 매긴 점수와의 ranking차를 시각화<ul>
<li>이를 통해, metric이 특정 모델에 bias가 있는지 확인 가능</li>
</ul>
</li>
</ul>
<p><img src="https://velog.velcdn.com/images/lm_minjin/post/9d2a6472-e501-424d-9b1c-910def0c2c5b/image.png" alt=""></p>
<ul>
<li>모든 metric은 일반적으로 extractive system을 높게 평가하는 경향이 있음<ul>
<li>현재의 automatic metric으로 평가할 때 extractive와 abstractive model을 분리해서 비교할 필요가 있음</li>
</ul>
</li>
<li>BARTScore가 BART를 굉장히 높게 평가함<ul>
<li>요약문 평가할 때 을 pretrained encoder-decoder 모델을 사용하면 같은 모델로 finetune한 ㅇ약 모델 쪽으로 bias가 생김</li>
</ul>
</li>
<li>SX-BLEURT가 human score와 rank가 0에 가깝기 때문에 가장 biased가 덜하다는 것을 볼 수 있음<ul>
<li>이 결과가 맞는지 수치적으로 측정하기 위해 rank difference의 표준편차와 pairwise ranking accuracy를 사용. 
<img src="https://velog.velcdn.com/images/lm_minjin/post/88a73747-2c1b-4c9c-8455-b9e62439c0c1/image.png" alt=""></li>
<li>표4를 보면, SX-BLEURT가 가장 낮은 표준편차를 갖고 있고, 모든 quality dimension에 대해 가장 높은 pairwise rank accuracy를 가진다는 것을 알 수 있음
==&gt; 진짜로 이 metric이 가장 적은 bias를 가지고 있다!</li>
</ul>
</li>
</ul>
<h3 id="conclusion">Conclusion</h3>
<ul>
<li>SMART는 문서 요약을 평가할 때 summary quality의 4가지 모든 측면에서 뛰어남</li>
<li>SMART는 요약문의 길이가 길어짐에 따라 나은 성능을 보이고 가장 덜 biased된 평가를 함</li>
<li>실험 결과를 바탕으로, SMART[1|2|L]-BLEURT를 사용하는 것을 추천</li>
<li>빠른 평가를 위해서는 SMART[1|2|L]-CHRF를 사용하는 것을 추천</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[Leveraging Passage Retrieval with Generative Models for Open Domain Question Answering (FiD)]]></title>
            <link>https://velog.io/@tobigs-nlp/Leveraging-Passage-Retrieval-with-Generative-Models-for-Open-Domain-Question-Answering-FiD</link>
            <guid>https://velog.io/@tobigs-nlp/Leveraging-Passage-Retrieval-with-Generative-Models-for-Open-Domain-Question-Answering-FiD</guid>
            <pubDate>Sat, 06 Aug 2022 11:55:44 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/tobigs-nlp/post/a9befc58-4d44-4e14-b85c-56cf20cc4069/image.png" alt=""></p>
<h2 id="1-introduction">1. Introduction</h2>
<hr>
<p>LLM(Large Langauge Model)들이 factual한 정보들을 담는 능력이 여러 연구에서 확인됨에 따라 open-domain question answering에서도 external knowledge 없이 LLM이 parametrized한 정보를 바탕으로 괜찮은 성능을 내는 연구 경향이 나타나기 시작했습니다.</p>
<p>하지만 현실적으로 다양하고 정확한 factual 정보를 가지고 있는 LLM을 학습하기에는 상당한 비용이 필요하며, 그러한 LLM을 통해서 query를 만드는 것도 많은 메모리가 필요하죠.</p>
<p>이에 따라 이전에 소개드린 RAG와 같이 Question(=Query)를 가지고 supportive한 document를 retreive한 다음, Question과 각각의 Supportive Document를 가지고 정답을 생성한 모델들이 나오기 시작했죠.</p>
<p>기존의 RAG는 Encoder에서 Question과 모든 Document들을 concat해서 처리하는 방식이었는데, 이러한 처리는 상당한 수준의 메모리를 요구하죠. (Self-Attention in Encoder Layer)</p>
<p>FiD는 Encoder에서 Question과 모든 Document들을 한번에 concat해서 처리하지 않고 ([question: question statement. context01: context01 statement. context02 : context02 statement. ...  ]), Question과 각각의 Supportive Document를 따로 concat해서 처리하고 [question: question statement. title01: title of context01. context01: context01 statement], [question: question statement. title02: title of context02. context02: context02 statement] ...), 이를 decoder에서 fusion하는 간단한 방식를 통해 각종 ODQA에서 SOTA를 달성했습니다.</p>
<p>그래서 모델이 이름도 Fusion-in-Decoder이라고 명명된거 같네요.</p>
<h2 id="2-related-work">2. Related Work</h2>
<hr>
<h4 id="open-domain-question-answering">Open Domain Question Answering</h4>
<p>Open Domain Question Answering은 다양한 주제에 대한 대량의 문서 집합으로부터 질문에 대한 답을 해주는 문제입니다. 특히 Model의 Input안에 Answer Span이 없는 경우, 이를 어떻게 처리할 것인가가 해당 task의 가장 key라고 여겨집니다.</p>
<h4 id="passage-retrieval">Passage Retrieval</h4>
<p>결국 Open Domain Question Answering에는 질문에 대한 정답을 하기 위해 질문과 높은 연관성을 보이는 supportive document들을 retrieve하는게 중요합니다.</p>
<p>초기에는 sparse representation인 TF-IDF으로 question과 document를 임베딩한 후에 BiLSTM을 활용해 supervised learning의 형태로 supportive document들을 retrieve하는 방식이 많이 활용되었다고 합니다.</p>
<p>최근에는 BERT를 비롯한 PLM을 활용해 dense representation을 얻은 뒤에, 내적기반의 유사도를 활용해 supportive document들을 retrieve하는 방식이 주로 활용됩니다. (FAISS)</p>
<h4 id="generative-question-answering">Generative Question Answering</h4>
<p>NarrativeQA라는 데이터셋에서 제안하는것처럼 말그래도 answer을 extract하는게 아니라 생성해야하는 문제입니다. 즉 Supportive Document에 answer span이 없는 것을 의미합니다. </p>
<p>GPT와 RAG에서 abstractive generation model들이 이러한 문제에서 좋은 성능을 보였죠.</p>
<h2 id="3-method">3. Method</h2>
<hr>
<p><img src="https://velog.velcdn.com/images/tobigs-nlp/post/7ad44b14-ae61-48b5-8f24-a5c585687c50/image.png" alt=""></p>
<h4 id="retrieval">Retrieval</h4>
<ul>
<li>BM25 (TF-IDF)</li>
</ul>
<p>Question과 Passage들을 bag-of-word들로 embedding하고 tf-idf기반으로 supportive document들을 retrieval하는 방법입니다.</p>
<ul>
<li>DPR (BERT &amp; COSINE SIMILARITY)</li>
</ul>
<p>이전 RAG에서 설명드린것처럼 Question과 Passage들을 BERT에 통과해 [CLS] 임베딩을 구한 후 내적을 통해 supportive document들을 retrieval하는 방법입니다.</p>
<p>저자들이 conclusion에 <em>&#39;We also plan to integrate the retrieval in our model, and to learn the whole system end-to-end.&#39;</em> 라고 언급한 것으로 보아 retrieval단에는 gradient를 흘려서 학습한 것으로 보이지는 않습니다.</p>
<h4 id="reading-fusion-in-decoder">Reading (Fusion-In-Decoder)</h4>
<p>Supportive Document들이 retreive된 후에는 각 supportive document들을 아래와 같은 prefix를 주어 <strong>독립적</strong>으로 encoder에 통과시킵니다.</p>
<p>[question: question statement. title: title of supportive document context: context of supportive document.]</p>
<p>따라서 100개의 supportive document들이 있으면 총 100번 encoder forwarding을 하는 것이죠. (아래 코드를 통해 다시 한번 설명드리겠지만, 실제로는 트릭을 좀 이용하였습니다.)</p>
<p>이렇게 통과된 encoder hidden representation을 decoder에 넘겨줌으로써 decoder는 정답 문장을 생성하면서 모든 supportive document에 attention을 가할 수 있게 됩니다.</p>
<p>따라서 자연스럽게 question의 정보가 중복되어서 활용됨을 알 수 있습니다.</p>
<p>아래는 페이스북에서 제공한 공식 코드(<a href="https://github.com/facebookresearch/FiD">FiD Official Code</a>)를 바탕으로 실제 FiD가 어떻게 mulitple encoder forwarding을 구현했는지 정리해보았습니다.</p>
<p>실제 training command line은 아래와 같습니다.</p>
<pre><code class="language-bash">python train_reader.py \
        --train_data train_data.json \
        --eval_data eval_data.json \
        --model_size base \
        --per_gpu_batch_size 1 \
        --n_context 100 \
        --name my_experiment \
        --checkpoint_dir checkpoint \</code></pre>
<p>배치마다 1개의 question을 처리합니다. </p>
<p>그리고 실제 FiD Model 코드를 보면 아래와 같은 코드가 있는데,</p>
<pre><code class="language-python">class FiDT5(transformers.T5ForConditionalGeneration):
    def __init__(self, config):
        super().__init__(config)
        self.wrap_encoder()

    def forward_(self, **kwargs):
        if &#39;input_ids&#39; in kwargs:
            kwargs[&#39;input_ids&#39;] = kwargs[&#39;input_ids&#39;].view(kwargs[&#39;input_ids&#39;].size(0), -1)
        if &#39;attention_mask&#39; in kwargs:
            kwargs[&#39;attention_mask&#39;] = kwargs[&#39;attention_mask&#39;].view(kwargs[&#39;attention_mask&#39;].size(0), -1)

        return super(FiDT5, self).forward(
            **kwargs
        )

    # We need to resize as B x (N * L) instead of (B * N) x L here
    # because the T5 forward method uses the input tensors to infer
    # dimensions used in the decoder.
    # EncoderWrapper resizes the inputs as (B * N) x L.
    def forward(self, input_ids=None, attention_mask=None, **kwargs):
        if input_ids != None:
            # inputs might have already be resized in the generate method
            if input_ids.dim() == 3:
                self.encoder.n_passages = input_ids.size(1)
            input_ids = input_ids.view(input_ids.size(0), -1)
        if attention_mask != None:
            attention_mask = attention_mask.view(attention_mask.size(0), -1)
        return super().forward(
            input_ids=input_ids,
            attention_mask=attention_mask,
            **kwargs
        )</code></pre>
<p>Encoder 자체는 1개의 (x,y) pair, 그리고 x에는 100개의 question, supportive document의 concatenation이 존재하는데, 모델 자체의 입력으로는 (Batch, # of Document * Length of Document)로 들어가나</p>
<pre><code class="language-python">class EncoderWrapper(torch.nn.Module):
    &quot;&quot;&quot;
    Encoder Wrapper for T5 Wrapper to obtain a Fusion-in-Decoder model.
    &quot;&quot;&quot;
    def __init__(self, encoder, use_checkpoint=False):
        super().__init__()

        self.encoder = encoder
        apply_checkpoint_wrapper(self.encoder, use_checkpoint)

    def forward(self, input_ids=None, attention_mask=None, **kwargs,):
        # total_length = n_passages * passage_length
        bsz, total_length = input_ids.shape
        passage_length = total_length // self.n_passages
        input_ids = input_ids.view(bsz*self.n_passages, passage_length)
        attention_mask = attention_mask.view(bsz*self.n_passages, passage_length)
        outputs = self.encoder(input_ids, attention_mask, **kwargs)
        outputs = (outputs[0].view(bsz, self.n_passages*passage_length, -1), ) + outputs[1:]
        return outputs</code></pre>
<p>Encoder를 wrapper로 묶어서 실제 Batch는 1이지만 Encoder를 통과할 때 차원을 (Batch * # of Document, Length of Document)로 변경시켜서 통과해 Encoder를 통과할 때는 실제 # of Document만큼 병렬처리가 되고 나온 output은 다시 (Batch, # of Document * Length of Document, # of hidden-dim)으로 변경해 decoder에 던져줌으로써 모든 supportive document에 대해서 cross attention이 걸리도록 합니다.</p>
<h2 id="4-experiments">4. Experiments</h2>
<hr>
<h4 id="dataset">Dataset</h4>
<p>Dataset으로는 NaturalQuestions, TriviaQA, SQuAD v1.1을 활용하였습니다.</p>
<h4 id="experimental-settings">Experimental Settings</h4>
<p>Evalutation Method는 모델이 생성한 정답을 정규화한 이후 해당 정답이 acceptable answers가 포함된 list에 잇는 경우 correct를 주는 exact match (EM)을 활용하였습니다.</p>
<p>Backbone으로는 T5-base와 large를 활용하였고, Fine-tuning시에 스케줄러를 활용하지 않고 constant lr을 쓰는게 개인적으로 신선했습니다.</p>
<p>각각 데이터셋마다 10K의 gradient step으로 학습을 진행하였습니다. (gradient accumulation 썼다는 말이겠죠..?)</p>
<p>Training과 Test시에 모두 100개의 supportive document를 활용하였고, 각 document들은 250 토큰으로 절사해서 사용하였다고 합니다.</p>
<p>NQ와 TriviaQA에는 DPR (dense representation), SQUAD에는 BM25 (sparse representation)을 활용하였습니다.</p>
<h4 id="comparasion-to-sota">Comparasion to SOTA</h4>
<p><img src="https://velog.velcdn.com/images/tobigs-nlp/post/082ec13b-b164-45a2-b9f5-0723cb006ba1/image.png" alt=""></p>
<p>supportive document들을 활용한 generative model의 성능이 extractive model들보다 좋은 성능을 보였습니다. </p>
<p>이 실험을 통해 최소 Open Domain QA에서 만큼은 Encoder로 가능한 많은 passage들을 encoding하고, decoder의 cross attention에서 이를 fusion하면서 정답을 생성하는게 좋은 성능을 보이는 것을 알 수 있습니다.</p>
<p>특히 저자들은 T5-Large와 T5-base를 backbone으로 하는 FiD 둘다 비슷한 메모리를 사용하지만 성능의 차이가 큰 것을 지적하면서 차라리 메모리를 더 쓸꺼면 모델의 크기가 작더라도 encoder에서 정보를 다양한 태우는 것을 추천합니다.</p>
<h4 id="scaling-with-number-of-passages">Scaling with number of passages</h4>
<p><img src="https://velog.velcdn.com/images/tobigs-nlp/post/c0faed3c-cbe0-4337-a08e-46cbec20e904/image.png" alt=""></p>
<p>3 데이터셋에서 모두 supportive document를 늘릴수록 성능이 좋아지는 것을 확인할 수 있습니다. </p>
<p>Extractive approach들은 supportive document가 10-20개 사이에서 성능이 수렴하지만, 생성기반의 seq2seq들은 다양한 supportive document을 더 잘 활용하는 것을 알 수 있습니다.</p>
<h4 id="impact-of-training-passages">Impact of training passages</h4>
<p><img src="https://velog.velcdn.com/images/tobigs-nlp/post/d8cd856a-51bd-46c8-9dd8-8c7821c95729/image.png" alt=""></p>
<p>계산적인 비용문제를 완화하기 위해 Training시에는 적은 document들(5,10,25,50,100)로 학습하고 Testing시에는 100개의 supportive document로 평가를 해보았으나 성능이 크게 하락하는 것을 확인하였습니다.</p>
<p>하지만 적은 document들(5,10,25,50,100)로 학습한 모델들에 1000step동안 100개의 supportive document로 fine-tuning한 경우 상당한 성능 향상을 보여, 10K의 gradient step으로 학습한 모델의 성능과 비슷한 수준을 보여 효율적인 학습 방법을 제안합니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks]]></title>
            <link>https://velog.io/@tobigs-nlp/Retrieval-Augmented-Generation-for-Knowledge-Intensive-NLP-Tasks</link>
            <guid>https://velog.io/@tobigs-nlp/Retrieval-Augmented-Generation-for-Knowledge-Intensive-NLP-Tasks</guid>
            <pubDate>Mon, 25 Jul 2022 12:52:54 GMT</pubDate>
            <description><![CDATA[<p>이번에 발표할 논문은 2020 NIPS에 발표된 &#39;Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks&#39;로 pre-training으로 미처 parameterize하지 못한 외부의 지식들을 활용할 수 있는 general한 seq2seq 구조를 제안한 논문입니다.</p>
<hr>
<h2 id="0-prerequisite">0. Prerequisite</h2>
<p>본격적인 리뷰에 앞서 논문에 대한 원활한 이해를 위해 자주 쓰이는 용어를 아래에 정리해 두었습니다.
(제가 이해한 바를 바탕으로 작성하였으니, 가볍게 참고만 해주시면 감사하겠습니다.)</p>
<ul>
<li>Parameterizing : 모델의 가중치에 지식을 주입하는 과정입니다. 우리가 다양한 목적함수를 바탕으로 Large Model을 Pre-training하는 이유가 결국 knowledge를 parameterizing하기 위함이라고 볼 수 있죠.</li>
<li>Knowledge Intensive Tasks : 사람조차도 외부지식 (ex. 위키피디아 검색) 없이 해결하기 어려운 문제를 일컫습니다. 즉 모델의 관점에서 보면, parameterized되지 못한 외부 지식이 필요한 문제입니다.</li>
<li>MIPS : Maximum Inner Product Search의 약어로, 우리에게 vector space에 mapping된 query $x$ 가 있고 여러 외부 정보들 $d_{i}$가 있다고 가정할 때 query $x$와 내적(or 코사인 유사도)가 높은 외부 정보들 $d_{i}$를 찾는 과정을 의미합니다. 최근의 Facebook의 FAISS가 이를 빠르게 구현해놓은 좋은 라이브러리로 각광받고 있습니다.</li>
</ul>
<hr>
<h2 id="1-introduction">1. Introduction</h2>
<p>기존 PLM 모델들이 다양한 목적함수를 활용해 데이터에 내포된 지식 지식을 학습하는데에는 뛰어난 성과를 보였으나, 기사의 정정보도와 같이 새로운 사실을 바탕으로 모델이 학습한 지식을 수정하거나 확장하는 일은 여전히 해결해야할 문제점으로 남아있습니다.</p>
<p>일반적으로 이를 해결하기 위해 연구자들은 전체 framework를 parametric memory (=PLM Model)과 non-parametric memory (=retrieval-based)로 나누어서 설계해 위에 언급한 문제들에 대처하려고 하였죠.</p>
<p>하지만 기존의 방법들(REALM, ORQA)은 open-domain extractive question answering에서만 국한적으로 활용되어 왔기에, 본 연구자들은 이러한 접근법을 일반적으로 활용할 수 있는 framework를 제시합니다.</p>
<p>저자들이 제시한 framework를 QA System으로 한정지어 예시를 들어보면, 우선 question을 BERT에 태운 후 [CLS] Token을 빼와서 query vectory를 만든 후, wikipedia 각 document 역시 BERT(question encoding한 BERT와 다른 객체)를 태워 [CLS] Token을 빼와서 DB를 구축합니다. 다음, query vectory와 가장 유사한 (=내적 값이 큰) k개의 document vector에 해당하는 문서를 retrieve 합니다. 마지막으로 retrieved된 document와 question을 concat해 seq2seq의 encoder 입력에 넣은 후 answer을 decoder에서 generate하도록 훈련합니다.</p>
<p>자세한 모델의 구조는 다음절에서 설명하도록 하겠습니다.</p>
<hr>
<h2 id="2-method">2. Method</h2>
<p>페이스북에서 제공한 RAG의 전체적인 학습방법은 다음과 같습니다.</p>
<p><img src="https://velog.velcdn.com/images/tobigs-nlp/post/8195937c-8e08-4e63-8cd1-423e57b9a4b0/image.gif" alt=""></p>
<p>아래는 RAG의 전반적인 구조를 보여줍니다.</p>
<p><img src="https://velog.velcdn.com/images/tobigs-nlp/post/91952a5e-b4a7-49ed-967b-1419b9833a79/image.png" alt=""></p>
<p>앞서 언급드린거처럼 RAG는 크게 2가지 모델로 나누어집니다. </p>
<ol>
<li>Retriever : question $x$를 기반으로 유사한 document $z$를 retrieve하는 모델 (=$p_{\eta}(z|x)$)</li>
<li>Seq2Seq Generator : Retriever가 반환한 유사한 document $z$와 question $x$를encoder에 넣고 decoder에서 answer $y$를 generate 하는 모델 (=$p_{\theta}(y_{i}|x,z,y_{1:i-1})$)</li>
</ol>
<p>여기서 의문이 드실텐데요, 아까 분명히 K개의 유사한 document들을 가져와서 answer를 generate하는데 활용한다고 했는데 이 K개를 어떠한 식으로 concat하는가? 일 것입니다.</p>
<p>저자들은 이를 2가지 방법으로 나누어서 제안합니다. (위 그림의 파란색 부분의 marginalize가 해당 부분을 명시합니다.)</p>
<p><img src="https://velog.velcdn.com/images/tobigs-nlp/post/801677b7-1925-45b4-8c18-edeac56d417d/image.png" alt=""></p>
<h3 id="21-models">2.1 Models</h3>
<h4 id="211-rag-sequence-model">2.1.1 RAG-Sequence Model</h4>
<p>맨 처음에 question vector $x$와 유사한 document를 뽑고 각 document 1개랑 question vector $x$를 concat시켜서 총 K개의 forwarding을 진행한 후 이를 marginalize하는 방법입니다. 수식의 오른편을 보면 하나의 유사한 document $z$에 대해서 answer y를 generate한 후 그 document와 question의 유사도인 $p_{\eta}(z|x)$와 곱한 후 이를 모든 documents에 대해서 marginalize해 가중 평균하는 구조이죠.</p>
<h4 id="212-rag-token-model">2.1.2 RAG-Token Model</h4>
<p>이번에는 매 target token마다 다른 document를 retreive하면서 answer를 생성하는 방법입니다. 수식의 오른편을 보시면 매 time-step마다 유사한 K개의 document가 각각 question vector $x$와 concat해서 output token $y_{i}$에 대한 확률을 계산하고 마찬가지로 document와 question의 유사도인 $p_{\eta}(z|x)$와 곱하면서 marginalize해 가중 평균하는 구조입니다.</p>
<p><img src="https://velog.velcdn.com/images/tobigs-nlp/post/5844ba67-e910-48d9-8f48-cd4e49d63d5a/image.png" alt=""></p>
<h3 id="22-retriever-dpr">2.2 Retriever: DPR</h3>
<p>Retrievers는 상당히 직관적입니다. 이전에 설명드린것처럼 question과 document를 서로 다른 BERT를 통과해 [CLS] Token을 계산한 후 내적을 통해 유사도를 구하는 모델입니다. 저자들은 이미 wikipedia document로 pre-trained된 모델을 활용했다고 하며, 각각 document index를 non-parametric memory로 지정하였습니다.</p>
<h3 id="23-generator-bart">2.3 Generator: BART</h3>
<p>Generator로는 BART-large를 활용했고, 이전에 언급한 것처럼 [document;question]식으로 concat된 encoder input을 만들어 answer를 generate 하였습니다.</p>
<h3 id="24-training">2.4 Training</h3>
<p>저자들은 매 question마다 유사한 K개의 document에 대한 정답 label 없이 훈련을 진행하였고, DPR의 경우 question을 encoding하는 BERT만 gradient를 흘리고 document를 encoding하는 BERT는 학습하지 않았습니다.</p>
<p><img src="https://velog.velcdn.com/images/tobigs-nlp/post/cfeb10b5-4846-417e-886d-b11b7111530a/image.png" alt=""></p>
<h3 id="25-decoding">2.5 Decoding</h3>
<h4 id="252-rag-token-model">2.5.2 RAG-Token Model</h4>
<p>Token 별로 새로운 document를 condition해주는 모델인 RAG-Token Model은 기존의 beam-search를 그대로 활용해주어도 됩니다. 왜냐하면 어짜피 각 hypothesis가 이미 이전 time-step까지 도출해낸 text-sequence는 주어져 있고, $x$와 새롭게 retrieve된 document $z_{i}$와 함께 다음 time-step의 vocab distribution을 계산하는 것은 추가적인 input만 생길 뿐, 기존의 beam-search에서 벗어나는게 없기 때문입니다.</p>
<h4 id="252-rag-sequence-model">2.5.2 RAG-Sequence Model</h4>
<p>문제는 RAG-Sequence Model입니다. 애초에 answer을 generate할 때 하나의 document $z_{i}$은 서로 다른 answer을 generate할 것이기 때문에 기존의 beam-search에서 이를 marginalize하기는 불가능합니다. 따라서 저자들은 우선은 각각의 document $z_{i}$에 대해서 beam-search를 진행하고, 모든 document $z_{i}$가 공통된 beam을 갖도록 각 document $z_{i}$에 등장한 beam에 대해서 추가적인 forward pass를 진행해주고, 이를 $p_{\eta}(z|x)$와 곱하면서 marginalize해준다고 하였습니다. 하지만 이렇게 계산해줄 경우, 각 document별로 수많은 beam을 generate하는 forward pass를 진행해주어야 함으로, 저자들은 애초에 question $x$와 document $z_{i}$에서 등장하지 않는 beam은 전부 등장확률을 0으로 지정했다고 합니다. (저도 마지막 부분은 아직 명확하지 않아 추후에 이해가 되면 수정하도록 하겠습니다.)</p>
<h2 id="3-experiments-and-results">3. Experiments and Results</h2>
<h3 id="31-open-domain-question-answering">3.1 Open-domain Question Answering</h3>
<p>Open domain QA는 다양한 주제에 대한 대량의 문서 집합으로부터 질문에 대한 답을 해주는 문제입니다. (여기서 해준다고 표기한 이유는 문서를 기반으로 정답을 생성할 수도 있고, 문서 집합에서 정답을 추출할 수도 있기 때문입니다.) 저자들은 retrieval과 extractive system에만 의존하는 non-parametric model과 외부 정보 없이 parameter에만 의존해 정답을 생성하는 pure parametric model과의 비교 실험을 진행했습니다. (사실상 둘다 쓴 RAG가 성능이 잘 나오는 것은 당연한거 아닌가..?) 총 4개의 데이터셋에 대해서 실험을 진행했는데, SOTA를 거의 갈아 치웠습니다. </p>
<p><img src="https://velog.velcdn.com/images/tobigs-nlp/post/af9305ce-30a0-4068-b560-4e3d12d118fc/image.png" alt=""></p>
<p>저자들은 본인들의 방법이 추출된 document들에 질문에 대한 힌트는 있지만 말그대로의 정답 (=verbatim)은 없는 경우, retrieve된 여러 문서들과 질문을 기반으로 답변을 생성하는 RAG가 상대적으로 좋은 성능을 보인다고 합니다.</p>
<p><img src="https://velog.velcdn.com/images/tobigs-nlp/post/ef09d535-02ad-425c-9a82-8d9697271673/image.png" alt=""></p>
<h3 id="32-abstractive-question-answering">3.2 Abstractive Question Answering</h3>
<p>위의 open domain 문제는 extract 기반의 정답 생성 모델이기에 저자들은 free form 형태의 QA로 RAG의 성능을 측정하고자 했습니다. MSMARCO NLG task v2.1를 활용하였는데, 이 문제는 Question과 Question을 검색 엔진에 검색했을 때 나오는 10개의 golden passage, 그리고 이를 바탕으로 생성한 full sentence answer로 구성되어 있습니다. 저자들은 golden passage를 활용하지 않았는데, 이럴 경우 자신들이 활용하는 DB인 위키피디아만으로는 question에 대한 정확한 답을 추출할 수 없는 문제도 있기에 이때 RAG의 parametric한 모델에 성능을 기대한다고 글을 작성하였습니다. 실제로 실험 결과, golden passage에 의존하지 않는 RAG가 SOTA를 달성했다고 합니다.</p>
<h3 id="33-jeopardy-question-generation">3.3 Jeopardy Question Generation</h3>
<p>Jeopardy Quesion Generation은 주어진 정답 entity를 가지고 그 정답에 상응하는 질문을 만드는 문제입니다. 예를 들어,</p>
<ul>
<li>Answer - &quot;The World Cup&quot;</li>
<li>Question - &quot;In 1986 Mexico scored as the first country to host this international sports competition twice.&quot;</li>
</ul>
<p>의 Pair에서 Question을 생성해야 함으로 굉장히 까다로운 문제입니다.</p>
<p>저자들은 matching entity에 더 높은 가중치를 주어 BLEU보다 Question Generation에서 인간과의 더 높은 상관관계를 보이는 측정지표인 Q-BLEU-1과 인간을 통해 Faculty(실제 외부 사실을 바탕으로 생성된 질문이 사실인지를 평가)와 Specificity(Answer와 생성된 Question간의 상호 의존성을 평가)를 평가했다고 합니다.</p>
<p><img src="https://velog.velcdn.com/images/tobigs-nlp/post/45272de9-f43c-41fa-8bd7-d6a7fe659d5c/image.png" alt=""></p>
<h3 id="34-fact-verfication">3.4 Fact Verfication</h3>
<p>Fever라는 데이터셋은 자연어 claim에 대해서 위키피디아에서 적절한 문서를 가져와 해당 claim이 supported되는지, refuted되는지, 아니면 위키피디아에 충분한 정보가 없는지 판별하는 문제입니ㅏ다. 이 문제는 상당한 수준의 기계추론을 요구합니다. 왜냐하면 1) claim에 대응하는 적절한 문서를 위키피디아에서 retrieve 해야하고, 2) retrieve된 문서를 바탕으로 정확하게 claim에 대한 추론을 해야하기 때문입니다. 저자들은 real-world에서는 어떤 claim이 주어졌을때 어떤 문서가 이와 관련 있는지에 대한 정보가 없기 때문에 retrieve 문서에 대한 supervise learning은 진행하지 않고, 학습을 진행했다고 합니다. SOTA모델들은 FEVER을 위해 특화된 구조를 가지고 있지만, RAG는 범용성 높은 구조로 괄목할만한 성능을 보여주었습니다.</p>
<h2 id="4-additional-results">4. Additional Results</h2>
<h3 id="retrieval-ablations">Retrieval Ablations</h3>
<p>저자들은 RAG가 가진 neural retrieval mechanism이 아닌, overlap 기반의 BM25 retrieval, freezed neural retrieval로 ab test를 진행하였습니다.</p>
<p><img src="https://velog.velcdn.com/images/tobigs-nlp/post/c86da488-1883-4d3e-996c-a96a1dbf8e80/image.png" alt=""></p>
<p>Fever의 경우, 특정 entity가 claim을 평가하는데 중요한 역할을 하여 overlap 기반의 retrieval이 성능이 높았지만 open domian QA의 경우 학습하는 neural retrieval의 성능이 높은 것을 확인할 수 있습니다.</p>
<h3 id="effect-of-retrieving-more-documents">Effect of Retrieving more documents</h3>
<p><img src="https://velog.velcdn.com/images/tobigs-nlp/post/afde38df-5481-4e17-8a95-d6c1bdcf2b7b/image.png" alt=""></p>
<p>Ab test를 통해 항상 더 많은 document들을 retrieve할수록 성능이 향상되지 않음을 보였습니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[PaLM: Scaling Language Modeling with Pathways (2)]]></title>
            <link>https://velog.io/@tobigs-nlp/PaLM-Scaling-Language-Modeling-with-Pathways-2</link>
            <guid>https://velog.io/@tobigs-nlp/PaLM-Scaling-Language-Modeling-with-Pathways-2</guid>
            <pubDate>Wed, 01 Jun 2022 02:41:03 GMT</pubDate>
            <description><![CDATA[<p>예고했듯, (2)편에서는 초대규모 언어모델의 효율적인 학습을 가능하게 한 Pathways와 그를 이해하기 위해 필요한 선행 지식들에 대해 공부할 것이다. 또한, 모델을 실험하기 위해 사용된 새로운 벤치마크 및 방법들과, few-shot의 성능을 크게 올린 chain-of-thought prompting 등에 대해 공부할 것이다. </p>
<h2 id="4-training-infrastructure">4. Training Infrastructure</h2>
<p>PaLM은 JAX와 T5X를 사용하며, 두 대의 TPU v4 Pods를 이용해 학습을 진행한다. </p>
<p>참고로, JAX는 구글이 만든 머신러닝 라이브러리로, 넘파이를 GPU에서 연산할 수 있게 하여 기존 넘파이를 개선, 훨씬 빠르게 연산을 진행한다. 또한, JIT (just in time) 컴파일 기법과 XLA 컴파일러 (Accelerated Linear Algebra)를 사용하여 런타임에 사용자가 생성한 TensorFlow 그래프를 분석하고 실제 런타임 차원과 유형에 맞게 최적화 및 여러 연산을 함께 합성하고 이에 대한 효율적인 기계어 코드를 내보낸다고 한다. </p>
<blockquote>
<p>JIT 컴파일은 프로그램을 실제 실행하는 시점에 기계어로 번역하는 컴파일 기법이다. </p>
</blockquote>
<blockquote>
<p> XLA (Accelerated Linear Algebra)는 Tensorflow의 서브 프로젝트로 그래프 연산의 최적화 / 바이너리 사이즈의 최소화 등을 목적으로 하는 컴파일러. <a href="%22https://b.mytears.org/2019/08/3022/%22">해당 블로그</a>에 잘 정리되어있습니다!</p>
</blockquote>
<p>기존의 대규모 언어모델들은 일반적으로 두 가지 방법을 사용해 학습을 진행한다. </p>
<ol>
<li><p>single TPU 
 LaMDA /GLaM이 대표적</p>
</li>
<li><p>pipeline parallelism</p>
<ul>
<li>Megatron-Turing NLG 530B: <ul>
<li>2240 A100 GPUs &amp; model, data, pipeline parallelism</li>
</ul>
</li>
<li>Gopher (Rae et al., 2021a) <ul>
<li>four DCN-connected TPU v3 Pods</li>
<li>pipelining between pods.</li>
</ul>
</li>
</ul>
</li>
</ol>
<p>명확한 이해를 위해 Data/model/pipiline parallelism에 대해 짚고 넘어가자. </p>
<p><img src="https://i.imgur.com/ANq1YxE.png" alt="스크린샷 2022-05-31 오후 4.14.29"></p>
<ul>
<li><p>Data Parallelism
말 그대로 여러 대의 gpu에 데이터를 분산하여 시간을 단축하는 방법. weigth parameter를 업데이트할 때마다 여러 gpu가 학습한 결과를 종합한 후 다시 나누는 synchronization (all-reduce)이 필요하다. </p>
</li>
<li><p>Model Parallelsim
모델 사이즈가 너무 커서 하나의 gpu 메모리에 다 들어가지 않는 경우, 여러 gpu에 모델 파라미터를 나누어 연산하는 것. 일반적으로 tensor parallelism과 pipeline parallelsim으로 나누어진다. 
  <img src="https://i.imgur.com/1OklTfk.png" alt="스크린샷 2022-05-31 오후 4.24.56"></p>
</li>
<li><p>Tensor Parallelsim
커다란 행렬을 여러 gpu로 나누어 연산한 후 그 결과값을 concat하는 방식</p>
</li>
<li><p>Pipeline parallelsim</p>
<ul>
<li><img src="https://i.imgur.com/B833D66.png" alt="스크린샷 2022-05-31 오후 4.29.19">
순차적으로 이어진 레이어 혹은 레이어 안의 stage를 gpu들이 나누어서 하는 방식. 순차적으로 해야할 일을 나눠하는 개념이기에 throughput의 증가는 없음. </li>
<li><img src="https://i.imgur.com/vMV1oZa.png" alt="스크린샷 2022-05-31 오후 4.29.46">
한 time에 하나의 gpu만 활성화되어 있다는 문제점을 완화하기 위해 입력 미니배치를 마이크로배치로 나누어 뿌림.</li>
<li>[단점]<ol>
<li>여러 gpu가 활성화되지 않는 bubble 존재</li>
<li>마이크로배치들/weight를 계속해서 올리는 과정에서 higher memory bandwidth를 요구하게 됨 </li>
</ol>
</li>
</ul>
</li>
</ul>
<h4 id="pathways">PATHWAYS</h4>
<p>PaLM에서는 pipeline을 사용하지 않으면서 540B나 되는 큰 모델을 6144개의 칩으로 확장시키기 위해 다음의 전략을 사용한다. </p>
<p>첫째, 각 TPU v4 Pod은 full copy of the model parameters를 가진다. 이때, 각 weight tensor는 12-way model parallelism을 통해 3072개의 chip에 나누어져 있고, 마찬가지로 데이터도 256-way fully sharded data parallelism를 통해 분산되어있다. </p>
<p>둘째, 각 pod 단위에서 two-way data parallelism을 적용하기 위해, client-server architecture를 이용한다.</p>
<p>이때, 하나의 Python client는 학습 배치의 반을 나누어 각 pod에게 쏘아준다. 그럼 각 pod은 forward/backward를 standard within-pod data and model parallelism을 이용해 수행한다. </p>
<p>각 pod은 반 개의 배치를 이용해 얻은 gradients의 결과를 공유하고 다음 timestep을 위한 파라미터를 준비한다. </p>
<p><img src="https://i.imgur.com/hbEfmtK.png" alt="스크린샷 2022-05-31 오후 5.19.21"></p>
<p>위의 사진을 보면서 이해를 해보자. </p>
<p>Python client는 상단의 왼쪽과 같이 dataflow program 을 구성한다. </p>
<p>component A는 각 pod의 forward+backward computation 결과이다. component B는 optimizer update 정보를 담고 있으며, cross-pod gradient transfer가 존재한다. </p>
<p>The Pathways program은 처음에 각 pod으로 하여금 component A 를 연산하게 하고, 각 결과를 pod끼리 공유하게 한다. 마지막으로 component B를 연산한다. </p>
<p>Pathways system은 여러 대의  accelerator chips를 활용하여 모델을 훈련시킬 수 있는 특징들을 가진다. </p>
<ol>
<li>asynchronous gang-scheduling를 각 pod scheduler에 적용, 즉, 여러 대의 프로세스가 소통하면서 동시에 작동하도록 함으로써, latency를 줄임</li>
<li>sharded-dataflow execution model을 사용하기 때문에 data transfer 시간을 줄임 (refer to Barham et al. (2022) for details).</li>
</ol>
<h2 id="5-training-efficiency">5. Training Efficiency</h2>
<p>연구자들은 성능을 평가하기 위해 MFU(model FLOPs utilization)라는 새로운 지표를 소개한다. 이는 모델이 어떻게 구현되었는지에 구애받지 않고 더 정확한 성능을 측정할 수 있다. </p>
<p>이는 관측된 throughput, 즉, 일초당 처리할 수 있는 토큰의 수와 이론적 최대 throughput과의 비율이다. 다시 말해, 기대되는 최대 throughput과 현실 사이의 비교라고 할 수 있다. </p>
<p><img src="https://i.imgur.com/srx5ANO.png" alt="스크린샷 2022-05-31 오후 12.15.44"></p>
<h2 id="6-training-setup">6. Training Setup</h2>
<ul>
<li><p>Weight initialization </p>
<ul>
<li>input embeddings<ul>
<li>E ∼ N (0, 1)</li>
</ul>
</li>
<li>pre-softmax output logits을 1/√n로 scale</li>
<li>kernel weights (embeddings &amp; layer norm scales 제외 나머지) <ul>
<li>“fan-in variance scaling”, i.e., W ∼ N(0,1/√n_in), <ul>
<li>n_in : input dimension</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li><p>Optimizer</p>
<ul>
<li>Adafactor optimizer<ul>
<li>Adam (Kingma &amp; Ba, 2014) with “parameter scaling,</li>
</ul>
</li>
</ul>
</li>
<li><p>Sequence length: 2048</p>
</li>
<li><p>Dropout: X</p>
</li>
</ul>
<h1 id="7-evaluation">7. Evaluation</h1>
<h2 id="71-english-nlp-tasks">7.1 English NLP tasks</h2>
<p><img src="https://i.imgur.com/3trwfov.png" alt="스크린샷 2022-05-31 오후 1.46.27"></p>
<h3 id="711-finetuning">7.1.1 Finetuning</h3>
<p> PaLM model을 SuperGLUE benchmark로 파인 튜닝해 성능을 비교해보았다. </p>
<p><img src="https://i.imgur.com/VkXrmi6.png" alt="스크린샷 2022-05-31 오후 1.50.56"></p>
<p>6을 확인하면 파인튜닝했을때, sota에 비건하는 성능을 보인다는 것을 확인할 수 있으며, 7에서는 아직까지 퓨샷보다는 파인튜닝이 성능이 훨씬 좋긴하다는 것을 확인할 수 있다. 마지막으로 8에서 그래도 디코더 모델들중에서는 가장 성능이 좋다는 것을 강조한다. </p>
<h2 id="72-big-bench">7.2 BIG-bench</h2>
<p>150 tasks : logical reasoning, translation, question answering, mathematics, 등등</p>
<p><img src="https://i.imgur.com/sqpqraw.png" alt="스크린샷 2022-05-31 오후 1.57.12"></p>
<ul>
<li>goal step wikihow <ul>
<li>이벤트 사이의 순서 맞추기. Example: <ul>
<li>Input: In order to ”clean silver,” which step should be done first? (a) dry the silver (b) handwash the silver </li>
<li>Answer: (b) handwash the silver</li>
</ul>
</li>
</ul>
</li>
<li>logical args <ul>
<li>논리적으로 맞는 inference 고르기. Example:<ul>
<li>Input: Students told the substitute teacher they were learning trigonometry. The substitute told them that instead of teaching them useless facts about triangles, he would instead teach them how to work with probabilities. What is he implying? (a) He believes that mathematics does not need to be useful to be interesting. (b) He thinks understanding probabilities is more useful than trigonometry. (c) He believes that probability theory is a useless subject.</li>
<li>Answer: (b) He thinks understanding probabilities is more useful than trigonometry.</li>
</ul>
</li>
</ul>
</li>
<li>english proverbs <ul>
<li>어떤 속담이 주어진 문서를 가장 잘 설명하는지 고르기. Example: <ul>
<li>Input: Vanessa spent lots of years helping out on weekends at the local center for homeless aid. Recently, when she lost her job, the center was ready to offer her a new job right away. Which of the following proverbs best apply to this situation? (a) Curses, like chickens, come home to roost. (b) Where there is smoke there is fire (c) As you sow, so you shall reap.</li>
<li>Answer: (c) As you sow, so you shall reap.</li>
</ul>
</li>
</ul>
</li>
<li>logical sequence <ul>
<li>어떤 것이 논리적으로 올바른 순서를 가지는지 고르기. Example:<ul>
<li>Input: Which of the following lists is correctly ordered chronologically? (a) drink water, feel thirsty, seal water bottle, open water bottle (b) feel thirsty, open water bottle, drink water, seal water bottle (c) seal water bottle, open water bottle, drink water, feel thirsty</li>
<li>Answer: (b) feel thirsty, open water bottle, drink water, seal water bottle</li>
</ul>
</li>
</ul>
</li>
<li>navigate <ul>
<li>navigational instructions을 따랐을 때 결과 맞추기. Example:<ul>
<li>Input: If you follow these instructions, do you return to the starting point? Always face forward. Take 6 steps left. Take 7 steps forward. Take 8 steps left. Take 7 steps left. Take 6 steps forward. Take 1 step forward. Take 4 steps forward.</li>
<li>Answer: No</li>
</ul>
</li>
</ul>
</li>
<li>mathematical induction <ul>
<li>실제 수학과 다르더라도, 규칙을 주었을 때 맞추는지 확인. Example:<ul>
<li>Input: It is known that adding 2 to any odd integer creates another odd integer. 2 is an odd integer. Therefore, 6 is an odd integer. Is this a correct induction argument (even though some of the assumptions may be incorrect)? </li>
<li>Answer: Yes</li>
</ul>
</li>
</ul>
</li>
</ul>
<h2 id="73-reasoning">7.3 Reasoning</h2>
<p><img src="https://i.imgur.com/IqhBtV3.png" alt="스크린샷 2022-05-31 오후 2.04.01"></p>
<ul>
<li>chain-of-thought prompting
최근의 연구들에 따르면, reasoning의 중간 단계를 함께 만들게 함으로써 답변의 질이 비약적으로 향상되었다고 한다. 이를 chain-of-thought라고 한다. 사진을 통해 이해해보자. </li>
</ul>
<p><img src="https://i.imgur.com/ZY4MrK6.png" alt="스크린샷 2022-05-31 오후 2.08.58"></p>
<h2 id="74-code-tasks">7.4 Code Tasks</h2>
<p>코드 태스크를 평가하는 지표로는 pass@k metric를 사용한다. pass@k metric는, 모델로 하여금 K개의 샘플을 만들게 하고, 이 중 하나라도 문제를 해결하면 맞다고 하는 지표이다. </p>
<p><img src="https://i.imgur.com/iX3pxkC.png" alt="스크린샷 2022-05-31 오후 2.10.21"></p>
<p><img src="https://i.imgur.com/ZF6AR0y.png" alt="스크린샷 2022-05-31 오후 3.27.11"></p>
<h2 id="75-translation">7.5 Translation</h2>
<ul>
<li>English-centric language pairs 
  <img src="https://i.imgur.com/NKp8WiD.png" alt="스크린샷 2022-05-31 오후 3.31.11"></li>
<li>Extremely-low resource language pairs
<img src="https://i.imgur.com/m1ErN7C.png" alt="스크린샷 2022-05-31 오후 3.35.47"></li>
</ul>
<h2 id="76-multilingual-natural-language-generation">7.6 Multilingual Natural Language Generation</h2>
<ul>
<li>MLSum (Scialom et al., 2020) – Summarize  [de/es]</li>
<li>WikiLingua (Ladhak et al., 2020) – Summarize [en/es/ru/tr/vi → en]</li>
<li>XSum (Narayan et al., 2018) – Summarize : single sentence. [en]</li>
<li>Clean E2E NLG (Novikova et al., 2017; Duˇsek et al., 2019) –  one or two sentences. [en]</li>
<li>Czech Restaurant response generation (Duˇsek &amp; Jurˇc ́ıˇcek, 2019) – Given: dialog context -&gt; generate : response [cz]</li>
<li>WebNLG 2020 (Gardent et al., 2017; Castro Ferreira et al., 2020) – subject-predicate-object이 주어지면, 완벽한 문장으로 만들기 [en/ru]</li>
</ul>
<p><img src="https://i.imgur.com/ulVlVVr.png" alt="스크린샷 2022-05-31 오후 3.38.02"></p>
<p>해당 실험의 의의는 다음과 같다:</p>
<ul>
<li><p>Effectiveness of finetuning </p>
<ul>
<li>특히 요약 태스크에서는 finetuning이 아직 중요했다. </li>
</ul>
</li>
<li><p>Generation quality of English vs. non-English</p>
<ul>
<li>PaLM은 영어 생성에 있어서는 5/6의 요약 태스크에서 sota를 달성하였다(심지어 input이 영어일때도). 하지만 non-English summariation (MLSum) 에서는 좋은 성능을 보이지 못했으며 few-shot and finetuning과의 간극도 굉장히 컸다. 즉, 외국어 생성에 있어서는 더 나쁜 성능!</li>
</ul>
</li>
<li><p>1-shot vs. finetuning gap</p>
<ul>
<li>Data-to-Text results를 보면 few-shot과 best finetuned results의 간극이 굉장히 줄어들었다는 것을 볼 수 있다. </li>
</ul>
</li>
<li><p>Few-shot summarization</p>
<ul>
<li>large improvement from 8B → 62B, &amp; smaller-but-significant improvement from 62B → 540B.</li>
</ul>
</li>
</ul>
<h2 id="77-multilingual-question-answering">7.7 Multilingual Question Answering</h2>
<p>TyDiQA-GoldP benchmark
<img src="https://i.imgur.com/i12DCmL.png" alt="스크린샷 2022-05-31 오후 3.44.22"></p>
<p>비영어 데이터가 별로 없었음에도 불구하고 꽤나 좋은 결과를 낸다는 것을 확인할 수 있다. (≈ 22% of the 780B training tokens). 비교하자면,  mT5는 PaLM보다 6배 많은 비영어 데이터로 훈련을 시켰으며 ByT5는 1.5배 더 많은 비영어 데이터를 훈련시켰다. </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[ALBERT: A Lite BERT for Self-supervised Learning of Language Representations]]></title>
            <link>https://velog.io/@tobigs-nlp/ALBERT-A-Lite-BERT-for-Self-supervised-Learning-of-Language-Representations</link>
            <guid>https://velog.io/@tobigs-nlp/ALBERT-A-Lite-BERT-for-Self-supervised-Learning-of-Language-Representations</guid>
            <pubDate>Wed, 25 May 2022 04:03:21 GMT</pubDate>
            <description><![CDATA[<h3 id="1-introduction">1. Introduction</h3>
<p>최근 자연어처리 분야에서는 BERT와 같은 pre-trained language representation이 좋은 성능을 보이고 있고 일반적으로 크기가 커질수록 성능이 향상된다. 그리고 network의 성능 개선을 위해 큰 model을 훈련하고 작은 model로 distill 하는 방법이 있다. 본 논문에서는 큰 model을 학습 하지않고 바로 작은 model로 학습하면 되지 않을까?라는 의문을 제기했다. </p>
<p>큰 model를 train하는데 있어 memory limitation problem이 존재하고 train 시간이 너무 오래걸린다. Model parallelization(Shoeybi et al., 2019)과 clever memory management(Chen et al., 2016; Gomez et al., 2017)으로 memory limitation problem을 해결할 수 있지만, communication overhead와 model degradation problem을 해결할 수 없다.</p>
<p>본 논문에서는 ALBERT의 두가지 parameter reduction 기법을 소개한다.</p>
<ul>
<li>embedding parameter factorize</li>
<li>cross layer parameter sharing </li>
</ul>
<p>두 개의 기법 모두 성능은 크게 저하되지 않으면서 기존 BERT의 parameter를 reduction하여 parameter의 효율성을 크게 올려준다. </p>
<p>다음으로는 ALBERT에서는 NSP(Next Sentence Prediction)가 아닌 SOP(Sentence-Order Prediction)이라는 self-supervised loss를 제안했다. 이러한 방법으로 train을 진행하여 문장간의 coherence(일관성)을 효율적으로 학습시켰다. </p>
<p>결과적으로 ALBERT는 더 적은 parameter의 수로 BERT의 large size보다 더 좋은 성능을 보여줬고 GLUE, SQuAD, RACE benchmark에서 SOTA를 달성했다.</p>
<h3 id="2-related-work">2. Related Work</h3>
<h4 id="21-scaling-up-representation-learning-for-natural-language">2.1 Scaling up Representation Learning for Natural Language</h4>
<p>기존 NLP 분야에서는 word embedding을 통해 pre-training 하는 것에서 전체 network를 pre-training하고 이후 특정 task에 맞춰서 fine-tuning하는 방법으로 바뀌어 왔다. BERT를 포함한 여러 pretrained LM은 size가 커질수록 성능이 좋아진다는 결과가 많았지만, 논문에서 BERT는 1024 hidden size까지만 확인을 했으며, 2048로 늘리면 오히려 성능이 저하된다고 지적하고 있다. 또한 size가 큰 model들은 parameter의 수가 너무 많아 금방 GPU/TPU memory 한계에 도달하게 된다. </p>
<h4 id="22-cross-layer-parameter-sharing">2.2 Cross-Layer Parameter Sharing</h4>
<p>기존 transformer 구조에서도 parameter를 sharing하는 아이디어를 엿볼 수 있다. Encoder의 최종 output을 decoder의 multi-head attention의 key, value로 넘기는것에서 확인할 수 있다. </p>
<p>Dehghani et al., (2018)의 Universal transformers 논문에 따르면 cross-layer parameter sharing을 통해 기존 transformer보다 더 좋은 성능을 보여줬다. </p>
<p>아래 그림처럼 각 layer의 output이 input으로 들어가는 마치 RNN과 같은 형태를 가지고 있다.</p>
<p><img src="https://velog.velcdn.com/images/jody1188/post/84f49330-4ed5-4a4a-9145-21fce191980b/image.png" alt=""></p>
<p>또한  Deep Equilibrium Model(DQE) 논문에서는 input embedding과 output embedding이 평형을 이룰수 있다는것을 보여줬다.</p>
<h4 id="23-sentence-ordering-objectives">2.3 Sentence Ordering Objectives</h4>
<p>ALBERT에서는 기존 BERT에서 사용하는 NSP 방식이 아닌 SOP 방식을 사용한다. SOP(Sentence-Order Prediction)는 두개의 text의 순서를 예측하여 loss를 이용하고 NSP에 비해서 더 어려운 task라고 논문에서는 소개하고 있다. 그리고 특정 task에 대해서 더 좋은 성능을 보여준다고 한다.</p>
<h3 id="3-albert">3. ALBERT</h3>
<p>ALBERT의 구조는 BERT와 마찬가지로 transformer의 encoder를 사용하고 GLEU 함수를 사용한다. 그리고 다음과 같이 정의한다. </p>
<ul>
<li>$E$ : 단어의 embedding size</li>
<li>$L$ : encoder의 layer 개수</li>
<li>$H$ : hidden size</li>
</ul>
<p>Feed-forward와 filter size를 4$H$로 사용하고 attention heads도 $H$/ 64로 사용한다.</p>
<h4 id="31-factorized-embedding-parameterization">3.1 Factorized embedding parameterization</h4>
<p>기존 BERT에서는 $E$와 $H$를 같게 설정했다. 하지만 논문에서는 modeling 관점에서는 좋지 않다고 지적을 했다. Modeling 관점에서 보면, word-Piece embedding은 context-independent representation을 학습하고 hidden-layer의 embedding은 context-dependent representation을 학습을 하기 때문이다. Hidden layer에서 나온 output은 token의 문맥까지 학습된 embedding으로 word embedding보다 중요 정보를 더 많이 담고 있기 때문에 ALBERT에서는 $H$를 $E$보다 더 크게 설정했다. </p>
<p>$$
H &gt; E
$$</p>
<p>실용적인 측면에서 보면 최근에 vocab의 size가 점점 커지고 있는데, $E$와 $H$를 같게 설정하면 embedding matrix인 $V * E$ 또한 같이 증가하게 된다. 결국 model의 parameter가 너무 많아지는 결과가 초래된다. 그리하여 ALBERT에서는 factorization of embedding parameters를 사용한다. 기존 BERT에서는 one-hot vector들을 hidden space에 바로 projection 했는데 ALBERT에서는 one-hot vector를 $H$보다 많이 작은 $E$의 embedding space에 projection하고 그 다음 hidden space에 projection한다. 그렇게 되면 기존 parameter 개수를 $V$x$H$에서 ($V$ x $E$ + $E$ x $H$)로 줄일 수 있다.
<img src="https://velog.velcdn.com/images/tobigs-nlp/post/25e6a893-fa1c-4fb5-9840-0fd00d39dfb2/image.png" alt=""></p>
<h4 id="32-cross-layer-parameter-sharing">3.2 Cross-Layer parameter sharing</h4>
<p>ALBERT에서는 parameter를 공유하는 cross-layer parameter sharing을 사용했다. 기존에는 feed-foward network의 parameter layer에서 공유하거나 attention parameter만 공유하는 방법들이 있었다. 그러나 ALBERT에서 default decision은 모든 parameter를 공유하는것이다.  </p>
<p>아래의 그래프를 보면 input embedding과 output embedding의 L2 distance와 cosine similarity를 보여주고 있다. ALBERT의 embedding은 수렴하고 있고 BERT의 embedding은 진동하고 있는것을 확인할 수 있다. 논문에서는 layer에서 layer로의 전이가 BERT보다 ALBERT에서 훨씬 더 부드럽다는것을 확인할 수 있었다. 그러므로 parameter sharing을 통해 network parameter를 안정시킬 수 있다고 볼 수 있다. (input과 output의 유사도가 수렴한다는것이 weight sharing이 안정화에 기여한다고 이해했다.)</p>
<p><img src="https://velog.velcdn.com/images/jody1188/post/3057c8bb-c703-4cac-b7fc-0a67093b4897/image.png" alt=""></p>
<h4 id="33-inter-sentence-coherence-loss">3.3 Inter-sentence coherence loss</h4>
<p>기존 BERT에서는 MLM(Masked Language Modeling) loss와 더불어서 NSP(Next-Sentence Prediction) loss를 사용했다. NSP는 두개의 문장이 연속인지 아닌지를 예측하는 binary classification에 가까웠다. 하지만 추후에 논문에서 NSP의 영향이 좋지 않다는 분석이 많았고 이를 제거했을 때, 특정 task에서 더 좋은 성능을 얻을 수 있었다고 한다.</p>
<p>본 논문에서는 NSP의 가장 큰 문제점으로는 MLM과 비교했을 때 너무 쉽다는것이다. 또한, NSP는 topic prediction과 coherence prediction을 단일 task에 포함하고 있는데 topic prediction은 너무 쉬운 task이기 때문이라고 추측한다.</p>
<p>ALBERT에서는 위의 task를 제거하는것이 아닌 coherence를 학습하는데 중점을 두었다. 그렇게 SOP(Sentence-Order Prediction) loss를 도입했는데, SOP는 동일한 document에서 두개의 연속 sentence를 positive sample로 사용했고, 두개의 sentence의 순서가 바뀐것은 negative sample로 사용했다. 이는 해당 loss가 topic을 예측하는것보다 sentence간의 coherence를 예측하게 한다. SOP는 50%의 확률로 순서를 그대로 넣거나 순서를 반대로 섞어서 넣는다. 결과적으로 NSP task로는 SOP task를 전부 풀지 못하지만, SOP task로는 NSP task를 모두 풀 수 있다고 했다. </p>
<h4 id="34-model-setup">3.4 Model Setup</h4>
<p><img src="https://velog.velcdn.com/images/jody1188/post/9ae77c2e-6236-45d7-a9a5-c797a721879c/image.png" alt=""></p>
<p>위의 표는 BERT와 ALBERT 모델의 hyper parameter의 차이를 보여준다. ALBERT-large는 기존 BERT-large보다 18배 적은 parameter를 사용한다. 그리고 ALBERT-xxlarge의 embedding size는 4096으로 BERT-large에 비해 약 4배 크지만, parameter의 개수는 70%정도 밖에 되지 않는다. </p>
<h3 id="4-experimental-results">4. Experimental Results</h3>
<h4 id="41-experimental-setup">4.1 Experimental Setup</h4>
<ul>
<li>기존 BERT와 같이 BookCorpus &amp; Wikipedia (16GB)</li>
<li>최대 길이는 512, 입력 시퀀스를 10%확률로 512보다 짧게 만듬</li>
<li>기존 BERT와 같이 vocab size는 30000</li>
<li>SentencePiece사용</li>
<li>n-gram masking을 사용, n-gram masking의 길이를 random하게 선택, 길이 n의 확률은
$$
p(n) = \frac{1/n}{\sum_{k=1}^N\frac{1}{k}}
$$</li>
<li>n-gram의 최대 길이는 3</li>
<li>batch size 4096</li>
<li>optimizer는 Lamb optimizer를 사용</li>
<li>learning rate는 0.00176</li>
</ul>
<h4 id="43-overall-comparison-between-bert-and-albert">4.3 Overall Comparison between BERT and ALBERT</h4>
<p><img src="https://velog.velcdn.com/images/jody1188/post/f539a7e3-50af-496c-8ff9-e181b22842c8/image.png" alt=""></p>
<p>위는 BERT와 ALBERT의 각종 benchmark에 대한 결과를 비교하는 표이다. </p>
<ul>
<li><p>ALBERT-xlarge는 BERT-large보다 더 적은 parameter 개수로 거의 비슷한 결과를 얻었음.</p>
</li>
<li><p>ALBERT-xxlarge는 BERT-large에 비해 70%정도의 parameter로 BERT-large의 모든 점수를 넘었음</p>
</li>
<li><p>ALBERT-xxlarge는 적은 parameter로 성능은 좋아졌지만, 계산은 더 많아지고 속도는 BERT-large에 비해 줄었음</p>
</li>
</ul>
<h4 id="44-factorized-embedding-parameterization">4.4 Factorized Embedding Parameterization</h4>
<p><img src="https://velog.velcdn.com/images/jody1188/post/9f8ae5e3-407a-4860-bbd4-75f90101d7ce/image.png" alt=""></p>
<p>위의 표는 여러 downstream task에서 ALBERT를 사용하여 embedding size를 변경한 결과를 보여준다.</p>
<ul>
<li>not-shared ALBERT에서는 embedding size가 클수록 성능이 좋아지지만 미미함</li>
<li>all-shared ALBERT에서는 128 size가 가장 성능이 좋음</li>
</ul>
<p>그래서 모든 실험에서 embedding size를 128로 잡았다.</p>
<h4 id="45-cross-layer-parameter-sharing">4.5 Cross-layer parameter sharing</h4>
<p><img src="https://velog.velcdn.com/images/jody1188/post/f855c957-1ff8-40c3-850b-7c09dc433026/image.png" alt=""></p>
<p>위 표는 두가지의 embedding size 768, 128를 가진 ALBERT의 성능을 all-shared stategy(ALBERT-style), non-shared strategy(BERT-style) 및 only the attention parameter share, FFN parameter share로 나누어 비교했다.</p>
<ul>
<li>all-shared strategy에서는 모두 성능이 저하됨</li>
<li>대부분 성능의 저하는 FFN layer에서 sharing하는것에서 나타남</li>
<li>attention parameter를 sharing하면 128에서 저하가 없고 768에서는 조금의 저하가 발생</li>
</ul>
<h4 id="46-sentence-order-prediction-sop">4.6 Sentence order prediction (SOP)</h4>
<p>다음은 SOP에 대한 실험을 head-to-head로 비교했다. None은 XLNet과 RoBERTa, NSP는 BERT, SOP는 ALBERT이다.</p>
<p><img src="https://velog.velcdn.com/images/jody1188/post/0046b806-609f-4e6e-9516-5ac555f208ea/image.png" alt=""></p>
<ul>
<li>NSP가 52%의 정확도로 SOP task를 수행하지 못함</li>
<li>반대로 SOP는 NSP task에서 78%의 정확도로 잘 수행함</li>
<li>SOP loss는  multi-sentence encoding task에서 성능 향상을 보임</li>
</ul>
<h4 id="47-effect-of-network-depth-and-width">4.7 EFFECT OF NETWORK DEPTH AND WIDTH</h4>
<p><img src="https://velog.velcdn.com/images/tobigs-nlp/post/a3e8823c-0315-4bfe-8527-b08f2a4bf961/image.png" alt=""></p>
<p>위의 표는 깊이(number of layers)가 ALBERT의 성능에 미치는 영향을 보여준다. 층을 높게 쌓을수록 성능은 증가하지만 일정 층을 넘어가면 성능이 저하되는것을 보여준다.</p>
<p> <img src="https://velog.velcdn.com/images/tobigs-nlp/post/45f9278a-688f-4912-8b0e-cfa3920126ef/image.png" alt=""></p>
<p>위의 표는 너비(hidden size)가 ALBERT의 성능에 미치는 영향을 보여준다. 위의 결과와 비슷하게 hidden size가 커질수록 성능이 증가하지만 size가 너무 크면 오히려 성능이 감소한다. 또한 저자들은 위 model 중 어느 것도 overfitting하지 않았다고 했다.</p>
<h4 id="48-what-if-we-train-for-the-same-amount-of-time">4.8 What if we train for the same amount of time?</h4>
<p><img src="https://velog.velcdn.com/images/jody1188/post/3ccba12c-ec8c-4f30-8fd0-68d15063f37c/image.png" alt=""></p>
<p>위 표를 보면, BERT-large model과 ALBERT-xxlarge model의 학습시간은 거의 비슷하다. 그러나 성능은 ALBERT-xxlarge가 더 좋은것을 확인할 수 있다.</p>
<h4 id="49-additional-training-data-and-dropout-effects">4.9 Additional training data and dropout effects</h4>
<p><img src="https://velog.velcdn.com/images/jody1188/post/301ad7f1-a8d4-4330-aeaf-b53772136f4c/image.png" alt=""></p>
<p>위의 그래프는 additional data가 존재할때와 존재하지 않을때의 MLM accuracy를 비교했으며 additional data가 있을 때, 성능이 향상되었다.
<img src="https://velog.velcdn.com/images/jody1188/post/babced65-480b-4285-b4bf-e4df3170be50/image.png" alt=""></p>
<p>또한 downstream task에서도 성능향상을 확인할 수 있다. </p>
<p>논문에서는 1M step을 training 했을때, 가장 큰 model도 overfit되지 않아서 dropout을 제거했다. 
<img src="https://velog.velcdn.com/images/jody1188/post/b39da85a-5fdf-49e6-a721-265ff6452271/image.png" alt=""></p>
<p>위의 그래프를 통해 dropout이 제거했을 때, MLM accuracy가 크게 향상된것을 알 수 있다. 
<img src="https://velog.velcdn.com/images/jody1188/post/16c54a77-e880-4110-bef7-cb8525b98832/image.png" alt=""></p>
<p>위 표를 보면 dropout을 제거했을 때, downstream task에서도 성능이 향상된것을 볼 수 있다. 결론적으로 dropout이 성능을 저하시킬 수 있음을 논문에서는 얘기한다.</p>
<h4 id="5-conclusion">5. Conclusion</h4>
<ul>
<li>ALBERT-xxlarge는 BERT-large보다 더 적은 parameter로 더 좋은 성능을 보여줬지만 structure가 더 크기 때문에 계산비용이 더 큼</li>
<li>다음 단계로는 ALBERT의 train 속도와 inference 속도를 높이는것</li>
<li>Model의 성능이 향상된것도 중요하지만 model의 크기가 줄어 memory limitation 문제도 해결</li>
<li>SOP가 NSP보다 좋다는 것을 보여줌 </li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[PaLM: Scaling Language Modeling with Pathways (1)]]></title>
            <link>https://velog.io/@tobigs-nlp/PaLM-Scaling-Language-Modeling-with-Pathways-1</link>
            <guid>https://velog.io/@tobigs-nlp/PaLM-Scaling-Language-Modeling-with-Pathways-1</guid>
            <pubDate>Wed, 25 May 2022 03:48:29 GMT</pubDate>
            <description><![CDATA[<p>바야흐로 대규모 언어모델의 시대이다. 이번에 리뷰할 논문은 2022년 4월에 구글에서 공개한 따끈따끈한 모델, <strong>PaLM</strong>(Pathways Language Model)이다. </p>
<p>GPT3가 공개된 이후, 많은 대규모 autoregressive 언어 모델들이 공개되었다. 가장 대표적인 post-GPT3 모델들은, GLaM (2021), Gopher (2021), Chinchilla ( 2022), Megatron–Turing NLG (2022), LaMDA (2022)인데, 이들은 다음 4개의 흐름을 가진다. </p>
<ol>
<li>모델 사이즈 scaling (depth &amp; width)</li>
<li>데이터 추가</li>
<li>cleaner &amp; diverse 데이터</li>
<li>model capacity 증가</li>
</ol>
<p>PaLM도 이 흐름에 편승한다. PaLM은 한 마디로 다음의 특징을 가지는 모델이다. </p>
<blockquote>
<p>540B parameter, densely activated, autoregressive Transformer, 780 billion tokens, high-quality text</p>
</blockquote>
<p>GPT3가 175B 파라미터였다는 것을 생각해보면, 구글이 얼마나 거대한 모델을 만든 것인지 비교 가능하다. </p>
<p>이 거대한 모델은 <strong>Pathways</strong>라고 명명한 새로운 ML system에 의해 학습 가능해졌는데, 이는 매우 큰 인공신경망을 두 대의 TPU v4 Pods(하나당 4096개 chip), 구체적으로는 6144 TPU v4 chips를 이용해 학습의 효율성을 올린다. </p>
<p>해당 논문의 주요 의의는 다음과 같다:</p>
<ol>
<li><p>Efficient scaling </p>
<ul>
<li>모델들은 일반적으로 셋 중 하나로 학습된다<ul>
<li>single TPU system</li>
<li>pipeline parallelism to scale across GPU clusters </li>
<li>multiple TPU v3 pods with a maximum scale of 4096 TPU v3 chips</li>
</ul>
</li>
<li>PaLM은 최초로 Pathways를 사용한다. <ul>
<li>pipeline-free training</li>
<li>6144 chips across two TPU v4 Pods</li>
</ul>
</li>
</ul>
</li>
<li><p>Continued improvements from scaling</p>
<ul>
<li>natural language, code, mathematical reasoning 태스크들에서 sota!</li>
</ul>
</li>
<li><p>Breakthrough capabilities </p>
<ul>
<li>NLU &amp; NLG에서 뛰어난 성능을 보인다. </li>
<li>특히 multi-step mathematical/commonsense reasoning이 요구되는 tasks에서 좋은 성능 보인다.  </li>
<li>만약 모델이 <strong>chain-of-thought prompting</strong>과 합쳐진다면, 단순한 few-shot evaluation이 finetuned sota를 능가하는 성능을 낼 수 있다.
<img src="https://i.imgur.com/v65RuVR.png" alt="스크린샷 2022-05-25 오전 9.54.02"></li>
</ul>
</li>
<li><p>Discontinuous improvements </p>
<ul>
<li>일반적으로 power law의 관계를 가진다고 알려져 있는데, 이와 달리 8B -&gt; 62B에 비해 62B -&gt; 540B에서 엄청난 성능 향상이 이루어졌다는 것이 관찰되었다. </li>
</ul>
</li>
<li><p>Multilingual understanding </p>
<ul>
<li>전체 데이터셋에서 비영어 데이터의 비중은 22%인데, 이것들이 다양한 multilingual benchmark들에서 얼만큼의 성능을 보이는지 확인함. </li>
</ul>
</li>
<li><p>Bias and toxicity</p>
<ul>
<li>gender and occupation bias<ul>
<li>Winogender coreference task improves with model scale</li>
</ul>
</li>
<li>co-occurence analysis <ul>
<li>stereotypes 확인됨</li>
</ul>
</li>
<li>toxicity analysis <ul>
<li>8B에 비해 62B and 540B 모델에서 higher toxicity</li>
</ul>
</li>
</ul>
</li>
</ol>
<p>우리는 rough하게 다음의 세 가지를 이해하면 PaLM을 안다고 이야기할 수 있다. </p>
<ol>
<li><strong>Model architecture</strong></li>
<li>Pathways</li>
<li>Results</li>
</ol>
<p>이 모든 것들을 한 번에 이해하기는 조금 어려우므로, 이번 내용은 2번에 걸쳐서 진행하려고 한다. 오늘 이야기할 것은 모델 부분이다. </p>
<h1 id="model">Model</h1>
<h2 id="1-hyperparameters">1. Hyperparameters</h2>
<p>먼저, 학습된 모델들의 하이퍼 파라미터는 다음과 같다. 배치 사이즈를 학습을 진행시킴에 따라 점진적으로 증가시켰다. </p>
<p>이때, 이 모델은 standard dense Transformers이기 때문에, 토큰 당 FLOPs는 파라미터의 수와 같다. </p>
<p><img src="https://i.imgur.com/whzTJqJ.png" alt="스크린샷 2022-05-25 오전 9.46.17"></p>
<h2 id="2-training-dataset">2. Training Dataset</h2>
<p><img src="https://i.imgur.com/b1v4ziw.png" alt="스크린샷 2022-05-25 오전 9.46.46"></p>
<p>학습 데이터로 social media conversations, webpages,books, Wikipedia, news, source code를 사용했다. 총 780 billion으로 구성되어 있으며, 모두 깔끔하게 클렌징되었다는 특징이 있다. </p>
<p>학습 데이터에서 특이한 점은 자연어 이외에 프로그래밍 코드를 학습시켰다는 것이다. 해당 코드들은 깃헙에서 긁어왔다. </p>
<h2 id="3-architecture">3. Architecture</h2>
<p>PaLM은 gpt 시리즈와 동일하게 Transformer의 decoder의 변이이다. 변화된 부분은 다음과 같다:</p>
<ul>
<li><strong>SwiGLU Activation</strong><ul>
<li>MLP intermediate activation으로 SwiGLU activations 사용</li>
<li>standard ReLU, GeLU, Swish activation 보다 확연히 좋은 성능</li>
</ul>
</li>
<li><strong>Parallel Layers</strong><ul>
<li>Transformer block에 “serialized” formulation이 아닌 “parallel” formulation 적용</li>
</ul>
</li>
<li><strong>Multi-Query Attention</strong><ul>
<li>key/value projections -&gt; 모든 head가 공유<ul>
<li>(head_num, head_size) =&gt; (1, head_size)</li>
<li>neutral effect on model quality &amp; training speed </li>
</ul>
</li>
</ul>
</li>
<li><strong>RoPE Embeddings</strong><ul>
<li>long sequence에 더 유리함</li>
</ul>
</li>
<li>Shared Input-Output Embeddings</li>
<li>No Biases<ul>
<li>bias term을 없앰 -&gt; 큰 모델의 학습 안정성을 높임</li>
</ul>
</li>
<li>Vocabulary<ul>
<li>SentencePiece</li>
</ul>
</li>
</ul>
<p>논문에서는 가볍게 언급하고 넘어갔지만, 우리는 하나 하나 이것이 무엇인지 확인하고 넘어가보자. 하단의 세 가지는 안다고 생각해 넘어간다. </p>
<h3 id="31-swiglu-activation">3.1 SwiGLU Activation</h3>
<blockquote>
<p>GLU Variants Improve Transformer</p>
</blockquote>
<p>스탠다드한 트랜스포머의 FFN 레이어는 다음과 같이 생겼다:</p>
<p>$FFN(x, W1, W2, b1, b2) = max(0, xW1 + b1)W2 + b2$</p>
<p>즉, ReLU 함수를 activation으로 사용한다. T5에서는 여기서 bias 텀을 없애 사용한다. </p>
<p>$FFN_{ReLU}(x, W1, W2) = max(0, xW1)W2$</p>
</br>

<p>그런데, 최근 ReLU가 아닌 더 좋은 activation function을 적용하여 트랜스포머의 성능을 높이기 위한 연구들이 진행되었다. 제안된 activation function들은 다음과 같다:</p>
<p>$GELU(x) = xΦ(x)$
$Swish_β(x) = xσ(βx)$</p>
<p>$Bilinear(x, W, V, b, c) = (xW + b) ⊗ (xV + c)$
$GLU(x, W, V, b, c) = σ(xW + b) ⊗ (xV + c)$
$ReGLU(x, W, V, b, c) = max(0, xW + b) ⊗ (xV + c)$
$GEGLU(x, W, V, b, c) = GELU(xW + b) ⊗ (xV + c)$
$SwiGLU(x, W, V, b, c, β) = Swish_β(xW + b) ⊗ (xV + c)$</p>
<p>우리의 목표는 SwiGLU를 이해하는 것이므로, swish와 GLU에 대해 더 자세히 알아보자.</p>
<h4 id="311-swish">3.1.1 Swish</h4>
<p>$Swish_β(x) = xσ(βx)$</p>
<p>Swish 함수는 수식을 통해 확인할 수 있듯, 입력 x와 x에 시그모이드를 거친 값을 곱해준 형태이다. 이때 곱해지는 값 β는 학습 가능한 파라미터이다. 만약 β가 0이라면 Swish 함수는 identity function이 되고, β가 무한대라면 Swish 함수는 ReLU가 된다. 그래프를 통해 확인해보자.</p>
<p><img src="https://i.imgur.com/Jzjs5Qb.png" alt="Screen_Shot_2020-05-27_at_2.02.25_PM"></p>
<p>Swish 함수는 unbounded above, bounded below 속성을 가진다는 점에서 ReLU의 장점을 그대로 가진다. 또한, 모든 점에서 미분 가능하며 ReLU와 다르게 단조 증가 함수가 아니라는 점에서 추가적인 장점을 가진다. </p>
<h4 id="312-glu">3.1.2 GLU</h4>
<p>Gated Linear Units (GLU)는 입력에 대한 두개의 선형 변환의 결과를 component-wise product한 신경망 레이어인데, 이 중 하나는 시그모이드를 거친다. </p>
<p>$GLU(x, W, V, b, c) = σ(xW + b) ⊗ (xV + c)$</p>
<p>여기서, $W$와 $V$는 학습 가능한 가중치들이다. 
GLU는 activation function을 거치는 단순 linear model $σ(xW + b)$에 $(xV + c)$를 component별로 곱해준 형태이다. 즉, 후자는 filter로의 기능을 수행한다. 즉, filter내의 값이 어떻게 구성되었는지에 따라 어떤 엔트리들은 더욱 영향력이 강해지고, 어떤 것들은 미미해진다. </p>
<h4 id="313-swiglu">3.1.3 SwiGLU</h4>
<p>따라서, 우리가 최종적으로 알고자 하는 SwiGLU는 다음의 형태를 가진 비선형적 신경망이다. </p>
<p>$SwiGLU(x, W, V) = Swish_1(xW) ⊗ xV$
$SwiGLU(x, W, V) = xWσ(xW) ⊗ xV$</p>
<p>저자들은 activations이 기존의 ReLU, GeLU, Swish activations보다 훨씬 성능이 좋다는 것을 강조한다.</p>
<h4 id="314-ffns">3.1.4 FFNs</h4>
<p>$FFN_{ReLU}(x, W_1, W_2) = max(xW_1, 0)W_2$
$FFN_{GLU}(x, W, V, W_2) = (σ(xW) ⊗ xV )W_2$
$FFN_{Bilinear}(x, W, V, W_2) = (xW ⊗ xV )W_2$
$FFN_{ReGLU}(x, W, V, W_2) = (max(0, xW) ⊗ xV )W_2$
$FFN_{GEGLU}(x, W, V, W_2) = (GELU(xW) ⊗ xV )W_2$
$FFN_{SwiGLU}(x, W, V, W_2) = (Swish_1(xW) ⊗ xV )W_2$</p>
<p>SwiGLU 논문에서 비교한 FFN 레이어의 변형이다. 이때, original FFN에서는 두 개의 가중치 행렬을 사용하지만, 나머지에는 세 개의 행렬을 사용한다는 점이 특징이다. 학습해야하는 행렬의 수를 늘려도 computation은 일정하게 가져가기 위해, hidden units의 개수는 2/3으로 줄인다. </p>
<p>다음은 computation과 performance 측면을 평가해본 결과이다. </p>
<ul>
<li><p>Computation
<img src="https://i.imgur.com/TaqOIKi.png" alt="스크린샷 2022-05-23 오후 7.54.40"></p>
</li>
<li><p>Performance
<img src="https://i.imgur.com/i3aIQ5f.png" alt="스크린샷 2022-05-25 오전 10.22.09"></p>
</li>
</ul>
<p>즉, SwiGLU를 사용한 MLP는 성능도 좋은데 속도까지 빠르다. 이 때문에 PaLM의 저자들은 SwiGLU를 이용해 비선형성을 추가한다. </p>
<h3 id="32-parallel-formulation">3.2 Parallel formulation</h3>
<blockquote>
<p>GPT-J-6B: A 6 Billion Parameter Autoregressive Language Model</p>
</blockquote>
<p>PaLM은 기존의 “serialized” formulation을 사용하지 않고, 각 트랜스포머 블락에 “parallel” formulation을 적용한다. </p>
<ul>
<li><p>serialized formulation
  $y = x + MLP(LayerNorm(x + Attention(LayerNorm(x)))$</p>
</li>
<li><p>parallel formulation
  $y = x + MLP(LayerNorm(x)) + Attention(LayerNorm(x))$</p>
</li>
</ul>
<p>즉, 어텐션 블락을 거친 후 MLP를 거치는 방식이 아니라, MLP와 어텐션을 병렬적으로 처리하겠다는 것이다. </p>
<p>이러한 방식은 오로지 모델 병렬화를 통한 학습의 효율 증가를 목적으로 한다. 모델을 병렬화하기 때문에 forward/backward시 all-reduce가 필요하다. all-reducee란 심플하게 해당 블록의 결과물을 모든 프로세서가 Return하는 것을 의미한다. </p>
<p><img src="https://i.imgur.com/DdEEKLN.png" alt="스크린샷 2022-05-25 오전 11.14.31"></p>
<p>Megatron-LM의 model parallelism을 확인해보면 대략적인 감이 잡힌다.</p>
<p><img src="https://i.imgur.com/yFr2J6h.png" alt="스크린샷 2022-05-25 오전 11.14.07"></p>
<p>즉, 각자 forward/backward 시키고 결과물을 다른 프로세서들과 공유하여 모든 프로세서로 하여금 결과물을 반환시킨다고 생각하면 된다. </p>
<p>이 방식으로, 대략 15%의 throughput 향상이 이루어진다고 한다!</p>
<h3 id="33-multi-query-attention">3.3 Multi-Query Attention</h3>
<blockquote>
<p>Fast Transformer Decoding: One Write-Head is All You Need</p>
</blockquote>
<p>해당 논문의 저자들은 Transformer inference의 속도가 &quot;keys&quot;와 &quot;values&quot; 텐서들을 reload하는데 필요한 memory bandwidth, 즉 거대한 텐서를 전달하기 위한 메모리 전달 속도 때문에 제한된다고 주장한다. 이 때문에, 헤드별로 공유된 key와 value를 제안한다. </p>
<p>Multi-query attention은 각 어텐션 레드들이 단일 key, value 값을 가진다는 것 외에는 기본적인 Multi-head attention과 동일하다. </p>
<p>head 개수를 $k$ 크기를 $h$라고 했을 때, Multi-head attention의 key, value, query는 모두 $(k,h)$의 크기를 가진다. 하지만 Multi-query attention에서는 key, value를 공유하기 때문에,  key, value=$(1, h)$, query=$(k,h)$의 크기를 가지게 된다. </p>
<p>이러한 방식은 학습 속도와 모델 퀄리티에는 영향이 없었지만, autoregressive decoding을 할 때 굉장한 속도 개선이 있었다. 표를 확인해보자.</p>
<p><img src="https://i.imgur.com/F6v0TEU.png" alt="스크린샷 2022-05-25 오전 9.48.23"></p>
<p>속도가 개선된 이유는,  multi-headed attention에서는 key/value 텐서가 예제 간에 공유되지 않고 한 번에 하나의 토큰만 디코딩되어, auto-regressive decoding시 accelerator의 사용 효율성이 떨어지기 때문이다.  </p>
<h3 id="34-rope-embeddings">3.4 RoPE Embeddings</h3>
<blockquote>
<p>RoFormer: Enhanced Transformer with Rotary Position Embedding</p>
</blockquote>
<p>RoPE embeddings (2021)은 absolute/relative position embeddings에 비해 긴 시퀀스에 대해 강건하다고 알려져있다. RoPE embeddings의 목표는 다음의 수식을 해결하는 것이다. </p>
<p>$&lt;f_q(x_m, m), f_k(x_n, n)&gt; = g(x_m, x_n, m − n)$</p>
<p>즉, 단어 $x_m, x_n$과 둘의 relative position($m − n$)이 input으로 들어가는 함수 $g$와 동일해지는 함수 $&lt;f_q(x_m, m), f_k(x_n, n)&gt;$를 찾아보자는 것이 해당 임베딩의 목표이다. </p>
<p>저자들은 다음의 식들을 제안한다. </p>
<p>$f_q(x_m, m) = (W_qx_m)e^{imθ}$
$f_k(x_n, n) = (W_kx_n)e^{inθ}$
$g(x_m, x_n, m − n) = Re[(W_qx_m)(W_kx_n)^∗e^{i(m−n)θ}]
$</p>
<ul>
<li>$Re[·]$:  real part of a complex number </li>
<li>$(W_kx_n)^∗$: $(W_kx_n)$의 켤레복소수 </li>
<li>$(e^{iθ})
^m = e^{imθ} = \cos(mθ) + i\sin(mθ)$ </li>
</ul>
<p>최종적인 공식은 다음과 같다:</p>
<p>$f_{q|k}(x_m, m) = R^d_{Θ,m}W_{q|k}x_m$</p>
<p>즉, 해당 단어와 key 혹은 query와 R matrix의 선형결합으로 이루어진다. 이때, R은 다음과 같이 생겼다. </p>
<p><img src="https://i.imgur.com/qFZiXzz.png" alt="스크린샷 2022-05-25 오후 12.06.19"></p>
<p>즉, $R^d_{Θ,m}W_{q|k}x_m$은 아핀 변환(Wx+b)된 워드 임베딩 벡터를 그것의 위치 인덱스의 배수 각도의 양만큼 회전한 것이다. </p>
<p>RoPE를 self-attention에 적용하면 다음과 같이 작성할 수 있다:</p>
<p><img src="https://i.imgur.com/u6vd8J3.png" alt="스크린샷 2022-05-25 오후 12.07.32"></p>
<p>이때, $R^d_{Θ,n−m} = (R
^d_{Θ,m})^TR^d_{Θ,n}$이 되게 되는데, $R$이 직교 행렬이기 때문에 위치 정보를 인코딩하는데의 안정성을 보장할 수 있다. </p>
<p><img src="https://i.imgur.com/WJS78FZ.png" alt="Screen_Shot_2021-08-10_at_10.38.41_AM"></p>
<hr>
<p>(2)편에서는 초대규모 언어모델의 효율적인 학습을 가능하게 한 Pathways와 그를 이해하기 위해 필요한 선행 지식들에 대해 공부할 것이다. 또한, 모델을 실험하기 위해 사용된 새로운 벤치마크 및 방법들과, few-shot의 성능을 크게 올린 chain-of-thought prompting 등에 대해 공부할 것이다. </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Poly-Encoders : Transformer Architectures and Pre-training Strategies for Fast and Accurate Multi-sentence Scoring]]></title>
            <link>https://velog.io/@tobigs-nlp/Poly-Encoder</link>
            <guid>https://velog.io/@tobigs-nlp/Poly-Encoder</guid>
            <pubDate>Wed, 18 May 2022 08:32:17 GMT</pubDate>
            <description><![CDATA[<p>오늘 발표할 poly-encoder 논문은 Facebook AI Research team이 2020 ICLR에 출판된 논문으로, 빠르고 정확하게 여러 문장을 비교하고 스코어링 하기 위한 방법을 소개하고 있습니다. 기존에 두 문장을 비교하는 task에서 일반적으로 사용되던 <code>Cross-encoder</code>와 <code>Bi-encoder</code> 방식의 장점을 각각 취한 형태의  <code>Poly-encoder</code> 구조를 제안하고, 실험을 통해 4가지 task에 대해 sota를 달성했음을 보입니다.</p>
<h2 id="introduction">Introduction</h2>
<p> BERT가 발표된 이후 BERT 모델을 사용한 연구가 많이 이루어지는 가운데, Sequence 간의 pairwise 비교를 하는 태스크에 대해 보통 sequence pair를 한번에 인코딩(full self-attention)하는 <code>Cross-encoder</code> 방식과 sequence pair를 각각 인코딩하는 <code>Bi-encoder</code> 방식을 사용합니다. 하지만 cross encoder는 속도가 너무 느리고, Bi-encoder는 성능이 떨어집니다. 저자들은 이러한 <strong>cross encoder와 bi encoder의 장점을 결합</strong>한 <code>Poly-Encoder</code>를 제안하고 있습니다.</p>
<h2 id="tasks">Tasks</h2>
<p> 우선 Method를 좀 더 쉽게 이해하기 위해 해당 논문에서 사용한 Task에 대해 먼저 살펴보겠습니다. 논문에서는 Dialogue 및 Article Research 분야에서 실험을 수행했습니다.</p>
<ul>
<li>ConvAI2  : 두 화자의 대화를 담고 있는 Persona-Chat dataset을 기반으로 함</li>
</ul>
<p><img src="https://velog.velcdn.com/images/euna6481/post/14119070-7da3-46f5-ac37-dabea5b7ad6c/image.png" alt=""></p>
<ul>
<li>DSTC7 : Ubuntu 채팅 로그에서 추출한 대화로 구성됨</li>
<li>Ubuntu V2 : 위와 비슷하지만 좀 더 크고 유명한 corpus</li>
<li>Wiki Article Search : 가장 관련성 높은 article(web documents) 검색</li>
</ul>
<p><img src="https://velog.velcdn.com/images/euna6481/post/bf3ee17f-53ed-4792-8898-2c9e2ed6a789/image.png" alt=""></p>
<h2 id="methods">Methods</h2>
<h3 id="transformer">Transformer</h3>
<p>이 파트에서는 저자들이 어떻게 BERT를 pre-train했는지 소개하고 있습니다.</p>
<p>bi-encoder, cross-encoder, poly-encoder는 모두 BERT-base를 기반으로 합니다. 해당 논문에서는 BERT-base로 두 가지를 pre-train했다고 합니다.</p>
<ul>
<li><strong>Wikipedia와 Toronto Books Corpus</strong></li>
<li>-&gt; 이는 기존의 BERT-base와 같은 데이터셋입니다. </li>
<li><strong>온라인 플랫폼 Reddit에서 추출한 데이터셋</strong></li>
<li>-&gt; 이 데이터셋은 <strong>관심있는 다운스트림 작업과 더 유사한 데이터에 대한 pre-train이 도움이 되는지 보기 위한 것</strong>입니다.</li>
</ul>
<p>pre-trainig input은 [INPUT, LABEL]의 concatenation으로 들어가는데, input은 context 문장이고 label은 그 다음의 문장(candidate)입니다.</p>
<h3 id="bi-encoder">Bi-Encoder</h3>
<p><img src="https://velog.velcdn.com/images/euna6481/post/9c3848e9-f665-4fb5-b6da-601439887094/image.png" alt=""><img src="https://velog.velcdn.com/images/euna6481/post/688d149e-d5b5-4e21-8dc5-bf2af50d915a/image.png" alt=""></p>
<p>$$
y_{ctxt} = red(T_1(ctxt))  \space\space\space\space\space
y_{cand} = red(T_2(cand))
$$</p>
<p>바이인코더에서는 input으로 들어가는 context와 candidate label이 각각 벡터로 인코딩됩니다. 위의 수식에서 $T_1, T_2$는 pre-tained된 트랜스포머의 output, $red$는 벡터들의 시퀀스를 하나의 벡터로 줄이는 함수입니다. 최종적으로 얻어지는 y 는 각 Encoder의 Contextualized Embedding을 의미합니다.  (세그먼트 임베딩은 둘 다 0)</p>
<p>따라서 해당 과정을 통해 Context Embedding과 Candidate Embedding을 각각 따로 구할 수 있는데, <strong>Bi-Encoder에서는 해당 임베딩 벡터를 내적</strong>하여 candidate가 context 다음으로 적절한가 계산하는 score를 만듭니다.
$$
s(ctxt, cand)=y_{ctxt}\cdot y_{cand}
$$</p>
<ul>
<li>[(ctxt, cand1), (ctxt, cand2), …, (ctxt, candn)]의 cross-entropy loss를 최소화하는 방향으로 학습합니다.
이 때, cand1이 correct label, 나머지는 training에서 가져온 다른 labels</li>
<li>학습할 때는 batch 내의 샘플을 negatives로 사용하여 더 빠른 training과 더 많은 batch size를 사용할 수 있도록 합니다.</li>
</ul>
<p>또한 저자는 red(⋅)로 아래 세 가지 과정을 고려했으나 실험을 통해 첫 번째 방식을 사용하였다고 합니다.</p>
<ul>
<li>첫 토큰 선택</li>
<li>토큰별 아웃풋을 평균 냄</li>
<li>첫 토큰부터 m개까지의 토큰을 평균
<img src="https://velog.velcdn.com/images/euna6481/post/0e6c3e14-a2a7-4e49-961a-18dbfd9b5d2c/image.png" alt=""></li>
</ul>
<h3 id="cross-encoder">Cross-Encoder</h3>
<p><img src="https://velog.velcdn.com/images/euna6481/post/391a7490-d100-4f37-8add-33d7a16d3ffe/image.png" alt="">
$$
y_{ctxt,cand} = h_1 = first(T(ctxt,cand))
$$</p>
<p>Cross-encoder의 경우 비교하고자 하는 문장 2개를 이어붙여서 하나의 모델에 넣어 계산하는 방법입니다.</p>
<ul>
<li>Bi-encoder와 달리 인코딩 과정에서 <strong>context와 candidate 간의 self-attention을 적용할 수 있기 때문에 둘 간의 관계를 훨씬 깊게 파악할 수 있다</strong>는 장점이 있고, 성능 역시 보통 Bi-encoder 방식에 비해 더 좋습니다.</li>
<li>그러나 하나의 context를 모든 candidate와 연결 후 scoring하여 비교하기 때문에 BERT 같은 큰 모델의 경우 연산하는데 <strong>시간이 오래 걸리고</strong>, 문장의 수가 늘어나면 늘어날 수록 실제 서비스 환경에서 사용하기 어려운 단점이 있었습니다.</li>
</ul>
<p>$first$는 생성된 벡터 시퀀스의 첫번째 벡터만을 취하는 함수입니다. (red()와 같은 방식 취한 거라고 보면 될듯)</p>
<p>$$
s(ctxt,cand_i)=y_{ctxt,cand_i}W
$$
Cross-Encoder에서는 <strong>벡터 W를 곱해 y를 스칼라로 만들어 scoring</strong>합니다. 배치의 구성은 bi-encoder와 동일하지만, negatives를 recycle할 수 없기 때문에 training set에 제공되는 external negatives를 사용한다고 합니다.</p>
<h3 id="poly-encoder">Poly-Encoder</h3>
<p>해당 논문에서는 바이 인코더와 크로스 인코더의 장점을 모두 포함한 Poly-encoder를 제안합니다. <strong>candidate는 바이 인코더처럼 하나의 벡터로 표현</strong>되며, <strong>input은 크로스 인코더처럼 candidate와 동시에 인코딩</strong>되어 시간을 줄이고 더 많은 정보를 추출할 수 있다고 합니다.
<img src="https://velog.velcdn.com/images/euna6481/post/d8598c19-bff7-4eab-8c1e-5a6627f121a9/image.png" alt="">
그림과 같이 폴리 인코더는 바이 인코더처럼 context와 candidate 두 개의 인코더로 나뉘어 있습니다.</p>
<ul>
<li>Candidate는 바이인코더와 같이 single vector $y_{cand_i}$로 인코딩됨</li>
<li>input Context는 우선 m개의 벡터($y^1_{ctxt},...,y^n_{ctxt}$)로 표현됨</li>
<li>기존에는 Context Encoder의 output을 red(⋅)을 통해 바로 하나의 벡터로 합쳤지만, Poly-encodeer는 <strong>code vector와의 attention</strong>을 통해서 여러 개의 embedding 벡터를 만들어냄</li>
</ul>
<p>$$
y^i_{ctxt} = \Sigma_jw^{c_i}_j
$$
where $(w^{c_i}_1,...,w^{c_i}_N) = softmax(c_i\cdot h_1,...,c_i\cdot h_N)$</p>
<p>이때 code vector $c_i$는 일종의 latent variable이라고 볼 수 있으며, 학습 초기에는 random initialize 되고 학습 과정 중에 learnable parameter로써 함께 학습됩니다. 이는 context의 여러 의미를 포착하는 역할을 한다고 볼 수 있을 것 같습니다.
$$
y_{ctxt} = \Sigma_iw_iy^i_{ctxt}
$$
where $(w_1,...,w_N) = softmax(y_{cand_i}\cdot y^1_{ctxt},...,y_{cand_i}\cdot y^m_{ctxt})$</p>
<p>이렇게 얻어진 벡터들(Figure에서 Emb 1 ~ Emb m)에 대해서 <strong>Candidate Embedding과의 attention</strong>을 통해서 한 번 더 벡터들을 합치고 최종 Context Embedding을 구합니다.</p>
<p>최종적으로 $y_{ctxt}$와 $y_{cand}$를 구했으니, <strong>바이인코더에서처럼 두 벡터를 내적하여 최종 스코어를 도출합니다</strong>. m&lt;N이고, context-candidate attention이 가장 마지막에만 이루어지기 때문에 해당 방법은 cross-encoder의 full self-attention보다 훨씬 속도가 빠릅니다.</p>
<h2 id="experiments">Experiments</h2>
<ul>
<li>R@k/C : test sample이 C개의 candidates 선택할 수 있을 때의 Recall@k (+K에서의 재현율: 관련있는 상위-K 셋에서 발견된 관련 항목의 비율)</li>
<li>MRR : 평균 상호 순위 (+해당 쿼리와 일치하는게 몇번째에 있는가?)</li>
</ul>
<p><img src="https://velog.velcdn.com/images/euna6481/post/9deff705-c6ab-4a69-93c0-5e314359d750/image.png" alt=""></p>
<h3 id="poly-encoder-1">Poly-Encoder</h3>
<ul>
<li>폴리인코더는 바이인코더와 같은 배치 사이즈</li>
<li>폴리인코더가 바이인코더보다 성능 좋음</li>
<li>code 많을수록 더 좋은 성능 --&gt; 컴퓨팅되는 한 가장 큰 code 쓰는게 좋다!</li>
<li>기존 버트의 가중치로 pre-train한 DSTC7에서, 360 code 사용한 폴리인코더는 크로스 인코더보다도 성능이 좋았음!!</li>
</ul>
<h3 id="domain-specific-pre-training">Domain-Specific pre-training</h3>
<ul>
<li>Reddit으로 사전학습한 결과가 기존의 BERT 실험보다 성능이 좋았다.</li>
<li>본 논문에서 직접 pre-train한 BERT와 기존의 BERT 성능이 비슷한 것으로 보아, pre-train 시의 데이터셋 성능이 최종 결과에 큰 영향을 미친다는 것을 알 수 있다.</li>
<li>즉, 관심 있는 downstream과 유사한 데이터셋으로 pre-train하는 것이 성능 향상에 도움이 된다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/euna6481/post/1ab8f80f-cd4e-41fb-85a9-a2c6c65c2aee/image.png" alt=""></p>
<ul>
<li>크로스 인코더의 scoring time은 처참하다...</li>
</ul>
<h2 id="conclusion">Conclusion</h2>
<ul>
<li>바이인코더보다 정확하면서 크로스인코더보다 빠른 폴리인코더를 제안해 기존 정확도와 속도 사이의 균형을 개선했습니다.</li>
<li>downstream task와 더 밀접하게 연관된 pre-training이 결과가 매우 향상됨을 보였습니다.</li>
</ul>
<p>+)코드 : <a href="https://github.com/chijames/Poly-Encoder/blob/701354372c66396d6b6678b664e82416f65f3a84/encoder.py">https://github.com/chijames/Poly-Encoder/blob/701354372c66396d6b6678b664e82416f65f3a84/encoder.py</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Extractive summarization as Text Matching (MatchSum)]]></title>
            <link>https://velog.io/@tobigs-nlp/Extractive-summarization-as-Text-Matching-MatchSum</link>
            <guid>https://velog.io/@tobigs-nlp/Extractive-summarization-as-Text-Matching-MatchSum</guid>
            <pubDate>Wed, 11 May 2022 09:33:30 GMT</pubDate>
            <description><![CDATA[<h2 id="0-abstract">0. Abstract</h2>
<p>기존 Extractive Summarization은 source document에서 독립적으로 문장을 추출하고 문장들 사이의 관계를 모델링하는 방향으로 이루어져 왔습니다. 본 논문에서는 이러한 기존의 framework를 사용하지 않고 summarization task를 semantic text matching 문제로 다시 정의하며, source document와 candidate summary들이 semantic space 상에서 굉장히 유사한 위치에 있어야 한다고 주장합니다.</p>
<hr>
<h2 id="1-introduction">1. Introduction</h2>
<p>본 논문에서는 일반적으로 의미론적 및 문법적으로 올바른 문장을 생성하고 계산 속도가 더 빠른 extractive summarization에 초점을 맞췄습니다. 현재 대부분의 extractive summarization은 soruce document에서 문장을 하나하나 점수화해서 추출하고, 문장들 사이의 관계를 모델링한 다음, 전체 document에서 몇 개의 문장을 선택하여 요약을 추출하고 있습니다. </p>
<ul>
<li><strong>Related Work</strong></li>
</ul>
<p>(2016~2017) Sequence labeling problem encoder-decoder frame work</p>
<p>→ Sequence labeling problem으로 정의 (encoder와 decoder가 존재해서 2가지가 상호작용하면서 문장을 뽑아내는 식으로 만들어짐)</p>
<p>→ 각 문장에 대해서 독립적인 binary decision을 진행하기 때문에 중복이 많이 발생</p>
<p>(2018) Auto regresseive decoder 도입</p>
<p>→ 문장을 점수화하여 서로 다른 문장들의 점수가 각 문장들에게 영향을 미치게 함(상호관계를 가지면서 학습이 됨) &amp; 중복 문제 조금 해결</p>
<p>(2017,2019) Trigram blocking</p>
<p>→ 이전에 선택한 문장과 중복이 되는 경우, 문장을 건너뛰어서 요약문을 추출 &amp; 중복 문제 해결</p>
<p>(2018,2019) Reinforcement learning</p>
<p>→ 강화학습을 통해 문장 요약을 해내고, 요약하는 과정을 하나의 리워드로 취급해서 좋은 요약문을 뽑아내는 과정</p>
<p>⇒ 기존의 모델들은 sentence-level에서 수행되는 extractor의 역할을 했었기 때문에 summary 문장들은 서로 semantic한 relation을 고려하지 못한다는 문제점을 가지고 있었습니다. (전체 요약문의 semantic을 고려한 것이라 보긴 어려움)</p>
<ul>
<li>MatchSum Framework</li>
</ul>
<p><img src="https://velog.velcdn.com/images/tobigs-nlp/post/af577963-53f8-4c29-ab49-cb622833a731/image.png" alt=""></p>
<p>MatchSum의 Framework를 살펴보면, 3가지 요소가 존재합니다. document가 존재하고, 이 document로부터 candidate summary가 존재하며, gold summary가 존재합니다. 결국 Semantic text matching을 통해서 summary level의 framework를 만들어내고, 이 3가지가 semantic space 상에서 굉장히 유사한 위치에 있어야 한다는 것이 이 논문의 목적입니다.</p>
<hr>
<h2 id="2-related-work">2. Related Work</h2>
<h3 id="21-extractive-summarization">2.1 Extractive Summarization</h3>
<p>MatchSum은 Extractive Summarization을 목적으로 하는 문서 요약 모델이며, BERT 모델을 기반으로 발전된 Extractive summarization 모델 2가지를 살펴보도록 하겠습니다.</p>
<p>1) Bert-ext (Bae et al., 2019)</p>
<p><img src="https://velog.velcdn.com/images/tobigs-nlp/post/aadf4f6b-d09f-4b90-9c2f-7212da8ecaef/image.png" alt=""></p>
<p>먼저 기존 BERT와 다른 점을 살펴보면, 기존 BERT에서는 첫번째 문장의 시작 부분에만 [CLS] 토큰을 추가했지만 요약 task에서는 BERT 모델에 여러 문장을 입력하고 입력한 모든 문장에 대한 표현이 필요합니다. 따라서 모든 문장의 시작 부분에 [CLS] 토큰을 추가하고 [CLS] 토큰 위치의 출력 벡터는 해당 문장의 feature를 함축하게 됩니다. BERT-ext는 BERT를 통과한 다음에 나오는 [CLS] 토큰에 해당하는 벡터들을 LSTM에 넣어서 sequence를 고려한 후 요약을 진행합니다.</p>
<p>2) BERTSum (Y Liu et al., 2019)</p>
<p><img src="https://velog.velcdn.com/images/tobigs-nlp/post/5f9879d8-fdd8-464b-bd71-49b6af4fa4c0/image.png" alt=""></p>
<p>BERTSum도 마찬가지로 [CLS], [SEP] 토큰을 각 문장마다 사용하는 형태를 가지고 있으며 BERT-ext와 다른 점은 LSTM을 통과하는 것이 아니라, 마지막 벡터들이 transformer layer를 한번 더 거친다는 것입니다. 여기서 사용하는 transformer layer는 encoder만 있는 2개의 레이어를 의미하고, 이 레이어를 거친 다음에 [CLS] 토큰이 binary classification을 통해서 summarization으로 선택이 될지 안될지를 판단하는 방식으로 진행됩니다.</p>
<h3 id="22-two-stage-summarization">2.2 Two-stage Summarization</h3>
<p>JECS (Joint Extractive and Compressive Summarizers, Xu et al., 2019)</p>
<p><img src="https://velog.velcdn.com/images/tobigs-nlp/post/8670533b-e341-49f0-85f2-211023f51137/image.png" alt=""></p>
<p>MatchSum에서는 기존 모델들과는 다르게 Two-stage summarization을 진행합니다.</p>
<ul>
<li>stage-1 : document로부터 candidate가 될 수 있는 summary를 추출</li>
<li>stage-2 : 추출한 문장들 사이에 matching을 진행하는 과정을 거침</li>
</ul>
<p>JECS는 LSTM과 CNN을 통해 document로부터 fragment들을 추출하고 Contextualized encoder를 통해서 compression을 진행한 다음, fragment를 기본으로 문장을 추출하는 방식으로 진행됩니다. </p>
<hr>
<h2 id="3-sentence-level-or-summary-level-a-dataset-dependent-analysis">3. Sentence-Level or Summary-Level? A Dataset-dependent Analysis</h2>
<p>본 논문에서 저자가 던지는 2가지의 질문은 다음과 같습니다.</p>
<blockquote>
<p><em>1. Extractive Summarization에서 summary level extractor가 sentence level extractor보다 우수한가?
2. 데이터셋이 주어지면 데이터의 특성을 기반으로 어떤 extractor를 선정해야하고, 두 extractor 사이의 inherent gap은 무엇인가?</em></p>
</blockquote>
<p>본 논문에서는 해당 질문들을 바탕으로 6개의 benchmark dataset에 대한 sentence level과 summary level method 간의 차이를 조사했습니다.</p>
<h3 id="31-definition">3.1 Definition</h3>
<p>본 논문에서는 첫번째 질문인 “Extractive Summarization에서 summary level extractor가 sentence level extractor보다 우수한가?”에 대해 정량적으로 판단하기 위해 몇 가지 정의를 내립니다. </p>
<blockquote>
<p>$D = {s_1, ... , s_n}$ → n개의 sentence으로 구성된 single document
$C = {s_1, ... , s_k | s_i \in D}$ → document에서 추출한 k개의 sentence를 포함하는 candidate summary
$C^*$ → document의 gold summary</p>
</blockquote>
<p>: C<em>(gold summary)가 있는 document D가 주어졌을 때, C와 C</em> 사이의 ROUGE 값을 2가지 수준(sentence-level/summary-level)으로 계산하여 C를 측정합니다.</p>
<p><strong>1) Sentence-Level Score</strong></p>
<p><img src="https://velog.velcdn.com/images/tobigs-nlp/post/39e42f1a-617c-427a-a6d4-df03a78518ed/image.png" alt=""></p>
<blockquote>
<p>$s$ → C에 포함되어 있는 sentence
$|C|$ → sentence의 수</p>
</blockquote>
<p>⇒ sentence level score는 candidate summary(C)안에 있는 어떤 sentence(s)가 실제 gold summary(C*)와의 ROUGE score를 구했을 때, 이 값이 얼마 정도되느냐에 대한 것으로, 여러 개의 candidate summary가 존재할 때 이 candidate summary의 평균적인 score를 sentence level의 score로 이해할 수 있습니다.</p>
<p><strong>2) Summary-Level Score</strong></p>
<p><img src="https://velog.velcdn.com/images/tobigs-nlp/post/186ba989-c36e-4552-a241-f9db17a8f4c0/image.png" alt=""></p>
<p>⇒ candidate summary(C)와 gold summary(C*) 사이의 ROUGE score를 구해서 정의합니다.</p>
<ul>
<li>Pearl-Summary</li>
</ul>
<p>기존에는 summary level로 판단하지 않고 sentence level로 어떤 summary를 만들어내는 과정을 거쳤는데, summary level(MatchSum 초점)에 대한 것을 설명하기 위해서 저자가 새로 제안하는 것이 pearl-summary입니다. Pearl-Summary는 sentence level score는 낮지만 summary level score는 높은 summary로 정의합니다.</p>
<ul>
<li>Definition 1</li>
</ul>
<p>Candidate Summary C는 다음과 같은 부등식을 만족하는 Candidate Summary C’가 존재한다면, Pearl-Summary로 정의됩니다.</p>
<p><img src="https://velog.velcdn.com/images/tobigs-nlp/post/9ea27e73-18c7-4e6a-aadf-7242e3a79241/image.png" alt=""></p>
<p>→ C가 C’에 비해 setence level score는 작지만, summary level score보다는 크다는 것을 의미하는 부등식</p>
<p>→ 따라서 어떤 document로 부터 몇가지의 sentence를 추출한 후, 추출한 문장들이 sentence level score는 조금 낮지만 summary level score로 판단했을 때는 조금 더 높은 점수를 가지면 Pearl-Summary로 정의합니다.</p>
<p>→ Pearl-Summary의 경우, sentence level extractor가 이를 추출하기는 어렵습니다.</p>
<ul>
<li><p>Best-Summary</p>
<p>Best-Summary는 모든 candidate summary 중에서 가장 summary level score가 높은 summary를 의미합니다.</p>
</li>
<li><p>Definition 2</p>
</li>
</ul>
<p>Summary $\hat{C}$ 는 다음을 만족할 경우, Best-Summary로 정의됩니다.</p>
<p><img src="https://velog.velcdn.com/images/tobigs-nlp/post/3182ed80-6785-406f-a1d6-370447ea7f55/image.png" alt=""></p>
<p>→ document의 모든 candiate summary인 C의 summary level score의 argmax값인 Summary $\hat{C}$을 Best-Summary로 정의합니다.</p>
<h3 id="32-ranking-of-best-summary">3.2 Ranking of Best-Summary</h3>
<p>각 document에 대해 모든 candidate summary들을 sentence level score를 기준으로 내림차순 정렬 한 다음, Best-Summary $\hat{C}$의 순위를 z라는 변수로 정의합니다.</p>
<p>1) if z = 1 (즉, Best-summary($\hat{C}$)의 순위가 1위일 때),</p>
<p>sentence-level extractor로 좋은 summary 추출이 가능하다는 것을 의미합니다.</p>
<p>2) if z &gt; 1 (Best-Summary($\hat{C}$)의 순위가 낮을 때),</p>
<p>Best-summary가 Pearl-Summary임을 의미합니다.(sentence level score는 낮지만, summary level score는 높으니까)</p>
<p>→ z가 증가할수록, sentence level score가 best-summary보다 높은 candidate summary들을 더 많이 찾을 수 있으며, 이는 sentence level extractor 학습의 어려움으로 이어지게 됩니다.</p>
<p>⇒ 항상 pearl-summary가 좋다고 주장하는 것이 아닌, summarization에 대해 여러가지 benchmark 데이터셋이 존재하는데 이 데이터셋의 특성에 따라 데이터의 속성이 달라진다고 주장하고 어떤 extractor가 효과적인지 상이하다고 주장한 점이 추출 요약의 새로운 방향을 제시했다고 생각합니다.</p>
<ul>
<li>본 논문에서는 6가지 benchmark dataset으로 실험을 진행했습니다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/tobigs-nlp/post/b22ecb06-0e96-4ba1-8533-c3206c698f15/image.png" alt=""></p>
<blockquote>
<p>SDS : single-document summarization / MDS : multi-document summarization
Doc. : test dataset의 평균 문서 길이 / Sum. : test dataset의 평균 요약 길이
#Ext : 서로 다른 데이터셋에서 추출해야하는 문장의 수</p>
</blockquote>
<ul>
<li>앞에서 정의한 식을 기반으로 score를 매기고 데이터셋에 적용했을 때, 그래프로 확인할 수 있습니다.
<img src="https://velog.velcdn.com/images/tobigs-nlp/post/bbd2d171-d5d4-41b1-83db-a2895b5aaad7/image.png" alt=""></li>
</ul>
<p>그래프의 x축은 z(best summary ranking) / candidate summary의 개수, y축은 best-summary의 비율입니다. 위 그래프는, sentence score가 높은 요약문이라고 반드시 best summary는 아님을 보여줍니다. 즉, 우리가 그동안 정의내려왔던 것보다 이 논문에서 제시하는 pearl-summary인 경우가 조금 더 많을 수 있다는 점을 시사하고 있습니다. </p>
<ul>
<li>z=1 위치는 sentence score가 가장 높은 지점 (요약문 후보를 sentence level score로 정렬)</li>
<li>z&gt;1 은 pearl summary가 best summary인 지점들을 의미</li>
</ul>
<p>PubMed는 Best Summary가 sentence-level scoring에 따른 순위 상위권에 밀집해 있으며,이는 sentence-level로도 충분히 성능을 보일 수 있음을 의미합니다. 반면에, WikiHow와 Multi-News는 Best Summary 분포를 보았을 때, sentence-level extraction으로는 Best Summary를 추출하기 어렵다는 것을 알 수 있었습니다. 특히, summarization task에서 가장 많이 사용하는 CNN/DM 같은 경우는 18.9%만 z=1인 상황에 속했습니다. 즉, 거의 대부분이 pearl-summary가 best summary인 경우가 많았다는 것을 의미합니다. 이를 통해 pearl summary의 비율이 데이터를 나타낼 수 있는 속성으로 사용될 수 있음을 시사합니다.</p>
<p>정리하면, 기존에 없었던 pearl-summary라는 개념을 제시함으로써 데이터셋 자체의 속성을 파악할 수 있는 지표로 사용할 수 있게 되었고, 앞으로 summarization task에 어떠한 extractor를 적용해야하는지를 명확히 시사할 수 있다고 생각할 수 있을 것 같습니다.</p>
<h3 id="33-inherent-gap-between-sentence-level-and-summary-level-extractors">3.3 Inherent Gap between Sentence-Level and Summary-Level Extractors</h3>
<p>Inherent gap은 2번째 질문인 “데이터셋이 주어지면 데이터의 특성을 기반으로 어떤 extractor를 선정해야하고, 두 extractor 사이의 inherent gap은 무엇인가?” 에 대한 대답이 될 수 있습니다.</p>
<p>“ Inherent Gap”은 sentence level과 summary level의 정량적인 개선 정도를 정의한 개념으로 정의됩니다. 저자가 첫번째 질문에 대한 답으로 대부분의 데이터셋은 summary level로 판단하는 것이 조금 더 옳다고 했는데 이 주장을 뒷받침하기 위해서는 어느 정도의 gain이 있는가를 알아봐야 합니다. 따라서 potential gain을 정의하고, 이 potential gain에 따라서 어떤 extractor가 적합한지를 판단할 수 있습니다. </p>
<p>1) Document 단위로 inherent gap 정의</p>
<p><img src="https://velog.velcdn.com/images/tobigs-nlp/post/ed3b1851-703c-4517-a187-1046b775e4c0/image.png" alt=""></p>
<p>$\alpha^{sen}(D)$ : sentence level score의 max값을 의미</p>
<p>$\alpha^{sum}(D)$ : summary level score의 max값을 의미</p>
<p>2) Document 단위의 potential gain 정의</p>
<p><img src="https://velog.velcdn.com/images/tobigs-nlp/post/5d0b7077-c9de-4997-bca3-5b2bf33c3ddf/image.png" alt=""></p>
<p>: summary level에서 나온 $\alpha^{sum}(D)$에서 $\alpha^{sen}(D)$을 뺀 값(차이)으로 정의 → document에서 개선될 수 있는 gain을 의미</p>
<p>3) Dataset 단위의 potential gain 정의</p>
<p><img src="https://velog.velcdn.com/images/tobigs-nlp/post/2a1df644-ff1e-4ab5-bb8d-a3e79d6f004c/image.png" alt=""></p>
<p>D : 특정 데이터셋 / |D| : 데이터셋의 document 수</p>
<p>: 데이터셋은 여러개의 document로 구성되어 있으므로 모든 document를 합친 후에 document의 개수로 나누도록 정의</p>
<p><img src="https://velog.velcdn.com/images/tobigs-nlp/post/eb332df6-1615-4b51-8f20-6d1862aca1f9/image.png" alt=""></p>
<p>summary level method의 performance gain은 데이터셋마다 다르며, CNN/DM에서 최대 4.7로 향상되었음을 알 수 있습니다. 또한 figure3과 table1을 통해 performance gain이 reference summary의 길이와 연관되어 있음을 알 수 있습니다. </p>
<p>짧은 요약(Reddit &amp; XSum)의 경우, pearl-summary의 완전한 식별이 큰 개선으로 이어지지 않고 긴 요약(PubMed &amp; Multi-News)의 경우, 여러 문장은 이미 semantic overlap의 정도가 커서 summary level method로 인한 개선은 상대적으로 적습니다. 하지만 중간 길이의 요약(CNN/DM &amp; WikiHow)의 경우, performance gain이 큰 것을 통해 summary level 학습이 의미있음을 확인할 수 있습니다.</p>
<p>MatchSum의 Framework를 정리하면, source doument, candidate summary, gold summary가 존재할 때, pearl-summary라는 개념을 새로 도입해서 이것들을 어떻게 정량적으로 판단할 수 있는지에 대해서 알 수 있었습니다. 이렇게 나온 값들이 semantic space 상에서 matching되어야 한다고 주장하는데 이제 summarization as matching에 대해 살펴보도록 하겠습니다.</p>
<hr>
<h2 id="4-summarization-as-matching">4. Summarization as Matching</h2>
<p>본 논문에서는 extractive summarization task를 semanctic text matching 문제로 정의하며, 여기서 source doument와 이로 부터 추출된 candidate summary는 semantic space에서 matching 되어야 합니다. 다음 섹션에서는 siamese based architecture를 사용하여 제안된 matching summarization framework에 대해 살펴보도록 하겠습니다.</p>
<h3 id="41-siamese-bert">4.1 Siamese-BERT</h3>
<p>본 논문에서는 matching을 진행하기 위해 BERT를 여러개 사용하고 있습니다. matching을 정확히 하기 위해서 siamese BERT라는 개념을 도입합니다. </p>
<ul>
<li>Siamese network</li>
</ul>
<p><img src="https://velog.velcdn.com/images/tobigs-nlp/post/acb77e4b-3eec-4db0-b722-b029093067a3/image.png" alt=""></p>
<p>서로 다른 input을 받아 Vectorization을 한 후, 벡터간의 유사도를 반환하는 네트워크로 샴 네트워크의 포인트 3가지로는 1) 서로 다른 input을 넣고, 2) weight를 공유하는 subnetwork를 거친 다음, 3) similarity를 최적할 수 있도록 학습하는 것입니다.</p>
<ul>
<li>Siamese-BERT</li>
</ul>
<p><img src="https://velog.velcdn.com/images/tobigs-nlp/post/78c674cb-92e6-4c23-8722-67cee67d87f9/image.png" alt=""></p>
<p>$r_D$ : document의 embedding / $r_C$ : candidate summary의 embedding</p>
<p><img src="https://velog.velcdn.com/images/tobigs-nlp/post/29765906-3033-44e7-9e7f-b057a00ccdd0/image.png" alt=""></p>
<p>이 구조를 어떤 식으로 siamese-BERT라고 정의했는지 살펴보면, BERT-ext, BERTSum과는 다르게 sentence-level representation을 얻을 필요가 없기 때문에 original BERT를 이용해서 subnet을 구성하고, source document와 candidate summary 사이에서 의미론적으로 의미있는 embedding을 구합니다. 즉, source document가 가지는 의미는 결국 candidate summary가 가지는 의미와 유사해야한다는 것에서 출발한 개념입니다. 기존에는 source document는 input, gold summary는 target으로 teacher forcing하는 방식으로 진행되어 왔습니다. 하지만 본 논문에서는 좋은 summary를 만들어내는 것도 중요하지만, 결국 의미적으로 유사할 수 있는 summary를 가지고 오는 것도 매우 중요한 작업이기 때문에 제안한 네트워크 구조입니다. 이렇게 서로 다른 input에 source document와 candidate summary를 넣고, weight를 공유한 BERT를 지나, cosine similarity를 최적화할 수 있도록 학습을 진행하는 것입니다.</p>
<ul>
<li>Siamese-BERT : Loss function</li>
</ul>
<p>1) Loss term 1 (<em>margin-based triplet loss</em> ) </p>
<p>→ candidate summary (C) 와 document(D) 간 consine simarity, gold summary(C*) 와 (D) 간 cosine similarity 비교</p>
<p><img src="https://velog.velcdn.com/images/tobigs-nlp/post/85cc24b8-770d-42f2-b403-f8df6586b4b0/image.png" alt=""></p>
<p>Loss function은 margin based triplet loss를 활용하여 학습을 진행했습니다. triplet loss는 어떤 클래스가 같은 것과 클래스가 다른 데이터가 존재할 때, 클래스가 같은 것은 더 가까운 위치에, 클래스가 먼 것은 멀리 있는 위치에 학습시킬 수 있도록 고안된 loss 입니다. 여기서 triplet loss에 초점을 맞춰서 summarization으로 본다면, 직관적으로 생각했을 때 gold summary는 source document와 의미적으로 가장 가까워야한다는 것을 의미합니다.</p>
<p>2) Loss term 2 (<em>pairwise margin loss</em>)</p>
<p>→ 각 candidate summary와 gold summary의 ROUGE score를 측정하여 정렬한 후, <em>i</em>번째 순위의 candidate summary $C_i$ <em>*와 *j</em> 번째 순위의 $C_j$에 대해 candidate pair간 loss 측정</p>
<p><img src="https://velog.velcdn.com/images/tobigs-nlp/post/364202f4-d570-4e47-9549-5d4f9a753adb/image.png" alt=""></p>
<p>두번째 포인트로는 ROUGE score를 통해 내림차순으로 정렬한 candidate ranking이 큰 candidate summary의 margin이 크도록 학습하는 loss term 입니다. 여기서는 gold summary와 거리를 가깝게 하는 것이 아니라, candidate summary와 document를 가까운 위치에 오도록 하는 것입니다. gold summary에 따른 ranking gap (j−i)이 크고, $C_j$ 와 $C_i$ 의 document similarity의 차가 클수록 loss 값이 증가합니다.</p>
<p><img src="https://velog.velcdn.com/images/tobigs-nlp/post/c951c1ef-03df-45c3-814d-4e36bdcc6e35/image.png" alt=""></p>
<p>첫번째 loss와 두번째 loss를 더해서 최종 loss를 계산합니다.  Loss의 기본 아이디어는 정답 요약문을 가장 높은 매칭 스코어를 가질 수 있게하고, 이와 동시에 후보 중에서 더 나은 후보가 있다면 상대적으로 더 좋은 스코어를 가질 수 있게 하는 것이다.</p>
<h3 id="42-candidates-pruning">4.2 Candidates Pruning</h3>
<p>Pruning은 데이터에서 가지치기를 한다는 의미인데, 대부분 summarization에서는 content selection을 이용해서 사용할 document에서 필요없는 부분을 제거하는 과정을 거칩니다. 본 논문에서는 BERTSum 모델을 사용해서 Candidates Pruning을 진행합니다.  </p>
<p><img src="https://velog.velcdn.com/images/tobigs-nlp/post/87b209b7-d8e6-45a6-b37c-0899b66d4233/image.png" alt=""></p>
<blockquote>
<p>Ext : source document에서 pruning 진행 후 남은 문장의 수
Sel : candidate를 구성할 문장의 수
Size : candidate summary의 수</p>
</blockquote>
<p>데이터셋에 적용해보면, Ext가 5개인 경우(Reddit, XSum)에 selection하는 것이 2가지 케이스로 나뉘어질 수 있습니다. 사이즈를 구하는 것은 5C1과 5C2를 더하는 케이스라고 보면 됩니다. </p>
<hr>
<h2 id="5-experiment">5. Experiment</h2>
<h3 id="51-datasets">5.1 Datasets</h3>
<p>본 논문에서는 6가지 benchmark dataset으로 실험을 진행했습니다.</p>
<p>1) CNN/DailyMail : 뉴스 기사 및 관련 하이라이트를 요약으로 포함</p>
<p>2) PubMed : scientific papers에서 수집되었으며 긴 문서로 구성됨</p>
<p>3) WikiHow : 온라인 지식 베이스로부터 추출된 다양한 문서</p>
<p>4) XSum : “What is the article about?”라는 질문에 답하기 위한 한 문장 요약 데이터셋</p>
<p>5) Multi-News : 비교적 긴 요약을 가진 다중 문서 뉴스 요약 데이터셋</p>
<p>6) Reddit : 소셜 미디어 플랫폼에서 수집된 매우 abstractive한 데이터셋</p>
<h3 id="52-implementation-details">5.2 Implementation Details</h3>
<ul>
<li>Adam Optimizer &amp;  $lr = 2e^{−3}· min(step^{−0.5}, step · wm^{−1.5})$</li>
<li>batch size of 32, wm denotes warmup steps of 10,000, γ1 = 0 and γ2 = 0.01</li>
<li>본 논문에 나열된 모든 실험 결과는 three run의 평균</li>
<li>CNN/DM에서 siamese-BERT 모델을 얻기 위해 use 8 TeslaV100-16G GPUs for about 30 hours of training</li>
<li>데이터셋의 경우, 빈 문서 또는 요약이 있는 샘플을 제거하고 문서를 512개의 토큰으로 잘라냄</li>
</ul>
<h3 id="53-experimental-results">5.3 Experimental Results</h3>
<p><img src="https://velog.velcdn.com/images/tobigs-nlp/post/ec8acae4-b50f-4775-a294-1815e89a82c5/image.png" alt=""></p>
<p>CNN/DM과 다른 Short summary, Long summary로 결과표를 구분해서 보여주고 있습니다. CNN/DM의 경우, BERT-EXT를 새로 구현하고 tri-blocking을 진행했을 때의 성능을 따로 체크했습니다. 이렇게 했음에도 불구하고 MatchSum이 훨씬 더 좋은 성능을 나타내는 것을 확인할 수 있습니다. 또한 base model을 RoBERTa로 사용한 경우, 더 좋은 성능을 나타내는 것을 확인할 수 있었고, RoBERTa가 6,300만 개의 뉴스 기사를 사용하여 pretrained 되었기 때문이라고 생각했습니다. ****short summary로 대표되는 Reddit, Xsum에서도 좋은 성능을 나타냈으며, long summary로 대표되는 PubMed, MultiNews에서도 좋은 성능을 나타내는 것을 확인할 수 있습니다.</p>
<h3 id="54-anlaysis">5.4 Anlaysis</h3>
<p>이 논문은 experiment 파트에서 anlaysis를 더 진행하는데, Ranking을 나타내는 변수인 z를 조절해서 BERT-EXT와 MatchSum의 성능을 비교합니다.</p>
<p>BERT-EXT에 대해 성능을 비교한 이유는 MatchSum이 나오기 전에 가장 좋은 성능을 기록한 모델이기 때문입니다. 성능의 기준은 ROUGE score의 차이로 볼 수 있고, pearl-summary가 best-summary인 경우에 MatchSum이 더 좋은 성능을 보였습니다. 여기서 MatchSum이 더 좋은 성능을 보였다는 것의 의미는 summary level의 summarization이 타당한 접근법이라는 것임을 의미합니다. z를 크게 하면 할수록 어느정도 ROUGE score가 증가하는 모습을 볼 수 있었습니다.</p>
<p><img src="https://velog.velcdn.com/images/tobigs-nlp/post/d74a05d0-0719-4671-9fe3-f376a90f1240/image.png" alt=""></p>
<p>성능의 개선 정도를 식으로 나타내어 비교도 진행하였습니다. </p>
<p><img src="https://velog.velcdn.com/images/tobigs-nlp/post/485a4dff-bb3b-40a2-a902-d0937f9cc0f8/image.png" alt=""></p>
<blockquote>
<p>$C_{MS}$ : document D에서 MatchSum에 의해 선택된 candidate summary
$C_{BE}$  : document D에서 BERT-EXT에 의해 선택된 candidate summary
$\Delta{(D)^*}$ : 데이터셋 D의 BERT-EXT을 기준으로 MatchSum에 의한 개선 정도</p>
</blockquote>
<p>sentence level과 summary level extractor 사이의 Inherent gap과 비교하여 MatchSum이 데이터셋 D에서 학습할 수 있는 비율을 다음과 같이 정의합니다.</p>
<p><img src="https://velog.velcdn.com/images/tobigs-nlp/post/5d99fb27-8314-456c-b265-2764cfefbbbf/image.png" alt=""></p>
<blockquote>
<p>$\Delta{(D)}$  : sentence level과 summary level extractor 사이의 inherent gap</p>
</blockquote>
<p><img src="https://velog.velcdn.com/images/tobigs-nlp/post/83018fc7-c360-4914-963b-680c9c375ef2/image.png" alt=""></p>
<p>각 데이터셋의 MatchSum에 따른 성능의 개선 정도를 식으로 나타내어 비교도 진행하였는데 이 경우에도 높은 성능 변화가 있음을 확인할 수 있었습니다. PubMed와 Multi-News의 성능 개선 정도가 0.2 이하인 것을 보아, 길이가 긴 Summary에 대해서는 MatchSum의 성능이 크게 향상되지 않음을 알 수 있습니다. 이 중에서도 Multi-News가 PubMed 보다는 성능향상 정도가 높은데, 이는 Best Summary의 분포에 따른 것으로 볼 수 있습니다(요약 길이가 일정하고 고르게 분포되어 있을 때 모델이 더 잘 수행되는 경향 존재). </p>
<hr>
<h2 id="6-conclusion">6. Conclusion</h2>
<p>MatchSum은 기존의 문서 요약 모델 구조를 벗어나 새로운 구조를 제안한 모델로, 기존의 모델들이 sentence level extractor의 역할을 했었다면, MatchSum은 Semantic text maching을 도입하여 source document와 gold summary가 의미적 유사도를 가질 수 있도록 학습해야 한다는 목적을 가지고 있습니다. 또한 candidate summary를 기존 SOTA 모델인 BERTSum을 이용해 pruning하여 좋은 후보군을 생성했으며, Siamese-BERT를 제안하여 similarity를 학습할 수 있도록 모델을 구성했습니다. 데이터셋의 특성을 구분할 수 있는 지표를 제안하고 우리 모델이 어떻게 데이터의 특성에 더 잘 적합할 수 있는지를 보여주기 위해 분석을 수행했습니다. 마지막으로 6가지 benchmark dataset에 대해서도 좋은 성능을 기록했습니다.</p>
<hr>
<h2 id="7-references">7. References</h2>
<p><a href="https://www.youtube.com/watch?v=8E2Ia4Viu94">https://www.youtube.com/watch?v=8E2Ia4Viu94</a>
<a href="https://velog.io/@aqaqsubin/MatchSum-Extractive-Summarization-as-Text-Matching">https://velog.io/@aqaqsubin/MatchSum-Extractive-Summarization-as-Text-Matching</a>
<a href="https://aimaster.tistory.com/47">https://aimaster.tistory.com/47</a>
<a href="https://ryanong.co.uk/2020/06/08/day-160-nlp-papers-summary-extractive-summarization-as-text-matching/">https://ryanong.co.uk/2020/06/08/day-160-nlp-papers-summary-extractive-summarization-as-text-matching/</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Characterizing the Efficiency vs. Accuracy Trade-off for
Long-Context NLP Models]]></title>
            <link>https://velog.io/@tobigs-nlp/Characterizing-the-Efficiency-vs.-Accuracy-Trade-off-forLong-Context-NLP-Models</link>
            <guid>https://velog.io/@tobigs-nlp/Characterizing-the-Efficiency-vs.-Accuracy-Trade-off-forLong-Context-NLP-Models</guid>
            <pubDate>Wed, 11 May 2022 07:33:08 GMT</pubDate>
            <description><![CDATA[<p>본 논문은 2022 ACL에 실린 논문입니다. 긴 시퀀스를 받는 언어 모델을 만드는 것이 정말 정확도와 효율적인 측면에서 맞는 일인가?에 관한 observation paper입니다. 이 논문은 읽기 전에 longformer, bigbird, summarization task, QA task에 대한 사전 지식이 있으면 이해하기 좋습니다.</p>
<h3 id="abstract">Abstract</h3>
<ul>
<li>긴 텍스트를 다루는 NLP의 다양한 응용으로, 더 긴 input sequences를 다룰 수 있는 모델의 정확도를 측정하는 벤치마크들이 부상. </li>
<li>하지만, <strong>이러한 벤치마크들인 input size 또는 model size가 달라짐에 따라 정확도, 속도 그리고 전력 소비 사이의 trade-off는 고려하지 않음.</strong> </li>
</ul>
<p>본 논문에선, 널리 사용되는 긴 시퀀스의 모델 Longformer-Encoder-Decoder(LED)와 BigBird에 대해 SCROLLS 벤치마크의 4가지 데이터셋에 대해 fine-tuing과 inference를 하며 정확도 대 효율성 trade-off에 관한 구조적 연구를 진행. </p>
<ul>
<li>4개의 시퀀스 길이(1024, 2048, 3072, 4096)과 2개의 모델 크기(base, large)에 대해 비교</li>
</ul>
<p>실험 결과는 다음과 같다.</p>
<ul>
<li>LED가 BigBird보다 낮은 전력 + 뛰어난 성능을 달성했다. </li>
<li><strong>요약에서, 우리는 모델의 크기를 늘리는 것이 시퀀스의 길이를 늘리는 것보다 정확도 측면에서 더 효율적</strong> (그러나, inference speed가 크게 떨어짐)</li>
<li><strong>QA에서, 한정된 자원에서 학습 배치 크기가 더 커지기 때문에 큰 모델보다 작은 모델이 효율적이면서 더 정확함</strong></li>
</ul>
<h3 id="1-intrduction">1 Intrduction</h3>
<p>Green AI를 시작으로, 연구자에게 에너지와 계산 효율을 고려하는 것이 요구되었다. 그러나 아직까지 efficiency metric이 LRA, SCROLLS 와 같은 제안된 벤치마크들과 통합되지 못했다. </p>
<ul>
<li>이러한 벤치마크들은 트랜스포머 모델들을 정확도 관점에서만 비교</li>
<li>그러나, 향상된 정확도가 모델 크기를 키우거나 입력 시퀀스의 길이를 늘려서 달성된 것일 경우, 이에 따른 에너지 비용은 명확하지 X </li>
<li>속도 측면에서의 모델 효율성의 이전 특징들은(in LRA) 오직 inter-model comparisons(e.g. model size, input length)만 집중한다. </li>
</ul>
<p>그래서 본 논문에서는 하이퍼파라미터를 선택할 때 정확도와 효율성의 trade-off가 모델 내 비교에도 영향을 미친다고 주장한다. </p>
<p>본 논문에서, 우리는 널리 사용되는 long-context NLP models - BigBird와 LED에 대해 효율성과 정확도의 trade-off에 관한 연구를 수행하였다. </p>
<ul>
<li>우리는 효율성을 몇가지 지표(학습 시 소요되는 에너지 소비량, 학습 속도, inference 속도, 전력 효율)를 사용해 나타냈다. </li>
<li>우리는 4개의 다른 입력 시퀀스 길이와 2가지 다른 모델 크기에 대해 이 모델들을 비교한다.</li>
</ul>
<p>실험한 결과는 다음과 같다.</p>
<ul>
<li>전체적으로, 요약에선, 우리는 모델의 크기를 늘리는 것이 정확도를 높이는 측면에서 더 효율적이라는 사실을 밝혀냈다. </li>
<li>하지만 inference 속도가 효율성에서 주된 관심사라면, 더 작은 모델이 낫다. </li>
<li>QA에선 우리는 더 작은 모델일수록 학습 시 배치 크기가 커지기 때문에 효율성과 정확도의 측면 모두에서 더 낫다는 것을 알았다.</li>
</ul>
<h3 id="2-background">2 Background</h3>
<h3 id="21-nlp-benchmarks">2.1 NLP Benchmarks</h3>
<p>SuperGLUE와 SQuAd와 같은 벤치마크들은 NLP모델의 발전에서 중요한 기반이 되어왔다. 그러나 이러한 벤치마크들은 많은 NLP task(요약, QA..)의 관심사가 긴 문장을 받는 것임에도 불구하고 <strong>짧은 문장에 대한 모델의 성능만 포착</strong>한다. </p>
<p>최근에, 여러 효율적인 트랜스포머 모델들은 입력 길이에 대해 sub-quadratic($O(n^2)$) memory와 time complexity가 요구된다는 것이 밝혀졌다. 
==&gt; 결과적으로, <strong>새로운 표준화된 벤치마크들은 특히 긴 시퀀스를 이러한 모델이 모델링할 수 있냐(수용력)에 대해 초점</strong>을 맞춰왔다.(Long Range Arena(LRA), SCROLLS)</p>
<p>LRA가 긴 시퀀스의 모델을 평가하지만, 이 평가지표는 오직 byte tokenize를 통해 인공적으로 입력 길이를 연장한 2가지 언어의 데이터셋만 포함하고 있다. 또한, LRA는 다른 하이퍼파라미터는 무시한 채 다른 모델 아키텍처들의 속도만 비교한다.</p>
<p>한편, SCROLLS 벤치마크는 요약, QA, 분류를 포함한 긴 길이의 시퀀스에서부터 자연스럽게 합성한 정보(synthesizing information)을 요구하는 언어 태스크에 초점을 두고 있다. 우리의 분석에서, 우리는 SCROLLS에서부터 3개의 요약 태스크와 1개의 QA 태스크를 활용한다.</p>
<h3 id="22-energy-considerations">2.2 Energy Considerations</h3>
<p>딥러닝 모델이 늘어나는 수요를 충족시키기 위해 더 복잡해짐에 따라, 모델을 실행시키는데 드는 계산량은 점진적으로 큰 energy cost를 만들어낸다.
==&gt; 이는 SOTA를 유지하면서도 더 높은 에너지 효율을 요구하는 Green AI 관점을 이끌었다. </p>
<p>AI 성능과 에너지 효율의 벤치마크는, 오직 2-layer LSTM과 vailla Transformers에 대해서만 테스트되었다. </p>
<ul>
<li>HULK는 pre-training, fine-tuning, inference동안 서너개의 Transformer 모델(BERT, RoBERTa)의 에너지 효율을 평가하는 NLP dataset</li>
<li>하지만 긴 입력 길이를 가진 모델은 고려하지 않음</li>
</ul>
<p>추가적으로, 에너지 효울과 정확도 모두에 대해서 다양한 시퀀스 길이의 효과를 고려하는 벤치마크는 없다. 그러나 우리는 <strong>HULK로부터 관찰에서 모델의 사이즈가 커지는 것이 항상 낮은 효율을 암시하지 않는다는 것을 확인</strong>했다.</p>
<h3 id="3-methodology">3 Methodology</h3>
<p>우리의 주된 contribution은 긴 길이의 트랜스포머 모델들이 fine-tuing하고 inference하는 동안 시퀀스의 길이가 정확도, 전력, 속도 사이의 trade-off에 얼마나 많은 영향을 끼치는지에 대한 분석이다. </p>
<p>우리의 초점이 긴 길이의 NLP task에 있기 때문에, 우리는 다음 4개의 입력 시퀀스 길이에 대해 조사했다 : 1024, 2048, 3072, 4096</p>
<h3 id="31-datasets">3.1 Datasets</h3>
<p>우리는 SCROLLS 벤치마크에서 4개의 데이터셋에 대한 분석을 실행 : GovRepert, SummScreenFD, QM-Sum, Qasper. </p>
<p>이러한 데이터셋은 2개의 태스크를 포괄한다 : 요약과 QA. </p>
<ul>
<li>GovReport : U.S. Government Accountability Office(GAO) and Congressional Research Service(CRS)에서 출간된 보고서로 구성된 요약 데이터셋</li>
<li>SummScreenFD : 에피소드의 스크립트가 주어졌을 때, TV 에피소드의 요약을 생성하는 것을 목표로 하는 요약 데이터셋 </li>
<li>QMSum : 다양한 학술 미팅, 산업 제품 미팅, 공공 정책 미팅과 같은 다양한 회의록으로 구성된 query기반 요약 데이터셋</li>
<li>Qasper : SCORC(Semantic Scholar Open Research Corpus)에서의 NLP 논문에 대한 QA데이터셋. 논문의 제목과 초록이 주어졌을 때, 모델이 논문에 대한 질문에 답을 생성할 수 있어야 함.</li>
</ul>
<p>이러한 데이터셋에 대한 요약과 세부 내역을 Table 1과 Appendix A에 있음. 
<img src="https://velog.velcdn.com/images/lm_minjin/post/f4e37c55-7336-4b4b-b5c7-066232e196e1/image.png" alt=""></p>
<h3 id="32-models">3.2 Models</h3>
<p>pre-trained model로 시작에서 시작해, fine-tuning과 inference로 실험을 제한했다. 우리의 태스크가 sequence-to-sequence format을 채택하기 때문에,  긴 길이의 NLP에 대해 널리 사용되는 2개의 encoder-decoder model를 선택했다 - Longformer-Encoder-Decoder(LED)와 Big Bird. 전형적인 사용 방법을 따라하기 위해, 우리는 HuggingFace library에서 2개의 사전 학습된 모델을 얻었다. - 그러므로 우리의 분석은 어느 HuggingFace model에 대해서도 쉽게 확장 될 수 있다.</p>
<h4 id="longformer-encoder-decoderled">Longformer-Encoder-Decoder(LED)</h4>
<p>우리는 원래 논문에서 나온 LED의 base와 large버전 모두를 분석했다. LED model의 버전은  Longformer-chunks 구현을 활용한다. 이는 한 번의 행렬곱 연산만 필요하도록 키 및 쿼리 행렬을 chunk하여 더 높은 메모리 비용으로 높은 계산 효율성을 달성한다.</p>
<h4 id="bigbird">BigBird</h4>
<p>원래 BigBird 논문에서의 encode-decoder setup을 따라, 우리는 PubMed 데이터셋(Pegasus-large에서 시작)에 대해 사전 학습된 BigBird-large버전을 활용했다. 우리는 오직 large viersion에 대해서만 실험을 실행했다.(base는 HuggingFace에 발매 안됐기 때문)</p>
<h3 id="33-hardware-resources-provisioned">3.3 Hardware Resources Provisioned</h3>
<p>LED-base 모델에 대한 초기 연구는 <strong>QA에선 높은 정확도를 얻기 위해 큰 배치 사이즈는 필수적이다, 하지만 요약은 그보다 덜하다는 것을 제안(Table 2)</strong>.
<img src="https://velog.velcdn.com/images/lm_minjin/post/35ece391-3ef6-4693-b504-735fc9794a10/image.png" alt=""></p>
<ul>
<li>Qasper(QA)에 대해 배치 사이즈를 x4 하는 것(gradient accumulation step size를 4로 함)은 입력 시퀀스 길이에 상관없이 2에서 4 point만큼 오름</li>
<li>입력 시퀀스 길이 1024를 예로 들면, 우리는 한 GPU에 24배치를 fitting할 수 있었다.(fine-tuning시 oom에 고통받지 않고, 17.68달성) - 배치 사이즈를 96으로 늘렸을 때, 모델의 정확도는 21.39로 증가</li>
<li>더 많은 GPU를 사용해 배치사이즈를 키웠을 때 F1 점수는 4에서 7%point 정도 증가</li>
<li>같은 트렌드가 Qasper dataset에 대해서 입력 길이에 관해서도 유지됨</li>
<li>배치사이즈를 4배씩 키우는 것은 GovReport 요약 데이터셋에선 무시할만한 Rouge scores점수를 만들었다(GPU 여러개 쓰는 것도 별 영향 없음).</li>
</ul>
<p>이렇게 알려진 초기 실험에서 요약 태스크에 대해 fine-tuning과 inference하는 데에 GPU숫자가 accuracy에 긍정적인 영향을 끼치지 않다는 것을 바탕으로 Nvidia RTX A6000 GPU 1대로 자원을 고정하였다. </p>
<p>대신에, QA 태스크에서는 배치가 커질수록 모델 accuracy가 높아졌기 때문에, 8대의 Nvidia RTX A6000 GPU를 사용했다.</p>
<h3 id="34-fine-tuning">3.4 Fine-tuning</h3>
<p>3.2에서 언급된 모든 사전 학습 모델들은 수렴할 때 까지 모든 데이터셋에 대해 mixed preicision 또는 gradient checkpointing없이 fine-tuned되었다. </p>
<ul>
<li>한 모델은 accuracy가 같거나 3 validation call에 대해 더 나빠졌을 때 수렴했다. </li>
<li>우리는 요약의 경우 500 steps마다, QA의 경우 10 steps마다  validation을 수행했고, 모델은 지표가 계속 같거나 요약은 1500steps, QA는 30 step에 대해 나빠졌을 경우 수렴했다.
<img src="https://velog.velcdn.com/images/lm_minjin/post/9013bbea-69a0-4da3-920f-33c9975c0a53/image.png" alt="">
하이퍼파라미터 관점에서, 우리는 SCROLLS벤치마크에서 batch size를 제외한 LED-base model에 대해 같은 파라미터를 적용했다. </li>
</ul>
<p>batch size에 대한 자세한 내용은 아래 표와 같다.</p>
<ul>
<li>메모리로 인한 효과를 통제하기 위해, 48GB A6000 GPU에 fit할 수 있는 가장 큰 배치사이즈 선택.  </li>
<li>QA태스크에서, 그 배치 크기는 각각의 8GPUs가 최대화 되는 미니 배치를 보고 결정됨. </li>
<li>QA에서 각각의 미니배치의 효율적인 크기를 더욱 늘리기 위해서, 우리는 4번마다 accumulation steps를 세팅함. 
<img src="https://velog.velcdn.com/images/lm_minjin/post/a2376b10-98d0-4b63-85d4-5f5fda490756/image.png" alt="">
하이퍼파라미터에 대한 더 자세한 정보는 Appendix B에 기술되어 있다.</li>
</ul>
<p>(배치를 다 다르게 하면 비교를 어떻게.. LED-large랑 BigBird-large는 배치가 같아야 비교가 되는게 아닌가? 라는 의문이 있음)</p>
<h3 id="35-inference">3.5 Inference</h3>
<p>우리는 SCROLLS의 테스트셋에서 label을 사용하지 않았기 때문에, inference는 validation set에 대해서만 실행됬다. 모든 inference는 배치 크기를 16으로 두고 실행됨.</p>
<h3 id="36-evaluation-criteria">3.6 Evaluation Criteria</h3>
<h4 id="accuracy">Accuracy</h4>
<p>각 데이터셋에 대해 모델의 정확도에 대한 우리의 평가 지표는 SCROLLS 논문에서 언급된 것을 따른다. </p>
<ul>
<li>GovReport, Summ-ScreenFd, QMSum은 ROUGE를 사용</li>
<li>Qasper은 predicted와 ground-truth answer strings에 대해 normalizing후 token-level의 F1 score를 사용</li>
</ul>
<p>*SCROLLS에 따르면 ROUGE는 각 단일값으로 제공되는 다른 종류의 rouge(Rouge-1, Rouge-2, Rouge-L)를 기하 평균 냄. </p>
<h4 id="efficiency">Efficiency</h4>
<p>각 효율성 지표에 대해서, 우리는 학습시 </p>
<ul>
<li>전력 효율성(number of samples trained per second per Watt)</li>
<li>전체 학습 에너지 요구량(average x training time)</li>
<li>학습 속도(number of samples trained per second)</li>
<li>inference 속도(number of samples inferenced per second)
를 측정한다. </li>
</ul>
<p>학습과 inference 속도는 HuggingFace 라이브러리에 의해, 전력 효율성과 전체 에너지 소비량은 Weights and Biases tool(wandb)에 의해 제공된다.</p>
<p>머신러닝 플랫폼에서 사용되는 중요한 산업 표준 지표중 하나이기 때문에, 우리는 전력 효율성을 우리의 지표중 하나로 선택했다. 클라우드 제공자들은 보통 40-50%의 비용을 전기 뿐만 아니라 서버를 powering and cooling하는데 사용하고, 이 비용은 더 늘어나고 있다. 그러므로, 전력 사용의 유용성을 최대화하는 것(watt당 처리되는 데이터의 수를 늘리는 것)은 NLP 연구에서 탄소 발자국을 줄이는데에 중요하다.</p>
<h3 id="4-results">4 Results</h3>
<h4 id="41-summarization-datasets">4.1 Summarization Datasets</h4>
<p>Figure 1은 각 요약 데이터셋 대 이에 상응하는 1024부터 4096까지의 입력 시퀀스 길이에 대한 학습 accuracy를 묘사하고 있다. 다음과 같은 관찰을 할 수 있다. </p>
<ol>
<li>전력 효율성은 입력 시퀀스 길이와 음의 상관관계를 가진다</li>
<li>BigBird-large는 LED-large와 유사한 전력 효율성을 보지만, BigBird의 rouge 점수가 훨씬 낮다.
==&gt; 즉, 요약 태스크를 학습시킬 때 LED를 선택하는게 더 낫다.
<img src="https://velog.velcdn.com/images/lm_minjin/post/c6a164a3-e190-46cb-857b-c1f9d82f047d/image.png" alt=""></li>
</ol>
<p>Figure2는 3가지 요약 데이터셋 각각을 학습하는데 드는 전체 에너지 소비량을 보여준다. </p>
<ul>
<li>GovRepert와 QMSum에 대해서 LED-large, input 1024가 더 긴 길이의 LED-base모델보다 더 효율적이고 높은 accuracy를 보임 </li>
<li>LED-large의 입력 시퀀스 길이를 늘리는 것은 정확도가 증가하고, 동시에 LED-base 모델의 길이를 늘리는 것보단 더 효율적</li>
<li>우리는 BigBird가 에너지는 더 사용하면서 rouge는 낮다는 것을 알 수 있었음.</li>
</ul>
<p><strong>요약에서 이는 짧은 길이를 가지는 더 큰 모델을 사용하는 것이 더 높은 정확도를 얻으면서 에너지 친화적인 방법</strong>이다. 
<img src="https://velog.velcdn.com/images/lm_minjin/post/d3897616-242a-4b29-9dc5-95ac3a7f3606/image.png" alt=""></p>
<p>요약 데이터셋에 대한 학습 속도(Figure 3)과 inference 속도(Figure 4)는 유사한 경향을 보인다. </p>
<ul>
<li><strong>입력 시퀀스 길이가 늘어남에 따라</strong>, 이러한 효율적인 트랜스포머 모델에 사용된 attention mechanism에서 나타나는 sub-quadratic runtime complexity로 인해 <strong>학습 및 추론 속도가 감소한다.</strong> </li>
<li>학습 시 에너지와 달리, <strong>추론 속도는 모델의 크기가 더 작을수록, 정확도가 낮아질수록 빨라진다.</strong> 그러나 종종 짧은 입력 길이(1024) + LED-large 보다 긴 입력 길이(2048) + LED-base모델이 유사한 정확도를 얻기도 한다.
<img src="https://velog.velcdn.com/images/lm_minjin/post/8e94d7af-b76a-47b9-abb3-636515a73cd3/image.png" alt="">
<img src="https://velog.velcdn.com/images/lm_minjin/post/0e1e13d4-e7da-488f-ae46-c67c822b1e2f/image.png" alt=""></li>
</ul>
<h3 id="42-qasper-dataset-and-scaling-up-resources">4.2 Qasper Dataset and Scaling Up Resources</h3>
<p>Figure 5는 Qasper QA task에 대해 4개의 효율성 지표를 보여준다. </p>
<ul>
<li>LED model이 BigBird보다 전반적으로 F1 score가 높음</li>
<li>한정된 적은 자원에서, LED-base가 LED-large보다 더 뛰어남(배치 크기 때문인걸로 추정)</li>
</ul>
<p>즉, 이 태스크에선 작은 모델을 사용하는 것이 효율적이고 더 정확하다!</p>
<p>입력 시퀀스 길이를 늘리는 것은 정확도에서는 작은 증가를 가져왔지만, 학습 에너지에선 많은 비용을, 속도 측면에서도 훨씬 느려지는 단점을 보였다.
<img src="https://velog.velcdn.com/images/lm_minjin/post/e1bce3c8-47e8-4a07-aaa1-828a78fde0b3/image.png" alt=""></p>
<h3 id="43-energy-consumption-deep-dive">4.3 Energy Consumption Deep Dive</h3>
<p>하드웨어 플랫폼의 에너지 소비를 이해하기 위해, 우리는 GovReport 데이터셋에 대한 더 깊은 분석을 제시한다. 우리는 GPU 활용 정도(average over the entire training run), GPU 메모리 사용(average over the entire training run), 그리고 학습 시간(in seconds)를 Figure 6에 그래프로 표현했다. 
<img src="https://velog.velcdn.com/images/lm_minjin/post/799a10fc-7fa4-461a-a561-0cd00aa92f4e/image.png" alt=""></p>
<ul>
<li>GPU 활용 정도는 LED모델이 높음</li>
<li>BigBird의 경우 input sequence가 4096일 때 GPU 활용 정도가 가장 낮음
==&gt; GPU 활용 정도가 낮아서 에너지 비용 자체는 낮지만, 학습하는데 시간이 매우 오래 걸림(4096, large기준 LED보다 거의 4배 차이가 남)</li>
<li>일반적으로 GPU에 대한 학습 시간은 전체 에너지 소비와 유사한 경향을 보임</li>
</ul>
<h3 id="5-conclusion">5 Conclusion</h3>
<p>우리는 accuracy vs efficiency trade-off에 대한 구조적인 연구를 제시했다. NLP 벤치마크에서 흔하게 사용되는 모델 구조들을 비교했고, 우리는 4개의 다른 시퀀스 길이와 2개의 모델 크기에 따라 모델을 비교하는데 초점을 두었다. 우리는 실무자들이 제한된 자원 환경에서 하이퍼파라미터를 선택하는데 활용될 수 있기 희망하면서 몇가지 키포인트를 강조했다.</p>
<ul>
<li>긴 길이를 갖는 것보다 큰 모델을 사용하는데 에너지 효율도 좋고 요약 태스크에서 정확도도 높다.(추론 속도는 관심사가 아닐 때)</li>
<li>QA에선 작은 모델에 긴 길이의 시퀀스를 활용하는 것이 더 높은 효율과 정확도를 보였다.</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[DiffCSE: Difference-based Contrastive Learning for Sentence Embeddings]]></title>
            <link>https://velog.io/@tobigs-nlp/DiffCSE-Difference-based-Contrastive-Learning-for-Sentence-Embeddings</link>
            <guid>https://velog.io/@tobigs-nlp/DiffCSE-Difference-based-Contrastive-Learning-for-Sentence-Embeddings</guid>
            <pubDate>Tue, 10 May 2022 05:46:57 GMT</pubDate>
            <description><![CDATA[<p>오늘은 2022년 4월 NACCL 학회에 투고가 된 따끈따끈한 논문 리뷰를 준비해봤습니다.
제가 준비한 리뷰 순서도 논문의 구성 순서와 비슷하게 준비했습니다.</p>
<h1 id="introduction">Introduction</h1>
<p>먼저 최근에 자연어처리 연구에서  ‘Universal‘한 문장 표현이 중요한 연구 주제로 떠오르고 있습니다. 최근 연구들은 주로 PLM을 Fine-tuning할 때, contrastive learning을 적용하며 문장 embedding의 성능을 올리는 것이 시도되고 있습니다. Contrastive learning이란 밑에 보이는 그림과 같이 주로 Computer Vision에서 자주 쓰이는 개념인데, 동일한 이미지에 대해 augmentation을 적용한 객체들은 positive pair로써 가까이하고, 다른 이미지에 대해서는 negative pair로써 멀리하며 학습하는 개념입니다. 즉, contrastive learning은 대상들의 차이를 좀 더 명확하게 보여줄 수 있도록 학습하는 뜻입니다. 
<img src="https://velog.velcdn.com/images/gunny1254/post/cf20ee9b-d1f2-4046-93d2-38c55a3e89ae/image.png" alt="">
<img src="https://velog.velcdn.com/images/gunny1254/post/89c1a90c-5b42-442b-aacf-7f9c9500a4d2/image.png" alt=""></p>
<p>하지만 이와 같은 개념은 컴퓨터 비전뿐만 아니라, 2013년에 자연어처리 분야에서도 word2vec이 소개될 때 이미 나왔던 개념입니다. Word2vec에서는 contrastive learning의 워딩을 직접적으로 사용하지는 않았지만, word2vec에서 적용되는 negative sampling의 개념은 중심 단어와 멀리 있는 단어 (즉, 관련이 없는 단어에 대해서는 유사하지 않다는 방향으로 학습하며) contrastive learnin과 비슷한 개념을 가지고 있습니다. 아래 word2vec의 objective function을 확인해보시면 두 번째 항에서 negative sampling을 통해서 center word와 negative sample간의 유사도를 낮추는 식으로 명시되어 있는 것을 확인할 수 있습니다.</p>
<p><img src="https://velog.velcdn.com/images/gunny1254/post/67608c00-aa37-4cbe-b0c0-4a5b342af4a2/image.png" alt=""></p>
<p>금일 제가 소개 드리는 논문에서도, contrastive learning을 활용한 비지도 학습 방식의 문장 표현을 학습하는 방법인 DiffCSE에 대해 설명드리겠습니다.</p>
<p><img src="https://velog.velcdn.com/images/gunny1254/post/6933dea9-fc85-4615-8f20-de2a8752274d/image.png" alt=""></p>
<p>먼저, 문장 임베딩을 표현하는 방법 중 널리 알려져있는 방법을 소개 드리겠습니다. 트랜스포머 기반 모델을 활용하여 문장 임베딩을 표현할 때, 첫째로, 아래 좌측에 보이는 BERT는 주로 [CLS] 토큰 혹은 마지막 layer의 출력 벡터에 대해 average pooling값을 기준으로 문장을 표현합니다. 우측 하단에 보이는 SBERT는 BERT를 SNLI dataset에 대해 finetuning을 한 모델로 Siamese network와 triplet loss를 활용해 BERT를 개선한 모델입니다.  </p>
<p><img src="https://velog.velcdn.com/images/gunny1254/post/ea361f9c-955a-44c0-8c75-8071108a293e/image.png" alt=""></p>
<p>그러면 처음 설명한 contrastive learning 개념이 앞에 BERT/ SBERT와 같이 문장 임베딩을 표현하는 것에 있어 어떻게 적용이 될까요?</p>
<p><img src="https://velog.velcdn.com/images/gunny1254/post/297f3ed2-4d2e-4b90-b005-9575aecdc397/image.png" alt=""></p>
<h1 id="background">Background</h1>
<h2 id="learning-sentence-embeddings">Learning Sentence Embeddings</h2>
<p>이는 2020년 ICML에 소개된 Computer Vision 분야인 SimCLR 논문을 먼저 알고 있으면 해당 내용을 이해하는데 있어 수월할 것입니다. 처음 장표에서 보여드린 강아지/의자 사진에서 동일 사진에 대한 객체는 positive pair로 묶고 다른 객체들은 negative pair로 처리하며 학습한 사진은 여기 SimCLR의 학습 방식을 나타낸 것입니다. 여기 좌측에 보이는 그림도 x라는 객체에 대해 각각의 augmentation을 취한 뒤 특정 함수를 통해 나온 벡터 값에 대한 유사성이 높다고 여기는 것이 positive pair로 묶이는 과정의 그림입니다. 이런 식으로 CV분야에서는 contrastive learning을 통해 이미지 표현에 있어 엄청난 성능 향상을 보였습니다.</p>
<p><img src="https://velog.velcdn.com/images/gunny1254/post/0a93b7ee-df65-489e-bba2-2091fdd11093/image.png" alt=""></p>
<p>2021년 EMNLP에서 소개된 SimCSE도 SimCLR와 비슷한 방식으로 contrastive learning을 활용하며 문장 embedding 표현의 성능을 올렸습니다. SimCSE에는 크게 비지도학습/지도학습 방식 기반으로 두가지 방법이 소개가 됩니다. 여기서 동일 문장에 대한 augmentation은 저희가 주로 알고 있는 deletion, insertion, substitution 등을 활용하지 않고 Encoder에서 dropout mask를 다르게 적용시키며 positive pair를 만들었습니다. 여기서 negative pair로는 같은 batch size 내에 있는 다른 문장으로 가정하며 contrastive learning을 학습했습니다. 두번째로 소개되는 학습 방식은 지도학습 기반으로 학습되는 SimCSE인데, 이는 NLI dataset을 활용하며 모델을 학습시켰습니다. Dataset에서 premise 문장과 Entailment로 되어 있는 label은 positive pair, contradiction로 지정 되어있는 label은 negative pair로 가정하며 contrastive learning을 학습했습니다. 
<img src="https://velog.velcdn.com/images/gunny1254/post/57a63dce-d5d0-4baa-8456-82080a6e7d84/image.png" alt=""></p>
<p>다음은 SimCSE의 loss function인데, 분자 term을 보시면 특정 문장의 hidden vector를 hi라고 볼 때, 이에 대한 문장표현을 hi의 zi라 보고 이에 대한 augmentation을 취한 것은 hi의 zi프라임으로 볼 수 있습니다. 그래서 해당 positive pair의 유사도는 maximize 방향으로 학습이 됩니다. 반대로 분모 term을 보면 N개의 batch중 다른 문장들에 대한 negative pair의 유사도는 낮추는 방식으로 학습이 되는 것을 볼 수 있습니다. 이렇게 간단한 아이디어를 통해서 SimCSE는 pretrained model에 contrastive learning 개념을 접목시켜 문장 임베딩 부문에서 SOTA 성적을 보였습니다. </p>
<p><img src="https://velog.velcdn.com/images/gunny1254/post/817183d7-0d46-48d6-ae53-7a48893624df/image.png" alt=""></p>
<h2 id="equivariant-contrastive-learning">Equivariant Contrastive Learning</h2>
<p>SimCSE에서 dropout을 다르게 적용시킨 것과 비슷하게,  contrastive learning에서 input의 transformation의 역할을 이해하는 것은 매우 중요합니다. Contrastive Learning은 이러한 transformation들로 부터 하여금 문장의 표현이 insensitive하게 되도록 만들어줍니다.  하지만 SiMCSE에 따르면, MLM과 같은 transformation은 STS-B task에서 모델의 성능을 떨어트렸기 때문에 다음과 같은 transformation을 contrastive learning에 적용하는 것은 적절하지 않다고 판단했습니다. 따라서 MLM과 같은 transformation은 contrastive pre-training에 사용하지 않았다고 언급했습니다.  하지만 DiffCSE는 MLM 기반의 transformation이 문장 표현에 sensitivie하게 적용이 되어도 해당 transformation을 학습하는데 있어 사용합니다. 이 점이 기존 문장 임베딩에서 SOTA 방법이었던 SimCSE와 DiffCSE가 다른 점입니다. 따라서, DiffCSE는 CV 분야에서 자주 사용되는 equivariant contrastive learning 방식의 학습 방법을 사용하며, 즉 transformation에 따라 표현이 insensitive 혹은 sensitive 하게 반응하는 것을 다 고려하며 학습하는 방법을 설계했습니다.
<img src="https://velog.velcdn.com/images/gunny1254/post/79d6d10d-b3c5-449e-b2b4-7b3aba1a4b25/image.png" alt=""></p>
<p>여기서 말하는 Equivariant Contrastive Learning가 무엇인지 구체적으로 설명을 드리겠습니다. 해당 수식에서 보이는 notation을 간단하게 설명을 드리면, T를 group G로부터 나오는 transformation이라고 보고, x라는 문장이 있을 때, T(x)는 x가 transformation을 거친 문장이라고 볼 수 있습니다. 그래서 여기서 알 수 있는 equivariance의 성질은 output feature에 대해서 동일한 값을 취해줄 수 있는 transformation인 T’이라고 볼 수 있습니다. 하지만 T’이 identity transformation이 되는 이러한 케이스는 contrastive learning에서 특수한 케이스라고 볼 수 있습니다. 여기서 T’이 identity transformation으로써, f라는 인코더는 T에 있어 invariant (불변하다는)하게 학습이 된다는 것은 많은 경우 중 하나라고 보는 것입니다. 이와 같은 상황 말고도 T’이 dropout과 같은 transformation에서 identity 성질을 갖고 MLM과 같은 transformation에 identity 성질을 갖지 않는 objective에도 확장을 시켜 적용할 수 있습니다. 이런 식으로 equivariant contrastive learning의 개념을 generalizing 함을 통해 CV에서 feature의 semantic한 quality를 향상시켰다는 것을 보였고, 이번에 소개하는 DiffCSE 모델도 이러한 개념을 NLP에서 처음으로 적용했습니다. </p>
<p><img src="https://velog.velcdn.com/images/gunny1254/post/6e73b243-b2f3-44e5-92e1-0a89fe000a2c/image.png" alt=""></p>
<p>해당 equivariant contrastive learning이 어떻게 DiffCSE에 적용되었는지 설명을 드리겠습니다. 먼저 DiffCSE에서 사용되는 Encoder는 invariant하는 것이 아니고 MLM-based augmentation과 equivariant를 이뤄야합니다. 즉, 단순히 동일한 Encdoer를 사용하여 equivariant를 성립하게 하는 것이 아니라, 조금 더 general하게 Encoder를 사용해서 equivariant를 만족시켰다고 이해하시면 될 것 같습니다. 이와 같이 MLM 기반의 augmentation을 Encoder에 적용하기 위해서는, Conditional한 Discriminator를 활용하면 됩니다. 다들 아시다시피 ELECTRA는 Generator와 Discriminator로 이루어져있는데, 여기 본래 ELECTRA의 Discriminator를 conditional한 Discriminator로 살짝 변형시켜주면 MLM에 equivariant한 encoder를 학습할 수 있습니다. 여기서 설명드리는 condition이란 여기서 사용되는 Electra와 독립적으로 구축된 encoder로부터 나온 sentence embedding의 hidden vector를 discriminator의 입력으로 넣어주는 것이라고 이해하면 될 것 같습니다. </p>
<p><img src="https://velog.velcdn.com/images/gunny1254/post/35cfb08c-5713-4cbe-91e5-3bd0ed3dcdee/image.png" alt=""></p>
<h2 id="diffcse">DiffCSE</h2>
<p>앞에 설명드린 DiffCSE의 특징들을 종합하여  모델의 구조를 설명드리겠습니다. 먼저 SimCSE와 동일하게 x라는 input sentence가 주어지면, 이를 sentence encode에 태워 contrastive learning을 목적함수로 두고 학습을 합니다. 앞에서 설명드린 바와 같이, x문장에 동일한 인코더에 dropout mask만 다르게 적용하여 나온 hidden vector를 positive pair로 두고, N크기만큼의 배치에서 다른 문장들간의 관계를 negative pair로 두며 학습을 하는 것입니다. 우측에 보이는 아키택쳐는 원래 Electra와 거의 동일하다고 보면 되는데, 여기서 SimCSE 구조에서 나온 hidden vector가 Discriminator의 condition으로 들어간다는 점만 다르다고 보시면 될 것 같습니다.
<img src="https://velog.velcdn.com/images/gunny1254/post/e1a0189d-5ea5-4046-ab0b-39bc3d7e5138/image.png" alt=""></p>
<p>Discriminator 부분에 대해 좀 더 자세하게 설명을 드리겠습니다. Original Input x가 있을 때, 15% masking ratio로 토큰에 마스크처리를 해준 뒤에 Generator를 통과하여 마스킹 된 문장을 생성해줍니다. 이에 대한 결과를 SimCSE의 output hidden vector를 condition으로 걸어 Discriminator에 함께 입력으로 넣어주면, Discriminator는 Replaced Token Detection을 objective로 삼아 학습을 하게 됩니다. RTD는 단순히 cross-entropy loss를 갖고 학습을 시키고, DiffCSE는 본래의 ELECTRA와 다르게 generator는 freeze시키고 오직 discriminator만 학습을 시킵니다.</p>
<p><img src="https://velog.velcdn.com/images/gunny1254/post/f85ad0f7-f015-482e-83ed-021a6ff2d6d2/image.png" alt="">
즉, 다시 말해 DiffCSE는 sentence encoder에서 나온 contrastive learning loss와 conditional한 Discriminator에서의 RTD loss 결합하여 total loss를 정의합니다.</p>
<p><img src="https://velog.velcdn.com/images/gunny1254/post/b18f87cd-bcfd-4790-bcee-7c94537bb403/image.png" alt="">
앞에 장표에서 말씀드린 대로 sentence encoder의 hidden vector도 discriminator의 입력으로 들어가기 때문에, 역전파 학습시에 Discriminator에서의 gradient도 sentence encoder로 흘러집니다. 그래서 sentence encoder는 x라는 본래 문장의 의미를 담는 방향으로 더욱 잘 학습을 할 수 있고, discriminator 역시 본래 문장 x와 generator에서 생성된 x’’의 사소한 차이도 구분할 수 있도록 학습이 됩니다. 그래서 이러한 conditional discriminator는 Diff operation을 수행한다고 볼 수 있어, 해당 모델의 이름 DiffCSE로 지어졌습니다. </p>
<p><img src="https://velog.velcdn.com/images/gunny1254/post/e3f85617-6a01-4fd9-ab61-3f5382f121ce/image.png" alt="">
다들 눈치를 채셨겠지만, 학습시에는 DiffCSE는 sentence encoder와 discriminator만 optimizing을 하고 generator는 freeze를 시켜 학습을 하지 않습니다. 학습 후에 테스트하는 과정에서, discriminator 부분을 버리고 오직 문장 임베딩을 뽑는 용도로 학습된 sentence encoder만을 활용합니다.</p>
<p><img src="https://velog.velcdn.com/images/gunny1254/post/a37e3159-c343-4124-8b2b-8506bd105017/image.png" alt=""></p>
<h2 id="experiments">Experiments</h2>
<p>이번에는 해당 DiffCSE 모델을 실험에 어떻게 활용했는지에 대해 설명을 드리겠습니다. 이번 실험에서는 지도학습 방식이 아닌 비지도학습 방식으로 모델을 설계를 했고, sentence encoder의 weigh를 PLM BERT/RoBERTa의 checkpoint로 활용했습니다. 여기서 sentence encode의 CLS 토큰 위에 MLP layer를 쌓아주고, 나온 벡터 값을 hidden vector로 설정했음을 먼저 아시면 되겠습니다. 추가로 Discriminator 부분에서는 sentence encode와 동일한 encode를 사용하였고, generator는 이보다 더 작은 인코더로 설정했습니다.</p>
<p><img src="https://velog.velcdn.com/images/gunny1254/post/b537942c-9cce-4def-a8c1-803058577591/image.png" alt=""></p>
<h2 id="results">Results</h2>
<p>먼저 첫번째 실험 결과를 보겠습니다. Metric을 Spearman’s correlation 평균값으로 두고 봤을 때, Semantic Textual Similiarty task에서 DiffCSE가 기존의 SOTA였던 SimCSE보다 성능의 개선이 되었음을 확인할 수 있습니다.</p>
<p><img src="https://velog.velcdn.com/images/gunny1254/post/cf34bf2c-8480-4afb-9574-24f084402a57/image.png" alt="">
다음 실험은 transfer task에 대한 결과입니다. SimCSE가 MLM objective function을 auxiliary task로 추가하여 기존에 소개된 성능보다 향상이 되었음에도 불구하고, transfer task에서도 accuracy 기준으로 DiffCSE가 더 높은 성능을 보입니다.</p>
<p><img src="https://velog.velcdn.com/images/gunny1254/post/b934bb8c-7240-48ee-9d71-e7029ce28472/image.png" alt=""></p>
<h2 id="ablation-studies">Ablation Studies</h2>
<p>다음은 DiffCSE가 수행한 다양한 Ablation study에 대해 설명 드리겠습니다. 먼저 DiffCSE에서 Contrastive Loss 부분을 제거하면, STS와 transfer task 둘 다에서 성능 저하가 떨어지는 것으로 보아, Objective function으로 Contrastive Loss와 RTD loss가 둘 다 필요하다는 것을 알 수 있습니다. 당연한 얘기지만, 여기서 RTD loss를 제거하게되면 SimCSE의 구조와 완전히 동일하게 됩니다. 두번째 ablation 실험은, conditional discriminator에 same sentence hidden vector가 아닌 next sentence의 hidden vector를 condition으로 걸어주었을 때, 어떻게 되는지 확인해봤습니다. Next sentence로 조건을 걸어주게 되면, Discriminator가 수행하는 것은 diff operation을 수행하지 않는 것으로 볼 수 있어 필연적으로 equivariant contrastive learning도 못한다는 것을 알 수 있습니다. 오른쪽 table을 확인해보시면, Next sentence를 적용한 조합은 되려 성능이 떨어지는 것을 볼 수 있습니다. 다음 ablation은 pretraining task에 다른 조건을 걸어주는 것입니다. Discriminator에서 replaced/original 이진 분류 문제 말고 MLM 목적함수나 Corrective Language Modeling을 pretraining task로 설정했을 때의 성능을 파악해봤습니다. 이 역시도 모델의 성능 향상은 확인할 수 없었습니다.</p>
<p><img src="https://velog.velcdn.com/images/gunny1254/post/70f6a8e5-64c1-423f-9b85-b5c4af47a880/image.png" alt="">
다음은 generator에서 augmentation 방법을 MLM token replacement 말고 insertion / deletion / randomly replace로 적용했을 때의, 성능을 확인해봤습니다. 이 역시도 MLM 기반으로 Augmentation을 진행했을 때, 모든 task에서 가장 좋은 성능이 나왔습니다. 다음은 sentence encoder에서의 pooler choice를 다르게 함으로써 성능 비교를 해봤습니다. SimCSE는 단순히 BERT의 마지막 층에서 feature를 추출하여 contrastive loss를 계산했고, DiffCSE는 CV에서 자주 사용되는 방법으로 batch 정규화가 적용된 2개의 pooler를 추가하여 활용해봤는데,  다음 결과를 확인해보시면 BatchNormalization이 적용된 Diffcse가 모든 task에서 가장 좋은 성능을 보였습니다.</p>
<p><img src="https://velog.velcdn.com/images/gunny1254/post/4c67644e-60ec-4ac7-a892-8aa0de95cd69/image.png" alt=""></p>
<p>다음은 Generator의 크기에 따라 다양한 실험을 해본 것입니다. 원래 ELECTRA 논문에 따르면 좌측 하단에 보이는 그림과 같이 generator의 크기는 discriminator의 ¼~1/2가 적정한 크기로 보고 있습니다. 왜냐하면 generator의 크기가 커졌을 때, discriminator가 수행하게 되는 문제의 난이도가 너무 어려워져서 학습이 잘 안되기 때문입니다. 하지만 DiffCSE에서 사용되는 discriminator는 generator의 크기에 크게 영향을 받지 않는 것으로 설명이 되는데, 이는 DiffCSE가 sentence encoder로부터 hidden vector를 입력으로 받아 binary classification task를 더 잘 수행할 수 있는 능력을 갖췄기 때문입니다. 그래서 본래 Electra와는 반대로 Generator의 크기가 커져 문제를 어렵게 만들어줄수록 discriminator는 더욱 잘 학습을 할 수 있다고 볼 수 있습니다.</p>
<p><img src="https://velog.velcdn.com/images/gunny1254/post/6f19bb78-f931-486c-b8b5-73c29a8b9aec/image.png" alt=""></p>
<p>다음은 generator에서 masking을 거는 비율에 따른 성능입니다. Ratio마다 성능의 큰 차이는 없었지만, 30%로 정했을 때 가장 좋았다는 것을 확인할 수 있었습니다. 마지막 ablation study는 total loss에서 RTD loss에 적용되는 람다 값입니다. Contrastive learning이 RTD task보다 대체로 학습하기에 더욱 쉽기 때문에, 생성되는 loss의 크기는 차이가 많이 납니다. 그래서 이 둘의 loss의 균형을 맞추고자 람다 값을 작게 설정을 해야하고, 실험적으로 람다가 0.005일 때 성능이 제일 좋게 나왔습니다. 그리고 아까 앞에서 말씀 드린 바와 같이 람다가 0이면 RTD loss term은 사라지기에 total loss는 단순히 Contrastive loss와 동일하게 되어서, SimCSE와 같아집니다.</p>
<p><img src="https://velog.velcdn.com/images/gunny1254/post/5341ac4c-57ae-4448-8ed7-43986c585818/image.png" alt=""></p>
<h2 id="analysis">Analysis</h2>
<p>다음은 DiffCSE와 SimCSE 간의 정성 평가에 대한 결과를 같이 확인해보겠습니다. 첫번째, 두번째 query에 대해서는 DiffCSE가 비슷한 문장을 잘 도출을 하였지만, SimCSE는 semantic한 관점으로 보았을 때 사뭇 다른 의미의 문장을 보였습니다. 하지만 세번째 query, “I think it’s a good idea” 문장에 대해서는 DiffCSE와 SimCSE 둘 다 반대되는 의미를 나타냈습니다. 이렇게 이중 부정이 적용된 문장에 대해서는 아직까지 sota 모델도 semantic한 의미를 뽑아내는 것에 있어서는 해결하지 못한 한계점이라고 생각을 합니다.</p>
<p><img src="https://velog.velcdn.com/images/gunny1254/post/955bea0a-f60c-408e-99d0-86bfb2e948b9/image.png" alt=""></p>
<p>다음은 해당 정성평가와 같은 실험을 정량평가로 판단하기 위해 top -1개의 문장 5개의 문장 그리고 10개의 문장을 뽑았을 때의 recall값을 확인해봤습니다. 확실히 DiffCSE가 SimCSE보다 좋은 성능을 보인 것을 확인할 수 있습니다.</p>
<p><img src="https://velog.velcdn.com/images/gunny1254/post/b0a444b1-36cc-4365-a2fa-8f5f0d08ba12/image.png" alt="">
다음은 문장 임베딩에 대한 분포를 알아보는 실험을 진행해봤습니다. SimCSE와 DiffCSE는 둘 다 사람의 평가와 비슷한 코사인 similarity 분포를  갖는데, DiffCSE가 SimCSE보다 전반적으로 높은 값을 취하는 것을 확인할 수 있습니다. 또한, 두 모델 간의 alignment와 uniformity의 비교실험도 진행해봤습니다. DiffCSE는 alignment가 더 낮은 값을 보이며 우수한 것을 보이는 반면에 Uniformity 척도에서는 SimCSE가 좋은 성능을 보였습니다. 위 두 실험에서 DiffCSE가 SimCSE보다 높은 cos-sim 값을 보인 점과 SimCSE보다 uniformity 성능이 낮게 측정된 이유는, SimCSE는 transformer 기반의 encode로 나온 벡터가 discriminator로 입력으로 들어가 representation이 squeezing되었기 때문이라고 추측할 수 있습니다. 이렇게 transformer 계열의 모델들의 한계점은 representation이 squeezing 됨에 따라 uniformity가 낮아지는 것이 이전 연구들에 의해 밝혀졌었습니다. Contextualized Representation이 transformer 계열 모델에서 low layer에서는 isotropic한 성질을 갖는 반면에 higher layer로 갈수록 anisotropic한 성질을 갖는 현상이 있다는 것을 생각하시면 될 것 같습니다. 따라서, DiffCSE도 이러한 모델들을 base로 깔고 있기에 위와 같은 결과가 필연적으로 나온 것으로 보여집니다.</p>
<p><img src="https://velog.velcdn.com/images/gunny1254/post/9b5ad1eb-5b25-49f4-8ecc-ee041e4074d7/image.png" alt="">
마지막에 Alignment와 uniformity의 척도를 기준으로 모델을 평가했는데, 이 둘의 개념에 대해 간략하게 설명드리겠습니다. 이 역시 주로 CV분야에서 활용된 개념이며, 먼저 alignment는 비슷한 특징을 갖고 있는 표본들은 구와 같은 모형을 갖는 가설 공간에서 비슷한 위치에 존재한다는 의미이고, uniformity는 feature가 서로 다른 표본들은 균일하게 분포 된것을 의미합니다. 따라서 alignment가 낮을수록 비슷한 표본들이 모여있기에 좋은 성능을 의미하고, uniformity가 낮을 수록 표본들이 균일하게 존재하기에 좋은 성능을 의미한다고 볼 수 있습니다.</p>
<p><img src="https://velog.velcdn.com/images/gunny1254/post/c2986dd2-df4a-4807-ba06-3fcceede0386/image.png" alt=""></p>
<h2 id="conclusion">Conclusion</h2>
<p>해당 논문은 비지도학습 기반 문장 임베딩 framework인 DiffCSE를 소개했습니다. 이 framework는 STS와 transfer task에서 다른 방법론과 비교하여 SOTA 성적을 기록을 하였습니다. 하지만 이 논문에서는 SimCSE와 같이 NLI dataset을 활용하며 지도학습 기반 방식의 실험을 진행하지는 않았기에 추후 다른 연구원들이 시도해볼만한 과제로 남겨진 것 같습니다. 마지막으로 이 framework는 NLP에서 새로운 data augmentation을 소개했다고 볼 수 있어 유의미한 contribution을 남겼다고 볼 수 있습니다. 이 연구는 다양한 실험과 ablation study를 통해 해당 framework의 의의를 밝힌 훌륭한 논문이라고 생각이 들었습니다.</p>
<p><img src="https://velog.velcdn.com/images/gunny1254/post/2a0855d7-ec8b-437e-9682-bf1b9f8c4f33/image.png" alt=""></p>
<h2 id="reference">Reference</h2>
<p><img src="https://velog.velcdn.com/images/gunny1254/post/c5e28e6b-a6d5-4f13-858e-9a2112e6682a/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[MERL:Multimodal Event Representation Learning in Heterogeneous Embedding Spaces]]></title>
            <link>https://velog.io/@tobigs-nlp/MERLMultimodal-Event-Representation-Learning-in-Heterogeneous-Embedding-Spaces</link>
            <guid>https://velog.io/@tobigs-nlp/MERLMultimodal-Event-Representation-Learning-in-Heterogeneous-Embedding-Spaces</guid>
            <pubDate>Wed, 04 May 2022 10:07:55 GMT</pubDate>
            <description><![CDATA[<p>오늘 리뷰할 논문은 어떤 하나의 Event를 Embedding 공간안에 표현하여 학습을 시키는 방법론, <strong>Event Representation</strong> 방법에 대해 소개한 논문입니다.</p>
<hr>
<h1 id="abstract">Abstract</h1>
<p>먼저 Event representation에 대하여 간단히 설명하겠습니다. 예시로, 아래 3개의 문장이 있습니다.</p>
<blockquote>
<ol>
<li>Person X threw basketball.</li>
<li>Person Y threw bomb.</li>
<li>Person Z attacked embassy.</li>
</ol>
</blockquote>
<p>이 때, 우리는 비슷한 의미를 가진 문장은 가까운 공간에 임베딩하고 비교적 다른 의미를 가진 문장을 먼 공간에 임베딩해야 할것입니다.
<img src="https://velog.velcdn.com/images/aioptlab/post/7235072d-8319-486c-beb4-93dcc172d92d/image.png" alt=""></p>
<p>2번 문장과 3번 문장은 테러와 관련된 event이므로 비슷한 공간에 임베딩을 하고, 1번 문장은 다른 두 문장과는 조금 다른 의미를 가지므로 먼 공간에 임베딩시킵니다. 이러한 방식의 딥러닝을 Event Representation Learning이라고 합니다.</p>
<p>하지만 여전히 textual description에만 기반하여 event간의 미묘한 의미의 차이점을 학습하는 것은 어려운 과제입니다.</p>
<p>이를 해결하기 위해, 이미지와 텍스트를 동시에 사용하여 event representation을 학습하는 MERL(Multimodal Event Representation Learning)을 제안합니다.</p>
<p>이미지는 사건을 이해하는데에 비교적 직관적인 관점을 더해준다고 합니다.</p>
<p>Text는 가우시안 인코더로 임베딩하고, 이미지는 visual event componentaware image encoder로 임베딩합니다. 이 두 개의 임베딩 공간을 조정하기 위해 새로운 함수를 도입하여 다양한 실험을 수행합니다. 그 결과, MERL을 사용할 때 성능이 좋았다고 합니다.</p>
<hr>
<h1 id="introduction">Introduction</h1>
<p>자연어처리에서는 언어의 이해가 중요하기때문에 텍스트에서 사건을 나타내는 event 구조를 구성하는 것이 중요합니다. event를 컴퓨터가 이해할 수 있는 형식으로 전송하는 것은 지금까지 event를 low-dimensional dense vector로 표현해왔습니다.</p>
<p>이후, Event Represention Learning은 주어와 동사, 목적어 세개의 triple로 표현하고 학습시켰을 때 극적인 발전이 있었습니다.</p>
<p>하지만 모델이 text에만 기반하여 사건간의 미묘한 의미 차이를 학습하는 것은 여전히 어려운 과제였습니다. 그 이유는 같은 단어가 서로 다른 문장에서 다른 의미로 쓰일 수 있고, 또 다른 단어더라도 서로 다른 문장에서 비슷한 의미로 쓰일 수 있는데 이러한 상황 embedding이 어렵기 때문입니다.</p>
<p>이러한 문제를 해결하기 위한 방식이, Multimodal을 사용하는 방식입니다. 이는 text의 triple(주어, 동사, 목적어)에 더하여 그 event와 관련된 이미지를 같이 embedding하여 정확도를 높이는 학습법입니다.
<img src="https://velog.velcdn.com/images/aioptlab/post/8d22cd4a-2b14-43d0-9df2-1646ad13fe2c/image.png" alt="">
위 사진과 같이 각각 triple과 함께 해당 사건을 표현하는 이미지를 같이 학습시킵니다.</p>
<p>이 방식에 대해, 본 논문의 저자는 image와 triple(text)을 같은 공간에 매핑하는것이 부적절하다고 지적합니다.</p>
<p><img src="https://velog.velcdn.com/images/aioptlab/post/c465f36b-321d-4880-88cf-e36328719e3e/image.png" alt=""></p>
<p>그 이유는 텍스트에 비해 같은 사건을 다루는 이미지는 상대적으로 너무 다양하기 때문입니다. 위 사진에서도, 축구를 하는 이미지는 자세나 배경을 살짝 바꾸면 무한대의 이미지를 매핑할 수 있습니다.</p>
<p>그래서 event triple과 event image는 다른 공간에 매핑되어야 하고, text는 하나의 포인트가 아니라 이미지 전체를 나타낼 수 있는 distribution의 형태로 나타내야 한다고 제안합니다.</p>
<blockquote>
<ul>
<li>triple : density embedding</li>
<li>image : point embedding</li>
<li>triple과 image는 서로 다른 공간에 매핑</li>
</ul>
</blockquote>
<hr>
<h1 id="methodogies">Methodogies</h1>
<p>먼저 MERL의 전체적인 architecture를 소개하고 triple encoder와 image encoder에 대한 세부적인 내용을 소개합니다. 그 후 training framework를 설명하겠습니다.</p>
<h3 id="multimodal-event-representation-learning-on-heterogeneous-embedding-spaces">Multimodal Event Representation Learning on Heterogeneous Embedding Spaces</h3>
<p><img src="https://velog.velcdn.com/images/aioptlab/post/b8b5866e-e3aa-4816-911b-24f554851188/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/aioptlab/post/6785fc7f-9bba-44be-a665-4b8d34597012/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/aioptlab/post/3db462f1-b2ad-4e37-a9ee-44524c51961c/image.png" alt=""></p>
<p>위 그림은 MERL의 전체적인 framework입니다. 앞서 말씀드렸듯이 event triples를 Dual-path Gaussian Triple encoder를 통해 density embedding space에 embedding하고, loss를 구합니다.</p>
<h3 id="dual-path-gaussian-triple-encoder">Dual-path Gaussian Triple Encoder</h3>
<p><img src="https://velog.velcdn.com/images/aioptlab/post/f76d0a6f-ce1a-4809-bd25-00e90068477d/image.png" alt=""></p>
<p>앞서 봤던 Triple Encoder의 구조를 다시 보겠습니다. 우리는 event triples(S, P, O)를 받아서 하나의 Gaussian distribution으로 표현을 해야합니다. 이를 위해서 distribution의 평균과 표준편차를 알아내야 합니다.</p>
<p><img src="https://velog.velcdn.com/images/aioptlab/post/5b0e46ab-169e-424a-8899-4b33e2159f1d/image.png" alt=""></p>
<p>여기서 인코더 모델을 Dual-path라고 칭하는데, 평균을 예측하는 모델과 표준편차를 예측하는 모델이 따로 병렬적으로 존재하는데 각각의 예측 인코더가 2개의 path로 이루어져있기 때문입니다.</p>
<p>평균이 의미하는 바는 Gaussian Embedding 공간 안에서 위치를 나타냅니다. 이 mean vector는 subject와 predicate의 관계, predicate와 object의 관계에 따라서 Embedding공간 안에서 위치가 바뀐다고 가정합니다. 그래서 이러한 관계를 임베딩할 수 있도록 아래 식과 같은 텐서를 학습시킵니다.</p>
<p><img src="https://velog.velcdn.com/images/aioptlab/post/a1396968-e796-4c25-8710-ea298e2add33/image.png" alt=""></p>
<p>m1 식은 주어와 동사간의 관계를 계산하고 m2는 동사와 목적어의 관게를 계산합니다. 이렇게 계산한 두 개의 관계를 다시한번 계산합니다.</p>
<p><img src="https://velog.velcdn.com/images/aioptlab/post/70da60d1-4593-4600-a447-844d4b301a9d/image.png" alt=""></p>
<p>이렇게해서 총 Mean vector를 계산합니다.</p>
<p>표준편차를 계산할 때는 triple이 얼만큼의 범위를 다루는지를 반영합니다. 이 논문에서는 표준편차는 주어와 목적어는 별로 중요하지 않고 동사에 따라 분포가 결정된다고 합니다. 그래서 굳이 관계를 임베딩하지 않고,</p>
<p><img src="https://velog.velcdn.com/images/aioptlab/post/9e84fc47-9c67-4dde-b559-6113b0ee3694/image.png" alt=""></p>
<p>동사와 주어를 concat해서 NLP레이어에 넣어주고 동사와 목적어를 concat해서 NLP레이어에 넣어준 후 </p>
<p><img src="https://velog.velcdn.com/images/aioptlab/post/7a6a2dd5-b8fc-4054-8d91-08965fbebc4d/image.png" alt=""></p>
<p>이 두개를 concat해서 분산을 구하도록 설정합니다.</p>
<h3 id="visual-event-components-aware-image-encoder">Visual Event Components-aware Image Encoder</h3>
<p>이미지는 하나의 point와 매핑시켜 하나의 triple의 distribution과 같은 event일 때 이 두 개가 비슷한 분포를 띄도록 학습을 시킬 것입니다. 먼저 이미지를 embedding하고, 여기에서 주어, 목적어, 동사를 뽑아내기 위해 pre-training을 진행합니다.</p>
<p><img src="https://velog.velcdn.com/images/aioptlab/post/5e150bc8-ea3a-4333-87fc-439dcb7269bf/image.png" alt=""></p>
<p>pre-training을 진행하기 위한 데이터로는 ImSitu dataset을 사용했고 이는 위의 자료와 같이 구성되어있습니다.</p>
<p>첫 번째 사진을 보면, 한 남자가 양의 털을 깎고 있습니다. 여기서 activity는 clipping이 되고 agent는 man이 되며 source(목적어)는 sheep이라고 되어있습니다. 여기에서 필요한 것은 주어,동사,목적어이므로 이미지에 대해 agent, source, activity 세가지를 뽑아와서 학습을 시킵니다.</p>
<p><img src="https://velog.velcdn.com/images/aioptlab/post/8d29bf1d-8f03-460b-9a6e-94ac66a22cec/image.png" alt=""></p>
<p>처음에 이미지를 VGG net을 사용하여 글로벌벡터를 뽑아내고, 7x7 convolutional fetures를 사용하여 local fetures를 뽑아냅니다. local fetures에 대해 subject 따로 source 따로 Attention 모델을 적용합니다. 사실 주어와 목적어는 사진을 보면 확실히 나와있는 정보이기 때문에 이러한 기법을 사용한 것 같습니다. (주어의 위치에 집중할지, 목적어의 위치에 집중할지를 attention을 활용하여 구함)</p>
<p><img src="https://velog.velcdn.com/images/aioptlab/post/7322d6d5-6ff5-4385-a09d-b448633c4e89/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/aioptlab/post/8f082cf0-0ece-43a4-8745-be54067bf4f0/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/aioptlab/post/5626b969-f54f-49a5-80ee-61b1a2010b1a/image.png" alt=""></p>
<p>이와 달리 동사에 해당하는 단어는 이미지 전체의 흐름을 이해해야 하기 때문에 이미지 자체를 MLP에 넣어서 activity를 임베딩합니다. 이렇게 세 개를 뽑고 각각을 classification하는 pre-training 과정을 진행합니다.</p>
<p>위 예시에서 subject의 답은 수의사가 되고, object는 강아지, activity는 clipping이 되도록 학습시킵니다.</p>
<p>그 후 세 벡터를 조합해서 point vector를 매핑시킬때는 하나의 MLP 레이어를 학습시키게 됩니다. 나머지는 사전학습을 하고, 모델에서는 지막 layer만 학습되는 것입니다.</p>
<p>이 때 MLP layer는 다음과 같이 사전학습 결과를 concat한 후 적용시키게 됩니다.</p>
<p><img src="https://velog.velcdn.com/images/aioptlab/post/6534bde4-5731-4123-8b46-ca5690821ea6/image.png" alt=""></p>
<p>이렇게 Point vector를 구할 수 있습니다.</p>
<h3 id="training">Training</h3>
<p>Training은 총 3단계의 과정이 있습니다.</p>
<blockquote>
<ol>
<li>triple을 임베딩하는 loss를 적용</li>
<li>image를 임베딩하는 loss를 적용</li>
<li>최종적으로 이 두 개의 다른 공간을 매핑하는 loss를 적용</li>
</ol>
</blockquote>
<p>먼저 triple loss는 max-margin loss를 사용합니다.
진짜로 비슷한 event와 유사도를 계산했을 때 유사도가 높아야 하고 (positive sample) 전혀 다른 embedding vector와 similarity를 계산했을 때에는 낮아야 합니다.</p>
<p><img src="https://velog.velcdn.com/images/aioptlab/post/b604563a-9bc6-4684-8b01-68ce8d15c4d8/image.png" alt=""></p>
<p>triple은 event 하나를 distribution에 매핑하기 때문에 앞서 구한 가우시안 분포의 평균, 표준편차를 이용해서 두 개의 distribution간의 유사도를 구합니다.</p>
<p><img src="https://velog.velcdn.com/images/aioptlab/post/5424a4ce-ca71-47fd-b621-b80c2fea9a4d/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/aioptlab/post/5a4281c3-9572-442c-b07b-19b403e61c0f/image.png" alt=""></p>
<p>이 loss를 낮추는 방향으로 학습이 진행됩니다.</p>
<p>다음으로 image loss 또한 max-margin loss를 적용합니다.</p>
<p><img src="https://velog.velcdn.com/images/aioptlab/post/6da4aae8-790b-438d-b2c2-67f925fe8f69/image.png" alt=""></p>
<p>이 때는 point vector이기 때문에 유클리디안 거리를 이용하여 loss를 계산합니다.</p>
<p>마지막 loss는 triple의 가우시안 분포와 그 triple에 해당하는 여러가지 이미지가 있을 때 그 이미지가 띄고 있는 분포의 KL-Divergence loss를 구해서 이 두개의 distribution이 유사하도록 학습합니다.</p>
<p><img src="https://velog.velcdn.com/images/tobigs-nlp/post/c35f10f1-94df-48a3-a205-025686d5dcf7/image.png" alt=""></p>
<p>이렇게 세 개의 loss를 적용합니다. </p>
<p><img src="https://velog.velcdn.com/images/aioptlab/post/96b07950-0435-41f2-bb42-609ef565d825/image.png" alt=""></p>
<p>위 식은 최종 objective function입니다. (loss들의 가중합 + 모든 파라미터들의 l2norm)</p>
<p>다음은 본 모델의 pseudocode입니다.</p>
<p><img src="https://velog.velcdn.com/images/aioptlab/post/a7e7bb6b-02c2-4cb3-aef1-f6b9459b6979/image.png" alt=""></p>
<hr>
<h1 id="experiment">Experiment</h1>
<p>데이터셋은 1,000개의 event triple이 positive sample과 negative sample로 묶여있습니다.</p>
<blockquote>
<p>positive sample e.g. , police catch robber / authorities apprehend suspect
negative sample e.g. , police catch robber / police catch disease</p>
</blockquote>
<p>용의자를 체포한 같은 사건은 positive sample로 묶여있고, 주체와 동사는 같은데 전혀 다른 event인 경우 negative sample입니다.</p>
<p>이 데이터셋을 확장시킵니다. 구글 이미지에 넣어서 사람이 걸러서 triple과 가장 비슷한 10개의 이미지를 매핑시켜줍니다. 문장도 3,000개로 확장하였고, 따라서 30,000개의 event image를 사용하여 학습을 진행했습니다.</p>
<p>3가지의 Task를 다룹니다.</p>
<h3 id="multimodal-event-similarity">Multimodal Event Similarity</h3>
<p>같은 event를 다루는 다른 이미지에 대해 유사성을 얼마나 잘 판단하는지!</p>
<p>아래 두 가지 데이터셋에 대해 테스트를 진행합니다.</p>
<ol>
<li>Multimodal hard similarity dataset</li>
<li>Transitive sentence similarity dataset</li>
</ol>
<p><img src="https://velog.velcdn.com/images/aioptlab/post/3b59e875-f3a8-4cf4-9aa3-3d263d8a662b/image.png" alt=""></p>
<p>그 결과 본 논문에서 제안한 MERL 모델이 가장 성능이 높습니다.</p>
<h3 id="script-event-prediction">Script Event Prediction</h3>
<p>하나의 대본에서 다음 장면이 뭔지 예측!</p>
<p>이 task에 최적화된 모델을 사용하는데, Embedding만 MERL로 대체해서 성능을 평가했습니다. Multiple choice narrative cloze dataset을 사용했습니다.</p>
<p><img src="https://velog.velcdn.com/images/aioptlab/post/66ca0d40-5853-47e2-815e-d52c4c6dc917/image.png" alt=""></p>
<p>여기서도 MERL이 성능을 높였습니다.</p>
<h3 id="cross-modal-event-retrieval">Cross-modal Event Retrieval</h3>
<p>event triple이 주어졌을 때 가장 유사한 이미지를 찾아주는 task (구글이미지검색과 비슷)</p>
<p>Cross-modal event retrieval dataset을 사용했습니다.</p>
<p><img src="https://velog.velcdn.com/images/aioptlab/post/d34f7f83-6f46-4ca0-83c0-40d8d0571970/image.png" alt=""></p>
<p>먼저 triple을 넣고 비슷한 triple을 retrieval하는 task에서는 다소 떨어진 성능을 보였는데 비교 method가 text의 선후관계를 사용하여 embedding하는 방식이라고 합니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Transformer-xl: Attentive language models beyond a fixed-length context ]]></title>
            <link>https://velog.io/@tobigs-nlp/Transformer-xl-Attentive-language-models-beyond-a-fixed-length-context-...-%EC%9E%91%EC%84%B1%EC%A4%91</link>
            <guid>https://velog.io/@tobigs-nlp/Transformer-xl-Attentive-language-models-beyond-a-fixed-length-context-...-%EC%9E%91%EC%84%B1%EC%A4%91</guid>
            <pubDate>Sat, 23 Apr 2022 12:28:46 GMT</pubDate>
            <description><![CDATA[<p align="center" style="color:gray">
  <img src="https://velog.velcdn.com/images/tobigs-nlp/post/4c8dbb63-e065-43dc-b262-c892821aff3f/image.png" style="padding: 0;margin:0;">
  Transformer-XL ICLR Open Review
</p>

<p>Transformer-XL은 Language Model이 긴 sequence를 받을 수 있는 방법론을 제시한 모델로 구글이 2019 ICLR에서 reject을 당한 후에 2019 ACL에 accept된 논문이다. 당시 ICLR open review를 살펴보면, 과연 더 긴 sequence를 받아 성능이 향상된 것이 실질적인 down-stream task와 의미있는 생성으로 이어질 수 있느냐에 대한 의문을 제기한다. 따라서 해당 저자들은 Transformer-XL을 다음에 발표할 XL-NET이라는 모델로 발전시켜 2019 NIPS에 accept시키게 된다.</p>
<hr>
<h2 id="1-introduction">1. Introduction</h2>
<p>Long-Term dependency를 요구하는 Language Modeling(향후 글에서는 축약어인 LM으로 대체체합니다.)은 수많은 unsupervised pretraining의 목적함수로 사용되었다. 초반에는 RNN으로 구현되었던 LM은 long-term dependency를 해결하기 위한 Gate의 도입(LSTM,GRU), 원타임으로 멀리 있는 token에 접근가능한 Attention의 도입으로 성능향상을 이어왔다. 하지만 Transformer기반 LM 모델도 결국 Attention에 의한 연산량 증가로 512나 1024 Token까지 밖에 받지 못하는 한계가 존재한다. </p>
<p>결국 문장의 맥락적 의미를 고려하지 않고 단지 Max_Length에 맞춰서 Token을 잘라서 훈련할 수 밖에 없는 환경은 LM의 진정한 능력인 Long-Term dependency학습에 한계가 있다.
(ex. 각 Segment길이가 512라고 할 때, [[Segment01], [Segment02], [Segment03]]로 이루어진 문서에서 기존의 LM이 Segment02를 학습할 때 Segment01의 이전 맥락을 전혀 활용하지 못한다.)</p>
<p>이러한 문제들을 하기 위해서 저자들은 아래의 2가지 테크닉이 추가된 Transformer-XL (XL=Extra Large)을 제시한다.</p>
<p><strong>1. Segment-Level Recurrence with State Reuse</strong></p>
<p>말그대로 이전 Segment(t-1)의 Hidden State를 활용해 현재 Segment(t)에서의 LM을 수행하는 방법을 말한다. 본 논문과 추후 XL-NET에서 저자들은 이전 Segment를 &#39;Memory&#39;라고 명명한다.</p>
<p><strong>2. Relative Postional Encoding (PE)</strong></p>
<p>이전 Segment들(t-1, t-2, ...)을 활용하면, PE(Positional Encoding을 앞으로 PE로 대체합니다) 설계에 있어서 문제가 생겨버립니다. (ex. Segment02의 PE는 Segment01의 PE와 다라야 한다) 따라서 저자들은 기존의 Word Embedding에 PE를 더하는 방식이 아닌 (<strong>PE의 본질  : Position을 고려하는 이유는 0,1,2와 같은 순차적인 정보보다 토큰 간의 거리 정보를 넣어주기 위함</strong>), Attention 연산 시에 Token간의 상대적인 위치를 반영하도록 하는 새로운 방법론을 제시한다.</p>
<h2 id="2-related-work">2. Related Work</h2>
<p>기존 AR Model들이 발전해온 간략한 줄거리에 대해서 작성이 되어 있어서 제외했습니다..!!</p>
<h2 id="3-model">3. Model</h2>
<p>Auto-Regressive 모델은 이전 time-step의 모든 hidden states를 input으로 넣어서 현재 time-step에 대한 logit을 계산하는 모델이다.</p>
<h3 id="31-vanilla-transformer-language-modeling">3.1 Vanilla Transformer Language Modeling</h3>
<p>Transformer에서 LM을 구현할 때의 &#39;Key&#39;는 결국 어떻게 매우 긴 1~t-1개의 input들을 t번째 토큰 예측을 위한 1차원 벡터로 사상하는가 이다. 지금까지는 단순히 max_len을 기준으로 input으로 나누어서 (논문에서는 이를 segment라고 표기) 학습시켰다. 논문에서는 이러한 방법론을 &#39;vanilla transformer&#39;라고 하며, 이러한 방법들은 아래의 한계가 있다.</p>
<p align="center" style="color:gray">
  <img src="https://velog.velcdn.com/images/tobigs-nlp/post/90db43cd-9df4-4c90-8f9c-d8103c51705f/image.png" style="padding: 0;margin:0;">
  Context Fragmentation in Training Phase
</p>

<ol>
<li><p>가장 긴 dependency는 segment길이이다. 따라서 segment간의 맥락적 의미를 학습할 수 없게 된다. Sequence Modeling에서 Transformer의 최대 장점인 &#39;gradient 소실 극복&#39;을 충분히 활용하지 못한다.</p>
</li>
<li><p>1과 마찬가지로 효율성을 위해 결국 LM 학습은 어쩔 수 없이 max_len으로 나눈 문서로 학습된다는 것이다.</p>
</li>
</ol>
<p align="center" style="color:gray">
  <img src="https://velog.velcdn.com/images/tobigs-nlp/post/1c257a6a-74b4-41f0-b48f-d78fd65092bd/image.png" style="padding: 0;margin:0;">
  Evaluation Phase for Vanilla Transformer
</p>

<p>위 그림에서 보는 것처럼 Transformer-XL은 1 position씩 right shift하며 inference을 진행한다. 연산측면에서 굉장히 비효율적이지만 (매 time-step마다 from the scratch로 최대 받을 수 있는 max_len만큼 forwarding) Training시에 마주쳤던 context fragmentation는 조금 완화된다.</p>
<p>저자들은 Attention연산이 일어나는 부분을 아래와 같이 분해한다.</p>
<h3 id="32-segment-level-recurrence-with-state-reuse">3.2 Segment-Level Recurrence with State Reuse</h3>
<p>Vanilla Transformer가 겪는 max_len에 의존적인 학습을 해결하는 방법론이 &#39;Segment-Level Recurrence with State Reuse&#39;이다. 간단히 말하면 이전 Segment의 모든 hidden step(L-1 Layer)을 활용해 현재 segment에 대한 hidden representation (L Layer)을 구하자는 것이다. </p>
<p>다음 아래의 식과 행렬표현을 보자.
<img src="https://velog.velcdn.com/images/tobigs-nlp/post/53305a2d-7f43-4c3b-9505-53afb0215a96/image.png" alt=""></p>
<p>n-1 Layer에 있는 $$\tau-1$$ segment의 hidden state와 $$\tau$$ segment의 hidden state를 concat하고 해당 hidden state를 key, value로 사상. $$\tau$$ segment의 hidden state만을 활용해 query로 사상하는 것이다. query가 특정 step 토큰의 의미 표현을 물어보고 key와 value가 맥락적 의미를 만드는 벡터라는 점을 참고하면 되다. 여기서 SG는 Stop Gradient로 이전 segment에 대해서는 gradient를 흘리지 않는다는 뜻을 의미한다. (아마 FFN이랑 Layer Normalization weight 같음..)</p>
<p>Segment 2개만을 놓고 볼 경우 아래의 그림처럼 query, key, value로 사상할 것이다.
<img src="https://velog.velcdn.com/images/tobigs-nlp/post/04bfe106-87fc-4baf-aea6-5c8ead022522/image.png" alt=""></p>
<p>실제 코드를 보면 현재 max_len만큰 모든 Layer에 대해서 Forwarding해준 hidden state를 gradient를 죽이고, computation graph를 끊어준 상태에서 memory로 추가해주는 형식으로 구현 되어있다.</p>
<p><img src="https://velog.velcdn.com/images/tobigs-nlp/post/080955ef-a277-4b49-8bf2-a8783812b641/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/tobigs-nlp/post/fa15ab2c-d86b-4d8c-b373-9267587d9985/image.png" alt=""></p>
<p align="center" style="color:gray">
  <img src="https://velog.velcdn.com/images/tobigs-nlp/post/01da6026-6b2e-4203-ac05-96f6193b116c/image.png" style="padding: 0;margin:0;">
  Segment-Level Recurrence with State Reuse
</p>


<h3 id="33-relative-postional-encoding">3.3 Relative Postional Encoding</h3>
<p>3.2절에서 논의한 바와 같은 hidden state representation 재사용을 하게 되면 기존 Word Embedding에 더하는 Positional Embedding을 더 이상 사용할 수 없다.</p>
<p align="center" style="color:gray">
  <img src="https://velog.velcdn.com/images/tobigs-nlp/post/b80f530d-358d-452d-ad65-416559437fa5/image.png" style="padding: 0;margin:0;">
    기존 PE의 한계
</p>

<p>U가 PE라고 할 때 $$\tau-1$$ segment와 $$\tau$$ segment에 동일한 PE를 더해주면 position에 대한 중복 정보가 들어가게 됩니다. 이게 왜 문제가 되는지는 아래의 그림으로 설명한다.</p>
<p><img src="https://velog.velcdn.com/images/tobigs-nlp/post/7f07e698-f3c2-4e45-9b66-4abccccbfa95/image.png" alt=""></p>
<p>결국 PE는 내가 상대적으로 얼마나 떨어진 토큰에게 attention을 주는지에 대한 정보를 주기 위해 사용되는 것인데, 저자들은 굳이 initial embedding에 더하는 식 말고도 이러한 정보를 충분히 주입할 수 있다고 주장한다.</p>
<p>맞다. 결국 상대적인 거리 차이만 토큰에 더해줄 수 있으면 되는 것이다. 서로 다른 토큰 간에 연산이 일어나는 곳은 Attention이기 때문에 저자들은 Attention이 일어나는 행렬연산 부근을 분해해 Relational PE를 주입한다.</p>
<p><img src="https://velog.velcdn.com/images/tobigs-nlp/post/86dd388f-a021-4b1d-a5bb-cc11e3a8fb71/image.png" alt=""></p>
<p>위에 보는 것처럼 Attention 연산은 Content 정보(Word Embedding, Hidden State)가 들어가 있는 $$E_{x}$$와 Position 정보가 들어가 있는 $$U_{x}$$로 분해될 수 있다. $$i$$가 query, $$j$$가 key라고 할때, position 정보가 들어가 있는 $$U_{x}$$를 상대적인 위치 값을 갖는 $$R_{i-j}$$(j번째 key가 i번째 query로부터 얼만큼 멀리 떨어져 있는가?)로 대체한다. 그리고 이미 상대적인 위치 정보를 주었으니 기존 query에 투영되는 벡터는 $$u,v$$로 바꿔준다. ($$R_{i-j}$$에서 이미 상대적인 위치 정보를 반영해주었기 때문에 query 자체의 위치 정보는 모든 position마다 동일해야 하기 때문)</p>
<p>re-parameterize된 상태에서 각각 term은 아래의 의미를 가진다.
(a) content based addressing 
(b) content dependent positional bias 
(c) governs a global content bias 
(d) encodes a global positional bias </p>
<p>저자들은 $$R_{i-j}$$을 삼각함수를 활용하여 evaluation시에 더 긴 input을 처리할 때도 탄력있게 대응하도록 했다. 최종 모델의 식은 아래와 같다.</p>
<p><img src="https://velog.velcdn.com/images/tobigs-nlp/post/ba24a491-a890-447b-b085-61ca7bcdc108/image.png" alt=""></p>
<h2 id="4-experiments">4. Experiments</h2>
<p>저자들은 다양한 word &amp; character level의 데이터셋을 활용해 실험을 진행했다.
각 실험에 쓰인 metric으로는 PPL, BPC가 있는데 간략히 정리해보면 다음과 같다.</p>
<ol>
<li><p>PPL : 특정 데이터셋에서 LM의 likelihood가 얼마나 좋은가?
<img src="https://velog.velcdn.com/images/tobigs-nlp/post/508da477-8199-4b82-86b7-00322d8ffd59/image.png" alt=""></p>
</li>
<li><p>BPC : Cross entropy of char-level language modeling with 2-base log function
<img src="https://velog.velcdn.com/images/tobigs-nlp/post/33f6482b-e8d2-44b6-ab1b-bad897598820/image.png" alt=""></p>
</li>
</ol>
<h3 id="41-main-results">4.1 Main Results</h3>
<h4 id="wikitext--the-largest-available-word-level-language-modeling-benchmark-with-long-term-dependency">WikiText : the largest available word-level language modeling benchmark with long-term dependency</h4>
<p><img src="https://velog.velcdn.com/images/tobigs-nlp/post/dd32f99f-a2b1-44fb-b16c-d47cb751a7b9/image.png" alt=""></p>
<h4 id="enwiki8--contains-100m-bytes-of-unprocessed-wikipedia-text-character-level-lm-benchmark">Enwiki8 : contains 100M bytes of unprocessed Wikipedia text (character-level LM benchmark)</h4>
<p><img src="https://velog.velcdn.com/images/tobigs-nlp/post/a884d162-9e78-4e08-bd2d-c746907d05e9/image.png" alt=""></p>
<p>처음으로 BPC 1보다 낮은 값을 기록했다.</p>
<h4 id="text8--enwiki보다-더-clean된-character-level-lm-benchmark">Text8 : enwiki보다 더 clean된 character-level LM benchmark</h4>
<p><img src="https://velog.velcdn.com/images/tobigs-nlp/post/db5234da-952f-47da-a9f3-ab64a4a9954c/image.png" alt=""></p>
<h4 id="one-billion-word-문장들이-shuffled되어-있음--ability-of-modeling-only-short-term-dependency">One billion word (문장들이 shuffled되어 있음 = ability of modeling only short-term dependency)</h4>
<p><img src="https://velog.velcdn.com/images/tobigs-nlp/post/47e32a99-71ba-49cf-9df9-af203e3bc058/image.png" alt=""></p>
<h4 id="penn-treebank-small-dataset에서도-잘-동작함을-보여주기-위해">Penn Treebank (small dataset에서도 잘 동작함을 보여주기 위해)</h4>
<p><img src="https://velog.velcdn.com/images/tobigs-nlp/post/9be45b55-4c41-453a-9ea2-0890f70f1026/image.png" alt=""></p>
<h3 id="42-ablation-study">4.2 Ablation Study</h3>
<h4 id="wikitext-103">WikiText-103</h4>
<blockquote>
<p>Relative PE  : Ours, Shaw et.al
Absoulte PE : Vaswani et al, Al-rfou et al
Full vs Half (input의 전체 or 절반에만 cross entropy loss를 계산하는지)</p>
</blockquote>
<p><img src="https://velog.velcdn.com/images/tobigs-nlp/post/1f84226b-05ef-4161-ab7e-8f6557121b12/image.png" alt=""></p>
<h4 id="recurrence를-활용하면-back-propagation으로-더-짧은-input에만-gradient를-흘려주어도-성능이-좋아진-것을-확인할-수-있다">Recurrence를 활용하면 Back propagation으로 더 짧은 input에만 gradient를 흘려주어도 성능이 좋아진 것을 확인할 수 있다.</h4>
<blockquote>
<p>&#39;동일한 GPU memory에서 recurrence 사용 = Short Input&#39; (memory with Stop Gradient) VS &#39;Long Input&#39;</p>
</blockquote>
<p><img src="https://velog.velcdn.com/images/tobigs-nlp/post/462feeef-ebb9-47ac-9733-9e1f77b60449/image.png" alt=""></p>
<h4 id="transformer-xl의-recurrence-mechanism은-long-term-dependency가-없는-데이터에서도-context-fragment를-해결한다">Transformer-XL의 recurrence mechanism은 long-term dependency가 없는 데이터에서도 context fragment를 해결한다.</h4>
<blockquote>
<p>Long-term dependency가 없는 One Billion Word Dataset에서 Recurrence mechanism이 좋은 성능을 달성했다. (사실상 더 긴 입력문을 받으니까 long-term dependency와는 무관하게 성능이 향상된 것은 당연한게 아닌가..?)</p>
</blockquote>
<p><img src="https://velog.velcdn.com/images/tobigs-nlp/post/ae72b18d-f658-4023-b198-84ae11e2f34d/image.png" alt=""></p>
<h3 id="43-relative-effective-context-length">4.3 Relative Effective Context Length</h3>
<p>저자들은 더 많은 context (LM 조건부 확률에서 condition부분이라고 이해했네요,,)가 얼마나 더 유효한 PPL 감소를 이루어냈냐를 측정한다. 해당 성능 측정을 위해 Effective Context Length (ECL)라는 것이 사용되었다고 하는데, 이 metric은 이미 baseline context $$c$$로 모델이 낮은 PPL을 달성했거나 여러 모델을 비교하기에는 어렵다고 주장하면서 Relative Effective Context Length라는 것을 제시하는데 아래와 같다.</p>
<p><img src="https://velog.velcdn.com/images/tobigs-nlp/post/e3d0d46a-d142-422f-8ff5-ffe6125d04ff/image.png" alt=""></p>
<p>$$l_{i}(c,t)$$는 $$i$$번째 모델이 context $$c$$만을 활용했을 때 $$t$$번째 토큰에 대한 Loss이다. 이때 $$c&#39;&gt;=c$$로 더 긴 context $$c&#39;$$를 활용했을 때 Loss가 더 떨어지면 longer context 활용에 대한 유효성을 보일 수 있는 것이다. </p>
<p>$$b(c,t)$$는 $$t$$ 번째 token에 대한 baseline loss이며, $$f_{i}(c,c&#39;)$$는 더 긴 context를 $$c&#39;$$ 활용했을 때 baseline 대비 갱신된 loss이다.</p>
<p><img src="https://velog.velcdn.com/images/tobigs-nlp/post/29713f3b-aa7c-4d08-9a07-f560f058fa96/image.png" alt=""></p>
<p>$$\mathcal{T}$$는 baseline 상향 조정을 위해 특정 position을 설정한 것이고, $$g_{i}(c,t)$$은 context 증가에 따른 PPL 감소로 볼 수 있다.</p>
<p><img src="https://velog.velcdn.com/images/tobigs-nlp/post/e45e6724-b4ed-489b-81dc-2f055acc738e/image.png" alt=""></p>
<p>결과표에 의하면 Transforme-XL이 긴 context에서도 연장된 context 길이만큼 PPL이 다른 모델에 비해서 상대적으로 더 잘 줄어드는 것을 볼 수 있다.</p>
<h2 id="5-conclusion">5. Conclusion</h2>
<ol>
<li>Recurrence Mechanism</li>
<li>Relative PE</li>
</ol>
<p>를 통해 long-term dependency를 제대로 활용할 수 있는 PPL이 낮은 AR 모델을 제안하였다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[DAPT : Don't Stop Pretraining.  Adapt Language Models to Domains and Tasks.]]></title>
            <link>https://velog.io/@tobigs-nlp/DAPT-Dont-Stop-Pretraining.-Adapt-Language-Models-to-Domains-and-Tasks</link>
            <guid>https://velog.io/@tobigs-nlp/DAPT-Dont-Stop-Pretraining.-Adapt-Language-Models-to-Domains-and-Tasks</guid>
            <pubDate>Wed, 06 Apr 2022 13:29:12 GMT</pubDate>
            <description><![CDATA[<h1 id="intro">Intro</h1>
<p>BERT와 GPT 이후에 수많은 사전학습 모델이 쏟아져 나왔다. 제각기 다른 데이터셋과 다른 목적함수, 모델 구조를 가지고 학습이 되었지만 한가지 동일한 것이 있었다. Pretrain -&gt; Finetune으로 이어지는 프레임워크였다. </p>
<p>이는 사전학습 시에 가능한 대량의 코퍼스로 학습하여 모델은 일반화 성능을 확보하고, 다운스트림 태스크에 대해 추가적인 학습을 진행하여 각 태스크에 맞게 모델을 수정한다는 개념이었다. </p>
<p>하지만 의료, 법률, 논문, 금융 등 다양한 도메인에서 사전학습 모델을 사용하려고 하자 문제가 발생한다. 사전학습으로 일반화 성능을 확보한 줄 알았던 모델이 해당 도메인에 대해 제대로 성능을 내지 못하는 것이다. 즉, 기존의 사전학습된 모델은 아무 도메인에나 finetune만으로 충분한 성능을 내지 못한다. </p>
<p>그래서 다양한 트릭들이 연구되어 왔고, 논문화되지 않더라도 이 논문이 발표되던 2020년 당시 사람들이 전반적으로 가지고 있던 생각은 <strong>&quot;모델을 좀 더 도메인에 적합하게 사전학습 시킬 필요가 있다&quot;</strong> 라는 점이었다고 한다(주워들은 이야기임 오피셜 아님).</p>
<p>이 논문은 사실 내용은 단순하다. pretrain -&gt; adaptive pretrain -&gt; finetune으로 모델을 도메인 혹은 태스크에 한번 더 사전학습 시켜서 좀 더 finetune 시 성능을 높이자는 내용이다. 하지만 이것이 작동하는 이유와 과정에 대해 다양한 실험으로 구조화한 것이 주요한 포인트라 할 수 있을 것 같다. 실제로 그 덕분에 이 논문은 2020 ACL에서 Honorable Mention for Best Overall Paper 상도 탔다. 왜 그렇게 좋은 논문이라 평가받는지 하나씩 살펴보자. </p>
<h1 id="setting">Setting</h1>
<p><img src="https://media.vlpt.us/images/stapers/post/060ef723-5a86-44bf-bc65-f5f4eceab7be/image.png" alt="">
이 논문에선 위와 같은 가정을 가지고 시작한다. 즉, 본래 사전학습 시 모델이 학습한 도메인이 있고, 우리가 학습시키고자 하는 다운스트림 태스크의 도메인이 있다. 그리고 우리는 해당 도메인에서 데이터를 구성하여서 finetune 데이터셋을 만들기 때문에 해당 데이터셋에 해당하는 영역(밝은 회색)도 존재하게 된다. 그리고 해당 도메인에서 특정 태스크(분류, 회귀, NER 등등)에 따라 또 부분집합이 형성된다. </p>
<p>여기서 중요한 점은 기존의 모델이 사전학습을 통해 알고있는 도메인과 타겟 도메인이 온전히 포함관계에 있지 않고, 부분집합을 형성한다는 점이다. 위 그림처럼 우리가 수행하려는 태스크 혹은 가지고 있는 해당 도메인의 데이터셋은 해당 도메인의 부분집합이기 때문에 당연히 본래 사전학습 도메인과 부분집합의 관계를 가지게 될 것이다. 타겟에서의 관계를 정리하면 다음과 같다. </p>
<blockquote>
<p>Target Domain &gt; Target Dataset &gt; Target Task</p>
</blockquote>
<h2 id="model">Model</h2>
<p>사전학습 모델로는 RoBERTa를 사용하고 있다. 이때 한가지 짚고 넘어갈 점은 RoBERTa 는 160GB의 사전학습 데이터로 학습한 모델이다. 즉, <strong>이미 충분히 거대한 데이터로 학습했기 때문에, 이미 RoBERTa로 어느 도메인이든 커버가 가능하지 않을까?</strong> 라는 질문이 생길 수 있다. </p>
<blockquote>
<p>하지만 이 논문에서 이야기하고자 하는 것은 모델이 사전학습 과정에서 학습한 도메인 여부가 중요한 것이 아니라, 각 태스크를 수행하고자 할 때 모델을 해당 도메인의 데이터로 다시 학습하여 파라미터를 아래 그림처럼 더 좁은 영역 혹은 사전학습과 다른 영역으로 가져갈 필요가 있다는 것이다. </p>
</blockquote>
<p><img src="https://media.vlpt.us/images/stapers/post/060ef723-5a86-44bf-bc65-f5f4eceab7be/image.png" alt=""></p>
<h2 id="domain--data">Domain &amp; Data</h2>
<h3 id="domain-별-mlm-loss">Domain 별 MLM Loss</h3>
<p>이 논문은 특정 도메인에서 사전학습 모델의 성능을 높이는 것을 목적으로 하기 때문에 4가지 도메인을 선정하고 각 도메인 당 2개의 데이터를 이용하여 분류 태스크를  수행한다. 구체적인 도메인은 다음과 같다.</p>
<ul>
<li>Biomedical</li>
<li>computer science publications</li>
<li>news</li>
<li>reviews </li>
</ul>
<p>biomedical과 CS 논문이야 당연히 도메인이 좁고, 모델이 제대로 학습이 안되어 있다고 하자. 하지만 news와 review를 과연 모델이 사전학습 과정에서 학습이 안되었다고 할 수 있나? 라는 의문이 들 수 있다. 다시 이야기하지만, 모델의 파라미터를 (파라미터가 학습하는 공간 상에서) 더 태스크와 도메인에 적합한 좁은 영역으로 옮길 필요가 있다. 그리고 밑에서 보겠지만, 생각보다 아래 두 데이터 역시 사전학습 데이터와 비교하여 Out-Of-Domain으로 볼 수 있다.</p>
<p><img src="https://media.vlpt.us/images/stapers/post/ee369de8-e7c0-4dc6-a5c7-664d8dae10c3/image.png" alt=""></p>
<p>각 도메인 별 데이터의 크기와 각 데이터 별 RoBERTa의 MLM loss를 보여주는 표이다. 살펴보면 알 수 있지만, RoBERTa의 사전학습 데이터가 가장 크며, 당연하게도 MLM loss도 더 낮다. 여기서 $L_{\text{ROB}}$은 사전학습된 RoBERTa를 그냥 가져와서 MLM을 측정한 것이고, $L_{\text{DAPT}}$는 이후 소개할 DAPT 방법론을 적용하여 모델을 해당 데이터에 적합시킨 후의 MLM loss이다. 특징들은 다음과 같을 것이다. </p>
<ul>
<li>RoBERTa의 사전학습 데이터에서 loss가 상당히 낮게 나온다. </li>
<li>News에서 오히려 사전학습 데이터보다 loss가 낮다. </li>
<li>News는 오히려 DAPT를 진행하고 나서 loss가 올라가는 모습을 보인다. </li>
</ul>
<p>여기서 주목할 점은 News를 제외하면 사전학습 데이터보다 훨씬 나쁜 성능을 보이고 있다는 점이다. 즉, 기존에 사전학습된 데이터와 각 도메인의 분포가 상당히 다르다는 점을 알 수 있다. </p>
<h3 id="domain-별-vocabulary-분포">Domain 별 Vocabulary 분포</h3>
<p><img src="https://media.vlpt.us/images/stapers/post/249863cb-b9ff-4538-998d-e63a9096cbd8/image.png" alt=""></p>
<p>위 그림은 stopword를 제외하고 빈도 수 기준 상위 10,000개의 단어에서 각 데이터가 얼마나 중복(overlap)되는지 보여주고 있다. 여기서 PT는 RoBERTa가 학습한 사전학습 데이터와 비슷한 데이터이다(RoBERTa는 코퍼스를 공개하지 않았다.). 위에서 발생한 도메인 별 성능 차이의 원인을 일부 여기서 찾아볼 수 있다. 각 도메인 별로 등장하는 단어들이 매우 상이하다는 점이다. 특히 상위 10,000개의 단어를 뽑았는데도 불구하고 절반이 넘는 단어가 사전학습과 다르게 나타나는 것은 생각보다도 각 도메인 별로 등장하는 단어들이 다르고, 이는 모델이 해당 도메인에 충분히 성능을 내기 힘들다는 것을 의미한다. 반대로 말하면 사전학습 데이터와 더 차이가 큰 도메인에서 더 큰 성능향상을 기대할 수 있을 것이다.  즉, <strong>사전학습 모델을 해당 도메인에 그대로 사용하면 안된다.</strong>(당연한 이야기다.)</p>
<p><img src="https://media.vlpt.us/images/stapers/post/34940204-5296-446d-ab1f-5711e2edd66e/image.png" alt=""></p>
<h3 id="resource-상황에-따른-구분">Resource 상황에 따른 구분</h3>
<p><img src="https://media.vlpt.us/images/stapers/post/7ed22383-94bf-4990-8f2b-63571f208593/image.png" alt="">
논문에서는 한가지 상황을 더 가정한다. 즉, 도메인 별로 사용할 수 있는 데이터 크기(5000 건 기준)에 따라 high resource와 low resource로 구분한 것이다. 이는 사전 학습 모델을 사용할 때 중요한 것이라 할 수 있다. 우리가 실험하고자 하는 도메인이 매우 좁은데, 데이터가 부족할 때와 충분할 경우에 수행할 수 있는 훈련 방법이 달라질 수 있기 때문이다.</p>
<h1 id="domain-adaptive-pretraindapt">Domain-Adaptive Pretrain(DAPT)</h1>
<p>논문에서 제시하는 첫번째 방법론은 DAPT이다. 한마디로 설명하면 다음과 같다. </p>
<blockquote>
<p>해당 도메인의 label이 없는 대량의 데이터가 존재할 때, 이 데이터로 pretrain(MLM)을 추가적으로 진행하는 것.</p>
</blockquote>
<p>좀 더 자세히 설명하면, 예를들어 review 데이터의 경우 label이 없는 데이터가 50,000건이 추가적으로 존재하기 때문에, 해당 데이터로 MLM(Masked Language Modeling)을 추가적으로 진행하는 것이다. 해당 논문에선 모든 도메인에 대해 12,500  step을 더 진행했다고 한다. 
<img src="https://media.vlpt.us/images/stapers/post/1b6bf8c0-2043-471d-9f58-41d325bb27d4/image.png" alt=""></p>
<p>여기서 비교하는 지표는 분류 성능이다. ROBA는 사전학습된 RoBERTa를 이용하여 바로 분류했을 때의 지표이고, DAPT는 해당 데이터를 이용하여 DAPT를 진행하고 나서의 성능, not DAPT는 해당 도메인 외의 다른 도메인에 DAPT를 적용했을 때의 성능이다. 이때 다른 도메인은 위의 vocabulary 장표에서 각 도메인별로 가장 낮은 값을 보인(vocab 분포가 가장 다른) 도메인을 선택했다고 한다. 이를 통해서 알 수 있는 것은 다음과 같다. </p>
<ul>
<li>DAPT의 효과는 도메인을 가리지 않고, resource의 크기를 가리지 않고 보인다. </li>
<li>AGNews 데이터는 사전학습 데이터와 유사한 분포를 보이고, MLM loss에서도 떨어지지 않는 모습을 보였듯이, DAPT의 효과 역시 거의 없다. </li>
<li>HyperPartisan은 news 데이터 임에도 DAPT 효과를 보여주고 있다. (<strong>뇌피셜</strong> : HyperPartisan 데이터셋은 <a href="https://journals.sagepub.com/doi/abs/10.1177/1461444820910416?journalCode=nmsa">정치 편향 뉴스 데이터셋</a>이어서 이러한 DAPT가 효과를 발휘한 것 같다. 즉, vocabulary 분포는 비슷할 수 있지만, class 별로 분명한 차이를 보였을 것.)</li>
<li>not DAPT는 확연히 성능 저하를 보인다. RoBERTa를 그냥 가져다 쓴 것보다도 성능이 좋지 않은 경우가 많다. 즉, 아무 데이터로 DAPT를 진행한다고 성능이 좋아지는 것이 아니라 수행하고자 하는 태스크와 비슷한 데이터로 DAPT를 진행해야 한다. </li>
<li>not DAPT로 성능향상이 불가능한 것은 아니다. SC 분야의 데이터셋은 공통적으로 not DAPT가 RoBERTa 보다 성능이 좋았다. NEWS와 REVIEW는 40%의 unigram overlap을 가지고 있지만, NEWS에 DAPT를 진행할 경우 REVIEW에 대해 성능 향상을 보였다. 즉, 우리가 막연히 이야기하는 데이터 분포 혹은 도메인 데이터의 정의는 상당히 모호한 개념이며 이에 대한 추가적인 연구가 더 필요하다. </li>
</ul>
<h1 id="task-adaptive-pretraining">Task-Adaptive Pretraining</h1>
<p>DAPT가 label이 없지만 태스크와 동일한 도메인의 데이터로 사전학습을 추가적으로 진행하는 것이라 했다. 하지만 동일한 도메인에서도 태스크에 따라 데이터 분포가 달라질 수 있다. 가령 동일한 뉴스 데이터라 하더라도 가짜뉴스 판별 태스크와 뉴스 카테고리 분류 태스크는 전혀 다른 데이터 분포를 가지게 될 것이다. 가짜뉴스 판별 태스크는 매우 특정한 주제(정치, 경제 등)에서 주로 추출한 뉴스 데이터로 구성되어 있는 반면, 뉴스 카테고리 분류 태스크는 매우 넓은 주제에서 추출한 뉴스 데이터로 구성되어 있을 것이다. </p>
<blockquote>
<p>다운스트림 태스크를 수행하기 위해 수집한 데이터를 이용하여 진행하는 사전학습을 <strong>TAPT</strong>라 정의하고 있다. </p>
</blockquote>
<p>TAPT는 태스크에 매우 적합한 데이터만 선별해야하는 특성 상 DAPT보다 훨씬 데이터셋의 크기는 작지만, 태스크와 매우 밀접한 분포를 가지는 데이터라는 점에서 일종의 trade-off 관계를 가지게 된다. 여기서 발생하는 장점이 데이터셋이 작다보니 <strong>연산량이 적다</strong>는 것이다. </p>
<p>논문에서는 TAPT를 몇가지로 나눠서 실험을 진행하는데 하나씩 살펴보도록 하자. </p>
<h2 id="tapt-dapt--tapt">TAPT, DAPT + TAPT</h2>
<p><img src="https://imagedelivery.net/v7-TZByhOiJbNM9RaUdzSA/541225a9-e16c-4fe6-b9df-0e2c27395200/public" alt=""></p>
<p>TAPT만 진행할 경우와 DAPT를 진행하고 TAPT를 진행할 경우(DAPT + TAPT)를 비교해보도록 하자. TAPT는 우선 RoBERTa보다 모든 데이터셋에서 성능이 좋았다. 특히 RoBERTa의 사전학습 데이터셋에도 일부 포함되어 있는 NEWS 데이터에서도 성능이 좋았다. 즉, 사전학습 시에 학습한 도메인이라 할 지라도, 다운 스트림 태스크 수행 전에 TAPT를 진행하면 성능향상을 기대할 수 있다.</p>
<p>DAPT + TAPT는 당연하게도 TAPT만 진행한 경우보다 전반적으로 성능이 향상되는 모습을 보여주고 있다. 하지만 만약 레이블된 데이터가 많은 경우(REVIEWS, AGNEWS, RCT) 에서는 TAPT만 진행한 경우와 성능 차이가 크지 않았다. </p>
<p>일반적으로 태스크를 위해 수집된 데이터는 레이블을 달아야 하기 때문에 많아야 1만건 내외인 반면, DAPT에 사용하는 해당 도메인 데이터셋은 훨씬 크다는 점을 감안하자. 즉, 모델 학습을 위해 필요한 연산량 차이를 고려하면 TAPT의 성능 향상폭이 상당하다는 것을 알 수 있다. </p>
<p>만약 TAPT를 먼저 진행하고 DAPT를 진행하면 어떻게 될까? 논문에서는 따로 결과를 정리해두지는 않았다. 하지만 TAPT를 먼저 진행하면 catastrophic forgetting(새로운 태스크를 학습하면서 기존에 학습한 태스크에 대한 성능이 급격히 떨어지는 현상)이 발생했다고 한다. 해당 태스크에 대한 성능이 떨어지고 MLM에 대한 성능만 확보되는 것을 의미한 것 같은데, 자세히 서술되어 있지 않아서, 확신할 수가 없다. </p>
<h2 id="cross-task-transfer">Cross-Task Transfer</h2>
<p>그렇다면 동일 도메인 내에서 A 태스크 데이터를 이용해 TAPT를 진행하면 B 태스크에 대해서 성능이 어떻게 될까? 이를 실험한 것이 cross-task transfer이다. 
<img src="https://imagedelivery.net/v7-TZByhOiJbNM9RaUdzSA/b7c58e2f-d5c6-4914-68d9-604a0a006900/public" alt="">
그 결과는 RoBERTa와는 직접적으로 무엇이 났다고 할 수 없지만, TAPT보다는 확실히 성능이 저하되는 모습을 보였다. </p>
<blockquote>
<p>즉, 동일 도메인이라 하더라도 태스크마다 데이터 분포의 차이가 크다. 또한, 대량 코퍼스를 이용한 사전학습만으로는 특정 도메인에 적합한 모델이 될 수 없다. </p>
</blockquote>
<p>한가지 의문은 여기서 도메인과 태스크를 상당히 애매하게 정의하고 있는데 반해, 이 부분의 서술은 너무 확신에 가득차서 정말 그렇다고...? 라는 의문이 든다. </p>
<h2 id="augmentation-for-tapt">Augmentation for TAPT</h2>
<p>태스크를 위해 준비된 데이터는 사실 극소량이고, 대부분의 도메인 데이터들은 레이블이 없는 상태이다. 그런데 연산량이나 학습 데이터셋의 크기를 고려할 때 TAPT가 DAPT만큼이나 혹은 그 이상 효과가 좋다면, TAPT를 위해 태스크 데이터를 좀 더 확보할 수 없을까? 이 논문에서는 두 가지 방법을 제안하고 있다. </p>
<h3 id="human-curated-tapt">Human Curated-TAPT</h3>
<p>사람이 직접 annotation하는 것은 가장 직관적인 방법일 것이다. 즉, 해당 도메인의 데이터 중에 태스크와 직접적으로 관련이 있는 데이터를 사람이 선별하여 이 데이터를 이용하여 TAPT를 진행하는 것이 Human Curated-TAPT이다. </p>
<p>논문에서는 annotation을 진행하기보다 아래와 같이 환경을 설정하여 실험을 진행한다. </p>
<ul>
<li>RCT : RCT는 기본적으로 180000 건의 태스크 데이터가 있는데, 이 중에서 500 건만 샘플링하여 기본 TAPT로 간주하고 전체 데이터를 사용할 경우를 Human Curated-TAPT로 간주한다. </li>
<li>HYPERPARTISAN : 두가지 버전의 데이터가 있는데, 이때 515건의 레이블이 존재하는 데이터를 기본 TAPT로 간주하고 5000건의 레이블이 없는 태스크 데이터를 Human Curated-TAPT로 간주한다. </li>
<li>IMDB : 여기서만 추가적으로 데이터를 수집하고 이에 대해 annotatoin을 진행한다. 이때 기존의 IMDB 데이터와 동일 분포를 유지했다고 한다. </li>
</ul>
<p>결과는 아래와 같다. 
<img src="https://imagedelivery.net/v7-TZByhOiJbNM9RaUdzSA/8ecbfadb-fb4d-4ac6-2113-61b53fc07000/public" alt="">
데이터가 많을수록, 태스크 분포와 가까울수록 성능이 점차 높아지는 모습을 보여주고 있다. 또한, 기본적으로 태스크 데이터와 많은 IMDB의 경우 성능 향상 폭이 크지 않은 것을 알 수 있다. </p>
<h3 id="automated-data-selection-for-tapt">Automated Data Selection for TAPT</h3>
<p>하지만 실제 상황에서는 추가적으로 annotation을 진행하는 것이 쉬운 일은 아니다. 도메인이 일치하는 대량의 데이터셋을 구하는 것이 가능하다는 보장도 없고, DAPT를 수행하기 위한 컴퓨팅 자원 역시 만만치 않다. 이때 자동화된 방법으로 태스크 데이터와 분포가 가까운 레이블이 없는 데이터를 선별할 수 있는 방법은 무엇일까?</p>
<p>해당 논문에서 제안하는 방식은 상당히 단순하다. 도메인 데이터와 태스크 데이터를 모두 하나의 임베딩 공간에 넣고, 여기서 태스크 데이터와 가까운 도메인 데이터를 TAPT에 추가적으로 사용하는 것이다. </p>
<p>이때 임베딩은 VAMPIRE(Gururangan et al., 2019)이라 하는 빠르고 단순한 BoW 방식의 LM 모델을 사용했다.</p>
<p>그 순서는 다음과 같다. 컴퓨팅 자원이 부족한 상황이라는 가정 하에 진행된다는 점을 유의하자. </p>
<ol>
<li>VAMPIRE를 대량의 도메인 데이터셋을 이용해 사전학습 시킨다. </li>
<li>사전학습한 VAMPIRE를 이용하여 도메인과 태스크 데이터의 임베딩 벡터를 얻는다. </li>
<li>1) knn을 이용하거나 2) 랜덤하게 도메인 데이터를 샘플링하여 TAPT를 진행한다. Knn을 이용하는 것은 태스크 데이터와 가까운 데이터를 샘플링한다는 의미이다. </li>
</ol>
<p>그 결과는 다음과 같다. 
<img src="https://imagedelivery.net/v7-TZByhOiJbNM9RaUdzSA/bc95568b-935d-4054-bbdf-039ac7cc5a00/public" alt=""></p>
<p>전체 결과를 살펴보면 knn-TAPT가 기존의 TAPT보다 항상 성능이 좋다는 것을 보여준다. 이는 기존의 TAPT가 데이터가 부족한 한계점을 가지고 있고, 태스크 데이터와 비슷한 분포를 가지는 추가 데이터를 가지고 오면 성능이 향상된다는 것을 보여준다. </p>
<p>특히 k의 값이 커지면 커질수록(추가적인 데이터가 많아질 수록) TAPT의 성능은 점차 DAPT 성능에 가까워지는 것을 볼 수 있는데, TAPT와 DAPT의 step 수나 데이터 사이즈의 차이를 고려하면 놀라운 성능 개선이라고 할 수 있을 것 같다.  </p>
<h1 id="conclusion">Conclusion</h1>
<p>결론을 내보자면, <strong>우리가 단순히 데이터라고 뭉뚱그려 이야기하는 것은 사실 여러 층위를 이루고 있고, 이 계층 구조를 잘 살펴서 pretrain 및 finetune을 진행해야 한다</strong>가 핵심인 것 같다. </p>
<p><img src="https://imagedelivery.net/v7-TZByhOiJbNM9RaUdzSA/9a2ecf6c-de7a-420f-09dd-78b6e706f400/public" alt=""></p>
<p>특히 논문에서 knn-TAPT를 위 그림처럼 묘사하고 있는데, 같은 도메인 데이터에서도 태스크와 관련된 데이터가 저런 식으로 분포하고 있다면 정말로 TAPT나 DAPT는 유의미한 작업이라 생각한다. 논문이 전반적으로 특별한 내용을 이야기하고 있지는 않지만 초반에 제시하고 있는 사전학습 데이터, 도메인 데이터, 태스크 데이터의 그림이 상당히 의미하는 바가 큰 것 같다. 논문을 읽어보지 않은 사람이라면, 한번쯤 읽어보는 것도 좋을 것 같다. </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[GPT-3: Language Models are Few-Shot Learners]]></title>
            <link>https://velog.io/@tobigs-nlp/GPT-3-Language-Models-are-Few-Shot-Learners</link>
            <guid>https://velog.io/@tobigs-nlp/GPT-3-Language-Models-are-Few-Shot-Learners</guid>
            <pubDate>Wed, 30 Mar 2022 08:30:06 GMT</pubDate>
            <description><![CDATA[<p>gpt3 모델의 등장으로 굉장한 패러다임의 변화가 일어났다. 특정 task를 수행하기 위해  finetuning을 할 필요가 없다는 것이 이 모델의 의의이다. finetuning을 하지 않아도 사람에 근사하는 유창성을 가지기 때문이다. 이 뿐만 아니라, 사람의 학습 과정을 모방하는 few-shot learning을 통해 다음과 같은 것도 가능해졌다.</p>
<p><img src="https://i.imgur.com/7WoAZSD.png" alt="지피티"></p>
<p>LaTex 문법에 맞춰 알아서 수식을 작성해주는 것 이외에도, 코딩해주는 인공지능, 데이터셋을 알아서 만들어주는 인공지능, 이 모든 것은 바로 gpt3을 지칭하는 것이다. </p>
<h2 id="background">Background</h2>
<h3 id="text-to-text-framework">Text-to-Text Framework</h3>
<p>GPT3는 Text-to-Text Framework 하에서 동작한다. Text-to-Text Framework는 Google T5에서 등장한 방법론으로, 모든 downstream task들을 하나의 방식(NLG)으로 처리한다. </p>
<p><img src="https://i.imgur.com/kwTxUe3.png" alt="ㅅ5"></p>
<p>이러한 방식의 장점은 downstream task에 따라 layer를 추가할 필요 없이, 기존 사전학습 모델의 파라미터를 기반으로 finetuning할 수 있다는 것이다. 하지만, task description와 Prompt에 영향을 많이 받는다는 연구 결과가 있다. </p>
<h3 id="gpt-시리즈">GPT 시리즈</h3>
<table>
<thead>
<tr>
<th>gpt1</th>
<th>gpt2</th>
<th>gpt3</th>
</tr>
</thead>
<tbody><tr>
<td>Transformer decoder + LM objective pretraining</td>
<td>Meta-learning을 통한 zero-shot 학습 &amp; 추론</td>
<td>크기를 엄청나게(175B) 키움</td>
</tr>
</tbody></table>
<h2 id="1-introduction">1. Introduction</h2>
<p>최근의 NLP 연구들은 어떻게 하면 task-agnostic하게 모델을 동작하게 할 수 있을까에 초점을 맞췄다. 대부분의 PLM들은, 그 이름에서 알 수 있듯, 사전학습을 진행한 이후에 finetuning을 통해 특정 task를 해결하는 방식을 학습한다. 이러한 방식은 더 이상 task에 따라 모델을 새로이 구성할 필요가 없다는 점에서 architecture면에서는 task-agnostic해졌다고 할 수 있지만, 여전히 task-specific한 데이터셋을 바탕으로 task-specific finetuning을 한다는 점에서 한계가 있다.</p>
<p>이것을 해결해야 하는 이유는 3가지이다. </p>
<p><strong>첫 째, 새로운 task를 풀 때마다 labeled data가 필요하다.</strong> 
물론 pretraining + finetuning의 2 step이 scratch보다 더 좋은 성능을 내는 것은 맞지만, 여전히 상용화 가능한 수준까지 성능을 높이기 위해서는 task를 위한 수천-수만의 데이터셋이 필요하다. (뿐만 아니라, 각 데이터에 따라 수많은 모델들이 있다는 점도 문제)</p>
<p><strong>둘 째, 일반화 성능을 잃을 수 있다</strong>. 
pretraining을 하면서 언어 모델은 대량의 지식 흡수하지만, 결국 finetuning 하면서 아주 작은 task의 분포를 따르게 된다. 즉, 이러한 fine-tuning은 오버피팅을 야기하고, 결론적으로 일반화 성능을 잃을 수 있다. 
첨언하자면, 기존의 방법론에서는 [CLS] 토큰 또는 각 time-step에 linear layer + softmax를 추가하여 추가 데이터셋을 통해 fine-tuning하는 방식을 택한다. 문제가 되는 것은 random initialize된 layer가 추가됨으로 over-confidence와 같은 문제가 발생한다는 것이다. 또한, initial weight를 task에 맞게 수정하는 과정에서 많은 학습 sample들이 필요하게 된다. 
이는 논문 저자가 언급한 다음 문제와 연결된다. 바로, 언어 모델의 성능이 실제 성능보다 과대평가 되어 있다는 것이다. 생각해보면 benchmark에서 human performance를 능가했다고 이야기하지만, 실제로 기대되는 성능을 보이는 경우는 드물다. </p>
<p><strong>셋 째, 사람과 유사하게 적은 샘플로도 task를 수행하게 해야 한다.</strong><br>사람은 어떠한 task를 해결하기 위해선 간단한 지시사항이나, 몇 개의 샘플로도 충분하다. 예를 들어보자.  </p>
<ul>
<li>“please tell me if this sentence describes something happy or something sad“</li>
<li>“here are two examples of people acting brave; please give a third example of bravery“</li>
</ul>
<p>이러한 인간의 adaptability가 결국 다양한 task들을 번갈아가면서 수행할 수 있게 한다. 따라서, 언어 모델이 task-agnostic해지기 위해서는 인간의 이러한 유연성과 일반성을 모델링해야 한다는 것이다. 그리고 반대로, 언어 모델의 목적은 인간의 언어를 모델링하는 것이니까 이러한 측면도 모델링해야 한다고 이해했다. </p>
<p>종합해보면, 결국 labeled data가 필요없고, 사전 학습에서 얻은 일반화 성능을 잃지 않으며, 아주 적은 데이터로 task를 풀게 할 수 있는 모델을 바라는 것이다. 돌려서 말하지만 결국, 아이디어는 <strong>finetuning 없이 pretrain 만으로 동작</strong>하게 하자는 것이다. 이는 두 가지를 통해 이루어질 수 있다. </p>
<ol>
<li><p><strong>In-contrast learning</strong>
역전파를 통한 parameter 업데이트 없이, feed-forward를 통해 이루어지는 학습을 의미한다. 학습을 parameter 업데이트와 동일시했다면 혼란스러울 수 있다. In-contrast learning에서는 각 time-step별로 hidden representation을 업데이트하는 것을 학습의 일환으로 본다. </p>
</li>
<li><p><strong>capacity</strong> 대폭 늘리기
무려 1750억개의 파라미터를 가진다. </p>
</li>
</ol>
<p>대용량 LM은 파라미터 업데이트 없이 In-contrast learning을 통해 다양한 task를 수행할 수 있다. 추가적인 학습없는 inference를 수행하는 것인데, 이는 위에서 언급한 Text-to-Text framework을 활용하여 동작한다. task에 대한 instruction과 몇 개의 예제들을 feed-forward하고 언어 모델로 하여금 정답을 생성하게 하는 것이다. 만약, 언어 모델이 언어의 분포를 잘 근사하였다면, 주어진 context를 잘 encoding하고 가장 알맞은 다음 단어를 생성할 수 있을 것이다. </p>
<p>단순 language modeling에 transformer decoder만 사용하는데, 거기다가 finetuning도 안하는데 크기만 키운다고 이게 되나 싶지만...</p>
<p><img src="https://i.imgur.com/Ce83HYt.jpg" alt="i21000437"></p>
<p>본격적인 모델 설명에 앞서, 실험 세팅부터 살펴보자. </p>
<p><img src="https://i.imgur.com/6QQ99PN.png" alt="스크린샷 2022-03-29 오후 4.55.12"></p>
<ol>
<li><p>few-shot learning 
모델의 context window에 넣을 수 있는 만큼 많은 예제(K)를 넣는다. 일반적으로 가능한 context 길이 2048에 들어가는 10~100개의 sample을 넣는다. </p>
</li>
<li><p>one-shot learning 
하나의 sample만을 넣는다. </p>
</li>
<li><p>zero-shot learning<br>sample은 넣지 않고, 수행할 task에 대한 description 혹은 instruction만을 넣는다. </p>
</li>
</ol>
<p><img src="https://i.imgur.com/TqwvdBu.png" alt="스크린샷 2022-03-29 오후 4.32.06"></p>
<p>결과적으로, 넣는 context 수 K를 늘릴 수록 성능이 향상되는 것을 확인할 수 있다. 또한, 모델이 커질수록 in-context learning의 효율이 높아졌다. 주어지는 예제가 많아질수록 큰 폭으로 성능이 높아지는 것을 확인할 수 있다. 뿐만 아니라, task에 대한 prompt를 함께 넣는 것이 도움이 되었다. </p>
<p>이러한 방식을 통해, GPT3은 몇몇 task에서는 sota를 뛰어넘었으며, NLI &amp; QA를 제외한 대부분의 task에서는 그에 준하는 결과를 얻을 수 있었다. </p>
<p>논문 저자들은 모델 이외에도 더욱 valid한 평가를 위해 data contamination에 대해서 연구를 진행한다. data contamination은 test dataset의 content가 학습 과정에 포함되는 것을 의미한다. Section 4에서 이를 방지하고 필터링하는 방법들을 소개한다.  </p>
<h2 id="2-approach">2. Approach</h2>
<h3 id="21-model-and-architectures">2.1 Model and Architectures</h3>
<p>GPT3은 GPT2와 동일한 구조와 학습 방식을 가진다.  </p>
<p><img src="https://i.imgur.com/c8gLbx7.png" alt="스크린샷 2022-03-29 오후 5.06.02"></p>
<p>학습에서의 유일한 차이는 dense와 locally banded sparse attention을 번갈아가며 사용한다는 것이다. 이는 Sparse Transformer에서 차용한 것이다. 
<img src="https://i.imgur.com/GriNzbk.png" alt="스크린샷 2022-03-29 오후 5.15.24"><img src="https://i.imgur.com/cHwd9XV.png" alt="스크린샷 2022-03-29 오후 5.20.21"></p>
<p>GPT3는 다시 말해, 1.5B 파라미터를 가졌던 GPT2의 크기를 175B까지 키운 모델이다. </p>
<p>저자들은 training data가 충분할 때, 언어모델 크기와 학습 loss는 power-law 관계를 가진다는 가설 하에 125B부터 175B까지 8개 버전의 모델을 만들어 이를 비교한다. </p>
<p><img src="https://i.imgur.com/NTdLfOH.png" alt="스크린샷 2022-03-29 오후 5.04.21"></p>
<h3 id="22-training-process">2.2 Training Process</h3>
<ul>
<li>learning rate &amp; batch size<ul>
<li>큰 모델은 큰 batch size와 작은 lr이 필요하다. 위의 Table 2.1 참고</li>
</ul>
</li>
<li>Adam, β1 = 0.9, β2 = 0.95</li>
<li>clip_by_global_norm = 1.0</li>
<li>learning rate -&gt; cosine decay (down to 10%) </li>
<li>linear LR warmup = first 375 million tokens</li>
<li>weight decay = 0.1 </li>
</ul>
<h3 id="23-training-dataset">2.3 Training Dataset</h3>
<p>토크나이징으로는, 모든 언어에서 동작하도록 하기 위해 Character BPE가 아닌 Byte BPE 사용한다. </p>
<p>학습의 주가 되는 데이터셋은 인터넷의 글을 최대한 많이 긁어와 구축한 Common Crawl 데이터이다. 해당 데이터는 양적인 측면에서는 훌륭하지만 질의 측면에서는 문제가 많다. 이 때문에 <strong>2가지 filtering</strong>을 거친다. </p>
<ol>
<li><p>low-quality filtering
WebText를 high-quality document로 labeling, Common Crawl을 low-quality document로 labeling해 데이터셋을 구축한 뒤, 이를 분류하는 classifier를 학습시킨다. 이 classifier를 사용해 Common Crawl 중 high-quality라고 분류되는 것만 남긴다. </p>
</li>
<li><p>deduplication
n-gram 단위로, 다른 데이터와 겹치는 데이터는 삭제한다. 이를 통해 data contamination과 overfitting을 방지할 수 있다. </p>
</li>
</ol>
<p>최종적으로, 정제를 통해 45TB를 570GB(400B BPE Tokens) 정도로 줄였다. 
다만, 이 데이터를 그대로 사용한 것이 아니라 crawling 데이터셋의 단점을 보완하기 위해 다른 고품질의 데이터셋을 섞어서 데이터셋을 구축한다. 이때, 가중치를 두어, <strong>깔끔한 데이터셋이 실제 양에 비해 상대적으로 높은 빈도로 학습</strong>되도록 한다. </p>
<p><img src="https://i.imgur.com/VsTp12N.png" alt="스크린샷 2022-03-29 오후 5.24.36"></p>
<p>설명에 적혀있듯, 어떤 데이터셋은 3.4번 보는 것도 있는 반면, 한번도 다 보지 못하는 경우도 존재한다. </p>
<h2 id="3-results">3. Results</h2>
<p><img src="https://i.imgur.com/3WzzqZL.png" alt="스크린샷 2022-03-29 오후 5.43.18"></p>
<p>성능(validation loss)이 학습시간과 power-law 관계를 가진다는 것을 확인할 수 있다. </p>
<h3 id="31-language-modeling">3.1 Language Modeling</h3>
<ul>
<li>Penn Treebank</li>
</ul>
<p><img src="https://i.imgur.com/DSJNnfj.png" alt="스크린샷 2022-03-29 오후 5.49.41"></p>
<p>language modeling은 task의 특성 상 zero-shot만 가능하다. perplexity를 기준으로 sota를 달성한다는 것을 확인할 수 있다. (사실 이 결과는 너무 당연하다)</p>
<h3 id="32-cloze-and-completion-tasks">3.2 Cloze, and Completion Tasks</h3>
<p><img src="https://i.imgur.com/X6vkVaI.png" alt="스크린샷 2022-03-29 오후 5.46.14"></p>
<ul>
<li>LAMBADA (문장 완성하기/ 언어의 장기 의존성을 모델링하는 태스크)
  <img src="https://i.imgur.com/0OwZWTG.png" alt="스크린샷 2022-03-29 오후 5.52.10"></li>
<li>StoryCloze 
  <img src="https://i.imgur.com/ul6I49o.png" alt="스크린샷 2022-03-29 오후 5.53.22"></li>
<li>HellaSwag 
  <img src="https://i.imgur.com/UVVFrpR.png" alt="스크린샷 2022-03-29 오후 5.54.12"><ul>
<li>zero-shot으로 비교했을 때는 sota를 달성했다.</li>
</ul>
</li>
</ul>
<h3 id="33-closed-book-question-answering">3.3 Closed Book Question Answering</h3>
<p>해당 section에서는 사실 기반의 지식에 대한 질문에 답변할 수 있는지 측정한다. </p>
<ul>
<li><p>Natural Questions</p>
<ul>
<li>위키피디아에 대해 fine-grained 지식을 요구하는 task</li>
<li>14.6% (zero-shot), 23.0% (one-shot), 29.9% (few-shot) </li>
<li>sota: 36.6% for fine-tuned T5 11B+SSM. </li>
<li>즉, sota에 한참 멀었다. </li>
</ul>
</li>
<li><p>WebQuestions </p>
<ul>
<li>14.4% / 25.3% / 41.5% </li>
<li>sota: 44.7% for fine-tuned T5-11B+SSM</li>
<li>few-shot은 sota에 거의 준하는 결과</li>
</ul>
</li>
<li><p>TriviaQA 
  <img src="https://i.imgur.com/3AonWNn.png" alt="스크린샷 2022-03-29 오후 5.58.37"></p>
<ul>
<li>64.3% / 68.0% / 71.2% </li>
<li>sota 달성!</li>
</ul>
</li>
</ul>
<h3 id="34-translation">3.4 Translation</h3>
<p><img src="https://i.imgur.com/fyr9top.png" alt="스크린샷 2022-03-29 오후 6.02.40"></p>
<p>학습 데이터의 93%는 영어지만, 7%는 다른 언어들을 포함한다. 따라서, translation 작업도 가능했다. 신기한 점은, few-shot의 경우 finetuned된 다른 모델들에 비견할 만한 BLEU score를 얻은 경우도 있다는 것이다. 심지어는 sota를 달성하는 경우도 있었다. </p>
<h3 id="35-winograd-style-tasks">3.5 Winograd-Style Tasks</h3>
<p>해당 section에서는 대명사가 무엇을 지칭하는지 맞추는 task를 수행한다. 보다 쉬운 benchmark인 winograd와 이것의 난이도를 상승시킨 winogrande를 사용한다. </p>
<ul>
<li>winogrande
  <img src="https://i.imgur.com/4GMoMfr.png" alt="스크린샷 2022-03-29 오후 6.06.10"><ul>
<li>보다시피, 대명사 it을 꾸미는 형용사에 따라 무엇을 지칭하는지가 달라지는 아주 어려운 task </li>
</ul>
</li>
</ul>
<p><img src="https://i.imgur.com/y5HXbFi.png" alt="스크린샷 2022-03-29 오후 6.07.07"></p>
<h3 id="36-common-sense-reasoning">3.6 Common Sense Reasoning</h3>
<p>가장 성능이 하락되었던 task 중 하나이다. </p>
<p><img src="https://i.imgur.com/Z01yFvA.png" alt="스크린샷 2022-03-29 오후 6.11.10"></p>
<ul>
<li><p>PhysicalQA (PIQA)</p>
<ul>
<li>common sense questions about how the physical world works <ul>
<li>예를 들어, “If I put cheese into the fridge, will it melt?”</li>
</ul>
</li>
<li>81.0% / 80.5% / 82.8% </li>
<li>분석 결과 data contamination issue가 있을 수 있다는 결론</li>
</ul>
</li>
<li><p>ARC </p>
<ul>
<li>3~9학년 과학 시험 데아터셋 (MCQ) </li>
<li>51.4% / 53.2% / 51.5% </li>
</ul>
</li>
<li><p>OpenBookQA 
  <img src="https://i.imgur.com/vK89xWt.png" alt="스크린샷 2022-03-29 오후 6.13.24"></p>
</li>
</ul>
<h3 id="37-reading-comprehension">3.7 Reading Comprehension</h3>
<p><img src="https://i.imgur.com/an8o7oj.png" alt="스크린샷 2022-03-29 오후 6.17.04"></p>
<p>QA나 문맥을 이해하여 사지선다의 답을 고르는 데이터셋에 대해 굉장한 성능 하락이 보고되었다. </p>
<h3 id="38-superglue">3.8 SuperGLUE</h3>
<p><img src="https://i.imgur.com/kyAttNC.png" alt="스크린샷 2022-03-29 오후 6.17.24"></p>
<h3 id="39-nli">3.9 NLI</h3>
<p><img src="https://i.imgur.com/bMNaDa2.png" alt="스크린샷 2022-03-29 오후 6.18.36"></p>
<h3 id="310-synthetic-and-qualitative-tasks">3.10 Synthetic and Qualitative Tasks</h3>
<h4 id="3101-산술">3.10.1 산술</h4>
<p><img src="https://i.imgur.com/T326MHt.png" alt="스크린샷 2022-03-30 오전 9.30.22"></p>
<p>덧셈 뺄셈의 경우, 낮은 자릿수의 계산일수록 높은 성능을 보였으며, 모델이 커질수록 성능이 향상되었다는 것을 확인할 수 있다. </p>
<p><img src="https://i.imgur.com/B9G2s5d.png" alt="스크린샷 2022-03-29 오후 6.23.36"></p>
<h4 id="3102-문자-재정렬">3.10.2 문자 재정렬</h4>
<p><img src="https://i.imgur.com/GzWRaES.png" alt="스크린샷 2022-03-29 오후 6.25.25"></p>
<ul>
<li>Cycle letters in word (CL)<ul>
<li>given: random shuffle</li>
<li>Example: lyinevitab →  inevitably</li>
</ul>
</li>
<li>Anagrams of all but first-and last characters (A1) <ul>
<li>given: 처음과 마지막 letter를 제외하고 shuffle</li>
<li>Example: criroptuon → corruption.</li>
</ul>
</li>
<li>Anagrams of all but first and last 2 characters (A2) <ul>
<li>첫 2개와 마지막 2개 제외 shuffle</li>
<li>Example: opoepnnt → opponent.</li>
</ul>
</li>
<li>Random insertion in word (RI) <ul>
<li>random punctuation / space character가 letter 사이에 들어갔을 때 복구하기</li>
<li>Example: s.u!c/c!e.s s i/o/n → succession</li>
</ul>
</li>
<li>Reversed words (RW) <ul>
<li>거꾸로 적힌 단어 되돌리기</li>
<li>Example: stcejbo → objects</li>
</ul>
</li>
</ul>
<p>수행 결과, zero-shot setting에서는 유의미한 결과를 얻지 못했고, 그나마 few-shot에서는 나아졌지만 여전히 나쁜 성능을 보였다. 이유를 유추해보자면, 해당 task는 letter 단위로 작동하는데, gpt3는 BPE encoding을 사용하기 때문이라고 여겨진다. 이 task를 성공적으로 수행하기 위해서는 BPE token보다 더 하위의 단위까지도 고려할 수 있어야 한다.</p>
<h4 id="3103-sat-style-analogy-problems">3.10.3 SAT-style analogy problems</h4>
<p>유사한 단어 고르기 문제에서 GPT3은 53.7 / 59.1 / 65.2%의 정확도를 가진다. 대학생 평균이 57%인 것을 고려할 때, 굉장히 성공적이라고 할 수 있다. </p>
<h4 id="3104-news-article-generation">3.10.4 News Article Generation</h4>
<p><img src="https://i.imgur.com/otUN7pG.png" alt="스크린샷 2022-03-30 오전 9.10.45"></p>
<p>사람에게 모델이 만든 뉴스와 실제 뉴스를 구분하는 작업을 맡겼을 때, 모델의 크기가 증가함에 따라, GPT-3에 의한 생성 여부를 판단하기 더 힘들어졌다. (후에 등장할 Hallucination issue와 이어진다) </p>
<h4 id="3105-learning-and-using-novel-word">3.10.5 Learning and Using Novel Word</h4>
<p>새로운 용어에 대한 학습력을 평가한다. 용어의 정의 혹은 사용법을 제시한다음 gpt3으로 하여금 해당 단어를 사용하게 해본다. 
<img src="https://i.imgur.com/D0Q6r6N.png" alt="스크린샷 2022-03-30 오전 9.14.09"></p>
<p>보다시피, 잘못 사용하는 경우도 존재했지만 대부분 올바르게 사용했다. </p>
<h4 id="3106-correcting-english-grammar">3.10.6 Correcting English Grammar</h4>
<p><img src="https://i.imgur.com/il1VFrc.png" alt="스크린샷 2022-03-30 오전 9.15.52"></p>
<p>여기서 주목할 점은, “Poor English input/Good English output” framing이다. Poor와 Good이라는 단어는 사실 여러 의미를 내재하고 있기 때문에 그것이 사용된 맥락에 따라 다르게 해석될 여지가 있다. 실제로, 여기서의 prompt는 문법을 교정하기 위한 의도로 설계되었지만 의미적으로 올바르지 않다고 판단해 수정하는 양상이 나타났다. (example mentioning the rental of a house, cheap 삭제)</p>
<p>이 때문에, prompt engineering 연구가 활발히 이루어졌는데, 관련 논문은 나중에 기회가 되면 리뷰하도록 하겠다. </p>
<h2 id="4-measuring-and-preventing-memorization-of-benchmarks">4. Measuring and Preventing Memorization Of Benchmarks</h2>
<p>결론적으로 이야기하면, data contamination이 일부 있지만 그것이 성능에 미치는 영향은 거의 없다. </p>
<p>학습 데이터 중 각 벤치마크와 13-gram으로 오버랩되는 데이터를 삭제한 clean ver 데이터를 새로 만들어, 이를 학습시켜 기존의 모델과 성능을 비교해보았다. </p>
<p><img src="https://i.imgur.com/ozfWzbo.png" alt="스크린샷 2022-03-30 오전 9.24.53"></p>
<p>만약, clean 버전의 성능이 더 낮다면, contamination이 성능을 과장시키고 있는 것이다. 하지만 이를 뒷받침하는 증거들은 발견되지 않았다. 벤티마크 중 오염의 정도가 높은 것 마저도, 유의미한 성능 차이를 야기하지는 않았다. </p>
<p>이러한 결과는 아마 gpt3의 방대한 스케일 때문인 것으로 보인다. 데이터의 양이 너무나도 많기 때문에, 학습 데이터셋을 오버피팅하지 못한 것이다. 따라서 저자들은 사전학습 데이터에 contamination이 존재하나, 그 영향이 크지는 않다고 결론지었다. </p>
<h2 id="5-limitations">5. Limitations</h2>
<ol>
<li><p>weaknesses in text synthesis and several NLP tasks</p>
<ul>
<li>text generation:<ul>
<li>Repetition,lose coherence,self contradiction </li>
<li>Hallucination</li>
</ul>
</li>
<li>difficulty with “common sense physics”<ul>
<li>Lack of common sense in real-world</li>
<li>단어의 개념에 대해 완전히 이해했다고 보기 어렵다. </li>
</ul>
</li>
<li>몇몇 데이터셋의 경우에는 zero-shot -&gt; few-shot으로 바꾸어도 성능향상이 많지 않은 것을 보아 in-context learning 능력이 떨어진다. (ANLI, WIC)</li>
</ul>
</li>
<li><p>structural and algorithmic limitations</p>
<ul>
<li>inference와 training의 방식이 일치하는 점에서 이점이 있기에, in-context learning을 택했다. 하지만, bidirectional architecture나 다른 training objectives는 고려하면 더 좋을 것이다. </li>
</ul>
</li>
<li><p>pretraining objective의 한계</p>
<ul>
<li>현재는 학습 과정에서 토큰들을 동일한 가중치를 두어 학습한다. 하지만, task specific하게 설정하여 문제를 해결하기 위해 어떤 토큰을 더 중요시해야 하는 가에 대한 정보를 학습하면, 확실히 성능이 높아진다는 것을 확인할 수 있었다. </li>
<li>뿐만 아니라, 현재의 PLM은 다른 도메인적 지식은 고려하지 않는다. </li>
<li>따라서, 단순히 크기를 키우는 것만으로는 한계에 도달할 것이며 다른 접근법이 필요하다. 현재로써는 모호하지만, (1) 사람이 학습하는 것과 같은 목적함수 사용하기 (2) 강화학습을 이용해 fine-tuning 하기 (3) 다른 modality 접목 등을 생각해볼 수 있을 것이다. </li>
</ul>
</li>
<li><p>poor sample efficiency during pre-training</p>
<ul>
<li>inference에서는 사람과 유사하게 동작할 수 있지만, 여전히 사전학습에서는 이를 반영하지 못하고 있다. 따라서, 사전학습 단계에서 하나의 샘플에서 지식을 습득의 효율성을 높이는 연구가 필요하다. </li>
</ul>
</li>
<li><p>ambiguity </p>
<ul>
<li>inference의 결과가 few shot을 통해 scratch 부터 새로운 태스크를 배운 것인지, 아니면 사전 학습에서 봤던 것을 알아본 것인지 알 수가 없다. </li>
</ul>
</li>
<li><p>비용</p>
<ul>
<li>expensive and inconvenient to perform inference</li>
<li>distillation을 통해 해결할 수 있다고 믿는다. </li>
</ul>
</li>
<li><p>딥러닝 시스템의 본질적인 한계</p>
<ul>
<li>블랙 박스라던가, 훈련 데이터에 대한 편향 문제가 gpt3에도 계승된다. </li>
</ul>
</li>
</ol>
<h2 id="6-broader-impacts">6. Broader Impacts</h2>
<h3 id="61-misuse-of-language-models">6.1 Misuse of Language Models</h3>
<ol>
<li>Potential Misuse Applications<ul>
<li>hallucination issue</li>
<li>문장을 생성하는 능력치가 높아질수록 더욱 문제가 되는 지점</li>
</ul>
</li>
<li>Threat Actor Analysis<ul>
<li>‘advanced persistent threats’ (APTs): 지능형 지속 공격</li>
<li>APT는 원하는 정보를 얻기 위해 악성코드, 피싱, 소셜 엔지니어링 등 다양한 공격 방식을 이용 하는 것이다. 따라서, 정확히 &#39;공격&#39;자체를 의미한다기 보다는 목적을 위해 사용되는 &#39;공격들&#39;이라 하는 것이 올바르다. </li>
<li>아직 언어모델을 사용하는데 성공한 사례는 없는 것으로 보인다. </li>
</ul>
</li>
<li>External Incentive Structures<ul>
<li>사용이 쉬워지고, 비용이 낮아지기 때문에, APT들의 사용을 유도할 수 있다.</li>
</ul>
</li>
</ol>
<h3 id="62-fairness-bias-and-representation">6.2 Fairness, Bias, and Representation</h3>
<p>모델에 담겨있는 편견과 선입견들이 사람의 편견과 선입견을 강화하는 순환 구조가 존재한다. 이 때문에 편향에 대한 연구는 중요하다. gpt3을 분석한 결과, 인터넷에서 크롤링해 수집한 데이터셋을 기반으로 하기 때문에, 그곳에 존재하는 편향을 그대로 학습한 것으로 밝혀졌다. </p>
<ol>
<li>Gender<ul>
<li>성별과 직업의 연관성에 초점</li>
<li>[ prompt 1 ] &quot;The {occupation} was a __&quot;<ul>
<li>male: 노동 집약적인 직업</li>
<li>female: 간호사, 카운터 접수원, 가사노동자</li>
</ul>
</li>
<li>[ prompt 2] &quot;The (in)competent {occupation} was a __&quot;<ul>
<li>competent : male&gt;female(2.14)</li>
<li>incompetent: male&gt;female(1.15)</li>
</ul>
</li>
<li>[ prompt 3] context주고 pronoun 생성하기</li>
<li>[ prompt 4] &quot;(S)He was very __&quot; 
  <img src="https://i.imgur.com/FBP03fU.png" alt="스크린샷 2022-03-30 오전 10.22.14"></li>
</ul>
</li>
</ol>
<ol start="2">
<li>Race<ul>
<li>[ prompt ] &quot;The {race} man was very&quot;, &quot;The {race} woman was very&quot;</li>
<li>생성한 단어의 감성 분석을 실시.
<img src="https://i.imgur.com/0LvBTtz.png" alt="스크린샷 2022-03-30 오전 10.23.46"></li>
</ul>
</li>
</ol>
<ol start="3">
<li>Religion<ul>
<li>[ prompt ] &quot;{Religion practitioners} are __&quot; </li>
<li>temperature를 다양하게 설정하여, 각 종교에 대한 800개의 문장을 생성. </li>
<li>violent, terrorism, terrorist 같은 단어를 이슬람교와 연관짓는다는 것을 확인할 수 있었다.</li>
</ul>
</li>
</ol>
<h3 id="63-energy-usage">6.3 Energy Usage</h3>
<p>모델을 학습시키는 과정만 고려하는 것이 아니라, 그것이 앞으로 사용되는 측면까지 생각한다면 에너지 사용면에서 효율적이라고 말할 수 있다. </p>
<p>처음 학습시키는데는 굉장히 많은 자원이 들어가지만, 한 번 학습되고 나면 100 page의 글을 작성하는데 추가적인 학습이 필요하지 않으므로, 아주 적은 비용이 들 것이다. </p>
<p>나중에 distillation 기법들이 성장하면 모델의 효율성은 더욱 높아질 것이라 기대된다. </p>
<h2 id="reference">Reference</h2>
<p><a href="https://arxiv.org/abs/2005.14165">https://arxiv.org/abs/2005.14165</a>
<a href="https://littlefoxdiary.tistory.com/44">https://littlefoxdiary.tistory.com/44</a>
<a href="https://kk-7790.tistory.com/37">https://kk-7790.tistory.com/37</a>
<a href="https://judy-son.tistory.com/5">https://judy-son.tistory.com/5</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[BertGCN: Transductive Text Classification
by Combining GCN and BERT]]></title>
            <link>https://velog.io/@tobigs-nlp/BertGCN-Transductive-Text-Classificationby-Combining-GCN-and-BERT-qw32axzg</link>
            <guid>https://velog.io/@tobigs-nlp/BertGCN-Transductive-Text-Classificationby-Combining-GCN-and-BERT-qw32axzg</guid>
            <pubDate>Tue, 29 Mar 2022 10:52:15 GMT</pubDate>
            <description><![CDATA[<h1 id="0-abstract">0. Abstract</h1>
<p>본 연구에서는 BertGCN을 제안합니다. BertGCN은 large scale의 pretraining과 transductive 학습을 통해 text classification 문제를 해결합니다.</p>
<p>Dataset에 대해 그래프를 구성하고, 각각의 문서를 BERT representation을 통해 node로 나타냅니다. BERT와 GCN을 함께 훈련함으로써 방대한 양의 raw data와 label이 지정되지 않은 데이터를 함께 사용할 수 있다는 이점이 있습니다.</p>
<p>BertGCN은 당시 많은 텍스트 분류 문제에서 SOTA 성능을 달성하였습니다.</p>
<hr>
<h1 id="1-introduction">1. Introduction</h1>
<p>텍스트 분류는 NLP분야의 핵심 과제 중 하나이며, 주로 스팸 탐지 및 opinion mining등이 연구되어왔습니다.</p>
<p>Transductive learning은 텍스트 분류에서 사용되는 기법으로, 훈련 과정에서 레이블이 있는 데이터와 없는 데이터를 모두 사용하도록 하는 method입니다.</p>
<p>Graph neural networks(GNN)는 이러한 transductive learning의 효과적인 접근법입니다. 그래프의 노드는 단어, 문서와 같은 텍스트 단위를 나타내고 엣지는 노드간의 의미적 유사성을 나타냄으로써 텍스트를 그래프로 표현합니다.</p>
<p>그런 다음 GNN을 그래프에 적용하여 노드 분류를 수행하는데, 본 논문의 저자는 이러한 GNN과 transductive learning의 장점을 아래 두 가지로 정리하였습니다.</p>
<ol>
<li>의사결정(training과 test 모두)은 해당 노드에만 의존하는 것이 아니라, 이웃 노드에도 의존하게 됩니다. 이것은 데이터 이상치에 대해 모델이 더 내성을 갖도록 만듭니다.</li>
<li>훈련시 모델은 지도학습된 레이블을 엣지를 통해 훈련 및 테스트 데이터에 영향을 미치기 때문에 레이블이 지정되지 않은 데이터도 representation learning에 기여하여 더 높은 성능을 제공합니다.</li>
</ol>
<p>따라서 본 논문에서는 pre-training과 transductive learning의 장점을 결합한 모델인 BertGCN을 제안합니다. BertGCN은 단어 또는 문서를 노드로 하며, 노드 임베딩은 사전훈련된 버트 representation으로 초기화됩니다. 그 후 분류를 위해 GCN모델을 사용합니다.</p>
<hr>
<h1 id="2-related-work">2. Related work</h1>
<h3 id="21-graph-neural-networksgnn">2.1 Graph neural networks(GNN)</h3>
<h4 id="graph-model은">Graph model은?</h4>
<ul>
<li>그래프 모델은, 그래프 데이터에 적용 가능한 모델을 의미합니다.</li>
<li>기존 머신러닝 모델은 데이터간의 독립을 가정합니다.</li>
<li>상호 연관을 나타내는 데이터는 기존의 알고리즘에 적합하지 않습니다.</li>
<li>그래프 데이터에 맞는 새로운 알고리즘이 필요합니다.</li>
</ul>
<h4 id="graph-model의-작동-원리">Graph model의 작동 원리</h4>
<p>그래프 모델은 이웃 노드와의 messege passing을 통해 자신의 정보를 업데이트합니다.
<img src="https://images.velog.io/images/aioptlab/post/e87ae474-f726-4e28-94d8-cac57a1970a4/image.png" alt="">
예를들어 위 그림에서는, 5개의 노드가 엣지로 연결이 되어있는데 2번 노드와 5번 노드는 직접적으로 연결되어있지는 않지만 학습을 진행하다 보면 서로 이웃노드의 영향을 주고받기 때문에 결국 2번노드 또한 5번노드의 영향을 받게 되는 것입니다.</p>
<h4 id="graph-convolutional-networkgcn">Graph Convolutional Network(GCN)</h4>
<p>GCN은 기본 cnn과 거의 비슷한 형식으로 학습이 진행됩니다. 연결된 이웃 노드의 feature vector의 summation을 target 노드의 representation으로 업데이트합니다. 학습 과정에서 Message passing을 통해 learnable parameter W행렬을 학습합니다.</p>
<h3 id="22-bert">2.2 BERT</h3>
<p>BERT는 Bidirectional Encoder Representation from Transformers의 약자로 transformer의 encoder로 이루어진 layer를 통한 대규모 pre-training 모델 기반 NLP 알고리즘입니다.</p>
<p>버트는 두 가지 기법을 통해 사전훈련을 진행합니다.</p>
<ul>
<li>Masked Language Model : Masked token에 해당 단어를 예측하도록 함으로써 양방향으로 문맥 학습</li>
<li>Next Sentence Prediction : 두 개의 corpus가 실제로 연결되는지 아닌지를 학습</li>
</ul>
<hr>
<h1 id="3-method">3. Method</h1>
<h3 id="31-bertgcn">3.1 BertGCN</h3>
<p>먼저, <strong>BERT로 텍스트 그래프의 노드를 임베딩하고 이를 document input vector로 사용</strong>합니다. <strong>Word input vector는 0벡터</strong>로 대체합니다. 이 input은 GCN의 입력으로 사용됩니다. 이를 통해 vector들을 그래프 구조를 기반으로 반복적으로 업데이트하고 그 출력은 문서 노드에 대한 최종 representation vector입니다. 이 값은 예측을 위해 softmax classifier로 전송됩니다. 이러한 방식으로 사전 훈련된 모델과 그래프 모델의 장점을 모두 활용할 수 있습니다.</p>
<p><img src="https://images.velog.io/images/aioptlab/post/aa2f92e7-b457-4758-9c4f-c90dd642abf8/image.png" alt=""></p>
<p>위 수식을 보면 A는 edge의 weight이며, PPMI는 단어와 단어간의 edge, TF-IDF는 단어와 문장간의 edge를 의미합니다. 동일한 노드의 가중치는 1이며 그 외에는 0입니다.</p>
<p><img src="https://images.velog.io/images/aioptlab/post/9e860b04-6cbb-477d-b015-b302b26a60ea/image.png" alt="">
텍스트 네트워크를 구성하는 방식은 선행연구인 TextGCN(<a href="https://arxiv.org/pdf/1809.05679.pdf">https://arxiv.org/pdf/1809.05679.pdf</a>)의 방식을 참고하였습니다.
좀 더 이해하기 쉽도록 예를 들면, node는 위와 같이 document node와 word node로 구성되어있고, 각각의 문장 노드에 포함된 단어 노드들이 연결되어있습니다. &#39;밥&#39;이라는 단어는 두 문장 모두 포함되어있으므로, 두 문장 모두 연결이 되어 있는 것을 볼 수 있습니다. 이렇게 텍스트를 그래프의 형태로 표현하여 vector를 업데이트해나갑니다.</p>
<p>initial node features는 다음과 같이 나타냅니다.
<img src="https://images.velog.io/images/aioptlab/post/6e7b52a2-a975-4f35-833b-fb3e7e903ec8/image.png" alt=""></p>
<p>n_doc는 문서노드(document node)의 갯수를 의미하며 n_word는 단어노드(word node)의 갯수를 의미합니다. 또한 d는 embedding dimension을 나타냅니다. 이렇게 구한 X를 GCN(<a href="https://arxiv.org/pdf/1811.11103.pdf">https://arxiv.org/pdf/1811.11103.pdf</a>) layer에 input으로 투입합니다.
<img src="https://images.velog.io/images/aioptlab/post/e85ea236-c46f-4d25-871e-47d1c5ef5728/image.png" alt="">
위 수식은 i번째 GCN layer의 output feature 계산을 나타낸 수식입니다. GCN layer는 메세지를 전파하며 벡터를 업데이트합니다. ρ는 활성화함수이고, A~는 조정된 matrix이며 W는 가중치 행렬입니다. 분류를 위해 이 값을 softmax layer에 통과시킵니다.
<img src="https://images.velog.io/images/aioptlab/post/c8d2ce11-9842-464d-9ec6-5ad4f4c2fe27/image.png" alt="">
이 때 BERT와 GCN을 최적화시키기 위한 손실함수로는 레이블된 document node의 cross entropy loss를 사용합니다.</p>
<h3 id="32-interpolating-bert-and-gcn-predictions">3.2 Interpolating BERT and GCN Predictions</h3>
<p>최종적인 모델의 objective function은 아래 식과 같습니다.
<img src="https://images.velog.io/images/aioptlab/post/568cf8bc-661d-41dd-8453-94e8ea28db6a/image.png" alt=""></p>
<p><img src="https://images.velog.io/images/aioptlab/post/bace8aa4-9a36-47b1-a530-9344543377b3/image.png" alt="">
람다 파라미터가 새로 생긴것을 알 수 있습니다. 여기서 이 값은 BertGCN과 BERT모델의 비율을 조정합니다.</p>
<p>즉, <strong>람다가 1이면 full BertGCN, 0이면 BERT</strong>인 모델입니다. 저자는 이렇게 두 모델의 예측 균형을 맞춤으로써 BertGCN모델을 더 잘 최적화할 수 있다고 말합니다. 이러한 방식이 GCN모델의 기울기 소실문제나 over-smoothing 문제를 극복하도록 합니다.</p>
<h3 id="33-optimization-using-memory-bank">3.3 Optimization using Memory Bank</h3>
<p>원래 GCN모델은 훈련할 때 full-batch gradient descent 방법을 사용하는데, full-batch는 BERT에 적용할 수 없기 때문에 본 논문에서 제시하는 BertGCN에는 적용이 어렵습니다.</p>
<p>따라서, 그래프 노드의 total number로부터 training batch size를 분리해내기 위해 모든 document embeddings를 저장하는 memory bank를 제안합니다.</p>
<p>훈련시 모든 document nodes의 input feature를 추적하는 memory bank를 유지합니다. 각 epoch가 시작될 때, 먼저 current BERT를 사용해서 모든 document embedding을 계산한 뒤 M(Memory)에 저장합니다.</p>
<p>그리고 각 iteration에서 레이블이 지정된 문서 노드와 지정되지 않은 문서 노드 모두에서 미니배치를 샘플링합니다.</p>
<p>메모리 뱅크를 사용하여 BERT 모듈을 포함하는 BertGCN 모델을 효율적으로 훈련할 수 있습니다. 하지만 훈련 중에 메모리 뱅크의 임베딩은 BERT 모듈을 사용하여 에포크의 다른 단계에서 계산되므로 일관성이 없습니다.</p>
<p>이 문제를 극복하기 위해 저장된 임베딩의 일관성을 향상시키기 위해 BERT 모듈에 대해 학습률을 작게 설정했습니다. 학습률이 낮으면 훈련에 시간이 더 오래 걸립니다. 훈련 속도를 높이기 위해 훈련이 시작되기 전에 대상 데이터 세트에서 BERT 모델을 미세 조정(RoBERTa)하고 이를 사용하여 BertGCN에서 BERT 파라미터를 초기화합니다. </p>
<hr>
<h1 id="4-experiments">4. Experiments</h1>
<h3 id="41-experiment-setups">4.1 Experiment Setups</h3>
<p><img src="https://images.velog.io/images/aioptlab/post/d2a6febb-48fc-4b2c-bce7-6a3c698f02ae/image.png" alt=""></p>
<p>본 논문에서 제안된 BertGCN은 현재 SOTA 모델과 비교하였습니다. BertGCN은 사전학습된 Bert_base 모델과 2개의 GCN layer를 사용하였습니다.</p>
<h3 id="42-main-result">4.2 Main Result</h3>
<p>한가지 의아한 점은, GCN 모델을 사용한 결과가 GAT 모델을 사용한 것보다 좋은 성능을 보였다는 점입니다. GAT는 self-attention mechanism을 노드 임베딩에 사용한 모델로, Attention 개념을 Graph 구조의 데이터에 적용하였습니다. 이 모델은 Target Node의 근접 노드 hidden state값을 Key,Query,Value로 사용하여 유사도를 계산합니다. GAN은 다른 모델들 보다 성능이 더 뛰어나고 Attention Score를 통해서 설명이 가능한 장점이 있고, 연산이 비교적 간단하다는 장점이 있다고 알고 있었는데 GCN을 결합한 모델이 더 좋은 성능을 내는 것이 의외였습니다.</p>
<p>또한 결과를 보면, 20NG와 Ohsumed 데이터는 text의 길이가 긴 데이터입니다. 이런 데이터에서 버트와 BertGCN의 성능 차이가 더 많이 나는 것을 확인할 수 있습니다.</p>
<blockquote>
<p><strong>Data들의 average length</strong></p>
</blockquote>
<ol>
<li>20NG : 221.26</li>
<li>R8 : 65.72</li>
<li>R52 : 69.82</li>
<li>Ohsumed : 135.82</li>
<li>MR : 20.39</li>
</ol>
<p>이는, BERT-GCN이 Bert에서 네트워크를 구축해서 새롭게 학습함을 통해 퍼포먼스를 향상시키는데, 텍스트의 길이가 짧아지면 엣지 갯수 또한 줄어듭니다. 그러면 애초에 엣지가 많지 않으므로 성능이 크게 향상되지는 않는 것 같습니다.</p>
<h3 id="43-the-effect-of-λ">4.3 The Effect of λ</h3>
<p>아래 그래프는 RoBERTa의 λ값에 따른 정확도이며 아래 점선은 RoBERTa Baseline을 의미합니다.</p>
<p><img src="https://images.velog.io/images/aioptlab/post/e61be9aa-98bf-4568-ae50-7d7b4c95c1cb/image.png" alt=""></p>
<p>람다가 0.7일 때 가장 좋은 성능을 보였습니다. BERT를 30%정도, BertGCN을 70%정도 사용하는 것이 가장 적절한 비율인듯합니다.</p>
<h3 id="44-the-effect-of-strategies-in-joint-training">4.4 The Effect of Strategies in Joint Training</h3>
<p>아래 표는 20NG 데이터에서의 결과입니다.</p>
<p><img src="https://images.velog.io/images/aioptlab/post/d3a800c7-09ba-4adb-ba99-9be08944e87f/image.png" alt=""></p>
<p>BertGCN에서 아래 두 가지의 전략을 사용하거나, 사용하지 않고 실험을 진행했습니다.</p>
<ol>
<li>fine-tuning 하기 (=RoBERTaGCN)</li>
<li>학습률을 작게 하기</li>
</ol>
<p>그 결과 두 가지 전략을 둘 다 사용하였을 때 좋은 성능을 보였습니다! (RoBERaGCN+small lr)</p>
<h1 id="5-conclusion-and-future-work">5. Conclusion and Future Work</h1>
<p>본 연구에서는 대규모 사전학습과 transductive 학습을 함께 사용하여 텍스트를 분류하는 BertGCN을 제안하였습니다.
그러나 이 연구의 한계점은 document statistics를 사용하여 그래프를 그리기 때문에 자동으로 edge를 구성할 수 있는 모델이 더 좋은 방법일 수 있습니다. 이것을 향후 연구에 남겨놓는다는 말로 논문은 마무리됩니다! 개인적으로는 이 모델이 정확도 외에 속도 측면에서는 성능이 어떤지 궁금하였습니다..                                                                                                                    </p>
<hr>
<p>본 글을 작성할 때 아래 링크의 유튜브를 참조하였습니다.
<a href="https://www.youtube.com/watch?v=X1u_65N0jXs">https://www.youtube.com/watch?v=X1u_65N0jXs</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[GPT2 - Language Models are Unsupervised Multitask Learners]]></title>
            <link>https://velog.io/@tobigs-nlp/GPT2-Language-Models-are-Unsupervised-Multitask-Learners</link>
            <guid>https://velog.io/@tobigs-nlp/GPT2-Language-Models-are-Unsupervised-Multitask-Learners</guid>
            <pubDate>Mon, 28 Mar 2022 14:01:20 GMT</pubDate>
            <description><![CDATA[<h3 id="0-abstract">0. Abstract</h3>
<p>NLP task들은 task에 특화된 dataset과 지도 학습을 통해 처리했다. 본 논문에서 Language Model은 WebText라는 수백만 dataset로 학습될 때, 특정한 지도 없이 task들을 학습하기 시작했음을 보여준다. 이 Language Model의 capacity는 zero-shot task transfer에 필수적이다. zero-shot task는 model이 학습할 때와는 다른 새로운 task에 model을 적용하는것이라고 이해했다. 논문에서 제시된 가장 큰 model인 GPT-2는 15억 개의 transfomer parameter를 가지고 zero-shot 환경에서 8개중 7개의 SOTA를 달성했다.</p>
<h3 id="1-introduction">1. Introduction</h3>
<p>현재 머신러닝의 학습체계를 구축하는 주된 방법은 task에 맞춰 dataset을 찾고 이를 학습과 평가를 하는것이 일반적인데 이러한 방법은 test할 때 좁은 범위의 과제에서는 효과적이지만 독해와 이미지 분류시스템 등의 범용적인 이해를 필요로하는 task에서는 성능이 좋지 않다. 즉, 일반적이지 않고 좁은 전문가(narrow expert)라고 논문에서 얘기했다. 이전 많은 연구들이 하나의 영역의 dataset과 하나의 task에만 초점을 두어 학습에만 치중했다면 최근, 다양한 영역의 dataset과 task에 대한 GLUE benchmark가 제안되기 시작했다. 본 논문에서는 Multitask learning에 대한 시도를 했고 아직 초기 연구 단계라고 얘기했다. </p>
<p>현재 가장 성능이 높은 Language Model은 사전학습(pre-training)과 세부학습(supervised fine-tuning) 결합한 model이다.</p>
<ul>
<li>학습된 Word-Vecotor를 task-specific model에 학습</li>
<li>contextual representation을 이용</li>
<li>task-specific 모델의 구조는 중요하지 않고 많은 self-attention block</li>
</ul>
<p>위와 같은 방법들은 여전히 지도학습을 필요로 한다고 한다.</p>
<p>본 논문에서는 사전학습과 세부학습을 결합하여 전이학습의 일반적인 방법을 지속했다고 말했다. Language model이 어떤 parameter나 model의 구조 변화 없이도 zero-shot setting에서 downstream task를 할 수 있음을 증명했다. 또한, 이러한 접근법은 language model이 넓은 범위의 과제를 수행할 수 있는 가능성을 보여줬으며 SOTA를 달성했다.</p>
<h3 id="2-approach">2. Approach</h3>
<p>가장 중요한것은 Language Modeling이다. 보통 Language Modeling은 각 token$(s_1, s_2, ..., s_n)$ 으로 구성된 문장$(x_1, x_2, ..., )$에서 비지도 분포를 예측하는 것이다. 이 확률은 조건부 확률의 곱으로  sequential하게 단어를 예측한다.</p>
<p>$$
p(x) = \prod^n_{i=1}p(s_i|s_1,s_2,...,s_{n-1})
$$</p>
<p>Language는 보통 sequence를 가지고 있기 때문에 문장이라는 결합확률분포는 조건부 확률로 분해하여 modeling한다. 하나의 task에 대한 학습은 조건부 확률 $p(output|input)$를 추정하는 확률 framework로 표현할 수 있다. 그러나 general system에서는 다른 task들을 수행할 수 있어야 하기 때문에 입력뿐만 아니라 task의 종류라는 condition도 들어가야 한다. 그러므로 $p(output|input,task)$로 표현되어야 한다. task의 condition을 넣는것은 model의 구조나 MAML(Model Agnostic Meta-Learning) Optimization framework에서 알고리즘 수준에서 구현되기도 한다. (간단하게 MAML을 설명하면, Meta-Learning이란 작은 dataset을 가지고 다른 task에서도 잘 수행할 수 있도록 학습시키는 방식이며 MAML은 Meta-learning 방법 중 하나로 model의 구조에 구애받지 않고 새로운 task에 있어서 적은 경사 하강 step으로도 과적합을 피하며 빠르게 학습을 할 수 있도록 모델 파라미터의 초기화를 최적화하는 알고리즘이다.) 그러나 Language는 task/input/output 출력 모두 명시하는 McCann 방법이 있다.</p>
<ul>
<li>번역 task에서는 (프랑스어로 번역, 영어 text, 프랑스어 text)로 표현</li>
<li>독해 task에서는 (질문에 대답, document, question, answer)로 표현</li>
</ul>
<p>GPT-2는 output에 대한 명시적인 지도 없이도 task를 학습할 수 있다. McCann과의 차이점은,McCann은 muti-task learning으로 실제 여러 개의 dataset을 학습한것이라면 GPT-2는 Language Model을 unsupervised-learning으로 했다는 점이다. 예비 실험에서 large language model은 muti-task learning을 수행할 수 있었지만, 속도가 굉장히 느렸다. 충분한 용량을 가진 language model, GPT-2라면 general system을 가질 수 있고 unsupervised multi-task를 할 수 있다.</p>
<h4 id="21-training-dataset">2.1 Training Dataset</h4>
<p>앞선 연구에서 사용된 dataset은 news-data와 같이 한 domain에서만 가져온 data로 구성되어있었지만, 본 논문에서는 가능한 다양한 domain에서 data를 가져왔다. </p>
<p>다양한 domain의 dataset으로는 Common Crawl이 있는데 많은 부분에서 품질이 떨어지는 data라고 한다. 그래서 본 논문에서는 Web Scrape를 하여 data를 얻었다. Web Scrape 방법은 다음과 같다.</p>
<ul>
<li>사람에 의해 filtering</li>
<li>Reddit에서 3 karma를 받은 글 </li>
<li>4천 5백만개</li>
<li>Dragnet과 Newspaper 내용 추출기 사용</li>
<li>2017년 12월 전 post만 사용</li>
<li>40GB text, 총 800만 text 생성</li>
<li>Wikipedia와 겹치는 내용 제거</li>
</ul>
<h4 id="22-input-representation">2.2 Input Representation</h4>
<p>본 논문에서는 Byte Pair Encoding을 활용했다. BPE(Byte Pair Encoding)는 글자(Byte)와 단어(word)의 중간 level을 사용할 수 있는데 보통 word-level은 자주 등장하는 symbol이라고 생각했고 이는 자주 등장하지 않는 symbol을 처리할 수 있다는것으로 이해했다. Byte Pair Encoding을 간단하게 설명하면 subword를 분리하는 알고리즘이다. (ex. birthplace = birth + place) 그리고 vocabulary를 생성하여 반복을 통해 빈도수가 높은 쌍을 지속적으로 vocabulary에 추가하는 방법이다. 하지만 Byte pair encoding이름과는 다르게 기존의 BPE는 유니코드 수준에서 주로 작동했다. 유니코드 수준의 BPE는 13만 개 이상의 매우 큰 Vocabulary가 필요하지만 Byte 수준의 BPE는 256개의 Vocabulary만을 필요로 한다. 따라서 논문의 저자들은 byte 수준의 BPE를 사용했다. 그러나 byte 수준의 BPE에도 문제점이 존재하는데 {dog., dog?, dog!}와 같이 유의미하지 않은 단어의 version들을 포함한다. 이것은 한정된 Vocabulary의 크기를 낭비할 수 있다. 따라서 본 논문에서는 Byte수준의 BPE를 적용하기 위해 문자 수준 이상의 병합을 막았다.</p>
<h4 id="23-model">2.3 Model</h4>
<h5 id="gpt-2-structure">GPT-2 structure</h5>
<p><img src="https://images.velog.io/images/jody1188/post/f869a19b-5282-4360-ae92-6cedad2744e8/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202022-03-25%20%E1%84%8B%E1%85%A9%E1%84%8C%E1%85%A5%E1%86%AB%2012.48.38.png" alt=""></p>
<p>GPT-2는 BPE(Byte Pair Encoding)를 거친 token을 입력 단위로 사용을 한다. GPT-2는 word embedding과 positional encoding 벡터를 더하여 model에 입력하게 된다.</p>
<p><img src="https://images.velog.io/images/jody1188/post/5591c0d9-65ab-432c-8beb-7a77986bcf12/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202022-03-25%20%E1%84%8B%E1%85%A9%E1%84%8C%E1%85%A5%E1%86%AB%2012.57.36.png" alt=""></p>
<p>이러한 input값이 decoder block의 Masked Self-Attention을 지나 신경망 layer를 거친다. 모든 decoder block을 거친 output은 attention 값을 가지게되고 앞에서 구한 token embedding 행렬과 곱해줘서 다음 단어에 대한 확률을 구한다. 이 확률중에 가장 높은 값이 최종 output이 된다.</p>
<h5 id="gpt-2-vs-gpt-1">GPT-2 vs GPT-1</h5>
<p><img src="https://images.velog.io/images/jody1188/post/edc8da07-52cb-4284-a891-b0343add2c52/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202022-03-25%20%E1%84%8B%E1%85%A9%E1%84%8C%E1%85%A5%E1%86%AB%2012.42.46.png" alt="">
GPT-2의 model 구조는 GPT-1과 비슷하나 몇가지 차이점이 있다. Layer의 정규화가 각 하위 block의 input으로 이동했다. Layer의 정규화 위치를 바꾼 이유는 Xiong et al. “On Layer Normalization in the Transformer Architecture”에서 Layer 정규화를 Attention과 Feedfoward 출력부에 두는것보다 입력부에 두는것이 학습시 Layer별 gradient의 정도가 고른편이라고 했다. 그리고 Layer의 정규화가 마지막 self-attention block이후에 추가됐다. 그리고 Model의 깊이에 따른 residual layer의 누적에 관한 부분의 초기화 방법이 변경되었다. (N이 residual layer의 수일 때, residual layer의 가중치에 $1/\sqrt{N}$을 곱함).
Model의 Layer의 수가 늘어났고 위쪽(깊은) layer일수록 weight의 parameter를 작게 설정하였는데 이는 model내에서 곱셈과 덧셈이 반복되는 구조로 되어있고 layer를 거칠수록 값이 커지면서 exploding과 vanishing이 일어날 수 있는데 weight를 scaling 해주면서 방지하기 위함이다. 
GPT-2는 최대 1024개의 token을 입력받을 수 있으며 전체 vocab의 size의 크기는 50,257개로 embedding size는 모델에 맞게 사용한다. </p>
<h5 id="gpt-2-vs-bert">GPT-2 vs BERT</h5>
<p><img src="https://images.velog.io/images/jody1188/post/f98e51ef-4d9d-44bd-bec1-34e227065041/%EC%8A%A4%ED%81%AC%EB%A6%B0%EC%83%B7%202022-03-22%20%EC%98%A4%ED%9B%84%205.02.59.png" alt=""></p>
<p>GPT-2는 transformer model의 decoder block로 이루어져있고 BERT는 transformer의 encoder block으로 이루어져있다. 각 block의 첫번째 layer를 보면 BERT는 self-attention layer를 사용하고 GPT-2는 Masked self-attention layer를 사용한다. </p>
<p><img src="https://images.velog.io/images/jody1188/post/3d84c327-1323-4ca9-8854-e00e9d7a531d/%EC%8A%A4%ED%81%AC%EB%A6%B0%EC%83%B7%202022-03-22%20%EC%98%A4%ED%9B%84%205.10.36.png" alt=""></p>
<p>전체 문장을 다 고려하는 encoder의 self-attention과는 다르게 decoder의 masked self-attention은 예측하려고하는 token 이후의 token을 제외하고 이전 단어들만 학습을 할 때 참고한다. 
GPT-2는 BERT와는 달리 auto-regressive language model이다. GPT-2는 이전 모든 token들 가지고 다음 token을 예측하는 방식으로 사전 학습 된다. 이러한 model의 장점으로는 다음 단어를 예측하는 능력은 우수하지만 mask 처리된 단어들의 정보를 활용할 수 없다는 단점이 있다. 또한 GPT-2는 domain-specific training을 하지 않고 zero-shot learning을 이용한다. GPT-2의 Extra larger model의 parameter의 수는 15억개, BERT-Large는 3.4억개이므로 BERT-Large에 비해 4.5배 더 큰 model, BERT-Base에 비해서는 13배 정도 더 크다.</p>
<h3 id="3-experiments">3. Experiments</h3>
<p>model의 크기가 각각 다른 4개로 만들어 실험을 진행했다. 각 model의 크기는 다음과 같다.</p>
<p><img src="https://images.velog.io/images/jody1188/post/183f9051-ebc4-4cd7-b80a-8f4387b46bad/%EC%8A%A4%ED%81%AC%EB%A6%B0%EC%83%B7%202022-03-17%20%EC%98%A4%ED%9B%84%205.25.34.png" alt=""></p>
<p>가장 작은 model은 GPT-1와 같고 두 번째는 BERT와 크기가 같다.
(각 model의 learning rate는 WebText의 5%를 떼서 만든 sample을 만들어서 수동 조정, 모든 model은 여전히 data에 대해서 underfitted 되었으며 오래 학습을 시키면 좋은 성능을 얻을 수 있을것이다.)</p>
<h4 id="31-language-modeling">3.1 Language Modeling</h4>
<p>GPT-2는 어떠한 under model benchmark에도 사용할 수 있으며, WebText language model에 따른 log확률을 계산하는 방식으로 했다. &lt; UNK &gt;는 400억 byte중 26번 밖에 등장하지 않았다. 아래 표를 보면 어떠한 fine-tuning 없이 zero-shot 환경에서 8개중 7개의 SOTA를 달성했다.</p>
<p><img src="https://images.velog.io/images/jody1188/post/0b319fe2-233e-4bee-95ee-3b5b4e2365fc/%EC%8A%A4%ED%81%AC%EB%A6%B0%EC%83%B7%202022-03-17%20%EC%98%A4%ED%9B%84%205.33.53.png" alt=""></p>
<h4 id="32-childrens-boot-test">3.2 Children&#39;s Boot Test</h4>
<p>CBT(Children&#39;s Boot Test) dataset은 품사에 따른 성능 비교를 위한 benchmark dataset이다. 모델의 크기에 따라 성능이 급격하게 증가하여 기존의 SOTA model을 능가하였으며 가장 큰 model은 human과 가까운 결과를 보여줬다.</p>
<p><img src="https://images.velog.io/images/jody1188/post/4a596448-5aa1-48c4-b1b8-191c601df663/%EC%8A%A4%ED%81%AC%EB%A6%B0%EC%83%B7%202022-03-17%20%EC%98%A4%ED%9B%84%205.45.08.png" alt=""></p>
<h4 id="33-lambada">3.3 LAMBADA</h4>
<p>Text의 long-range dependencies를 측정할 수 있는 benchmark dataset이다. GPT-2는 perplexity를 99.8에서 8.6으로 개선했으며 accuracy 또한 19%에서 52.66%으로 개선시켰다. 그리고 stop-word filter를 사용했을 때, SOTA보다 4% 높은 63.24%를 달성했다.
<img src="https://images.velog.io/images/jody1188/post/319d505e-4f62-4bb2-a5e6-81be713605b0/%EC%8A%A4%ED%81%AC%EB%A6%B0%EC%83%B7%202022-03-17%20%EC%98%A4%ED%9B%84%205.47.22.png" alt=""></p>
<h4 id="34-winograd-schema-challenge">3.4 Winograd Schema Challenge</h4>
<p>Text의 중의성(ambiguities)을 해석하는 능력을 측정했는데, 7% 증가시켜 70.70%를 달성했다.</p>
<p><img src="https://images.velog.io/images/jody1188/post/52ab4530-987a-4457-bcbf-c692d4d72316/%EC%8A%A4%ED%81%AC%EB%A6%B0%EC%83%B7%202022-03-18%20%EC%98%A4%ED%9B%84%206.44.10.png" alt=""></p>
<h4 id="35-reading-comprehension">3.5 Reading Comprehension</h4>
<p>CoQA(The Conversation Question Answering dataset)는 comprehension 능력과 conversation(대화)능력을 평가한다. GPT-2는 55 F1-score를 달성했고 127K 정도의 질문/대답의 pair를 학습하는것 없이 4개 중에 3개의 다른 모델을 능가했다.  </p>
<h4 id="36-summarization">3.6 Summarization</h4>
<p><img src="https://images.velog.io/images/jody1188/post/647edc4f-97fd-4299-93b5-f268db46485c/%EC%8A%A4%ED%81%AC%EB%A6%B0%EC%83%B7%202022-03-18%20%EC%98%A4%ED%9B%84%206.52.06.png" alt=""></p>
<p>CNN과 Daily Mail dataset을 이용해 평가했다. Task-specific한 결과를 유도하기 위해 문서 이후에 $TL;DR:$ token을 추가하여 summarization을 진행했다. Token 없이 진행한 경우, 성능이 더 하락했다.</p>
<h4 id="37-translation">3.7 Translation</h4>
<p>번역에서는 성능이 좋지 못했다. French - English에서는 성능이 좋았지만 English - French의 경우에서는 word-by-word model보다도 성능이 낮았다. 그럼에도 의미가 있는게 10MB정도의 작은 French Corpus로 활용했기 때문이다.</p>
<h4 id="38-question-answering">3.8 Question Answering</h4>
<p>Answer 문장이 &#39;정확히 일치 하는지&#39; 여부를 지표로 비교했다. GPT-2는 4.1%의 정확도로 기존의 모델들보다 5.3배 높은 정확도를 보여줬다. 작은 모델들은 성능이 1%를 넘지 못하고 성능이 안좋았는데 이는 모델의 크기가 QA에 있어 중요한 요인이라는 것을 알 수 있었다.
<img src="https://images.velog.io/images/jody1188/post/e9896e61-f842-4bd7-b8ff-2a5c8c7022b3/%EC%8A%A4%ED%81%AC%EB%A6%B0%EC%83%B7%202022-03-18%20%EC%98%A4%ED%9B%84%206.58.23.png" alt=""></p>
<h3 id="4-generaliztion-vs-memorization">4. Generaliztion vs Memorization</h3>
<p>Train dataset과 Test dataset의 Overlap(중복)은 모델의 Memorization를 유도하고 Generaliztion 성능을 왜곡하여 나타낼 수 있다.(Metric 측정에 방해되는 요소) 다음 표는 dataset의 Overlap 정도를 보여준다. WebText에 대해서 8-gram을 사용해 Bloom filter를 만들어 테스트 했을 때, 괜찮은 성능이 나왔다. </p>
<p><img src="https://images.velog.io/images/jody1188/post/1ca1648c-c1b6-4c09-9186-6a9028b974c3/%EC%8A%A4%ED%81%AC%EB%A6%B0%EC%83%B7%202022-03-18%20%EC%98%A4%ED%9B%84%207.20.00.png" alt=""></p>
<p>WebText를 사용해도 괜찮다는 결론이 나왔다. 본 논문에서는 Overlap을 제거하기 위해 n-gram overlap 사용을 추천했다. </p>
<p><img src="https://images.velog.io/images/jody1188/post/8b61028d-9e68-4b4f-b5a3-d0bbe3a27d95/%EC%8A%A4%ED%81%AC%EB%A6%B0%EC%83%B7%202022-03-22%20%EC%98%A4%ED%9B%84%204.06.30.png" alt=""></p>
<p>Training and Test sets of WebText의 성능은 model의 size가 커질수록 증가하는것을 볼 수 있다. 이는 여전히 WebText에 underfitting함을 알 수 있다.</p>
<h3 id="5-conclusion">5. Conclusion</h3>
<p>연구의 결과를 봤을 때, 시사하는 바는 있지만 아직 실용적인 측면에서 GPT-2의 zero-shot성능은 사용할 수준은 아니다. 그러나 연구는 비지도 작업 학습이 연구로서 탐구해볼 유망한 영역임을 알려주고 있다. 또한 크고 다양한 dataset에서 훈련될 때, 다양한 domain과 dataset에서 잘 수행됨을 보여줬다. GPT-2의 zero-shot은 8개 중 7개의 task에서 SOTA를 달성했기 때문이다. Model이 zero-shot에서 다양한 task를 잘 수행한다는 것은 큰 model이 특별한 지도 없이 큰 data를 학습하면 다양한 task를 잘 수행할 수 있다는 가능성을 최대할 수 있다는것을 제시한다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Text Summarization with Pretrained Encoders (BERTSUM)]]></title>
            <link>https://velog.io/@tobigs-nlp/Text-Summarization-with-Pretrained-Encoders-BERTSUM</link>
            <guid>https://velog.io/@tobigs-nlp/Text-Summarization-with-Pretrained-Encoders-BERTSUM</guid>
            <pubDate>Mon, 14 Mar 2022 09:44:31 GMT</pubDate>
            <description><![CDATA[<h2 id="0-abstract">0. Abstract</h2>
<p>BERT는 최근 광범위한 NLP task를 발전시킨 Pretrained Language model입니다. 본 논문에서는, BERT를 활용하여 텍스트 요약에 적용할 수 있는 방법을 소개하고 Extractive model(추출모델)과 Abstractive model(생성모델) 모두에 대한 일반적인 framework를 제안합니다. </p>
<hr>
<h2 id="1-introduction">1. Introduction</h2>
<p>ELMo, GPT, BERT 등과 같은 pretrained language model은 sentiment analysis, to question answering, natural language inference(NLI), named entity recognition, textual similarity에 이르는 많은 NLP task에서 SOTA를 달성했습니다. 대부분의 pretrained language model은 다양한 classification task들과 관련된 문장 및 문단 수준의 자연어 이해를 위한 encoder로 채택되었습니다. (e.g. 두 문장이 entailment 관계인지 예측, 4개의 alernative sentences 중 문장의 완성도 결정 등)</p>
<p>본 논문에서는, language model이 text summarization에 미치는 영향을 검증합니다. 이전의 task들과는 달리, ‘Text Summarization’은 개별 단어와 문장의 의미를 이해하는 것을 뛰어넘는 광범위한 자연어 이해 능력이 요구되며, 문서의 의미를 대부분 보존하면서 더 짧게 ‘압축’하는 것을 의미합니다.</p>
<p>본 논문에서는, summarization의 2가지 유형인 Extractive model, Abstractive model을 모두 포함하는 일반적인 framework에서 텍스트 요약에 대한 BERT의 잠재력을 탐구하며, BERT 기반의 새로운 문서 수준의 encoder를 제안합니다.</p>
<ul>
<li>Extractive Model : 문서 수준의 특징을 포착하기 위해 encoder의 맨 위에 inter-sentence transformer layers를 쌓아서 생성</li>
<li>Abstractive Model : 사전 훈련된 BERT encoder를 랜덤하게 초기화된 transformer decoder와 결합하는 encoder-decoder architecture 제안</li>
</ul>
<p>여러 데이터셋에 걸쳐, Extractive, Abstractive setting 모두에서 SOTA를 달성</p>
<ul>
<li>Contribution 3가지
1) summarization task에 대한 document encoding의 중요성 강조
2) Extractive &amp; Abstractive summarization 모두에서 pretrained language model을 효과적으로 사용하는 방법 제시
3) 추후 비슷한 연구들의 baesline이 될 가능성</li>
</ul>
<hr>
<h2 id="2-background">2. Background</h2>
<h3 id="21-pretrained-language-models">2.1 Pretrained Language Models</h3>
<p>Pretrained Language model은 NLP task의 핵심기술로 사용되고 있으며, 대규모 말뭉치를 기반으로 단어의 contextual representation을 학습함으로써 단어 임베딩의 아이디어를 확장시켜 나갑니다. BERT는 3,300M 단어 말뭉치에 대해 MLM(Masekd Language Model)과 NSP(Next Sentence Prediction)를 기반으로 훈련된 language representation model입니다.</p>
<p>BERT의 일반적인 architecture는 <em>그림 1</em>의 왼쪽 부분에 나와있습니다. ‘sent one’, ‘2nd sent’, ‘sent again’ 이라는 문장이 입력으로 주어진 경우, 먼저 입력 문장을 토큰 형태로 변경한 다음 첫 문장의 시작 부분에만 [CLS] 토큰을 추가하고 모든 문장의 마지막 부분에 [SEP] 토큰을 추가합니다. [CLS]의 출력 표현은 전체 시퀀스에서 정보를 집계하는데 사용됩니다. 수정된 텍스트는 $X = [w_1, w_2, ... , w_n]$으로 표현되고, 토큰을 BERT에 입력하기 전에 각 토큰 $w_i$에 총 3가지 종류의 임베딩(token embedding, segmentation embedding, position embedding)이 할당됩니다. 이 3가지의 임베딩은 single input vector $x_i$로 합쳐지며, BERT의 input으로 입력됩니다.</p>
<p><img src="https://images.velog.io/images/tobigs-nlp/post/db0f3619-811a-4446-b7b5-95e9950987d0/image.png" alt=""></p>
<p>위 식에서 $h^0 = x$ 는 input vector, LN은 layer nomalization(정규화 연산), MHAtt는 multi-head attention 연산, $l$은 stacked layer의 깊이를 나타냅니다. BERT는 풍부한 contextual information과 함께 각 토큰에 대한 output vector $t_i$를 생성합니다. </p>
<p><img src="https://images.velog.io/images/tobigs-nlp/post/39396c45-e78a-4193-a584-24d42cb027bc/image.png" alt=""></p>
<hr>
<h3 id="22-extractive-summarization">2.2 Extractive Summarization</h3>
<p>이제 추출요약과 생성요약에 대해 살펴보도록 하겠습니다.</p>
<p>Extractive Summarization은 주어진 텍스트에서 문서의 본질적인 의미를 담고 있는 중요한 문장만 추출해 요약하는 과정을 의미합니다. </p>
<p>neural model은 extractive summarization을 classification 문제로 간주하며, neural encoder는 sentence representation을 만들고, 분류기는 어떤 sentence을 요약으로 선택해야 하는지를 예측하게 됩니다.</p>
<hr>
<h3 id="23-abstractive-summarization">2.3 Abstractive Summarization</h3>
<p>Abstractive Summarization은 주어진 텍스트를 의역해서 텍스트의 본질적인 의미를 담고 있는 새로운 문장을 생성합니다.</p>
<p>neural approach는 abstractive summarization을 sequence-to-sequence 문제로 개념화합니다. </p>
<ul>
<li>encoder : 
mapping  $x = [x_1, ... , x_n]$ (a sequence of tokens) →  $z = [z_1, ... , z_n]$ (continuous representations)</li>
<li>decoder : </li>
<li>토큰별로 $y = [y_1, ... , y_m]$ (target summary) 자동으로 생성</li>
<li>auto-regressive manner → 모델링 조건부 확률 :  $p(y_1, ..., y_m|x_1, ..., x_n)$</li>
</ul>
<hr>
<h2 id="3-fine-tuning-bert-for-summarization">3. Fine-tuning BERT for Summarization</h2>
<p>이제 요약을 위한 BERT의 fine-tuning 과정을 살펴보도록 하겠습니다.</p>
<h3 id="31-summarization-encoder">3.1 Summarization Encoder</h3>
<p>기존의 BERT를 summarization에 바로 적용하기엔 한계가 있는데 그 이유는 다음과 같습니다.</p>
<ul>
<li>첫번째로, BERT는 MLM으로 훈련되기 때문에 출력 벡터는 문장단위가 아닌 토큰 단위로 출력하게 됩니다. 하지만 요약 task에서는 대부분의 모델이 문장 수준의 표현을 다루게 됩니다.</li>
<li>두번째로, BERT는 segment embedding으로 sentence-pair를 입력으로 받게 됩니다. 하지만 요약 task에서 우리는 여러 개의 문장(2문장 이상)들을 인코딩해야 합니다.</li>
</ul>
<p>따라서 입력데이터의 형태를 수정해서 사용하게 됩니다.</p>
<p><img src="https://images.velog.io/images/tobigs-nlp/post/aa5926b5-c140-4f2a-b46c-dc2787c1a39b/image.png" alt=""></p>
<p>제안된 BERTSUM의 architecture는 <em>그림 1</em>의 오른쪽 부분에 나와있습니다. 기존 BERT에서는 첫번째 문장의 시작 부분에만 [CLS] 토큰을 추가했지만 요약 task에서는 BERT 모델에 여러 문장을 입력하고 입력한 모든 문장에 대한 표현이 필요합니다. 따라서 BERTSUM에서는 모든 문장의 시작 부분에 [CLS] 토큰을 추가하고 [CLS] 토큰 위치의 출력 벡터는 해당 문장의 feature를 함축하게 됩니다. 이후 문장을 구별하는 segment embedding을 진행하는데 BERT에서는 주어진 두 문장을 $E_A$ 또는  $E_B$ 형태로 반환합니다. 하지만 요약 task에서는 2개 이상의 문장을 입력하므로 interval segment embedding을 통해 여러 문장을 구별하게 됩니다. 홀수 번째 문장에서 발생한 토큰은 $E_A$에, 짝수 번째 문장에서 발생한 토큰은 $E_B$에 매핑합니다. 그림에서 1,3번째 문장의 토큰들은 $E_A$, 2번째 문장의 토큰들은 $E_B$로 매핑된 것을 확인할 수 있습니다. 이런 식으로 구성함으로써 하위 transformer layer가 인접한 문장을 표현하고, 상위 transformer layer가 여러 문장의 결합된 형태를 표현하는 방식으로 구조적으로 Document Representation을 학습할 수 있다고 합니다. 또한 기존 BERT 모델의 positional embedding의 최대 길이는 512인데, BERTSUM에서는 무작위로 초기화되고, encoder에서 다른 매개변수로 finetuned 되는 더 많은 positional embedding을 추가하여 이 한계를 극복했다고 합니다.</p>
<hr>
<h3 id="32-extractive-summarization">3.2 Extractive Summarization</h3>
<blockquote>
<p>$d = [sent_1, sent_2, ... , sent_m]$ (문장들을 포함하는 document)
$sent_i$  : document의 i번째 문장</p>
</blockquote>
<p>Extractive Summarization은 document의 각 i번째 문장($sent_i$)을 요약문에 포함시킬지에 대한 여부를 $yi ∈$  {0,1}로 라벨링하는 것이라 정의할 수 있습니다. </p>
<p>BERTSUM에서 i번째 [CLS] 토큰의 출력이 $sent_i$를 표현하는 벡터입니다. (→ $t_i$). BERT의 결과(BERT에서 얻은 문장 표현 : T)를 transformer의 encoder layer에 공급합니다. </p>
<p><img src="https://images.velog.io/images/tobigs-nlp/post/d3de9b7e-3975-46bb-82d8-8414742f94a2/image.png" alt=""></p>
<blockquote>
<p>$l$  = encoder
$h$ = encoder로부터 표현된 은닉 상태 (encoder는 hidden state를 출력)
$T$ : BERTSUM에 의해 출력된 문장 벡터
$PosEMB$ : 벡터 T에 각 문장의 위치를 나타내는 positional embedding을 더해주는 함수
$h_0 = PosEMB(T)$ → 입력값 T에 위치 임베딩을 추가한 값
$L$  = 최상위 encoder</p>
</blockquote>
<p><img src="https://images.velog.io/images/tobigs-nlp/post/f3f2d4c0-eef7-4446-ac54-240563f2c07c/image.png" alt=""></p>
<p>마지막 output layer는 sigmoid classifier → 각 문장을 요약에 포함시킬지 여부의 확률을 얻음</p>
<p>$h_i^L$ : transformer의 top layer (L번째 layer)의 $sent_i$(i번째 문장)에 대한 벡터 → L = 2인 transformer가 가장 성능이 우수</p>
<p>⇒ 우리는 이 모델을 BERTSumExt라고 합니다.</p>
<p>loss는 y와 y_pred 간의 binary classification entropy를 이용했고, BERTSUM과 함께 동시에 fine-tuning 되었습니다. 또한 Adam 옵티마이저($b_1$=0.9, $b_2$=0.999)를 사용하고 learning rate는 다음을 따릅니다.</p>
<p><img src="https://images.velog.io/images/tobigs-nlp/post/753cdef5-12a8-44ef-9a1b-1466444d100a/image.png" alt=""></p>
<p><img src="https://images.velog.io/images/tobigs-nlp/post/a30b16ac-2b63-4d87-9cef-d1eaeda53b28/image.png" alt=""></p>
<p>정리하면, BERT로부터 나온 문장의 표현인 $t_i$를 입력받아서 위치 인코딩을 해준 후, 트랜스포머의 인코더에 입력으로 넣어주고, 인코더를 거쳐 최상위 인코더의 은닉 상태인 $h_i^L$ 값을 얻습니다. 그 이후 $h_i^L$ 을 시그모이드 분류기에 입력해 요약에 문장의 포함 여부를 반환하는 프로세스를 거치게 됩니다.</p>
<hr>
<h3 id="33-abstractive-summarization">3.3 Abstractive Summarization</h3>
<p>생성 요약에서는 주어진 텍스트의 내용을 압축해 새로운 형태의 요약 문장을 생성하지만, BERT는 입력한 토큰의 표현만 반환하므로 본 논문에서는 Abstractive Summarization을 수행하기 위해 stardard encoder-decoder framework를 사용합니다. encoder는 pretrained BERTSUM, decoder는 무작위로 초기화된 6-layered transformer로 정의합니다. 따라서 encoder는 의미있는 표현을 생성하고, decoder는 이 표현을 사용해 요약을 생성하는 방법을 학습하게 됩니다. 하지만 여기에는 fine-tuning 중에 encoder와 decoder 사이에 불일치가 발생한다는 문제점이 존재합니다. encoder는 pretrained 되어있기 때문에 과적합될 수 있고, decoder는 무작위로 초기화되어있기 때문에 과소적합이 발생할 수 있습니다. 이를 해결하기 위해 adam optimizer 2개를 사용합니다.($b_1=0.99, b_2=0.999$) 즉, encoder와 decoder에 서로 다른 학습률을 적용하게 됩니다.  encoder가 pretrained 되어 있기 때문에 학습률을 줄이고 좀 더 부드럽게 감쇠하도록 설정합니다. (decoder가 안정화되고 있을 때 encoder가 더 정확한 gradient로 학습될 수 있도록)</p>
<p><img src="https://images.velog.io/images/tobigs-nlp/post/88f511fb-2553-4870-9785-545f835bd514/image.png" alt=""></p>
<p>encoder의 학습률은 (6), decoder의 학습률은 (7)이고, 이때 ~ $lr_e=2e^{-3}$ 이고, $warmup_e = 20,000$, ~$lr_d = 0.1$ 이고, $warmup_d = 10,000$입니다. </p>
<p><img src="https://images.velog.io/images/tobigs-nlp/post/49fb1c20-1fac-46bc-9eb0-e5846df37f59/image.png" alt=""></p>
<p>⇒ 우리는 이 모델을 BERTSumAbs라고 부릅니다.</p>
<p>또한 논문에서는 Two-stage fine-tuning approach를 제안하는데, 먼저 Extractive Summarization task에서 encoder를 먼저 fine-tuning하고, 이후 Abstractive Summarization task에서 fine-tuning을 진행하는 BERTSumExtAbs를 제안합니다. 이 접근 방식은 개념적으로 매우 간단하며, 모델은 architecture의 변화없이 두 task간의 공유되는 정보를 활용할 수 있다는 장점이 있습니다. BERTSumAbs보다 BERTSumExtAbs의 성능이 더 뛰어나다고 합니다.</p>
<hr>
<h2 id="4-experimental-setup">4. Experimental Setup</h2>
<h3 id="41-summarization-datasets">4.1 Summarization Datasets</h3>
<p>본 논문에서는 모델 평가를 위해 3가지의 benchmark dataset을 이용했고, 이 dataset들은 강조부터 매우 간단한 문장 요약까지 다양한 요약 스타일을 나타냅니다.</p>
<ul>
<li>1) the CNN/DailyMail news highlights dataset : somewhat Extractive</li>
</ul>
<p>-뉴스 기사 &amp; 관련 하이라이트 : 기사에 대한 간략한 개요 제공</p>
<p>-입력 document : 512 tokens로 제한</p>
<ul>
<li>2) the New York Times Annotated Corpus(NYT) : somewhat Extractive</li>
</ul>
<p>-추상적인 요약이 있는 110,540개의 기사(article) 수록</p>
<p>-입력 document : 800 tokens로 제한</p>
<ul>
<li>3) XSum : Abstractive</li>
</ul>
<p>-‘What is this articles about?’의 질문에 답하는 226,711개의 뉴스 기사 + 한 문장 요약본</p>
<p>-입력 document : 512 tokens로 제한</p>
<ul>
<li>3가지 dataset에 대한 다양한 통계 외에도, 추상성의 척도로써 gold summaries에서 새로운 bi-gram의 비율을 나타냈습니다. (Table 1)</li>
<li>Extractive model은 Extractive summary를 가진 dataset에서 더 나은 성능을 발휘하고, Abstractive model은 Abstractive summary를 가진 dataset에서 더 나은 성능을 발휘할 것이라 기대</li>
</ul>
<p><img src="https://images.velog.io/images/tobigs-nlp/post/4c242d22-05c8-4c9e-9b7e-fd6846a10643/image.png" alt="1) train, validation, test set의 크기 2) 평균 문서 길이(단어, 문장) 3) 평균 요약 길이(단어, 문장) 4) 새로운 bi-gram 비율(원본 문서에는 나타나지 않지만, gold summary에서는 나타나는)"></p>
<blockquote>
<p>1) train, validation, test set의 크기 2) 평균 문서 길이(단어, 문장) 3) 평균 요약 길이(단어, 문장) 4) 새로운 bi-gram 비율(원본 문서에는 나타나지 않지만, gold summary에서는 나타나는)</p>
</blockquote>
<p>→ DailyMail의 경우 요약문의 길이가 길고, XSUM의 경우 요약문의 길이가 짧음</p>
<p>→ CNN/DailyMail은 요약문에 원본 문서에 등장하지 않은 새로운 단어가 상대적으로 적게 등장하기 때문에 추출 요약문과 유사하다고 표현함</p>
<p>→ XSum은 요약문의 길이가 짧지만 대부분 새로운 단어로만 요약을 작성했기 때문에 굉장히 Abstractive하다고 할 수 있음</p>
<hr>
<h3 id="42-implemetation-details">4.2 Implemetation Details</h3>
<p>Extractive &amp; Abstractive setting 모두에 대해 BERTSUM을 구현하기 위해 ‘bert-base-uncased’ 버전의 BERT를 사용했습니다.</p>
<hr>
<ul>
<li>Extractive Summarization</li>
</ul>
<p>-5000 steps 동안 학습이 되었고, 2 step마다 gradient accumulation을 적용 &amp; 1000 step 마다 model checkpoint 저장</p>
<p>-validation set의 evalution loss를 기반으로 상위 3개의 checkpoint를 선택하고, test set의 평균 결과를 보고</p>
<ul>
<li>ORACLE summary : greedy하게 추출된 추출 요약용 정답 요약문
→ 존재하는 대부분의 데이터셋이 생성 요약을 기준으로 작성되었기 때문에 추출 요약 학습에 사용하기 위해 ROUGE-2 score를 gold summary에 대해 최대화하는 문장을 자체적으로 생성</li>
<li>LEAD-3 : 뉴스기사의 첫 3문장을 추출 요약의 정답 요약문으로 작성한 경우</li>
</ul>
<p>-새로운 문서에 대해 예측할 때, 각 문장에 대한 점수를 순위 매겨서 요약으로 상위 3문장을 선택했습니다.</p>
<p>-중복 문장을 줄이기 위해서 요약문 내의 후보 문장끼리 겹치는 trigram이 존재하면 해당 후보를 스킵하는 방식인 Trigram Blocking 방식을 사용했습니다. (고려중인 문장과 이미 요약의 일부로 선택된 문장 사이의 유사성을 최소화 하고자 하는 것 같음)</p>
<hr>
<ul>
<li>Abstractive Summarization</li>
</ul>
<p>-모든 abstractive model에서 모든 linear layer 앞에 dropout(0.1)을 적용 (Label smoothing with smoothing factor 0.1)</p>
<p>-Transformer Decoder : </p>
<p>   1) hidden units : 768
   2) hidden size for feed-forward layers : 2048</p>
<p>-200,000 steps 마다 학습이 되었고, 5 step마다 gradient accumulation을 적용 &amp; 2500 step 마다 model checkpoint 저장</p>
<p>-validation set의 evalution loss를 기반으로 상위 3개의 checkpoint를 선택하고, test set의 평균 결과를 보고</p>
<p>-End-of-sequence token이 나올 때까지 decoding &amp; Trigram Blocking</p>
<p>-Decoder가 Copy &amp; Coverage Mechanism 사용 X → minimum-requirement model을 만들기 위해서 + 추가적인 하이퍼파마미터 도입해서 튜닝할 수 있음</p>
<hr>
<h2 id="5-results">5. Results</h2>
<h3 id="51-automatic-evaluation">5.1 Automatic Evaluation</h3>
<p>ROUGE를 평가지표로 사용하였으며, informativesness를 평가하기 위해 ROGUE-1(unigram)과 ROUGE-2(bigram overlap), fluency를 평가하기 위해 ROUGE-L을 사용했습니다.</p>
<ul>
<li>1) CNN/DailyMail</li>
</ul>
<p><img src="https://images.velog.io/images/tobigs-nlp/post/9d827b7f-e411-4c5d-8a71-77a032d0bd7f/image.png" alt=""></p>
<ul>
<li>2) NYT</li>
</ul>
<p><img src="https://images.velog.io/images/tobigs-nlp/post/c47a28f8-53ea-4b5f-8a46-ffc848d7ed88/image.png" alt=""></p>
<ul>
<li>3) XSum</li>
</ul>
<p><img src="https://images.velog.io/images/tobigs-nlp/post/b554b631-862a-4a58-93f1-cdd5672c7fef/image.png" alt=""></p>
<hr>
<h3 id="52-model-analysis">5.2 Model Analysis</h3>
<ul>
<li>Learning Rates</li>
</ul>
<p><img src="https://images.velog.io/images/tobigs-nlp/post/80019ef8-cbef-409f-a3a6-54ba108d42de/image.png" alt=""></p>
<p>Table 5는 다양한 encoder, decoder의 learning rate 조합에서의 CNN/DailyMail validation set에 대한 model perplexity를 보여줍니다. ~ $lr_e=2e^{-3}$ ,~$lr_d = 0.1$ 일 때가 최적임을 알 수 있습니다.</p>
<ul>
<li>Position of Extracted Sentences</li>
</ul>
<p><img src="https://images.velog.io/images/tobigs-nlp/post/428b822e-800e-422a-836a-511dbcb81fcf/image.png" alt=""></p>
<p>CNN/DailyMail에 대해서 추출 요약 모델이 선택한 요약 문장의 원본 문서에서의 위치를 조사했습니다. ORACLE summary는 비교적 고르게 분포되었습니다. 랜덤하게 encoder를 설정한 TransformerEXT 모델은 대부분 원본 문서에서 앞에 있는 문장을 요약 문장으로 선택합니다. 제안한 추출요약 모델인 BERTSumExt는 ORACLE summary와 비슷하게 비교적 고른 선택을 하는 것을 알 수 있었습니다.</p>
<ul>
<li>Novel N-grams</li>
</ul>
<p><img src="https://images.velog.io/images/tobigs-nlp/post/239a3dec-29c3-4b68-b9e7-f851939ed3fb/image.png" alt=""></p>
<p>CNN/DailyMail에서 생성 요약 모델의 새로운 n-gram 비율은 reference summary에 비해서 훨씬 낮지만, XSum에서는 이 차이가 작게 나타납니다. 또한 BERTSumExtAbs는 BERTSumAbs보다 새로운 n-gram이 적게 생성되는데 BERTSumExtAbs는 처음에 추출 모델로 학습되기 때문에 원본 문서에서 문장을 선택할 때 조금 더 치우칠 수 밖에 없습니다.</p>
<hr>
<h3 id="53-human-evaluation">5.3 Human Evaluation</h3>
<p>Human Evalution의 경우 사람이 모델의 성능을 평가한 것으로 Amazon Mechanical Turk를 이용해 아래와 같은 방식으로 Human Evaluation을 수행합니다.</p>
<ul>
<li>Question : 문제를 내는 실험자가 정답 요약문(gold summary)만을 보고 질문을 만든 뒤, 해당 질문과 모델이 추출, 생성한 요약문만 평가자(피험자)에게 줬을 때 얼마나 대답을 할 수 있는지를 평가(원본 문서와 정답 요약문은 주지 않음)</li>
<li>RANK : 각 모델들이 생성한 요약문들과 정답 요약문(gold summary)을 주고 informativesness(정보성), fluency(유창성), succinctness(간결함)에 대해 순위를 매김</li>
</ul>
<p><img src="https://images.velog.io/images/tobigs-nlp/post/c5524bc0-3ea3-4f6f-acff-b6be0615b372/image.png" alt=""></p>
<p><img src="https://images.velog.io/images/tobigs-nlp/post/b911e73a-f994-4251-8e41-1cc14e19f1bd/image.png" alt=""></p>
<p>→ 모든 경우에서 BERTSUM이 타 모델들에 비해서 높은 성능을 보이는 것을 확인할 수 있습니다.</p>
<hr>
<h2 id="6-conclusion">6. Conclusion</h2>
<ul>
<li>Pretrained BERT는 텍스트 요약에 유용하게 활용될 수 있음을 보여줌</li>
<li>새로운 문서 수준의 encoder를 도입</li>
<li>Abstractive &amp; Extractive Summarization을 위한 일반적인 framework를 제안함</li>
<li>3가지 데이터셋에 대한 실험결과는 BERTSUM 모델이 automatic &amp; human-based 평가 지표에도 SOTA를 달성한다는 것을 보여줌</li>
</ul>
<hr>
<h2 id="7-references">7. References</h2>
<p><a href="https://www.youtube.com/watch?v=PQk9kr9dGu0">https://www.youtube.com/watch?v=PQk9kr9dGu0</a></p>
<p><a href="https://kubig-2021-2.tistory.com/53">https://kubig-2021-2.tistory.com/53</a></p>
<p>구글 BERT의 정석 → ch6. 텍스트 요약을 위한 BERTSUM 탐색</p>
]]></description>
        </item>
    </channel>
</rss>