<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>king_jangsoo.log</title>
        <link>https://velog.io/</link>
        <description></description>
        <lastBuildDate>Wed, 09 Mar 2022 10:13:03 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>king_jangsoo.log</title>
            <url>https://images.velog.io/images/king_jangsoo/profile/2801c750-afc6-437c-9af5-1f433a674eef/18377883.png</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. king_jangsoo.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/king_jangsoo" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[Attention Is All You Need]]></title>
            <link>https://velog.io/@king_jangsoo/Attention-Is-All-You-Need</link>
            <guid>https://velog.io/@king_jangsoo/Attention-Is-All-You-Need</guid>
            <pubDate>Wed, 09 Mar 2022 10:13:03 GMT</pubDate>
            <description><![CDATA[<h2 id="transformer-이전의-흐름">Transformer 이전의 흐름</h2>
<h3 id="rnn"><strong>RNN</strong></h3>
<p>RNN은 강력한 기억력을 자랑하는 아키텍쳐로 80년대 중반에 처음 선을 보였다.
각 <code>input</code>을 RNN encoder에 넣으면, 그 가공된 정보가 <code>hidden state</code>에 저장되어 전체 문장을 설명하는 <code>sentence embedding</code>을 만들어내는 구조를 가지고 있다. </p>
<p><code>input</code> = 여우는 | <strong>그릇</strong> | 입구가 | 좁아서 | <strong>그것을</strong> | 결국 | 두루미에게 | 환불했다
<code>encoder</code> : 여우는 | 그릇 | 입구가 | 좁아서 | 그것(?)을</p>
<p>초기의 RNN은 컨베이어 벨트와 같았기 때문에, 순방향으로 단어를 처리하다보면 &#39;그것을&#39;에 도달했을 때 encoder는 그것이 무엇인지 이해할 수 있는 맥락 정보(&#39;환불했다&#39;)를 포함하지 못한 채 <code>hidden state</code>를 도출했다. 즉, &#39;그것&#39;을 decoding 했을 때의 품질을 보장할 수 없었던 것이다.</p>
<ul>
<li><strong>bi-directional RNN</strong>
이러한 문제를 해결하기 위해, 순방향뿐 아니라 역방향으로도 encoding을 진행하는 RNN 기법이 제안된다.</li>
</ul>
<p><code>forward encoder</code> : 여우는 | 그릇 | 입구가 | 좁아서 | 그것(?)을
<code>backword encoder</code> : 환불했다 | 두루미에게 | 결국 | 그것(?)을</p>
<p>하지만 여전히 문장의 형태에 따라, 전체를 조망하지 않으면 &#39;그것&#39;이 무엇인지 <code>hidden state</code>에 포함할 수 없는 구조적인 문제가 발생했다. 
문장이 길어질수록 기울기 소실로 인해 먼저 등장한 단어들은 잊혀지게 되는 <code>Long term dependency</code> 문제도 발생하였다. </p>
<p>이후 LSTM, Seq2Seq와 같은 발전된 형태의 모델이 등장했지만 고정된 크기의 context vector를 사용하기 때문에 병목 현상에 따른 성능적인 한계도 드러나게 되었다.</p>
<h3 id="attention"><strong>Attention</strong></h3>
<p>따라서 필요한 부분을 조명하는, Attention mechanism이 2015년 등장하며 큰 각광을 받게 된다.
Attention은 타겟을 생성할 때 원본의 여러 부분을 한꺼번에 참고하기 위해 만들어진 구조이다. 그렇다면 &#39;그것&#39;을 번역할 때 &#39;그릇&#39;, &#39;환불했다&#39;와 같은 단어를 참고하면 되겠다. 또한, &#39;결국&#39; 같이 그것을 판별하는 데에 관련성이 적은 단어는 적게 참고할 수 있지 않을까?</p>
<h2 id="transformer의-제안">Transformer의 제안</h2>
<h3 id="attention-mechanism으로의-전면-전환"><strong>Attention mechanism으로의 전면 전환</strong></h3>
<p>Tranksformer의 연구진들은 하나의 질문을 마주쳤다. <em>&#39;Attension으로 타겟 전후가 모두 고려 가능한데, RNN를 사용해야할까?&#39;</em> 이에 따라 입력 문장 전체에서 정보를 추출하는 방향으로 새로운 아키텍쳐를 개발하게 되었다.</p>
<h3 id="self-attention">Self-Attention</h3>
<p>다시 위에서 사용한 예제를 가져와보자.</p>
<p><code>input</code> = 여우는 | <strong>그릇</strong> | 입구가 | 좁아서 | <strong>그것을</strong> | 결국 | 두루미에게 | 환불했다</p>
<p>Transformer의 Self-Attention은 타겟을 encoding하기 위해 입력 문장의 다른 단어들을 참조하는 기법이다. 아래 그림처럼 특정 단어와 연관되는 Attention을 시각화해서 확인할 수 있는 툴도 존재한다.
<img src="https://images.velog.io/images/king_jangsoo/post/c81bf93b-09c3-441c-ab73-a393ef32a176/figure5.png" alt="figure1"></p>
<blockquote>
<p><strong>Self-Attention 계산</strong></p>
</blockquote>
<ol>
<li>query, key, value 벡터를 생성한다. </li>
<li>3개 벡터 간 연산과정 거친 뒤 softmax를 적용한다. 이때의 softmax 점수는 현재  위치의 endocing에 각 단어들의 표현(피쳐)이 얼마나 들어가는 지를 의미한다. </li>
<li>각 단어 value의 벡터에 softmax 점수를 곱해 weighted value를 생성한다. 이 과정은 관련 없는 단어를 삭제하기 위함이다.</li>
<li>weighted value 벡터를 모두 합한 것이 Self-Attention layer의 출력값이 된다.</li>
</ol>
<h3 id="multi-headed-attention">Multi-headed Attention</h3>
<p>위에서 설명한 Self-Attention이 자기 자신의 위치를 잘 설명해준다면, Multi-headed Attention은 Attention layer가 표현할 수 있는 공간을 확장시켜준다. encoder를 쌓아올려 단어의 조합 가지수를 늘려주는 것이다. 즉, input의 &#39;그것&#39;이 무엇인지를 알아내는 데에 매우 유용한 기법이 된다.  </p>
<p><img src="https://images.velog.io/images/king_jangsoo/post/4990d741-2f66-451f-8ada-f5715e881d27/%E3%84%B4%E3%85%87%E3%84%B4.png" alt="figure2"></p>
<h3 id="parallelization">Parallelization</h3>
<p>Transformer가 가져온 혁신에 Parallelization를 빼놓을 수 없다.
기존의 RNN은 특유의 순차성으로 인해 병목 현상이 발생했다는 점을 기억하자. 이와 달리 Transformer는 어떤 위치에서도 모든 문장을 볼 수 있기 때문에 분산 컴퓨팅이 가능하다는 이점이 있다.</p>
<p><img src="https://images.velog.io/images/king_jangsoo/post/0652cc17-c335-468b-91cb-1240f4dc4197/figure7.gif" alt="fugure3">
<img src="https://images.velog.io/images/king_jangsoo/post/70d8202b-4f62-4472-90c8-3696dd17520b/transformer_decoding_2.gif" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Extractive Text Summarization on CNN / Daily Mail]]></title>
            <link>https://velog.io/@king_jangsoo/Extractive-Text-Summarization-on-CNN-Daily-Mail</link>
            <guid>https://velog.io/@king_jangsoo/Extractive-Text-Summarization-on-CNN-Daily-Mail</guid>
            <pubDate>Wed, 23 Feb 2022 09:18:31 GMT</pubDate>
            <description><![CDATA[<p><em>※ 지난 게시글(<a href="https://velog.io/@king_jangsoo/Abstractive-Text-Summarization-on-AESLC">바로가기</a>)에서 이미 추출적 요약을 간단히 다뤘기 때문에, 본 포스팅에는 중복된 내용이 등장할 수 있습니다.</em></p>
<h1 id="extractive-text-summarization">Extractive Text Summarization</h1>
<p><img src="https://images.velog.io/images/king_jangsoo/post/471b24ad-37b0-4f20-bcfe-69b493b3d441/dengqingxiong_0-1585676096532.jpeg" alt="image"></p>
<p>추출적 요약(Extractive Text Summarization)은 말그대로 <strong>원문에 있는 중요한 핵심 문장 또는 구를 뽑아 요약</strong> 결과를 내는 방식을 말합니다. 원문에 하이라이트를 친 값을 합친 결과를 상상해 볼 수도 있습니다. </p>
<h3 id="추출적-요약이-해결하고자-하는-문제는-무엇인가">추출적 요약이 해결하고자 하는 문제는 무엇인가?</h3>
<p>추상적 요약이 여러 예술 도메인에서 활용될 수 있을 거라 기대되듯이, 추출적 요약이 요구되는 분야도 존재합니다.
만약 사실 전달이 중요한 민감한 주제를 다뤄야한다면, 추상적 요약의 결과물이 원문의 의도와 달라질 경우 공급자의 주관으로 오독되는 리스크를 지게될 수도 있습니다. (&#39;올림픽 요약 기사에 왜 한국 선수는 안보이지?&#39;) 따라서 원문을 출처삼아 소재를 분명히 밝힐 수 있는 추출적 요약은 그만의 특장점을 갖고 있습니다.</p>
<hr>
<h1 id="cnn--daily-mail">CNN / Daily Mail</h1>
<p>오늘 소개할 CNN / Daily Mail 데이터셋은 특히나 다음의 이유에 근거해 추출적 요약에 잘 맞는 데이터라 할 수 있습니다.</p>
<ol>
<li>훈련된 글쓰기 전문가(기자)에 의해 작성</li>
<li>기사 본문은 문법적인 오류나 내용 중복이 거의 없음</li>
<li>기사 본문은 문서 형식이 갖춰짐</li>
<li>기사 본문은 사실에 기반한 정보로 구성됨</li>
</ol>
<h3 id="cnn--daily-mail의-구성">CNN / Daily Mail의 구성</h3>
<p>총 <code>train set</code> 286,817개, <code>validate set</code> 13,368개, <code>test set</code> 11,487개로 이루어져있습니다. </p>
<p>그 중 train set의 소스 문서는 평균 29.74개의 문장과 766개의 단어로 구성되었으며, 요약은 53개의 단어와 3.72개의 문장으로 구성됩니다.</p>
<p>추가로, 소스 문서는 기사의 제목이 아닌 본문만을 제공합니다. 작업자가 중요도를 산정해 본문을 추상화한 아웃풋인 &#39;기사 제목&#39; 데이터를 함께 학습시키면 더욱 유의미한 결과가 나올지 문득 궁금해집니다.</p>
<p><em>더 알아보기 : <a href="https://github.com/abisee/cnn-dailymail">https://github.com/abisee/cnn-dailymail</a></em></p>
<h1 id="sota-models">SoTA Models</h1>
<h3 id="matchsum">MatchSum</h3>
<p><img src="https://images.velog.io/images/king_jangsoo/post/a291d23d-4463-4b3a-a193-5dcf04af0ea6/%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-02-23%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%206.04.36.png" alt="img"></p>
<p>MatchSum은 기존의 문장 간의 관계를 도출하는 방식에서 벗어나, 의미론적 텍스트 매칭 방법론으로 문서를 요약하는 프레임워크입니다. 
MatchSum은 두 가지의 요약을 구축하는데, 첫 번째 Candidate Summary는 원문을 요약한 값이고 두 번째 Gold Summary는 이를 수정한 값입니다. Bert를 기반으로 원문과 두 요약값을 의미장에 위치시켜, 원문이 Gold Summary에 일치하도록 조정하는 것이 이같은 절차의 목적입니다.</p>
<p><em>더 알아보기 : <a href="https://arxiv.org/pdf/2004.08795v1.pdf">https://arxiv.org/pdf/2004.08795v1.pdf</a></em></p>
<h3 id="neroberta">NeRoBERTa</h3>
<p><img src="https://images.velog.io/images/king_jangsoo/post/4e878416-80ce-4f2a-a20c-af301a6e3314/%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-02-23%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%206.26.19.png" alt="img2"></p>
<p>NeRoBERTa는 Nested Tree 기반 추출 요약 모델입니다.
문장 표현 사이의 관계를 포착하기 위해 Nested Tree(통사 트리+담화 트리)를 사용하여, 문장 내부와 문장 간 정보를 모두 고려할 수 있다는 특징을 갖고 있습니다. </p>
<p><em>더 알아보기 : <a href="https://aclanthology.org/2021.emnlp-main.330.pdf">https://aclanthology.org/2021.emnlp-main.330.pdf</a></em></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Dialogue Generation on Persona-Chat]]></title>
            <link>https://velog.io/@king_jangsoo/Dialogue-Generation-on-Persona-Chat</link>
            <guid>https://velog.io/@king_jangsoo/Dialogue-Generation-on-Persona-Chat</guid>
            <pubDate>Wed, 23 Feb 2022 07:40:55 GMT</pubDate>
            <description><![CDATA[<p><img src="https://images.velog.io/images/king_jangsoo/post/26bc5552-9e7d-4ee6-a569-d2c2201ba2a9/%E3%84%B4%E3%84%B4.jpg" alt="thumbnail"></p>
<h1 id="dialogue-generation">Dialogue Generation</h1>
<p>오늘 소개할 <strong>대화 생성(Dialogue Generation)</strong>은 우리가 AI에게 기대하는 많은 것들을 담고 있습니다.</p>
<p>먼저 대화 생성을 이야기하며 빼놓을 수 없는 &#39;챗봇&#39;은 이미 우리의 일상에서 익숙하게 볼 수 있는 풍경이자 대화 시스템(dialogue system)의 주요 어플리케이션입니다. 이러한 대화 시스템은 크게 다음의 두 분류로 나누어볼 수 있는데요.</p>
<ul>
<li><code>문제 해결형 대화</code> <em>Task-oriented Dialogue</em>
: 사용자가 제시한 문제를 해결할 수 있는 응답을 생성합니다. 가상 비서인 Siri, Alexa에게 특정 태스크를 맡길 경우를 떠올리시면 됩니다. </li>
<li><code>자유 대화</code> <em>Open domain Dialogue</em>
: 사용자와 잡담을 이어갈 수 있도록 하는 것이 목표입니다. 어떤 주제로 말을 걸어도 적절한 응답을 생성해야합니다. 각 챗봇 마다 응답 전략이 회피/정보 제시 등 상이하게 나타납니다.</li>
</ul>
<p>이러한 대화 시스템을 만들기 위해서는 <strong>답변을 기계가 직접 생성</strong>하거나, <strong>DB에서 답변을 고르도록</strong> 해야할 것입니다.
이중 오늘의 주제인 &#39;대화 생성 모델&#39;은 전자에 해당되겠지요. 대화 생성 모델이 고도화되면서 Jiwei Li 박사는 &lt;<a href="https://jiho-ml.com/weekly-nlp-31/">Teaching Machines to Converse</a>&gt;에서 다음과 같은 연구 질문을 던지게 됩니다.</p>
<p><em>&#39;대화 생성 모델이...&#39;</em></p>
<ul>
<li>좀 더 다양한 답변을 생성할 수 있을까?</li>
<li><strong>좀 더 일관성 있는 캐릭터를 가진 챗봇을 학습시킬 수 있을까? (✓)</strong></li>
<li>좀 더 긴 대화를 이끌 수 있을까?</li>
<li>모르는 것을 물어보는 챗봇을 만들 수 있을까?</li>
<li>인간이 직접 가르치는 챗봇을 만들 수 있을까?</li>
</ul>
<h3 id="캐릭터의-일관성을-지켜라">캐릭터의 일관성을 지켜라</h3>
<p>생성 모델은 <strong>수많은 사람들의 뒤엉킨 발화를 모두 학습합니다</strong>. 그렇기에 기계가 일관성 있는 문장을 생성하지 못하는 문제가 자연히 발생하게 됩니다. 
일례로 아래의 대화에서 기계는 LA에 살았다가 마드리드, 잉글랜드로 말끝마다 한시 바삐 거주지를 옮기는 것처럼 보입니다. 캐릭터의 일관성을 지키지 못하면 사용자가 갖는 대화형 인공지능에 대한 기대 격차는 더욱 벌어지게 됩니다.</p>
<p><img src="https://images.velog.io/images/king_jangsoo/post/8112a914-9de7-499a-a02d-abadc0b8aa2a/%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-02-23%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%202.35.06.png" alt="image"></p>
<h3 id="페르소나를-가진-인공지능">페르소나를 가진 인공지능</h3>
<p>영화 &#39;Her&#39;을 기억하시나요? 사만다는 놀랍도록 인간을 이해하는 대화형 인공지능 시스템입니다. 주인공은 사만다에게 자신의 일상다반사를 나누며 깊은 유대를 형성해갑니다. 인간처럼 말한다고 해서 대화가 지속되는 것은 아닙니다.(나와 잘 안맞는 사람을 한 명 떠올려보세요) 이들의 자연스러운 대화는 <strong>서로의 페르소나에 대한 깊은 이해가 전제된 결과</strong>입니다. </p>
<p><img src="https://images.velog.io/images/king_jangsoo/post/ae742d15-185e-4363-a5b9-86f9e1b83d6b/%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-02-23%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%202.59.04.png" alt="image2"></p>
<p>그림의 대화에서 두 명의 대담자는 &quot;Seen any good movies lately?&quot;라는 개인적인 주제를 제기하거나 &quot;I don’t watch movies more of a writer.&quot;처럼 자신의 모습을 드러내기도 합니다. 이렇게 페르소나를 통해 상호 간의 이해를 구축한다면 대화의 흐름이 일관성 있게 유지될 수 있습니다.</p>
<p>썸네일의 구글 LaMDA(Language Model for Dialogue Applications) 또한 자신을 &#39;명왕성&#39;이라 롤플레잉하며 질의에 대한 답변으로 일정한 페르소나를 유지하고 있습니다. </p>
<hr>
<h1 id="persona-chat">PERSONA-CHAT</h1>
<p><strong>Persona-Chat</strong> 데이터셋은 크라우드소싱 마켓인 Amazon Mechanical Turk를 통해 수집되었습니다.</p>
<p>크라우드소싱을 통해 만든 (i) <strong>페르소나</strong>와 (ii) 이를 <strong>수정한 페르소나</strong>를 통해 (iii) 마찬가지로  작업자들이 <strong>인공 페르소나로 대화</strong>한 데이터의 집합이라 할 수 있습니다.</p>
<p><img src="https://images.velog.io/images/king_jangsoo/post/36e29b6c-485a-41f9-b388-257fc4c2f20e/%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-02-23%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%204.11.58.png" alt="image3"></p>
<h3 id="persona-chat의-구성">PERSONA-CHAT의 구성</h3>
<ul>
<li><p><strong>페르소나</strong>
훈련용 페르소나 955개, 검증용 100개, 테스트용 100개로 구성되어 있습니다.
이 데이터셋에서 페르소나는 일종의 몇 가지 프로필 문장으로 표현됩니다. 
<code>&quot;나는 스키를 좋아합니다&quot;, &quot;나는 예술가입니다&quot;, &quot;나는 매일 아침 식사로 정어리를 먹습니다&quot;,..</code></p>
</li>
<li><p><strong>페르소나 대화</strong>
총 10,907 건의 대화를 통해 162,064개의 발언 데이터셋이 생성되었습니다. 
그 중 15,602개의 발언(1000개의 대화)이 검증을 위해, 15,024개의 발언(968개의 대화)이 테스트용으로 할당되었습니다.</p>
</li>
</ul>
<p><em>더 알아보기 : <a href="https://arxiv.org/abs/1801.07243">https://arxiv.org/abs/1801.07243</a></em></p>
<h1 id="p2-bot">P^2 Bot</h1>
<p><img src="https://images.velog.io/images/king_jangsoo/post/0e62398f-8c7b-4d7a-a1b1-c2af5800f615/EVhmv_0XQAAqJYK.jpeg" alt="image4"></p>
<p><strong>Persona Perception Bot (P2 BOT)</strong> Transmitter와 Receiver를 이용해 상호 페르소나 인식을 명시화하여 개인화된 대화형 인공지능의 성능을 향상시키는 프레임워크입니다.</p>
<p>그림의 화자A를 기준으로 P2 BOT의 간략한 절차를 살펴보겠습니다.</p>
<ul>
<li>화자A는 페르소나 W^A를 가지고 있습니다.
  이때, 화자A의 프로필 문장 집합은 {w_1^A, w_2^A, .., w_n^A}입니다.</li>
<li>화자A와 화자B가 n번의 대화를 나눕니다.</li>
<li>n번의 대화가 종료되면 Transmitter가 생성됩니다.</li>
<li>이후 대화가 반복되면서 서로에 대한 인상이 구축됩니다. 
  &quot;I don&#39;t believe so. I don’t watch movies more of a writer.&quot; -&gt; A is a writer...
  &quot;What do you write? Any diet books? I am not very healthy.&quot; -&gt; B is not very healthy...</li>
<li>Receiver는 A에 대한 B의 인상이 A의 페르소나와 같은지 확인합니다. (그 반대의 경우도 마찬가지입니다)</li>
</ul>
<p><em>더 알아보기 : <a href="https://paperswithcode.com/paper/you-impress-me-dialogue-generation-via-mutual">https://paperswithcode.com/paper/you-impress-me-dialogue-generation-via-mutual</a></em></p>
<h3 id="keywords">Keywords</h3>
<p><code>Open domain Dialogue</code>, <code>Transmitter</code>, <code>Receiver</code> </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Abstractive Text Summarization on AESLC]]></title>
            <link>https://velog.io/@king_jangsoo/Abstractive-Text-Summarization-on-AESLC</link>
            <guid>https://velog.io/@king_jangsoo/Abstractive-Text-Summarization-on-AESLC</guid>
            <pubDate>Tue, 22 Feb 2022 08:26:43 GMT</pubDate>
            <description><![CDATA[<p><img src="https://images.velog.io/images/king_jangsoo/post/923befb5-4327-4d15-ab56-0ead12bf08e7/2509.1582303438.png" alt="image"></p>
<h1 id="텍스트-요약의-갈래">텍스트 요약의 갈래</h1>
<p>오늘 소개할 <strong>추상적 요약(Abstractive Summarization)</strong> 은 추출적 요약과 더불어 텍스트 요약의 주요한 주제입니다.
우선 이에 앞서, 이들의 차이점을 비교하기 위해 추출적 요약(extractive summarization)을 먼저 살펴보고자 합니다.</p>
<h3 id="추출적-요약이란">&#39;추출적 요약&#39;이란</h3>
<p>추출적 요약은 <strong>원문에 있는 중요한 핵심 문장 또는 구를 뽑아 요약</strong> 결과를 내는 방식을 말합니다. 원문에 하이라이트를 친 값을 합친 결과라 볼 수도 있겠네요. 추출적 요약을 위한 알고리즘으로는 주로 기계 학습의 그래프 기반의 비지도학습인 텍스트 랭크(TextRank)를 사용합니다.</p>
<p>백문이 불여일견, 이러한 텍스트 랭크을 토대로 하는 <a href="https://summariz3.herokuapp.com/">&#39;세줄 요약기&#39;</a>를 이용해 쿨의 아로하를 요약해볼까요?</p>
<p><img src="https://images.velog.io/images/king_jangsoo/post/7a79cee9-895a-4a27-9ad6-041219dcaae7/%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-02-22%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%203.40.34.png" alt="Aroha"></p>
<p>재밌게도 노래의 클라이막스 부분이 요약되었네요. 꽤나 노래의 주제를 잘 살려준 요약으로 보입니다.</p>
<h3 id="추상적-요약이란">&#39;추상적 요약&#39;이란</h3>
<p>그렇다면 추상적 요약은 추출적 요약과 어떤 점이 다를까요?
추상적 요약은 <strong>원문에 없는 표현이라도 새로운 표현을 생성해 원문을 요약</strong>하는 방식입니다. 말그대로 인간의 영역이라 생각되는 추상적 언어 이해를 다루고 있습니다. 수능 문제집 한켠의 작품 해설 또는 줄거리란을 언젠간 기계가 작성하게 될지도 모르겠습니다. <em>이 포스팅도 기계가 해주면 어떨까...</em></p>
<p>문장 생성을 위해서 인공신경망이 이용되는데 RNN, Transformer encoder-decoder 모델이 주가 됩니다. 인공신경망으로 추상적 요약을 훈련하기 위해서는 레이블 데이터로 요약문이 필요합니다. 추상적 요약의 여러 SoTA 모델을 참고하던 중, Fine Tuning 데이터의 요구수가 적어도 좋은 성능을 내는 것으로 보이는 PEGASUS에 관심을 갖게 되었습니다.</p>
<hr>
<h1 id="aeslc">AESLC</h1>
<p>AESLC(Annotated Enron Subject Line Corpus)은 이메일 본문을 참고해 효과적인 이메일 제목을 생성하는 연구과정을 통해 만들어진 데이터셋입니다. </p>
<p>도메인은 비즈니스/개인이며 총 18,302개 레코드(train-14,436/val-1,960/test-1,906)로 이루어져어 있습니다. 원문은 평균 75개의 단어로, 요약문은 평균 4개 단어로 구성되어있습니다.</p>
<p><em>더 알아보기 : <a href="https://paperswithcode.com/dataset/aeslc">https://paperswithcode.com/dataset/aeslc</a></em></p>
<h1 id="pegasus">PEGASUS</h1>
<p><img src="https://images.velog.io/images/king_jangsoo/post/b68fbd2c-a74a-4e29-be68-fe77877d6f2d/%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-02-22%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%205.06.28.png" alt="figure"></p>
<p>PEGASUS의 기본 아키텍쳐는 Transformer 기반의 encoder-decoder 모델입니다. 
그림과 같이, pre-training 단계에서는 입력된 3개의 문장 중 한 문장은 [MASK1](Gap Sentences Generation, GSG)으로 마스킹해 타겟 생성 텍스트로 사용합니다. 입력에 남은 다른 두 문장은 [MASK2](Masked Language Model, MLM)에 의해 일부 토큰이 무작위로 마스킹됩니다. 이후 transformer를 거쳐 마스킹된 문장들이 합쳐서 결과값으로 나오게 됩니다.</p>
<h3 id="keywords">Keywords</h3>
<p><code>GSG</code>
<code>MLM</code> </p>
<p><em>더 알아보기 : <a href="https://paperswithcode.com/paper/pegasus-pre-training-with-extracted-gap">https://paperswithcode.com/paper/pegasus-pre-training-with-extracted-gap</a></em></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[STS(Semantic Textual Similarity) on KorSTS]]></title>
            <link>https://velog.io/@king_jangsoo/STSSemantic-Textual-Similarity-on-KorSTS</link>
            <guid>https://velog.io/@king_jangsoo/STSSemantic-Textual-Similarity-on-KorSTS</guid>
            <pubDate>Tue, 22 Feb 2022 05:50:18 GMT</pubDate>
            <description><![CDATA[<p><img src="https://images.velog.io/images/king_jangsoo/post/dc14180a-bc71-46d9-9f17-bd96561acb0c/image4.png" alt="thumnails"></p>
<h1 id="sts">STS</h1>
<p><strong>STS</strong>(Semantic Textual Similarity)는 <strong>텍스트의 의미적 유사도</strong>를 측정하는 문제입니다. 
모델이 의미상 두 문장의 친밀도를 얼마나 잘 잡아내는지 또는 문장의 의미적 표현을 얼마나 잘 구현하는지 평가하는데 일반적으로 사용됩니다.
예를 들어, 음식점을 돌아다니며 고객 서비스를 제공하는 자율주행 로봇에게 다음의 질문을 하려합니다. </p>
<p><em>예:</em> <code>결제는 어디에서 하나요?</code> ≒ <code>계산하는 곳이 어디인지 알려주세요.</code> </p>
<p>과연 로봇은 두 질문에 같은 답변을 준비할 수 있을까요? (그래야 할 텐데요..) 위의 두 문장은 의미적으로 같지만 통사적으로는 제법 달라 보입니다. 하지만 사람마다 개성이 다르듯 한 질문에 대한 표현역은 천차만별일 겁니다. </p>
<p>STS는 <strong>다양한 어플리케이션에 활용</strong>될 수 있습니다. 일례로 지난 리뷰에서 소개한 Quora는 대표적인 지식 공유 서비스입니다. 만일, 실생활에서 생기는 여러 질문들을 Quora에 검색해본다고 합시다. 사실상 의미적으로 중복된 질의임을 기계가 인식할 수 있다면 검색 처리 과정의 많은 비용이 절감될 것입니다.</p>
<p>따라서 <strong>비슷한 의미를 가진 문장을 모아서 일정한 응답를 제공</strong>할 수 있다면 서비스의 효율성이 제고되겠지요. 특히 자연어 이해(NLU)에서 STS는 핵심 과제이며, 많은 NLP 응용 프로그램 및 관련 영역의 기본 작업이 됩니다.</p>
<h3 id="의미적-유사도는-어떻게-측정하는가">의미적 유사도는 어떻게 측정하는가?</h3>
<p>초기의 연구 주제가 짧은 텍스트 단위에서의 STS 식별이었다면, 근 10년 간의 연구는 점차 더욱 방대한 문서와 개별 단어로 초점이 옮겨졌습니다. 
이에 따라 의미적 유사도는 (i) 토폴로지 (ii) 통계적 유사도 (iii) 의미 기반 (iv) 벡터 공간 모델 (v) 단어 정렬 기반 및 (vi) 기계학습 방법과 같이 다양한 측정 방식을 따를 수 있습니다.
도출된 유사도는 방법론에 따라 <strong>유사성의 유/무</strong>뿐 아니라 <strong>0~5의 점수</strong>를 가진 척도로 표현되기도 합니다. </p>
<p><img src="https://images.velog.io/images/king_jangsoo/post/52d8d110-5cf3-4e3d-8a09-1d58fcf2524b/%E1%84%83%E1%85%A1%E1%84%8B%E1%85%AE%E1%86%AB%E1%84%85%E1%85%A9%E1%84%83%E1%85%B3.png" alt="example"></p>
<p><em>(0 - 의미적 동등성 없음, 5 - 의미적으로 동등함)</em></p>
<h3 id="sts이-해결하고자-하는-문제는-무엇인가">STS이 해결하고자 하는 문제는 무엇인가?</h3>
<p>앞서 언급했듯, STS는 자연어 처리 영역 전반의 고도화에 발을 걸치고 있습니다.
STS는 정보 검색 및 추출, 문서 요약, QA(질의 응답), 단어 의미 명확화와 같은 많은 작업에 중요한 구성 요소입니다. 데이터베이스 분야에서도 텍스트 유사성은 의미론적 이질성을 해결하기 위한 스키마 매칭에 사용되거나 조인의 향상에 영향을 줄 수 있습니다.</p>
<hr>
<h1 id="korsts">KorSTS</h1>
<p>KorSTS은 카카오브레인의 한국어 자연어처리 공개 데이터셋입니다. 
대부분의 자연어 처리 연구는 사람들이 많이 쓰는 언어들을 바탕으로 연구가 되므로, 기존의 벤치마크 데이터셋(STS Benchmark, MRPC)은 영어로된 STS만을 제공해왔습니다. 이에 한국어로 된 자연어 데이터셋이 부족하다는 문제 의식의 발로로 KorSTS이 구축되었다고 합니다. </p>
<h3 id="korsts의-구성">KorSTS의 구성</h3>
<p><img src="https://images.velog.io/images/king_jangsoo/post/a6478724-3b30-419f-a9a4-b542d79a7709/%E1%84%83%E1%85%A1%E1%84%8B%E1%85%AE%E1%86%AB%E1%84%85%E1%85%A9%E1%84%83%E1%85%B3%20(1).png" alt="figure1">
KorSTS 데이터셋은 <strong>총 8,628개의 레코드를 가지고 있으며, 각 문장은 평균 7.7개의 단어</strong>로 이루어져있습니다.</p>
<p><img src="https://images.velog.io/images/king_jangsoo/post/54cf49a6-2f01-460d-b47f-520904882025/Figure_1.png" alt="figure2"></p>
<p>위의 그림을 통해 알 수 있듯, KorSTS은 STS-B 데이터셋을 기반으로 만들어졌습니다.
먼저 STS-B의 영어 test set, develop set, test set을 사내 엔진을 이용해 기계 번역(MT)하고, 이후 develop set과 test set는 전문 번역가에게 사후편집시키는 <strong>다단계 전략</strong>을 사용했습니다.</p>
<p>특히 <strong>사후편집 과정</strong>에 관한 세부 전략에서 사람이 직접 개입하는 몇몇 요소(크로스 체크, MS워드 체크 등)의 언급이 상당히 인상 깊었는데, 데이터셋의 구축 과정에 관심있으신 분들은 아래 링크를 통해 원문을 참고해주시기 바랍니다. 저 또한 가능하면 추후 추가하도록 하겠습니다.</p>
<p><em>더 알아보기 : <a href="https://arxiv.org/abs/2004.03289?fbclid=IwAR0dm6tQ2kwmCM9g4nsR3Bv6dbaUob73a7vbWYdjbfZPI0yHcPUCwxmobTk">https://arxiv.org/abs/2004.03289?fbclid=IwAR0dm6tQ2kwmCM9g4nsR3Bv6dbaUob73a7vbWYdjbfZPI0yHcPUCwxmobTk</a></em></p>
<h1 id="korean-roberta">Korean RoBERTa</h1>
<p>Korean RoBERTa는 KorSTS의 연구진들이 선정한 <strong>한국어 STS 베이스라인</strong>입니다. 
STS는 두 개의 문장이 입력으로 제공되기 때문에, 두 문장을 처리하는 방식에 따라 베이스라인이 달라질 수 있습니다. 그중 이 포스트에서 소개하는 한국어 RoBERTa는 모델이 문장을 공동으로 인코딩하는 Cross-encoding 접근법의 베이스라인입니다. </p>
<p>Korean RoBERTa는 65GB 크기의 한국어 말뭉치*를 RoBERTa(Liu et al., 2019) 모델에 사전 훈련하고 이후 미세 조정(fine tune)합니다.</p>
<p>*온라인 뉴스 기사(56GB), 백과사전(7GB), 영화 자막(∼1GB), 세종 코퍼스(∼0.5GB)로 이루어짐</p>
<h3 id="keywords">Keywords</h3>
<p><code>baseline</code>
<code>Cross-encoding</code> </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[QA(Question Answering) on Quora Question Pairs]]></title>
            <link>https://velog.io/@king_jangsoo/QAQuestion-Answering-on-Quora-Question-Pairs</link>
            <guid>https://velog.io/@king_jangsoo/QAQuestion-Answering-on-Quora-Question-Pairs</guid>
            <pubDate>Mon, 21 Feb 2022 09:03:20 GMT</pubDate>
            <description><![CDATA[<p><img src="https://images.velog.io/images/king_jangsoo/post/9880e2d4-953e-4e40-a124-f0c4092e570d/maxresdefault.jpg" alt="thumbnails"> </p>
<h2 id="qa">QA</h2>
<p>QA(Question Answering, 질의 응답)은 주어진 컨텍스트를 기반으로 질문과 답변을 제시합니다.
일례로, 썸네일의 IBM의 Watson은 고도로 학습된 질의응답 시스템이라 부를 수 있습니다.
기존의 검색기반 QA가 Word Matching, TF-IDF, Okapi BM25, LSA 등의 방법론으로 빠르게 질의를 소화해냈다면, 기계 독해(Machine Reading) 모델의 등장 이후 QA는 더욱 능동적인 질의 응답이 가능해졌습니다.
기계 독해 모델은 단어 수준의 정보 습득을 넘어, 문서를 읽으면서 질문을 참고하고 다시 질문을 읽으면서 문서를 참고하는 회귀적인 학습이 가능합니다. </p>
<h3 id="qa가-해결하고자-하는-문제는-무엇인가">QA가 해결하고자 하는 문제는 무엇인가?</h3>
<p>QA의 연구 주제들은 다음과 같습니다.</p>
<ul>
<li>상호 작용 — 질문 또는 답변 명확히하기</li>
<li>응답 재사용 또는 캐싱</li>
<li>답변 프리젠테이션</li>
<li>지식 표현 및 추론</li>
<li>QA 시스템을 사용한 소셜 미디어 분석</li>
<li>감정 분석</li>
<li>의미론적 해결책 제시 : 구문론적으로 다른 질문과 답을 구별</li>
<li>WordNet, FrameNet 등과 같은 언어 자원의 활용</li>
</ul>
<h2 id="quora-question-pairs">Quora Question Pairs</h2>
<p><img src="https://images.velog.io/images/king_jangsoo/post/ec1ddaf1-ca9a-4862-b258-84b0b14b6008/qqp.png" alt="qqp"></p>
<p>Quora Question Pairs(QQP)는 400,000개 이상의 질문 쌍으로 이루어져있습니다. 각 레코드는 쌍의  질문에 대한 ID, 개별 질문에 대한 전체 텍스트, 레코드에 실제로 중복 쌍이 포함되어 있는지 여부를 나타내는 이진 값이 포함됩니다.</p>
<p>&quot;미국에서 가장 인구가 많은 주는 무엇입니까?&quot;라는 쿼리와 &quot;미국에서 가장 인구가 많은 주는 어느 주입니까?&quot;는 사실상 같은 질의입니다. 따라서 대규모 질문 데이터가 중복될 경우의 비효율성을 완화시키는 자동화 작업은 매우 주요합니다.
본 데이터셋은 Quora 데이터를 기반으로 의미론적 동등성 모델을 훈련하고 테스트할 수 있는 환경을 마련해줍니다.</p>
<p><em>더 알아보기 : <a href="https://quoradata.quora.com/First-Quora-Dataset-Release-Question-Pairs">https://quoradata.quora.com/First-Quora-Dataset-Release-Question-Pairs</a></em></p>
<h2 id="xlnet">XLNet</h2>
<p>XLNet은 BERT의 장단점을 개선한 모델입니다. BERT와 같은 사전학습 방식은 자동회귀언어 모델링 보다 더 나은 성능을 제공하지만, 마스킹된 위치 간의 종속성을 무시하고 사전 훈련-미세 조정 불일치를 일으킵니다.</p>
<ol>
<li>인수분해 차수의 모든 순열에 대한 예상 가능성을 최대화하여 양방향 컨텍스트 학습을 가능하게 하고</li>
<li>BERT의 한계를 극복하는 일반화된 자기회귀 사전 훈련 방법입니다. </li>
</ol>
<p>양방향 컨텍스트를 모델링하는 기능으로 BERT와 같은 노이즈 제거 자동 인코딩 기반 사전 학습은 자동 회귀 언어 모델링을 기반으로 하는 사전 학습 접근 방식보다 더 나은 성능을 달성합니다. 그러나 마스크로 입력을 손상시키는 것에 의존하는 BERT는 마스킹된 위치 간의 종속성을 무시하고 사전 훈련-미세 조정 불일치로 어려움을 겪습니다. 
자기회귀 공식 덕분입니다. 또한 XLNet은 최첨단 자기회귀 모델인 Transformer-XL의 아이디어를 사전 훈련에 통합합니다.</p>
<p>XLNet은 질의응답, 자연어 추론, 감정 분석 및 문서 랭킹 등의 많은 부문에서 SOTA 결과를 얻었습니다.</p>
<h3 id="keywords">Keywords</h3>
<p><code>Autoregressive Language Modeling</code>
<code>Transformer-XL</code></p>
<p><em>더 알아보기 : <a href="https://arxiv.org/pdf/1906.08237v2.pdf">https://arxiv.org/pdf/1906.08237v2.pdf</a></em></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[NER(Named Entity Recognition) on Ontonotes v5]]></title>
            <link>https://velog.io/@king_jangsoo/Named-Entity-Recognition-on-Ontonotes-v5-English</link>
            <guid>https://velog.io/@king_jangsoo/Named-Entity-Recognition-on-Ontonotes-v5-English</guid>
            <pubDate>Mon, 21 Feb 2022 08:04:46 GMT</pubDate>
            <description><![CDATA[<h1 id="ne">NE</h1>
<p><strong>NE(Named Entity)</strong>는 <strong>개체명</strong>를 의미합니다.
이는 인물, 지명, 기관명과 같은 고유명사뿐 아니라 시간, 화폐 단위와 같은 특정한 이름을 가진 개체를 포함하는 광의적인 개념입니다.</p>
<h3 id="ne의-구분">NE의 구분</h3>
<p>NE는 크게 두 가지 유형으로 분류되며, 이에 따른 학습 전략이 선택됩니다.</p>
<ol>
<li>일반적인 개체명(generic NEs)으로 인물이나 장소 등의 명칭이 이에 해당합니다.
_예시: 장그래 - 인명, 수요일 - 시간 _</li>
<li>특정 분야 개체명(domain-specific NEs)으로 전문 분야의 용어가 이에 해당합니다.
<em>예시: Perl - 언어</em></li>
</ol>
<h1 id="ner">NER</h1>
<p><strong>NER(Named Entity Recognition)</strong>은 NE(개체명)을 Recognition(인식)하는 분류 작업으로, <strong>개체명 인식</strong>이라고도 불립니다. 미리 정의된 멀티 클래스 태그를 토큰에 할당하는 작업으로 이해할 수 있습니다.</p>
<p>예시: 
<code>오늘 &lt;GPE&gt;서울&lt;/GPE&gt;의 날씨는 맑고 따듯합니다. 이상으로 &lt;PERSON&gt;장그래&lt;/PERSON&gt; 캐스터였습니다.</code></p>
<h3 id="ner이-해결하고자-하는-문제는-무엇인가">NER이 해결하고자 하는 문제는 무엇인가?</h3>
<p>NER은 <strong>기계 번역뿐 아니라 검색, 요약, 질답 구축 등 자연어 처리의 다양한 주제에 활용</strong>됩니다.</p>
<p>음절에 민감한 특성을 지닌 한국어는 모아쓰기 방식을 채택하고 있습니다. 
띄어쓰기가 잘 지켜지지 않아도(&#39;그런것 같아요&#39;), 또는 거꾸로 적어도(&#39;끼토산&#39;) 음절을 통하면 언중은 글을 이해하는 데에 큰 어려움을 느끼지 않습니다. 그러나 이러한 언어적 특성이 코퍼스에 반영된다면 어떨까요? 
이를 활용해 분석을 시도할 경우 아래와 같은 문제가 발생할 수 있습니다.</p>
<p><em>만약 번역기가 &quot;피리부는 사나이&quot;를 &quot;Piribuo is a man&quot;으로 해석해버린다면?</em></p>
<p>사용자가 반드시 철자와 문법을 지켜 &quot;피리 부는 사나이&quot;를 입력할 거란 보장은 없습니다.
이처럼 <strong>개체명이 일반적인 명사로 잘못 분류되면 문장의 본의미가 제대로 전달되지 않고, 이를 수정하기 위해 유지보수 비용</strong>이 들게 됩니다. 
자연어 처리에 NER 과정이 수반된다면 <strong>분석 품질을 향상시키고 나아가 사용자에게 매끄러운 서비스를 제공</strong>하는 데에 큰 도움을 주게 됩니다.</p>
<h1 id="ontonotes-v5">Ontonotes v5</h1>
<p>OntoNotes 5.0(Weischedel etal., 2013)은 3개 언어(영어, 중국어, 아랍어)로 구성된 코퍼스입니다.
다양한 장르의 텍스트(뉴스, 전화 통화, 웹로그, 유즈넷 뉴스그룹, 방송, 토크쇼)와 구조적 정보(구문 및 술어 구조) 및 얕은 의미론(온톨로지 및 상호 참조에 연결된 단어 의미)를 포함합니다.</p>
<p><em>OntoNotes 5.0 홈페이지 : <a href="https://catalog.ldc.upenn.edu/LDC2013T19">https://catalog.ldc.upenn.edu/LDC2013T19</a></em></p>
<h3 id="text-genres">Text Genres</h3>
<p><img src="https://images.velog.io/images/king_jangsoo/post/29720fa0-d398-4a62-8aa3-a6fdb1829b3b/%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-02-21%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%203.56.01.png" alt="Text Genres"></p>
<h3 id="annotated-entities">Annotated Entities</h3>
<p><img src="https://images.velog.io/images/king_jangsoo/post/81098944-ea7c-4de4-9bc6-0f5abb8bc1ed/%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-02-21%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%203.52.47.png" alt="Annotated Entities"></p>
<p><em>더 알아보기 : <a href="https://catalog.ldc.upenn.edu/docs/LDC2013T19/OntoNotes-Release-5.0.pdf">https://catalog.ldc.upenn.edu/docs/LDC2013T19/OntoNotes-Release-5.0.pdf</a></em></p>
<h1 id="bert-mrcdsc">BERT-MRC+DSC</h1>
<p>BERT-MRC+DSC는 데이터 불균형 문제를 개선하기 위하여 제시된 모델입니다.
일반적으로 사용되는 지표인 CE(Cross Entropy Loss, 교차 엔트로피)는 accuracy를 지향하도록 설계되어 훈련-테스트 간 불균형을 가지고 있는 데 반해, Sorensen-Dice 또는 Tversky 지수를 기반으로 하는 DSC(Dice coefficient)는 FP, FN에 유사한 importance를 부여하고 데이터의 불균형에 적은 영향을 받습니다.</p>
<p>BERT-MRC+DSC는 음성 태깅 영역에 특장점을 가지며 CTB5, CTB6 및 UD1.4에서 SOTA 결과를 얻었습니다.</p>
<h3 id="keywords">Keywords</h3>
<p><code>MRC</code> - machine reading comprehension
<code>DSC</code> - dice coefficient</p>
<p><em>더 알아보기 : <a href="https://arxiv.org/pdf/1911.02855v3.pdf">https://arxiv.org/pdf/1911.02855v3.pdf</a></em></p>
]]></description>
        </item>
    </channel>
</rss>