<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>RISING FASTBALL</title>
    <link>https://supkoon.tistory.com/</link>
    <description>끝에 이르러 떠오르는 공처럼</description>
    <language>ko</language>
    <pubDate>Wed, 27 May 2026 01:23:19 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>섭구</managingEditor>
    <image>
      <title>RISING FASTBALL</title>
      <url>https://tistory1.daumcdn.net/tistory/4186408/attach/9132916e79d84888bf0a6a8955533528</url>
      <link>https://supkoon.tistory.com</link>
    </image>
    <item>
      <title>[자연어처리][paper review] Ask Me Anything:Dynamic Memory Networks for Natural Language Processing</title>
      <link>https://supkoon.tistory.com/42</link>
      <description>&lt;script&gt; MathJax = { tex: {inlineMath: [['$', '$'], ['\\(', '\\)']]} }; &lt;/script&gt;
&lt;script src=&quot;https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-chtml.js&quot;&gt;&lt;/script&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1. Question &amp;amp; Answering&amp;nbsp;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Question Answering(QA) &lt;/b&gt;task는 말그대로 질문에 대한 대답을 생성하는 NLP task 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;QA는 Text에 대한 이해와 사실(fact)에 대한 추론 능력을 모델에게 요구하기 하기 때문에 매우 복잡한 작업 중 하나로 손꼽힙니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; letter-spacing: 0px;&quot;&gt;하지만 머신러닝 알고리즘을 사용하는 이유 자체가 특정 문제(Q)에 대한 해결(A)이라는 관점에서 봤을 때, QA Task는 사실 매우 General한 문제를 다루고 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이는 NLP Task에도 동일하게 적용되며, 아래의 예시와 같이 대부분의 NLP Task는 QA Task로 general하게 표현될 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;447&quot; height=&quot;330&quot; data-origin-width=&quot;910&quot; data-origin-height=&quot;672&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/by7LyU/btraPt5uecw/hPSRgD8YGq91ERapg9GdC1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/by7LyU/btraPt5uecw/hPSRgD8YGq91ERapg9GdC1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/by7LyU/btraPt5uecw/hPSRgD8YGq91ERapg9GdC1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fby7LyU%2FbtraPt5uecw%2FhPSRgD8YGq91ERapg9GdC1%2Fimg.png&quot; width=&quot;447&quot; height=&quot;330&quot; data-origin-width=&quot;910&quot; data-origin-height=&quot;672&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;2. Dynamic Memory Networks&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2016년 발표된 본 논문은 general Question Answering을 위한 신경망 기반의 모델인 Dynamic Memory Network(DMN)를 소개하고 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DMN은 (input,question,answer) triplet을 input으로 받아 학습하며, 질문에 대한 추론을 통해 tagging, classification, seq2seq, QA 등 다양한 NLP 문제를 해결할 수 있는 General한 모델입니다.&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Model architecture&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;708&quot; data-origin-height=&quot;432&quot; width=&quot;493&quot; height=&quot;301&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dxKqZ5/btraImtkTvh/TZugh2L61vCjiaoWRmtsD0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dxKqZ5/btraImtkTvh/TZugh2L61vCjiaoWRmtsD0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dxKqZ5/btraImtkTvh/TZugh2L61vCjiaoWRmtsD0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdxKqZ5%2FbtraImtkTvh%2FTZugh2L61vCjiaoWRmtsD0%2Fimg.png&quot; data-origin-width=&quot;708&quot; data-origin-height=&quot;432&quot; width=&quot;493&quot; height=&quot;301&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DMN은 각기 다른 역할을 하는 네가지의 모듈로 구성되어 있어, Input과 Question을 입체적으로 고려한 Answering이 가능합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각 모듈은 Input module, Question module, Episodic memory module, Answer module로 이에 대한 간단한 설명을 먼저 드리도록 하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1)Input Module&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;간단한 문장부터 긴 글과 같은 raw text input을 distributed vector representation으로 인코딩 하는 역할을 수행합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2)Question Module&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Input Module과 동일하게, question을 distributed vector representation으로 인코딩 하는 역할을 수행합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이어지는 Episodic Memory Module의 initial state로 사용됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3)Episodic Memory Module&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Question이 Input representation의 어떤 부분에 집중하여야 하는지를 Attention을 통해 반복적으로 계산합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각 반복은 이전 반복의 memory vector를 고려하여 새로운 memory vector를 생성합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;반복을 통하여 이전에 고려하지 못한 새로운 정보를 추가적으로 찾아낼 수 있습니다.&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4)Answer Module&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Memory Module로 부터 받은 마지막 memory vector를 사용하여 답변을 생성합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DMN은 위와 같이 네가지 모듈의 역할을 통하여 Question answering task를 수행할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 그림과 수식을 통하여 각각의 모듈에 대한 자세한 설명을 드리도록 하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Input Module&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1464&quot; data-origin-height=&quot;692&quot; width=&quot;632&quot; height=&quot;299&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pRGND/btraGPoDx4z/lK41VSCdAwKkI9YbP6sgGk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pRGND/btraGPoDx4z/lK41VSCdAwKkI9YbP6sgGk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pRGND/btraGPoDx4z/lK41VSCdAwKkI9YbP6sgGk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpRGND%2FbtraGPoDx4z%2FlK41VSCdAwKkI9YbP6sgGk%2Fimg.png&quot; data-origin-width=&quot;1464&quot; data-origin-height=&quot;692&quot; width=&quot;632&quot; height=&quot;299&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Input Module&lt;/b&gt;은 단어 \(w_{ 1 },...., w_{ { T }_{ I } }\)로 이루어진 길이 \(T_I\)의&amp;nbsp;&lt;b&gt;Input sequence&lt;/b&gt; 에 대한 &lt;b&gt;인코딩&lt;/b&gt;을 진행합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인코딩은 다음과 같이 &lt;b&gt;RNN Laye&lt;/b&gt;r의 연산을 통해 구해질 수 있습니다. \(L\)은&amp;nbsp;&lt;b&gt;embedding matrix&lt;/b&gt;를 의미합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$h_{ t }=RNN(L[w_{ t }],h_{ t-1 })$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;본 논문에서는 RNN layer로 &lt;b&gt;GRU&lt;/b&gt;를 선택하였습니다. 잘 아시다시피 GRU는 기본적인 RNN에 비해 &lt;span style=&quot;color: #212529;&quot;&gt;vanishing gradient problem에 있어 강한 모습을 보여줍니다. &lt;/span&gt;또한 GRU는 더 복잡한 구조의 LSTM보다 낮은 계산복잡도로 비슷한 성능을 보였다고 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$z_{ t }=\sigma ({ W }^{ (z) }x_{ t }+{ U }^{ (z) }h_{ t-1 }+b^{ (z) })$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$r_{&amp;nbsp;t&amp;nbsp;}=\sigma&amp;nbsp;({&amp;nbsp;W&amp;nbsp;}^{&amp;nbsp;(r)&amp;nbsp;}x_{&amp;nbsp;t&amp;nbsp;}+{&amp;nbsp;U&amp;nbsp;}^{&amp;nbsp;(r)&amp;nbsp;}h_{&amp;nbsp;t-1&amp;nbsp;}+b^{&amp;nbsp;(r)&amp;nbsp;})$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$\tilde&amp;nbsp;{&amp;nbsp;h&amp;nbsp;}&amp;nbsp;_{&amp;nbsp;t&amp;nbsp;}=tanh({&amp;nbsp;W&amp;nbsp;}x_{&amp;nbsp;t&amp;nbsp;}+r_{&amp;nbsp;t&amp;nbsp;}\circ&amp;nbsp;{&amp;nbsp;U&amp;nbsp;}h_{&amp;nbsp;t-1&amp;nbsp;}+b^{&amp;nbsp;(h)&amp;nbsp;})$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$h_{&amp;nbsp;t&amp;nbsp;}=z_{&amp;nbsp;t&amp;nbsp;}\circ&amp;nbsp;h_{&amp;nbsp;t-1&amp;nbsp;}+(1-z_{&amp;nbsp;t&amp;nbsp;})\circ&amp;nbsp;\tilde&amp;nbsp;{&amp;nbsp;h&amp;nbsp;}&amp;nbsp;_{&amp;nbsp;t&amp;nbsp;}$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$h_{ t }=GRU(L[w_{ t }],h_{ t-1 })$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Input Module의 입력은 다음과 같이 두가지 경우가 존재할수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1)Input sequence가 하나의 문장일 경우&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Input sequence가 하나의 문장일 경우에는 RNN의 hidden state들이 Input Module의 output representation이 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Output representation을 Fact representation \(c\)라고 한다면,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하나의 문장에 대한 &lt;b&gt;Fact representation &lt;/b&gt;\(c\)의 길이 \(T_c\)는 문장의 단어 수 \(T_I\)와 같을 것 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2)Input sequence가 두개 이상의 문장일 경우&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Input sequence가 두개 이상의 문장으로 구성되어 있을 경우, 입력단에서 각 문장을 EOS 토큰으로 구분하여 concatenate 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 때, output representation은 각 EOS토큰에 대한 hidden state가 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서, &lt;b&gt;Fact representation&lt;/b&gt; c의 길이 \(T_c\)는&amp;nbsp;&lt;b&gt;문장의 수&lt;/b&gt;(=EOS 토큰 수)가 될 것입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Question Module&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1464&quot; data-origin-height=&quot;692&quot; width=&quot;632&quot; height=&quot;299&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cai4ky/btraGcEkvJw/5G7O7lrJkHLycqpm8h6K0k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cai4ky/btraGcEkvJw/5G7O7lrJkHLycqpm8h6K0k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cai4ky/btraGcEkvJw/5G7O7lrJkHLycqpm8h6K0k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcai4ky%2FbtraGcEkvJw%2F5G7O7lrJkHLycqpm8h6K0k%2Fimg.png&quot; data-origin-width=&quot;1464&quot; data-origin-height=&quot;692&quot; width=&quot;632&quot; height=&quot;299&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Input sequence와 유사하게 question 또한 단어의 시퀀스로 구성되어 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Question module&lt;/b&gt;또한 GRU를 사용하여 길이 \(T_Q\)의 question sequence \(q =\{w_{ 1 },...., w_{ { T }_{ Q }} \} \) 를 인코딩 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$q_{&amp;nbsp;t&amp;nbsp;}=GRU(L[{&amp;nbsp;w&amp;nbsp;}_{&amp;nbsp;t&amp;nbsp;}^{&amp;nbsp;Q&amp;nbsp;}],q_{&amp;nbsp;t-1&amp;nbsp;})$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;동일하게 \(L\)은 embedding matrix이며, 이는 Input Module과 공유됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 마지막 hiiden state인 \(q=q_{T_Q}\) 만을 output representation으로 사용한다는 차이점이 존재합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Episodic Memory Module&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1464&quot; data-origin-height=&quot;692&quot; width=&quot;632&quot; height=&quot;299&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6Durt/btraHtlZCsn/QSJkWUrPT91aElfo2OnVZk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6Durt/btraHtlZCsn/QSJkWUrPT91aElfo2OnVZk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6Durt/btraHtlZCsn/QSJkWUrPT91aElfo2OnVZk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6Durt%2FbtraHtlZCsn%2FQSJkWUrPT91aElfo2OnVZk%2Fimg.png&quot; data-origin-width=&quot;1464&quot; data-origin-height=&quot;692&quot; width=&quot;632&quot; height=&quot;299&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Episodic Memory module&lt;/b&gt;은 fact representation \(c\)와 question representation \(q\)를 반영한 &lt;b&gt;episodic memory&lt;/b&gt;를&amp;nbsp;&lt;b&gt;반복적으로 계산&lt;/b&gt;하여 &lt;b&gt;Answer module로 전달&lt;/b&gt;하는 역할을 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;episodic memory&lt;/b&gt;를 구하기 위해 가장 먼저 필요한 것은 각 fact \(c_t\)에 대한 &lt;b&gt;episode&lt;/b&gt; \(e_{t}^i\)입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;episode \(e_t^i\)는 Fact \(c_t\)와 Question \(q\), 그리고 이전 episodic memory \(m^{i-1}\) 사이의 &lt;b&gt;attention&lt;/b&gt;을 통해 계산됩니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;\(G(c_t,m^{i-1},q)\)는 attention 계산을 위해 사용되는 &lt;b&gt;scoring function&lt;/b&gt;입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;간단히 \(G\)는 &lt;b&gt;feature set&lt;/b&gt; \(z(c,m,q)\)를 입력으로 받아 스칼라 형태의 attention score를 출력합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;본 논문에서는 다음과 같이 &lt;b&gt;다양한 유사도를 반영&lt;/b&gt;할 수 있는 feature set \(z(c,m,q)\)이 사용되었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$z(c,m,q)=[c,m,q,c\circ&amp;nbsp;q,c\circ&amp;nbsp;m,\left|&amp;nbsp;c-q&amp;nbsp;\right|&amp;nbsp;,\left|&amp;nbsp;c-m&amp;nbsp;\right|&amp;nbsp;,{&amp;nbsp;c&amp;nbsp;}^{&amp;nbsp;T&amp;nbsp;}{&amp;nbsp;W&amp;nbsp;}^{&amp;nbsp;(b)&amp;nbsp;}q,{&amp;nbsp;c&amp;nbsp;}^{&amp;nbsp;T&amp;nbsp;}{&amp;nbsp;W&amp;nbsp;}^{&amp;nbsp;(b)&amp;nbsp;}m]$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 scoring function \(G\)으로는 학습이 가능한 간단한 형태의 &lt;b&gt;2-layer feed-forward neural network&lt;/b&gt;가 사용되었습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$G(c,m,q)=\sigma&amp;nbsp;({&amp;nbsp;W&amp;nbsp;}^{&amp;nbsp;(2)&amp;nbsp;}tanh({&amp;nbsp;W&amp;nbsp;}^{&amp;nbsp;(1)&amp;nbsp;}z(c,m,q)+b^{&amp;nbsp;(1)&amp;nbsp;})+b^{&amp;nbsp;(2)&amp;nbsp;})$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;본 논문에서는 &lt;b&gt;attention&lt;/b&gt;을 &lt;b&gt;gate function&lt;/b&gt;으로 사용하였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저, i 번째 iteration의 fact \(c_t\)에 대한 gate \(g_t^i\)는 계산된 Attention인 \(G(c_{ t },m^{ i-1 },q)\)가 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ { g }_{ t }^{ i }=G(c_{ t },m^{ i-1 },q)$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;gate function인 \(g\)는 GRU의 일반적인 gate function과 같이 적용되어 &lt;b&gt;episode&lt;/b&gt;를 &lt;b&gt;업데이트&lt;/b&gt; 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$${&amp;nbsp;h&amp;nbsp;}_{&amp;nbsp;t&amp;nbsp;}^{&amp;nbsp;i&amp;nbsp;}={&amp;nbsp;g&amp;nbsp;}_{&amp;nbsp;t&amp;nbsp;}^{&amp;nbsp;i&amp;nbsp;}GRU(c_{&amp;nbsp;t&amp;nbsp;},{&amp;nbsp;h&amp;nbsp;}_{&amp;nbsp;t&amp;nbsp;}^{&amp;nbsp;i-1&amp;nbsp;})+(1-{&amp;nbsp;g&amp;nbsp;}_{&amp;nbsp;t&amp;nbsp;}^{&amp;nbsp;i&amp;nbsp;}){&amp;nbsp;h&amp;nbsp;}_{&amp;nbsp;t&amp;nbsp;}^{&amp;nbsp;i-1&amp;nbsp;}$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(\(h_t^i\)는 GRU의 hidden state를 의미하기 때문에 그림의 \(e_t^i\)로 생각하셔도 될 것 같습니다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$e^{&amp;nbsp;i&amp;nbsp;}={&amp;nbsp;h&amp;nbsp;}_{&amp;nbsp;{&amp;nbsp;T&amp;nbsp;}_{&amp;nbsp;c&amp;nbsp;}&amp;nbsp;}^{&amp;nbsp;i&amp;nbsp;}$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마지막 fact \(c_{T_c}\)에 대한 GRU의 hidden state \(h_{T_c}^i\)인 episode \(e^i\)는 이전 Episodic memory \(m^{i-1}\)와 함께 GRU로 입력되어 새로운 Episodic memory \(m^{i}\)를 생성하게 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$${m}^{i}=GRU({e}^{i},{m}^{i-1})$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;GRU의 initial state \(m^0\)로는 question representation \(q\)이 사용됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최종적으로 새로운 Episodic memory \(m^i\)는 Answer module로 전달됩니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Need for Multiple Episodes&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;반복을 통하여 다양한 에피소드를 계산하는 것은 모델이 매 반복에서 새로운 Fact에 집중할 수 있도록 합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;659&quot; height=&quot;311&quot; data-origin-width=&quot;1464&quot; data-origin-height=&quot;692&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dMFmS4/btraMpQfWin/oXpK8jPjyKy4Zw7F8KdfUK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dMFmS4/btraMpQfWin/oXpK8jPjyKy4Zw7F8KdfUK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dMFmS4/btraMpQfWin/oXpK8jPjyKy4Zw7F8KdfUK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdMFmS4%2FbtraMpQfWin%2FoXpK8jPjyKy4Zw7F8KdfUK%2Fimg.png&quot; width=&quot;659&quot; height=&quot;311&quot; data-origin-width=&quot;1464&quot; data-origin-height=&quot;692&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그림의 &quot;where is the fooball?&quot;이라는 질문을 예시로 들어 설명드리도록 하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 첫번 째 Iteration의 Attention은 질문인&lt;span&gt;&amp;nbsp;&lt;/span&gt;&quot;where is the&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;fooball&lt;/b&gt;?&quot;과&lt;span&gt;&amp;nbsp;&lt;/span&gt;\(S_7\) &quot;john put down the&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;fooball&lt;/b&gt;&quot;의&amp;nbsp;&lt;b&gt;fooball&lt;/b&gt;에 집중되어 이에 대한 정보가 \(m^1\)에 저장됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두번째 Iteration의 Attention은 \(m^1\)로 부터 \(S_7\) &quot;&lt;b&gt;john&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;put down the fooball&quot;에 대한 정보를 얻습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; letter-spacing: 0px;&quot;&gt;따라서 \(S_6\)과의 Attention이 강해져 &quot;&lt;/span&gt;&lt;b&gt;john&lt;/b&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; letter-spacing: 0px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; letter-spacing: 0px;&quot;&gt;went to the hallway&quot;로 부터 John이 어디에 있는지 파악할 수 있게 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 두번의 반복을 통해 &quot;John이 hallway에 있으며, fooball을 가져다 놓았다&quot; 라는 구체적인 답변을 완성시킬 수 있게 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Criteria for Stopping&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Memory 업데이트를 위한 반복은 다음과 같은 경우에 종료됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1) 명확한 label이 존재하는 경우&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;EOP(end-of-passes) 토큰을 Input에 추가하여 gate function에 이 토큰이 선택될때까지 Iteration을 반복합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2) 명확한 label이 존재하지 않는 경우&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최대 반복 횟수를 정합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Answer Module&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1464&quot; data-origin-height=&quot;692&quot; width=&quot;632&quot; height=&quot;299&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cg00JS/btraL2N1Zre/aM2s22PjEMgooOW2Kr5Fl0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cg00JS/btraL2N1Zre/aM2s22PjEMgooOW2Kr5Fl0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cg00JS/btraL2N1Zre/aM2s22PjEMgooOW2Kr5Fl0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcg00JS%2FbtraL2N1Zre%2FaM2s22PjEMgooOW2Kr5Fl0%2Fimg.png&quot; data-origin-width=&quot;1464&quot; data-origin-height=&quot;692&quot; width=&quot;632&quot; height=&quot;299&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Answer Module&lt;/b&gt;은 Episodic Memory를 전달받아 최종적으로 질문에 대한 답변을 생성하는 역할을 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Task의 종류에 따라서 모든 Episodic Memory에 대한 답변을 생성하는 경우가 존재하며, 마지막 Episodic Memory만을 사용하여 한번의 생성과정을 거치는 경우 또한 존재합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;생성과정에서는 역시 GRU가 사용됩니다. 또한 마지막 메모리인 \(a_0 = m^{T_M}\)는 GRU의 initial state가 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$a_{&amp;nbsp;t&amp;nbsp;}=GRU([y_{&amp;nbsp;t-1&amp;nbsp;},q],a_{&amp;nbsp;t-1&amp;nbsp;})$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 모든 t step에서 이전 단계의 output \(y_{t-1}\)과 question representation을 concatenate하여 hidden state \(a_t\)를 계산합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$y_{&amp;nbsp;t&amp;nbsp;}=softmax({&amp;nbsp;W&amp;nbsp;}^{&amp;nbsp;(a)&amp;nbsp;}a_{&amp;nbsp;t&amp;nbsp;})$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 계산된 hidden state를 softmax함수에 통과시켜 t step의 output word \(y^t\)를 얻습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Training&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;학습은 End-to-End로 진행됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;손실함수는 일반적인 Classification 문제로 정의되어 정답 시퀀스 label과의 Cross-entropy loss를 최소화 하는 방향으로 진행됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;loss function은 다음 두가지 경우에 따라 달라질 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1) gate에 대한 정답이 존재하는 데이터셋&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;본 논문에서 사용한 bAbI 데이터셋의 경우에는 질문에 관련된 단어들이 labeling 되어 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 gate에 대한 정답이 존재하는 경우에는 gate에 대한 Cross-entropy 또한 고려하여 손실함수를 정의합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$J = \alpha E_{CE}(Gates) + \beta E_{CE}(Answers)$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;\(E_{CE}\)는 Cross-entropy를 의미하며, \(\alpha\), \(\beta\)는 하이퍼 파라미터입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;gate가 충분히 학습되지 않은 학습 초기에는 \(\alpha=1\) \(\beta=0\)을 사용하며,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;gate가 충분히 학습되면 \(\alpha=1\), \(\beta=1\)을 사용합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2) gate에 대한 정답이 존재하지 않는 데이터셋&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일반적인 데이터셋의 경우에는 질문과 관련된 단어를 labeling하지 않고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 이러한 경우 생성된 답안과 정답에 대한 Cross-entropy만을 고려하여 손실함수를 정의합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$J =E_{CE}(Answers)$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Optimizer로는 일반적인 Gradient Descent가 사용되었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;3. Results&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;검증 과정은 QA, POS tagging, sentiment analysis와 같이 다양한 NLP Task에서 진행되었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;result 1.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;316&quot; height=&quot;430&quot; data-origin-width=&quot;656&quot; data-origin-height=&quot;892&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sjrrU/btraImAnPlW/dc57JAsfhIqbh8342y74wK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sjrrU/btraImAnPlW/dc57JAsfhIqbh8342y74wK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sjrrU/btraImAnPlW/dc57JAsfhIqbh8342y74wK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsjrrU%2FbtraImAnPlW%2Fdc57JAsfhIqbh8342y74wK%2Fimg.png&quot; width=&quot;316&quot; height=&quot;430&quot; data-origin-width=&quot;656&quot; data-origin-height=&quot;892&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫번째 실험은 QA Task에 대한 Accuracy 비교입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;검증 과정에는 20개의 Task를 포함하고 있는 Facebook bAbI 데이터셋이 사용되었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Facebook bAbI 데이터 셋은 사실확인과 추론능력에 대한 모델 성능을 테스트하기 위한 데이터셋들이 포함되어 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여러개의 문장으로 이루어진 Task 2, 3을 제외하고는 제안하는 방법인 DMN이 상대적으로 더 좋은 성능을 보였음을 알 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특히 복잡한 추론이 필요한 Task 7, 8의 경우 DMN이 반복적 사실 확인을 통하여 월등히 좋은 성능을 보였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;result 2.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;395&quot; height=&quot;314&quot; data-origin-width=&quot;654&quot; data-origin-height=&quot;520&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uTDlg/btraRx0Z5S6/ska4UFlQMmSmoklkfOPHQ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uTDlg/btraRx0Z5S6/ska4UFlQMmSmoklkfOPHQ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uTDlg/btraRx0Z5S6/ska4UFlQMmSmoklkfOPHQ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuTDlg%2FbtraRx0Z5S6%2Fska4UFlQMmSmoklkfOPHQ0%2Fimg.png&quot; width=&quot;395&quot; height=&quot;314&quot; data-origin-width=&quot;654&quot; data-origin-height=&quot;520&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두번째 실험은 Classification의 일종인 Sentiment analysis 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실험은 Stanford Sentiment Treebank 데이터셋을 활용하여 진행되었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Positive/Negatve의 이진분류를 하는 경우와, very negative/ negative/ neutral/ positive/ very positive 총 5개의 label을 갖는 다중분류의 경우 모두에서 제안하는 모델인 DMN이 가장 우수한 성능을 보였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;result 3.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;263&quot; height=&quot;213&quot; data-origin-width=&quot;392&quot; data-origin-height=&quot;318&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bnUZoB/btraRxzVu0T/TOSy04jOIsTfrPKZ7IH3SK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bnUZoB/btraRxzVu0T/TOSy04jOIsTfrPKZ7IH3SK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bnUZoB/btraRxzVu0T/TOSy04jOIsTfrPKZ7IH3SK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbnUZoB%2FbtraRxzVu0T%2FTOSy04jOIsTfrPKZ7IH3SK%2Fimg.png&quot; width=&quot;263&quot; height=&quot;213&quot; data-origin-width=&quot;392&quot; data-origin-height=&quot;318&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;세번째 실험은 Sequence tagging의 일종인 POS tagging 입니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;standard wall street journal 데이터셋을 활용하여 진행되었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DMN이 기존의 SOTA 모델보다도 좋은 성능을 보였음을 확인할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;result 4.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;401&quot; height=&quot;261&quot; data-origin-width=&quot;660&quot; data-origin-height=&quot;430&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rAXVM/btraSYYkR8K/pTs50Ta7d95vmAT4W2tJJ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rAXVM/btraSYYkR8K/pTs50Ta7d95vmAT4W2tJJ1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rAXVM/btraSYYkR8K/pTs50Ta7d95vmAT4W2tJJ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrAXVM%2FbtraSYYkR8K%2FpTs50Ta7d95vmAT4W2tJJ1%2Fimg.png&quot; width=&quot;401&quot; height=&quot;261&quot; data-origin-width=&quot;660&quot; data-origin-height=&quot;430&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;네번째 실험은 모델에서 가장 중요한 부분인 Episodic Memory Module에 대한 정량적 유효성 검증입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Task 3, 7, 9 과 같은 어려운 추론을 요구하는 Task의 경우 반복(pass)이 큰 도움이 되었음을 알 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;반면에 Sentiment analysis와 같이 특정한 단어가 정답을 나타낼 가능성이 큰 Task의 경우, 반복이 진행됨에도 성능 향상이 이루어지지 않았습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;result 5.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;742&quot; height=&quot;238&quot; data-origin-width=&quot;1340&quot; data-origin-height=&quot;430&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vcIZy/btraMq2UYgQ/ZKgPDpKkkc8AOpsQaVcES1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vcIZy/btraMq2UYgQ/ZKgPDpKkkc8AOpsQaVcES1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vcIZy/btraMq2UYgQ/ZKgPDpKkkc8AOpsQaVcES1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvcIZy%2FbtraMq2UYgQ%2FZKgPDpKkkc8AOpsQaVcES1%2Fimg.png&quot; width=&quot;742&quot; height=&quot;238&quot; data-origin-width=&quot;1340&quot; data-origin-height=&quot;430&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;639&quot; height=&quot;464&quot; data-origin-width=&quot;1326&quot; data-origin-height=&quot;962&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vnztf/btraRwOxC5b/p4ekpjdpPKu9uOBXwHkN61/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vnztf/btraRwOxC5b/p4ekpjdpPKu9uOBXwHkN61/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vnztf/btraRwOxC5b/p4ekpjdpPKu9uOBXwHkN61/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fvnztf%2FbtraRwOxC5b%2Fp4ekpjdpPKu9uOBXwHkN61%2Fimg.png&quot; width=&quot;639&quot; height=&quot;464&quot; data-origin-width=&quot;1326&quot; data-origin-height=&quot;962&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다섯번째 실험은 Episodic Memory Module에 대한 정성적 유효성 검증입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다양한 예시를 통하여 Memory Module이 매번 반복마다 새로운 정보를 학습하고 있다는 것을 확인할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Figure 4의 예시는 Iteration을 통해 sentiment를 나타내는 단어에 대한 Attention이 변화하며, 따라서 예측 또한 정확해질 수 있다는 사실을 보여주고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;마무리&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DMN(Dynamic Memory Networks)은 Episodic Memory의 반복적 계산을 통해 General한 QA Task를 해결할 수 있는 모델입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다양한 문제를 해결할 수 있다는 장점과 더불어, 각기 다른 역할을 하는 4개의 Module로 구성되어 다양한 정보를 습득하고 활용할 수 있다는 장점이 존재합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Iteration을 통한 fact retrieval의 효과를 정성적으로 시각화한 것이 직관적으로 잘 다가와 좋았습니다. 모델 구조에 대해서 조금만 더 자세하게 시각화 한 자료가 있었으면 조금 더 도움이 됐을 것 같아 아쉬웠던 것 같습니다. 하지만 Attention과 같은 방법론들을 먼저 공부한 덕분에 많이 헤매지 않고 끝까지 읽을 수 있었던 것 같습니다. 감사합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>데이터과학/자연어처리</category>
      <category>DMN</category>
      <category>Dynamic Memory Networks</category>
      <category>NLP</category>
      <category>qa</category>
      <category>QuestionAnswering</category>
      <category>논문리뷰</category>
      <category>딥러닝</category>
      <category>머신러닝</category>
      <category>자연어처리</category>
      <author>섭구</author>
      <guid isPermaLink="true">https://supkoon.tistory.com/42</guid>
      <comments>https://supkoon.tistory.com/42#entry42comment</comments>
      <pubDate>Fri, 30 Jul 2021 05:12:40 +0900</pubDate>
    </item>
    <item>
      <title>[자연어처리][Metric] Perplexity</title>
      <link>https://supkoon.tistory.com/41</link>
      <description>&lt;script&gt; MathJax = { tex: {inlineMath: [['$', '$'], ['\\(', '\\)']]} }; &lt;/script&gt;
&lt;script src=&quot;https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-chtml.js&quot;&gt;&lt;/script&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;Perplexity&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Perplexity&lt;/b&gt;는 &lt;a href=&quot;https://supkoon.tistory.com/18?category=871653&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;BLEU&lt;/a&gt;, &lt;a href=&quot;https://supkoon.tistory.com/26?category=871653&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;ROUGE&lt;/a&gt;와 더불어 언어모델의 &lt;b&gt;Generation&lt;/b&gt;&amp;nbsp;&lt;b&gt;성능&lt;/b&gt;을 판단할 수 있는 지표입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Machine translation, text summarization과 같은 Generation task의 성능 비교를 위해 주로 사용됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단어 \(\{w_{1}, w_{2}, w_{3}, ... , w_{N}\}\)로 구성된 문장의 Perplexity는 다음과 같은 수식으로 나타낼 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$Perplexity=\sqrt[N]{\frac{1}{P(w_{1}, w_{2}, w_{3}, ... , w_{N})}}=\sqrt[N]{\frac{1}{\prod_{i=1}^{N}P(w_{i}| w_{1}, w_{2}, ... , w_{i-1})}}$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;분모의 \(P(w_{1}, w_{2}, w_{3}, ... , w_{N})\)는 문장에 대한 Generation probability를 의미하는데, 이를 조건부 확률의 Chain rule을 활용하여 \(\prod_{i=1}^{N}P(w_{i}| w_{1}, w_{2}, ... , w_{i-1})\)와 같이 나타낼 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전체적인 식을 보았을 때, Perplexity는 &lt;b&gt;문장&lt;/b&gt;에 대한 &lt;b&gt;Generation probability&lt;/b&gt;의 &lt;b&gt;역수의&lt;/b&gt; &lt;b&gt;기하평균&lt;/b&gt;을 구한다는 것을 알 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이는 Perplexity가 문장 생성 확률의 역수를 &lt;b&gt;단어의 수\((N)\)로&lt;/b&gt; &lt;b&gt;정규화&lt;/b&gt; 함을 의미합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 문장의 발생 확률이 높을수록 해당 문장에 대한 Perplexity 값은 낮아집니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;736&quot; data-origin-height=&quot;442&quot; width=&quot;416&quot; height=&quot;250&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sd0fA/btraHrHyXE8/weJ20PNMzxJuis38kvqunK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sd0fA/btraHrHyXE8/weJ20PNMzxJuis38kvqunK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sd0fA/btraHrHyXE8/weJ20PNMzxJuis38kvqunK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fsd0fA%2FbtraHrHyXE8%2FweJ20PNMzxJuis38kvqunK%2Fimg.png&quot; data-origin-width=&quot;736&quot; data-origin-height=&quot;442&quot; width=&quot;416&quot; height=&quot;250&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Perplexity&lt;/b&gt;의 어원을 고려하여 조금 더 직관적인 설명을 드리도록 하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Perplexity는 '&lt;b&gt;당혹감&lt;/b&gt;', '&lt;b&gt;혼란&lt;/b&gt;'을 의미하는 단어입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;문장 발생확률의 역수&lt;/b&gt;는 발생할 수 있는 &lt;b&gt;가짓수&lt;/b&gt;가 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 Perplexity가 높다는 것은&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;&lt;b&gt;발생할 수 있는 문장의 가짓수가 많다&lt;/b&gt;&quot; = &quot;&lt;b&gt;혼란스럽다&lt;/b&gt;&quot; = &quot;&lt;b&gt;원하는 결과를 얻지 못할 가능성이 크다&lt;/b&gt;&quot;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로 해석될 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;언어모델의 평가 관점에서 생각해 본다면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;테스트 데이터에 존재하는 문장에 대한 모델의 &lt;b&gt;Perplexity가&lt;/b&gt; &lt;b&gt;낮다&lt;/b&gt;는 것은,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 정답 샘플에 대한 발생 확률이 높아 &lt;b&gt;언어 모델이 잘 학습되었음&lt;/b&gt;을 의미합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;반대로 테스트 데이터에 존재하는 문장에 대한 모델의 &lt;b&gt;Perplexity가&lt;/b&gt; &lt;b&gt;높다&lt;/b&gt;는 것은,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 정답 샘플에 대한 발생 확률이 낮아 &lt;b&gt;언어 모델이 잘 학습되지 못하였음&lt;/b&gt;을 의미합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;Variations&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Perplexity를 n-gram 언어모델의 형태로도 확장하여 계산할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;495&quot; height=&quot;157&quot; data-origin-width=&quot;1378&quot; data-origin-height=&quot;438&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dT5L6a/btraHX65KmW/lIviyrIakRHPqDpHxLXn3K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dT5L6a/btraHX65KmW/lIviyrIakRHPqDpHxLXn3K/img.png&quot; data-alt=&quot;출처 :&amp;amp;amp;nbsp;https://towardsdatascience.com/perplexity-in-language-models-87a196019a94&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dT5L6a/btraHX65KmW/lIviyrIakRHPqDpHxLXn3K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdT5L6a%2FbtraHX65KmW%2FlIviyrIakRHPqDpHxLXn3K%2Fimg.png&quot; width=&quot;495&quot; height=&quot;157&quot; data-origin-width=&quot;1378&quot; data-origin-height=&quot;438&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처 :&amp;nbsp;https://towardsdatascience.com/perplexity-in-language-models-87a196019a94&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대중적으로 사용되는 1~3 gram Perplexity의 예시는 다음과 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1) Unigram Perplexity(1-gram)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$Unigram-perplexity=\sqrt[N]{\frac{1}{\prod_{i=1}^{N}P(w_{i})}}$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2) Bigram Perplexity(2-gram)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$Bigram-perplexity=\sqrt[N]{\frac{1}{\prod_{i=1}^{N}P(w_{i}| w_{i-1})}}$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3) Trigram perplexity(3-gram)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$Trigram-perplexity=\sqrt[N]{\frac{1}{\prod_{i=1}^{N}P(w_{i}| w_{i-1},w_{i-2})}}$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;마무리&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Perplexity는 언어 모델이 얼마나 정확하게 문장을 생성하는지 판단할 수 있는 성능지표입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Perplexity는 테스트 세트 문장의 발생 확률의 역수를 단어 수로 정규화 하여 계산됩니다.&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 Perplexity가 높다는 것은 언어모델이 매 순간 골라야할 가짓수가 많아 혼란스러워 함을 의미합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Text Generation task에서 매우 대중적으로 사용되는 지표인 만큼 잘 알아두면 좋을 것 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>데이터과학/자연어처리</category>
      <category>NLP</category>
      <category>perplexity</category>
      <category>딥러닝</category>
      <category>머신러닝</category>
      <category>자연어처리</category>
      <author>섭구</author>
      <guid isPermaLink="true">https://supkoon.tistory.com/41</guid>
      <comments>https://supkoon.tistory.com/41#entry41comment</comments>
      <pubDate>Wed, 28 Jul 2021 17:43:55 +0900</pubDate>
    </item>
    <item>
      <title>[자연어처리][paper review] A Neural Attention Model for Abstractive Sentence Summarization</title>
      <link>https://supkoon.tistory.com/40</link>
      <description>&lt;script&gt; MathJax = { tex: {inlineMath: [['$', '$'], ['\\(', '\\)']]} }; &lt;/script&gt;
&lt;script src=&quot;https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-chtml.js&quot;&gt;&lt;/script&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1.Background&lt;/b&gt;&lt;/h2&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Sentence&amp;nbsp;Summarization&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;400&quot; data-origin-height=&quot;238&quot; data-filename=&quot;blob&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1HpkR/btrat3mYqXP/loMkbuRvhFykdMu80qQDXK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1HpkR/btrat3mYqXP/loMkbuRvhFykdMu80qQDXK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1HpkR/btrat3mYqXP/loMkbuRvhFykdMu80qQDXK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1HpkR%2Fbtrat3mYqXP%2FloMkbuRvhFykdMu80qQDXK%2Fimg.png&quot; data-origin-width=&quot;400&quot; data-origin-height=&quot;238&quot; data-filename=&quot;blob&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Sentence&amp;nbsp;Summarization&lt;/b&gt;은 Input Text의 핵심 의미를 포착하여 &lt;b&gt;압축된 표현(Condensed representation = summary)&lt;/b&gt;을 생성하는 NLP Task로, 매우 중요한 동시에 어려운 과제 중 하나로 손꼽힙니다.&amp;nbsp;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Sentence Summarization은 다음과 같은 수식으로 표현될 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ \{\mathbf{x_1},...,\mathbf{x_M}\} \rightarrow&amp;nbsp; \{\mathbf{y_1},...,\mathbf{y_N}\}$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$M&amp;gt;N$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선, 요약 될 문장은 \(M\)개의 단어 \(\mathbf{x_1},...,\mathbf{x_M}\)로 구성된 sequence입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각각의 단어 \(\mathbf{x}_i\)는 \(|V|\) 크기의 Vocabulary \(\mathcal{V}\)로 부터 정의된 indicator vector로, &lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; letter-spacing: 0px;&quot;&gt;\(\mathbf{x_i} \in \{0,1\}^V\,\,for\,\,i \in \{1,...,M\}\)를 만족합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; letter-spacing: 0px;&quot;&gt;(One-hot encoding을 생각하시면 편하실 것 같습니다.)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결과적으로 Input sequence는 모델을 통해 \(N\)개의 단어로 구성된 output sequence \(\mathbf{y_1},...,\mathbf{y_N}\)로 요약됩니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보통의 경우 동일한 Vocabulary \(\mathcal{V}\) 에서 Output words가 선택되기 때문에, \(\mathbf{y_i}\)역시 \(y_i \in \{0,1\}^V\,\,for\,\,i \in \{1,...,N\}\)을 만족하는 indicator vector 형태입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 요약을 진행하였기 때문에 Output sequence의 길이는 Input sequence의 길이보다 짧습니다. \((N&amp;lt;M)\)&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Types of Summarization&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;586&quot; height=&quot;301&quot; data-origin-width=&quot;1014&quot; data-origin-height=&quot;521&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bodWZA/btrax73xage/YkN4pKgwg3zzDJsKcKPQi1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bodWZA/btrax73xage/YkN4pKgwg3zzDJsKcKPQi1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bodWZA/btrax73xage/YkN4pKgwg3zzDJsKcKPQi1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbodWZA%2Fbtrax73xage%2FYkN4pKgwg3zzDJsKcKPQi1%2Fimg.jpg&quot; width=&quot;586&quot; height=&quot;301&quot; data-origin-width=&quot;1014&quot; data-origin-height=&quot;521&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Text Summarization는 모델을 거쳐 생성된 output(summary)의 형태에 따라 &lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; letter-spacing: 0px;&quot;&gt;&lt;b&gt;Abstractive summarization(생성 요약)&lt;/b&gt;과 &lt;b&gt;Extractive summarization(추출 요약)&lt;/b&gt;으로 구분됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1)Abstractive summarization&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;326&quot; height=&quot;319&quot; data-origin-width=&quot;532&quot; data-origin-height=&quot;521&quot; data-filename=&quot;blob&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cZaFdz/btrazLsrwj5/0U0lFVzujH9oB3ECAjoP10/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cZaFdz/btrazLsrwj5/0U0lFVzujH9oB3ECAjoP10/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cZaFdz/btrazLsrwj5/0U0lFVzujH9oB3ECAjoP10/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcZaFdz%2FbtrazLsrwj5%2F0U0lFVzujH9oB3ECAjoP10%2Fimg.png&quot; width=&quot;326&quot; height=&quot;319&quot; data-origin-width=&quot;532&quot; data-origin-height=&quot;521&quot; data-filename=&quot;blob&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Abstractive summarization(생성 요약)&lt;/b&gt;은 기존 Input text를 그대로 인용하지 않고, 기존의 내용을 새롭게 &lt;b&gt;re-phrasing&lt;/b&gt; 하여 Summary를 생성하는 요약 모델입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보통의 사람은 글을 요약할 때 paraphrasing, generalization, reordering과 같은 작업을 수행한다고 알려져 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이처럼 우리의 요약 방법은 모든 문장을 그대로 인용하여 사용하지 않습니다. 따라서 우리가 보편적으로 문서를 요약하는 방법이 Abstractive summarization에 가깝다고 할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 Abstractive suumarization은 내용을 처음부터 &lt;b&gt;bottom-up&lt;/b&gt; 하는 과정으로 summary를 작성해야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 좋은 요약을 위해서는 representation, inference, generation과 같은 언어에 대한 &lt;b&gt;고수준의 이해를 요구&lt;/b&gt;합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러한 이유로 Abstractive summarization은 Extractive summarization에 비해 상대적으로 &lt;b&gt;우수한 성능을 보이기 어렵다&lt;/b&gt;고 할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$\DeclareMathOperator*{\argmax}{argmax}$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Abstractive summarization을 수식으로 나타내면 다음과 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$Abstractive:\,\argmax\limits_{\mathbf{y}\in \mathcal{Y}} s(\mathbf{x},\mathbf{y})$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 \(\mathcal{Y}\)는 길이가 N인 모든 가능한 output summary의 집합입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 \(\mathcal{Y} \subset (\{0,1\}^V,...,\{0,1\}^V)\)를 만족합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 가능한 모든 input sequence의 집합은 \(\mathcal{X}\)로 표현합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;\(s\)는 \(\mathbf{x}\), \(\mathbf{y}\) 쌍에 대한 평가를 내려주는 scoring function으로, \(s : \mathcal{X}\times \mathcal{Y} \rightarrow \mathbb{R}\)를 만족하는 함수가 될 것입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 본 수식은 input \(\mathbf{x}\)와 output \(\mathbf{y}\)를 고려하여 가장 높은 \(s(\mathbf{x},\mathbf{y})\)를 갖도록 하는 output sequence \(\mathbf{y}\)를 선택하는 과정을 의미한다고 할 수 있습니다.&amp;nbsp;여기에는 summary의 단어 선택에 대한 어떠한 제약이 존재하지 않습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2)Extractive summarization&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;204&quot; height=&quot;255&quot; data-origin-width=&quot;418&quot; data-origin-height=&quot;521&quot; data-filename=&quot;blob&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bXxoAE/btraEgEYeqY/fzLS1qOusFVDezYUrFNMq0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bXxoAE/btraEgEYeqY/fzLS1qOusFVDezYUrFNMq0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bXxoAE/btraEgEYeqY/fzLS1qOusFVDezYUrFNMq0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbXxoAE%2FbtraEgEYeqY%2FfzLS1qOusFVDezYUrFNMq0%2Fimg.png&quot; width=&quot;204&quot; height=&quot;255&quot; data-origin-width=&quot;418&quot; data-origin-height=&quot;521&quot; data-filename=&quot;blob&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;반면에 &lt;b&gt;Extractive summarization(추출 요약)&lt;/b&gt;은 기존 Input text에 존재하는 중요한 &lt;b&gt;단어를&amp;nbsp;그대로 사용&lt;/b&gt;하여 &lt;b&gt;Summary&lt;/b&gt;를 생성하는 요약 모델입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대부분의 요약모델이 Extractive 방법에 속하며,&amp;nbsp; Summary를 생성하기 위해 텍스트의 일부를 그대로 인용하고 연결하는 추출(extractive) 방식을 사용합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이전에 리뷰한&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://supkoon.tistory.com/39&quot;&gt;TextRank&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;알고리즘이 Extractive summarization의 좋은 예시가 될 것 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Extractive summarization를 수식으로 나타낸다면 다음과 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$Extractive:\,\argmax\limits_{m\in \{1,...M\}^N}s(\mathbf{x},\mathbf{x_{[m_1,...,m_N]}})$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;길이 N의 \(\mathbf{y}\)를 summary로 생성하는 Abstractive summarization과 비교해 본다면,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Extractive summarization은 길이 N의 \(\mathbf{x_{[m_1,...,m_N]}}\)를 input \(\mathbf{x}\)로 부터 그대로 추출하여 scoring function을 계산함을 알 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Input 문장에서 단어의 순서를 유지한 채로 불필요한 단어만을 삭제하는 deleting 방법을 사용한다면, 다음과 같이 \((m_{i-1}&amp;lt;m_i)\) 제약을 추가해주면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$Extractive(deleting):\,\argmax\limits_{m\in \{1,...M\}^N,m_{i-1}&amp;lt;m_i}s(\mathbf{x},\mathbf{x_{[m_1,...,m_N]}})$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Scoring function&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;scoring function \(s\)에 대하여 자세히 알아보도록 하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$s(\mathbf{x},\mathbf{y}) \approx \sum_{i=0}^{N-1}g(\mathbf{y_{i+1},\mathbf{x},\mathbf{y_c}})$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;본 식은 \(s\)가 임의의 함수 \(g\)를 통해 i번째 시점에서의 \(\mathbf{y_{i+1}}\),\(\mathbf{x}\), \(\mathbf{y_c}\)를 함께 고려하여 계산되야 함을 의미하고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;\(g\)는 어떤 함수이며 변수들을 어떻게 고려해야 할까요?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설명에 앞서 각각의 notation에 대해 말씀드리도록 하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;\(\mathbf{x}\)는 전체 input sequence를,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;\(\mathbf{y_{i+1}}\)는 i번째 시점에서 \(i+1\)번째 output 단어를 의미합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;\(\mathbf{y_c}\)는 조금 생소해 보일 수 있으나, i번째 시점 이전에 출력된 window size C 내의 단어 집합입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉 [i-C+1, ..., i-1, i] 시점의 출력 단어를 의미합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;간단히 표현하면 \(\mathbf{y_c} \triangleq \mathbf{y_{[i-C+1,...,i]}}\)가 될 것입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Notation을 고려해 보신다면, 어떠한 형태의 \(g(\mathbf{y_{i+1},\mathbf{x},\mathbf{y_c}})\)가 떠오르시나요?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$\prod_{i=1}^{N}P(w_{i}| w_{1}, w_{2}, ... , w_{i-1})$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;맞습니다. 순차적으로 i번째 요소들을 고려하여 i+1 번째 output을 생성한다는 관점에서 이는 언어모델(language model)과 유사합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 쉽게 \(s(\mathbf{x},\mathbf{y}) = p(\mathbf{y}|\mathbf{x},\mathbf{y_c};\theta)\)를 고려해 볼 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇다면, 이제 scoring function은 다음과 같은 conditional log-probability로 다시 쓰일 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$s(\mathbf{x},\mathbf{y}) =logp(\mathbf{y}|\mathbf{x};\theta) \approx \sum_{i=0}^{N-1}logp(\mathbf{y+1}|\mathbf{x},\mathbf{y_c};\theta)$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;2. Neural Abstractive Summarization Model&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Abstractive summarization은 더 어려운 생성 문제를 해결해야 하지만, extraction에 비해 상대적으로 강한 제약을 두고 있지 않습니다. 따라서 Abstractive summarization 모델은 생성과정에 있어 더 자유로울 수 있으며, 보다 넓은 범위의 훈련 데이터에 적합시킬 수 있습니다.&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2015년에 발표된 본 눈문은 이러한 &lt;b&gt;Abstractive summarization&lt;/b&gt;을 위한 &lt;b&gt;scoring function&lt;/b&gt; \(\mathbf{s}\)의 &lt;b&gt;모델링&lt;/b&gt;에&amp;nbsp;대해 다루고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;scoring function에 conditional log-probability의 개념을 대입한다면,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 본 논문의&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;구체적인 목적&lt;/b&gt;은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;local conditional distribution&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;\(p(\mathbf{y_{i+1}}|\mathbf{x},\mathbf{y_c};\theta )\)의&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;모델링&lt;/b&gt;이라고 할 수 있을 것 입니다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Model architecture&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리가 찾으려는 \(p(\mathbf{y_{i+1}}|\mathbf{x},\mathbf{y_c};\theta )\)는 input sentence \(\mathbf{x}\)에 대한 조건부 확률 형태의 언어모델입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;논문이 발표될 당시 기존의 summarization 모델들은 다음과 같이 언어모델과 조건부 확률을 독립적인 모델로 나누어 계산하였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$\argmax\limits_y logp(\mathbf{y}|\mathbf{x}) = \argmax\limits_y logp(\mathbf{y})p(\mathbf{x}|\mathbf{y})$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 본 논문에서는 &lt;b&gt;Neural machine translation&lt;/b&gt;의 방법을 차용하여, 구하려는 분포인 \(p(\mathbf{y_{i+1}}|\mathbf{x},\mathbf{y_c};\theta )\)를 하나의 &lt;b&gt;신경망&lt;/b&gt;에 &lt;b&gt;directly parameterizing&lt;/b&gt; 합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;502&quot; height=&quot;343&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;875&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cGUVEJ/btraGFkFbxT/SOXPtmez8hvbYIOxKW5nRk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cGUVEJ/btraGFkFbxT/SOXPtmez8hvbYIOxKW5nRk/img.png&quot; data-alt=&quot;NNLM&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cGUVEJ/btraGFkFbxT/SOXPtmez8hvbYIOxKW5nRk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcGUVEJ%2FbtraGFkFbxT%2FSOXPtmez8hvbYIOxKW5nRk%2Fimg.png&quot; width=&quot;502&quot; height=&quot;343&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;875&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;NNLM&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;position: absolute;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;directly parameterizing의 핵심은 다음 단어의 &lt;b&gt;context probability&lt;/b&gt;를 추정하기 위한 &lt;b&gt;언어 모델&lt;/b&gt;에 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://supkoon.tistory.com/16?category=871653&quot;&gt;NNLM&lt;/a&gt;&lt;/b&gt;은 언어 모델을 directly parameterizing 할 수 있는 가장 기본적인 형태의 신경망 모델로, 본 논문에서 probabilistic language model을 모델링하기 위한 &lt;b&gt;base model&lt;/b&gt;로 사용됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;NNLM에 대한 자세한 설명이 필요하신 분 께서는 먼저 아래의 리뷰를 참고 부탁드립니다.&lt;/p&gt;
&lt;figure id=&quot;og_1627374168023&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[자연어처리][paper review] NNLM : A Neural Probabilistic Language Model&quot; data-og-description=&quot;본 논문을 통해 처음 소개된 NNLM(Neural Network Language Model)은 word2vec의 기초가 되는 논문으로 2003년 발표되었습니다. count based word representation이 많이 사용되면 당시, language modeling을 어렵..&quot; data-og-host=&quot;supkoon.tistory.com&quot; data-og-source-url=&quot;https://supkoon.tistory.com/16?category=871653&quot; data-og-url=&quot;https://supkoon.tistory.com/16&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/zGGzP/hyK1fdlz5m/UHGFhvuC0WkmLdIIeJTx5K/img.png?width=800&amp;amp;height=547&amp;amp;face=0_0_800_547,https://scrap.kakaocdn.net/dn/butStn/hyK1dGBTZP/xZhwCZxcXWh4PRgowea7sk/img.png?width=800&amp;amp;height=547&amp;amp;face=0_0_800_547,https://scrap.kakaocdn.net/dn/cxfUCv/hyK2AAbcy3/zOKUTEXo79sEKh4DkhX7CK/img.jpg?width=2900&amp;amp;height=3867&amp;amp;face=0_0_2900_3867&quot;&gt;&lt;a href=&quot;https://supkoon.tistory.com/16?category=871653&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://supkoon.tistory.com/16?category=871653&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/zGGzP/hyK1fdlz5m/UHGFhvuC0WkmLdIIeJTx5K/img.png?width=800&amp;amp;height=547&amp;amp;face=0_0_800_547,https://scrap.kakaocdn.net/dn/butStn/hyK1dGBTZP/xZhwCZxcXWh4PRgowea7sk/img.png?width=800&amp;amp;height=547&amp;amp;face=0_0_800_547,https://scrap.kakaocdn.net/dn/cxfUCv/hyK2AAbcy3/zOKUTEXo79sEKh4DkhX7CK/img.jpg?width=2900&amp;amp;height=3867&amp;amp;face=0_0_2900_3867');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[자연어처리][paper review] NNLM : A Neural Probabilistic Language Model&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;본 논문을 통해 처음 소개된 NNLM(Neural Network Language Model)은 word2vec의 기초가 되는 논문으로 2003년 발표되었습니다. count based word representation이 많이 사용되면 당시, language modeling을 어렵..&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;supkoon.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;position: absolute;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;292&quot; data-origin-height=&quot;392&quot; width=&quot;218&quot; height=&quot;293&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zihWg/btraEgy0RpU/f1vxvKn1Qww0CiLYUGnRs0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zihWg/btraEgy0RpU/f1vxvKn1Qww0CiLYUGnRs0/img.png&quot; data-alt=&quot;NNLM with encoder&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zihWg/btraEgy0RpU/f1vxvKn1Qww0CiLYUGnRs0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzihWg%2FbtraEgy0RpU%2Ff1vxvKn1Qww0CiLYUGnRs0%2Fimg.png&quot; data-origin-width=&quot;292&quot; data-origin-height=&quot;392&quot; width=&quot;218&quot; height=&quot;293&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;NNLM with encoder&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 제안하는 모델은 &lt;b&gt;&quot;Neural&quot; Abstractive Summarization Model&lt;/b&gt;이라고 할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 모델에 대해 자세히 들여다 보도록 하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제안하는 모델은 그림과 같이 &lt;b&gt;NNLM&lt;/b&gt;에 &lt;b&gt;encoder&lt;/b&gt;가 더해진 구조입니다. encoder를 제외한다면 NNLM과 사실상 동일합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;수식으로 나타낸다면, 다음과 같이 인코더와 비선형 활성화 함수를 포함하는 Neural Language Model이 될 것입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$p(\mathbf{y_{i+1}}|\mathbf{y_c},\mathbf{x};\theta) \propto exp(\mathbf{V}\mathbf{h} + \mathbf{W}enc(\mathbf{x},\mathbf{y_c})),$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$\tilde{\mathbf{y_c}} = [\mathbf{E}\mathbf{y_{i-C+1}},...,\mathbf{E}\mathbf{y_i}],$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$\mathbf{h} = tanh(\mathbf{U}\tilde{\mathbf{y}}_c)$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;encoder의 output \(enc(\mathbf{x},\mathbf{y_c})\)과 hidden layer output \(\mathbf{h}\)를 함께 고려하여 출력 \(p(\mathbf{y_{i+1}}|\mathbf{y_c},\mathbf{x};\theta)\)를 내놓음을 알 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Notation과 함께 간략한 설명을 드리도록 하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;\(C\)는 앞서 설명드린 대로 window size를,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;\(D\)는 word embedding size를,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;\(H\)는 hidden layer \(\mathbf{h}\)의 크기(유닛 수)를 의미합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 \(\theta\)는 모델 parameter들의 집합으로 \(\theta = (\mathbf{E},\mathbf{U},\mathbf{V},\mathbf{W})\) 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;\(\mathbf{E}\)는 window size C 이내의 출력단어들인 \(\mathbf{y_c}\)를 \(\tilde{\mathbf{y}}_c\)로 임베딩 하기위해 사용됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서&amp;nbsp;&amp;nbsp;\(\mathbf{E}\)는 \(\mathbf{E} \in \mathbb{R}^{D\times V}\)인 word embedding matrix입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두번째로 &amp;nbsp;\(\mathbf{U}\)는 임베딩된 \(\tilde{\mathbf{y}}_c\)를 hidden layer \(\mathbf{h}\)로 입력시켜주는 역할을 합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 \(\mathbf{U}\)는 \(\mathbf{U} \in \mathbb{R}^{(CD)\times H}\)인 weight matrix 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;\(\mathbf{V}\)는 hidden layer \(\mathbf{h}\)의 output을 output layer로 입력시켜주는 역할을 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 \(\mathbf{V}\)는 \(\mathbf{V} \in \mathbb{R}^{V\times H}\)인 weight matrix 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마지막으로 \(\mathbf{W}\)는 encoder의 output을 output layer로 입력시켜주는 역할을 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 \(\mathbf{W}\)는 \(\mathbf{W} \in \mathbb{R}^{V\times H}\)인 weight matrix 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;종합하여 보면, 제안하는 모델은 입, 출력을 동시에 고려하는 인코더를 사용하여 Context를 반영한 출력(요약)을 생성한다고 할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Encoder&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;encoder&lt;/b&gt;는 \(\mathbf{x}\), \(\mathbf{y_c}\)를 input으로 받아 함께 학습하면서 &lt;b&gt;Context&lt;/b&gt;를 &lt;b&gt;생성과정에 포함&lt;/b&gt;시킬 수 있도록 하는 역할을 합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;292&quot; data-origin-height=&quot;392&quot; width=&quot;190&quot; height=&quot;255&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uv01Z/btraHset6I3/Mc9PKDESheGyyL66WjodXk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uv01Z/btraHset6I3/Mc9PKDESheGyyL66WjodXk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uv01Z/btraHset6I3/Mc9PKDESheGyyL66WjodXk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fuv01Z%2FbtraHset6I3%2FMc9PKDESheGyyL66WjodXk%2Fimg.png&quot; data-origin-width=&quot;292&quot; data-origin-height=&quot;392&quot; width=&quot;190&quot; height=&quot;255&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저자들은 그림에서 black box로 표현된 Encoder(enc)를 위해 사용할 수 있는 &lt;b&gt;세가지 구조&lt;/b&gt;를 제안하고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1) Bag-of-Words Encdoer&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;156&quot; height=&quot;316&quot; data-origin-width=&quot;1000&quot; data-origin-height=&quot;2026&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Ndy2n/btraFFMnoJB/FNPQSswpgrlRiYu6A4KAI0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Ndy2n/btraFFMnoJB/FNPQSswpgrlRiYu6A4KAI0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Ndy2n/btraFFMnoJB/FNPQSswpgrlRiYu6A4KAI0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNdy2n%2FbtraFFMnoJB%2FFNPQSswpgrlRiYu6A4KAI0%2Fimg.png&quot; width=&quot;156&quot; height=&quot;316&quot; data-origin-width=&quot;1000&quot; data-origin-height=&quot;2026&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Bag-of-Words Encdoer(\(enc_1\))는 input sentence의 &lt;b&gt;각 단어&lt;/b&gt;를 \(H\)차원으로 임베딩하여 &lt;b&gt;동일한 가중치\(1\over M\)로 반영&lt;/b&gt;하는 방법입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$\tilde{\mathbf{x}} = [\mathbf{F}\mathbf{x_1},...,\mathbf{F}\mathbf{x_M}]$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;\(\mathbf{F}\)는 \(V\)차원의 각 단어를 \(H\)차원으로 매핑해주는 embedding matrix로 \(\mathbf{F}\in \mathbb{R}^{H\times V}\)입니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$\mathbf{p} = [1/M,...,1/M]$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$enc_1(\mathbf{x},\mathbf{y_c}) = \mathbf{p}^T\tilde{\mathbf{x}},$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Uniform distribution&lt;/b&gt;을 적용하여 동일한 가중치를 부여합니다. Bag-of-Words Encdoer는 \(\mathbf{y_c}\)를 사용하지 않습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2) Convolution Encoder&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Convolution Encoder는 &lt;b&gt;local Interaction&lt;/b&gt;을 학습할 수 있도록 input sentence에&amp;nbsp;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; letter-spacing: 0px;&quot;&gt;&lt;b&gt;temporal convolution&lt;/b&gt;을 적용하는 방법입니다.&lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; letter-spacing: 0px;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;temporal convolution은&lt;span&gt;&amp;nbsp;&lt;/span&gt;시퀀스를 다룰 때 많이 사용하는 CNN의 일종입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일반적으로 이미지 처리를 위해 수행되는 convolution 계산이 2개의 축을 따라 움직이는 것과는 다르게, 시퀀스를 다루기 위한 convolution은 시퀀스의 흐름에 따른 축으로만 이동하며&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;1-D convolution&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;계산을 수행합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$\tilde{\mathbf{x}}^0 = [\mathbf{F} \mathbf{x_1},...,\mathbf{F} \mathbf{x_M}]$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 각각 단어를 \(H\)차원의 임베딩 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$\forall i,l \in \{1,...,L\},\,\,\bar{\mathbf{x}}_{i}^l = \mathbf{Q}^l\tilde{\mathbf{x}}^{l-1}_{[i-Q,...,i+Q]}],$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$\forall i,l \in \{1,...,L\},\,\,\tilde{\mathbf{x}}_{j}^l = tanh(\max\{\bar{\mathbf{x}}_{2i-1}^l,\bar{\mathbf{x}}_{2i}^l\}),$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;convoltion, max-pooling, activation function \(tanh\)를 포함하는 \(L\)개의 deep convolution layer를 거칩니다. \(\mathbf{Q}^{L\times H\times 2Q+1}\)는 각 layer의 필터 집합을 의미합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$\forall j, enc_2(\mathbf{x},\mathbf{y_c})_j = \max\limits_i \tilde{\mathbf{x}}_{i,j}^L,$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;L번째 convolution layer의 output을 종합하여 가장 큰 하나의 output만을 내놓습니다.(max over time)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;역시 \(\mathbf{y_c}\)를 사용하지 않습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3) Attention-Based Encoder&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;191&quot; height=&quot;266&quot; data-origin-width=&quot;276&quot; data-origin-height=&quot;384&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/buaZid/btraEf1kctP/EW3VCdedcsgkzHX8rjZMs0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/buaZid/btraEf1kctP/EW3VCdedcsgkzHX8rjZMs0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/buaZid/btraEf1kctP/EW3VCdedcsgkzHX8rjZMs0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbuaZid%2FbtraEf1kctP%2FEW3VCdedcsgkzHX8rjZMs0%2Fimg.png&quot; width=&quot;191&quot; height=&quot;266&quot; data-origin-width=&quot;276&quot; data-origin-height=&quot;384&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마지막으로 Attention-Based Encoder(\(enc_3\))은 &lt;b&gt;&lt;a href=&quot;https://supkoon.tistory.com/19?category=871653&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Bahadanau Attention&lt;/a&gt;&lt;/b&gt;을 사용하여 &lt;b&gt;Input&lt;/b&gt;과 &lt;b&gt;Output&lt;/b&gt;을&lt;b&gt; 모두 고려&lt;/b&gt;할 수 있는 &lt;b&gt;attention based contextual encoder&lt;/b&gt; 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; letter-spacing: 0px;&quot;&gt;앞선 방법들에 비해 전체&lt;b&gt; input sentence에 대한 single representation&lt;/b&gt;을 계산할 수 있다는 장점 또한 존재합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$\tilde{\mathbf{x}} = [\mathbf{F} \mathbf{x_1},...,\mathbf{F} \mathbf{x_M}],$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;역시 각각 단어를 \(H\)차원의 임베딩 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$\tilde{\mathbf{y}}_c^{'} = [\mathbf{G} \mathbf{y}_{i-C+1},...,\mathbf{G} \mathbf{y_i} ]$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Context \(\mathbf{y_c}\)또한 \(D\)차원으로 임베딩합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$\tilde{\mathbf{x}} \propto exp(\tilde{\mathbf{x}} \mathbf{P} \tilde{\mathbf{y}}_c^{'}),$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;학습 가능한 Attention matrix \(\mathbf{P \in \mathbb{R}^{H\times (CD)}}\)를 도입하여 임베딩된 \(\tilde{\mathbf{x}}\) \(\tilde{\mathbf{y}}_c^{'}\) 사이의 Attention alignment을 계산합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$\forall i\,\,\bar{\mathbf{x}_i} = \sum_{q=i-Q}^{i+Q}\tilde{\mathbf{x}}_i/\mathbf{Q}$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;i번째 위치의 \(\tilde{\mathbf{x_i}}\)에서 &lt;b&gt;attention alignment&lt;/b&gt;가 강하게 일어났을 때, &lt;b&gt;주변 단어들에게도 영향&lt;/b&gt;을 나누어 주도록 &lt;b&gt;smoothing window&lt;/b&gt; \(\mathbf{Q}\)를 적용합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$enc_3(\mathbf{x},\mathbf{y_c}) = \mathbf{p}^T\bar{\mathbf{x}},$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;\(\bar{\mathbf{x}}\)에 attention alignment \(p\)를 적용하여 인코딩 결과를 얻습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;본 논문에서는 최종적으로 &lt;b&gt;Attention based encoder 구조를 선택&lt;/b&gt;하였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래의 그림은 학습된 attention alignment의 distribution을 시각화 한 예시입니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;684&quot; data-origin-height=&quot;820&quot; width=&quot;400&quot; height=&quot;479&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tvYR0/btraGOorhYU/NhqDuAp6IkR5iqmQGEtRpK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tvYR0/btraGOorhYU/NhqDuAp6IkR5iqmQGEtRpK/img.png&quot; data-alt=&quot;Attention distribution&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tvYR0/btraGOorhYU/NhqDuAp6IkR5iqmQGEtRpK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtvYR0%2FbtraGOorhYU%2FNhqDuAp6IkR5iqmQGEtRpK%2Fimg.png&quot; data-origin-width=&quot;684&quot; data-origin-height=&quot;820&quot; width=&quot;400&quot; height=&quot;479&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Attention distribution&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Training&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;추출방식에 비해 생성 요약은 생성 과정에서의 단어 선택에 대한 제약이 완화되어 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 &lt;b&gt;생성 요약&lt;/b&gt;은 &lt;b&gt;임의의 input, output pair&lt;/b&gt; \((\mathbf{x}^{(1)},\mathbf{y}^{(1)}),...,(\mathbf{x}^{(J)},\mathbf{y}^{(J)})\)에 대하여 &lt;b&gt;폭넓게 학습이 가능&lt;/b&gt;합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;손실함수&lt;/b&gt;로는 &lt;b&gt;NLL&lt;/b&gt;이 사용됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$NLL(\theta) = -\sum_{j=1}^J logp(\mathbf{y}^{(j)}|\mathbf{x}^{(j)};\theta),$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$=-\sum_{j=1}^J\sum_{i=1}^{N-1}logp(\mathbf{y_{i+1}}^{(j)}|\mathbf{x}^{(j)},\mathbf{y_c};\theta)$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Generating&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;학습된 모델을 사용한 &lt;b&gt;Generation&lt;/b&gt;은 다음과 같이 &lt;b&gt;scoring function을 최대로 하는 output&lt;/b&gt; \(mathbf{y}\)를 찾는 과정으로 진행됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$\mathbf{y}^* = \argmax\limits_{\mathbf{y}\in\mathcal{Y}} \sum_{i=0}^{N-1} g(\mathbf{y}_{i+1},\mathbf{x},\mathbf{y}_c)$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 생성 과정에서 &lt;b&gt;beam-search&lt;/b&gt;가 사용되었습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;826&quot; data-origin-height=&quot;688&quot; width=&quot;436&quot; height=&quot;364&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mXuQg/btraJoXaUne/2wqWVU2XLnydOmNww8Eiak/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mXuQg/btraJoXaUne/2wqWVU2XLnydOmNww8Eiak/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mXuQg/btraJoXaUne/2wqWVU2XLnydOmNww8Eiak/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmXuQg%2FbtraJoXaUne%2F2wqWVU2XLnydOmNww8Eiak%2Fimg.png&quot; data-origin-width=&quot;826&quot; data-origin-height=&quot;688&quot; width=&quot;436&quot; height=&quot;364&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Extractive Tuning&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;Attention 기반의 생성 요약 모델&lt;/b&gt;은 &lt;b&gt;효과적인 성능&lt;/b&gt;을 보여줍니다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;하지만 생성모델은 고유명사와 같이 &lt;b&gt;중요한 단어를 제외할 가능성&lt;/b&gt;이 존재합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Extractive Tuning&lt;/b&gt;은 모델이 &lt;b&gt;extractive/abstractive 사이의 trade-off를 고려&lt;/b&gt;할 수 있도록 &lt;b&gt;몇가지의 특성집합을 추가&lt;/b&gt;하여&lt;b&gt; Tuning&lt;/b&gt;을 진행하는 과정을 의미합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존에 scoring function은 다음과 같이 정의되었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$s(\mathbf{x},\mathbf{y}) \approx \sum_{i=0}^{N-1}g(\mathbf{y_{i+1},\mathbf{x},\mathbf{y_c}})$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Tuning은 scoring function의 \(g\)를 \(g(\mathbf{y}_{i+1},\mathbf{x},\mathbf{y}_c) \triangleq \alpha^T f(\mathbf{y}_{i+1} ,\mathbf{x}, \mathbf{y}_c)\)로 설정하여 계산합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;\(f\)는 여러개의 특성을 생성해주는 특성 함수를, \(\alpha\)는 생성된 각 특성에 대한 가중치를 의미합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$s(\mathbf{x},\mathbf{y}) =&amp;nbsp; \sum_{i=0}^{N-1} \alpha^T f(\mathbf{y}_{i+1} ,\mathbf{x}, \mathbf{y}_c)$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특성 함수\(f\)는 아래와 같은 특성 집합을 사용하여 기존의 scoring function이 다양한 extractive feature를 학습할 수 있도록 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$f(\mathbf{y}_{i+1},\mathbf{x},\mathbf{y}_c) = [\,\,\log p(\mathbf{y}_{i+1}|\mathbf{x},\mathbf{y}_c;\theta),$&lt;b&gt;(base)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$\mathbb{1}\{\exists j. \mathbf{y}_{i+1} = \mathbf{x}_j\},$ &lt;b&gt;(1-gram)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$\mathbb{1}\{\exists j. \mathbf{y}_{i+1-k} =\mathbf{x}_{j-k}\forall k \in \{0,1 \}\},$ &lt;b&gt;(2-gram)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$\mathbb{1}\{\exists j. \mathbf{y}_{i+1-k} =\mathbf{x}_{j-k}\forall k \in \{0,1,2 \}\},$ &lt;b&gt;(3-gram)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$\mathbb{1}\{\exists k&amp;lt;j. \mathbf{y}_{i} = \mathbf{x}_k,\mathbf{y}_{i+1} = \mathbf{x}_j \}\,\,]$ &lt;b&gt;(re-ordering)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 5개 특성의 가중치를 반영해주는 파라미터 \(\alpha\)는 \(\alpha \in \mathbb{R}^5\)가 됩니다.&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Extractive Tuning은 기존 모델의 학습을 마친 후에, 모델 파라미터 \(\theta\)를 고정하고 \(\alpha\)를 Tuning하는 방법으로 진행됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;3.Results&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실험은 뉴스 기사 &lt;b&gt;데이터셋&lt;/b&gt;인 DUC-2004 데이터셋과 Gigaword 데이터셋이 사용되었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DUC-2004 데이터셋은 &lt;b&gt;사람이 직접 작성한 reference summary&lt;/b&gt;를 포함하고 있으며,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Gigaword 데이터셋은 &lt;span style=&quot;background-color: #f8f9fa; color: #202124;&quot;&gt;각 기사의 &lt;b&gt;헤드라인을&lt;/b&gt; &lt;b&gt;summary로 정의&lt;/b&gt;하고 첫 번째 문장과 연결시켜 input-summary pair를 생성하였습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;성능&amp;nbsp;비교를&amp;nbsp;위한&amp;nbsp;&lt;b&gt;Metric&lt;/b&gt;으로는&amp;nbsp;&lt;b&gt;Rouge&amp;nbsp;score&lt;/b&gt;와&amp;nbsp;&lt;b&gt;Perplexity&lt;/b&gt;가&amp;nbsp;사용되었습니다.&amp;nbsp;Rouge&amp;nbsp;score는&amp;nbsp;machine&amp;nbsp;translation과&amp;nbsp;같은&amp;nbsp;언어모델의&amp;nbsp;generation&amp;nbsp;성능을&amp;nbsp;평가하기&amp;nbsp;위해&amp;nbsp;사용되는&amp;nbsp;대표적인&amp;nbsp;Metric입니다.&amp;nbsp;$$ROUGE-N&amp;nbsp;=&amp;nbsp;{{\sum_{S\in&amp;nbsp;\{Reference\,Summaries\}}&amp;nbsp;\sum_{gram_n&amp;nbsp;\in&amp;nbsp;S}Count_{match}(gram_n)}&amp;nbsp;\over&amp;nbsp;{\sum_{S\in&amp;nbsp;\{Reference\,Summaries\}}&amp;nbsp;\sum_{gram_n&amp;nbsp;\in&amp;nbsp;S}Count(gram_n)}}$$&amp;nbsp;Rouge에&amp;nbsp;대한&amp;nbsp;자세한&amp;nbsp;사항은&amp;nbsp;아래의&amp;nbsp;리뷰를&amp;nbsp;참고&amp;nbsp;부탁드립니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1627416371349&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[자연어처리][Metric] ROUGE score : Recall-Oriented Understudy for Gisting Evaluation&quot; data-og-description=&quot;ROUGE ROUGE(Recall-Oriented Understudy for Gisting Evaluation)는 text summarization, machine translation과 같은 generation task를 평가하기 위해 사용되는 대표적인 Metric입니다. 본 글의 내용은 ROUGE s..&quot; data-og-host=&quot;supkoon.tistory.com&quot; data-og-source-url=&quot;https://supkoon.tistory.com/26?category=871653&quot; data-og-url=&quot;https://supkoon.tistory.com/26&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/j5DmW/hyK2IFhftG/33P82fkHpxwM6HjqbtBkWK/img.png?width=710&amp;amp;height=1089&amp;amp;face=0_0_710_1089,https://scrap.kakaocdn.net/dn/qLrUu/hyK1ldO6ME/nGeBlpCtaFtZuP5xQoQP5k/img.png?width=710&amp;amp;height=1089&amp;amp;face=0_0_710_1089,https://scrap.kakaocdn.net/dn/bbaxTe/hyK1dz8Xuu/Cbh6Kskc69HkOkOXuj75kk/img.jpg?width=2900&amp;amp;height=3867&amp;amp;face=0_0_2900_3867&quot;&gt;&lt;a href=&quot;https://supkoon.tistory.com/26?category=871653&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://supkoon.tistory.com/26?category=871653&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/j5DmW/hyK2IFhftG/33P82fkHpxwM6HjqbtBkWK/img.png?width=710&amp;amp;height=1089&amp;amp;face=0_0_710_1089,https://scrap.kakaocdn.net/dn/qLrUu/hyK1ldO6ME/nGeBlpCtaFtZuP5xQoQP5k/img.png?width=710&amp;amp;height=1089&amp;amp;face=0_0_710_1089,https://scrap.kakaocdn.net/dn/bbaxTe/hyK1dz8Xuu/Cbh6Kskc69HkOkOXuj75kk/img.jpg?width=2900&amp;amp;height=3867&amp;amp;face=0_0_2900_3867');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[자연어처리][Metric] ROUGE score : Recall-Oriented Understudy for Gisting Evaluation&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;ROUGE ROUGE(Recall-Oriented Understudy for Gisting Evaluation)는 text summarization, machine translation과 같은 generation task를 평가하기 위해 사용되는 대표적인 Metric입니다. 본 글의 내용은 ROUGE s..&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;supkoon.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Perplexity&lt;/b&gt; 역시 언어모델의 성능을 평가하는 대표적인 metric 입니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$Perplexity=\sqrt[N]{\frac{1}{P(w_{1}, w_{2}, w_{3}, ... , w_{N})}}=\sqrt[N]{\frac{1}{\prod_{i=1}^{N}P(w_{i}| w_{1}, w_{2}, ... , w_{i-1})}}$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;perplexity에 대한 자세한 설명 또한 아래의 리뷰를 참고 부탁드립니다.&lt;/p&gt;
&lt;figure id=&quot;og_1627463748208&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[자연어처리][Metric] Perplexity&quot; data-og-description=&quot;Perplexity Perplexity는 BLEU, ROUGE와 더불어 언어모델의 Generation&amp;nbsp;성능을 판단할 수 있는 지표입니다. Machine translation, text summarization과 같은 Generation task의 성능 비교를 위해 주로 사용됩니..&quot; data-og-host=&quot;supkoon.tistory.com&quot; data-og-source-url=&quot;https://supkoon.tistory.com/41&quot; data-og-url=&quot;https://supkoon.tistory.com/41&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bgIqSQ/hyK2HNA3F6/fJct5KGdrPWkLbZPnOrBDK/img.png?width=736&amp;amp;height=442&amp;amp;face=0_0_736_442,https://scrap.kakaocdn.net/dn/up21g/hyK2z9RQ5w/tDLPZ3CcG4kP9HDPQiEmjK/img.png?width=736&amp;amp;height=442&amp;amp;face=0_0_736_442,https://scrap.kakaocdn.net/dn/ATXPS/hyK2xxr5q8/GG7PRX6NDM0DtgJRLWTjfk/img.jpg?width=2900&amp;amp;height=3867&amp;amp;face=0_0_2900_3867&quot;&gt;&lt;a href=&quot;https://supkoon.tistory.com/41&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://supkoon.tistory.com/41&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bgIqSQ/hyK2HNA3F6/fJct5KGdrPWkLbZPnOrBDK/img.png?width=736&amp;amp;height=442&amp;amp;face=0_0_736_442,https://scrap.kakaocdn.net/dn/up21g/hyK2z9RQ5w/tDLPZ3CcG4kP9HDPQiEmjK/img.png?width=736&amp;amp;height=442&amp;amp;face=0_0_736_442,https://scrap.kakaocdn.net/dn/ATXPS/hyK2xxr5q8/GG7PRX6NDM0DtgJRLWTjfk/img.jpg?width=2900&amp;amp;height=3867&amp;amp;face=0_0_2900_3867');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[자연어처리][Metric] Perplexity&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Perplexity Perplexity는 BLEU, ROUGE와 더불어 언어모델의 Generation&amp;nbsp;성능을 판단할 수 있는 지표입니다. Machine translation, text summarization과 같은 Generation task의 성능 비교를 위해 주로 사용됩니..&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;supkoon.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;result 1.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1658&quot; data-origin-height=&quot;632&quot; width=&quot;787&quot; height=&quot;300&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bIMDSP/btraCSS1xzZ/sLrtzNBD54LraqnN2H2Kg0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bIMDSP/btraCSS1xzZ/sLrtzNBD54LraqnN2H2Kg0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bIMDSP/btraCSS1xzZ/sLrtzNBD54LraqnN2H2Kg0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbIMDSP%2FbtraCSS1xzZ%2FsLrtzNBD54LraqnN2H2Kg0%2Fimg.png&quot; data-origin-width=&quot;1658&quot; data-origin-height=&quot;632&quot; width=&quot;787&quot; height=&quot;300&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Rouge score를 사용하여 Summarization 성능을 비교한 결과입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Ext. %는 Extract %를 의미하며, 따라서 input과 output의 토큰이 겹칠 확률입니다. extractive 모델에 대해서는 100%가 나오게 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제안하는 모델인 ABS가 baseline 모델과 비교할 때 가장 우수한 요약 성능을 보였음을 알 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;result 2.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;850&quot; data-origin-height=&quot;488&quot; width=&quot;405&quot; height=&quot;233&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c4q7ib/btraImL4ZoV/DdBPfL7GwyMWVyPNcoWOB0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c4q7ib/btraImL4ZoV/DdBPfL7GwyMWVyPNcoWOB0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c4q7ib/btraImL4ZoV/DdBPfL7GwyMWVyPNcoWOB0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc4q7ib%2FbtraImL4ZoV%2FDdBPfL7GwyMWVyPNcoWOB0%2Fimg.png&quot; data-origin-width=&quot;850&quot; data-origin-height=&quot;488&quot; width=&quot;405&quot; height=&quot;233&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인코더의 종류에 따른 Perplexity 성능의 비교입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Perplexity가 가장 낮은 Attention based encoder(\(enc_3\))가 가장 우수한 성능을 보였음을 알 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;result 3.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;818&quot; data-origin-height=&quot;454&quot; width=&quot;420&quot; height=&quot;233&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ce0VmE/btraBSseyKU/ZtfNk2VxFc18uMMuZhWMM0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ce0VmE/btraBSseyKU/ZtfNk2VxFc18uMMuZhWMM0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ce0VmE/btraBSseyKU/ZtfNk2VxFc18uMMuZhWMM0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fce0VmE%2FbtraBSseyKU%2FZtfNk2VxFc18uMMuZhWMM0%2Fimg.png&quot; data-origin-width=&quot;818&quot; data-origin-height=&quot;454&quot; width=&quot;420&quot; height=&quot;233&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;생성과정에 있어서 Greedy method와 beam search method 간의 Rouge score 비교입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제안하는 모델인 ABS+에 Beam search를 적용하였을 때 생성과정에서 가장 좋은 성능을 보여주었음을 알 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;result 4.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;480&quot; data-origin-height=&quot;1420&quot; width=&quot;441&quot; height=&quot;1305&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b96Sju/btraHZJ7dky/BKaFKoNTdxOMqLWnZsHka0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b96Sju/btraHZJ7dky/BKaFKoNTdxOMqLWnZsHka0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b96Sju/btraHZJ7dky/BKaFKoNTdxOMqLWnZsHka0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb96Sju%2FbtraHZJ7dky%2FBKaFKoNTdxOMqLWnZsHka0%2Fimg.png&quot; data-origin-width=&quot;480&quot; data-origin-height=&quot;1420&quot; width=&quot;441&quot; height=&quot;1305&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실제로 Gigaword 데이터셋에서 생성요약을 진행한 결과 샘플입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예시 7과 같이 실패한 경우도 존재하지만, 예시 4에서는 생성요약모델이 New zealand를 nz로 &lt;b&gt;re-wording&lt;/b&gt; 하였음을 확인할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;마무리&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;본 논문은 contextual encoder를 사용하는 Neural Abstractive Summarization 모델을 제안하고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존의 Abstractive summarization 방법과는 다르게, 제안하는 모델은 언어모델에 기반하여 scoring function을 신경망에 directly parameterizing 하였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 contextual encoder로 사용가능한 세가지 구조 BoW, CNN, Attention를 소개하였는데, Attention based encoder가 가장 좋은 성능을 보였습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;수식과 내용이 많은 논문인지라 시간이 많이 소요되었지만, 배울게 많았던 논문인 것 같습니다. 감사합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>데이터과학/자연어처리</category>
      <category>NLP</category>
      <category>text summarization</category>
      <category>논문리뷰</category>
      <category>딥러닝</category>
      <category>머신러닝</category>
      <category>생성요약</category>
      <category>자연어처리</category>
      <category>추출요약</category>
      <author>섭구</author>
      <guid isPermaLink="true">https://supkoon.tistory.com/40</guid>
      <comments>https://supkoon.tistory.com/40#entry40comment</comments>
      <pubDate>Wed, 28 Jul 2021 05:39:47 +0900</pubDate>
    </item>
    <item>
      <title>[자연어처리][paper review] TextRank: Bringing Order into Texts</title>
      <link>https://supkoon.tistory.com/39</link>
      <description>&lt;script&gt; MathJax = { tex: {inlineMath: [['$', '$'], ['\\(', '\\)']]} }; &lt;/script&gt;
&lt;script src=&quot;https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-chtml.js&quot;&gt;&lt;/script&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;본 논문은 그래프 기반의 &lt;b&gt;text summarization&lt;/b&gt; 방법론인 &lt;b&gt;TextRank&lt;/b&gt;에 대하여 소개하고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;TextRank&lt;/b&gt;는 대표적인 &lt;b&gt;그래프 기반 랭킹 알고리즘&lt;/b&gt;인 &lt;b&gt;PageRank&lt;/b&gt;에 기반하여 문서 내의 &lt;b&gt;키워드 추출&lt;/b&gt;을 가능하게 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Graph&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #202122;&quot;&gt;그래프는 &lt;b&gt;vertex&lt;/b&gt;와 &lt;b&gt;edge&lt;/b&gt;로 구성된 유한한 자료구조 입니다. vertex는 정점, edge는 정점과 정점을 연결하는 간선을 의미합니다.&lt;/span&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;217&quot; data-origin-height=&quot;133&quot; width=&quot;259&quot; height=&quot;159&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lzuDQ/btrakorVkLA/roc5JrigUrF1QRWwoE5W81/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lzuDQ/btrakorVkLA/roc5JrigUrF1QRWwoE5W81/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lzuDQ/btrakorVkLA/roc5JrigUrF1QRWwoE5W81/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlzuDQ%2FbtrakorVkLA%2Froc5JrigUrF1QRWwoE5W81%2Fimg.png&quot; data-origin-width=&quot;217&quot; data-origin-height=&quot;133&quot; width=&quot;259&quot; height=&quot;159&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래프 구조는 edge의 방향 유무에 따라 &lt;b&gt;undirected graph(무방향 그래프)&lt;/b&gt;와 &lt;b&gt;directed graph(유향 그래프)&lt;/b&gt;로 나뉩니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;536&quot; data-origin-height=&quot;282&quot; width=&quot;431&quot; height=&quot;227&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bnWA0w/btraoCXnXwe/jjyTTL86Uk4oHf2VKC3wsk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bnWA0w/btraoCXnXwe/jjyTTL86Uk4oHf2VKC3wsk/img.png&quot; data-alt=&quot;(a) undirected graph&amp;amp;amp;nbsp; &amp;amp;amp;nbsp; &amp;amp;amp;nbsp; &amp;amp;amp;nbsp; &amp;amp;amp;nbsp; &amp;amp;amp;nbsp; &amp;amp;amp;nbsp; &amp;amp;amp;nbsp; &amp;amp;amp;nbsp; &amp;amp;amp;nbsp; &amp;amp;amp;nbsp; &amp;amp;amp;nbsp; &amp;amp;amp;nbsp; &amp;amp;amp;nbsp; &amp;amp;amp;nbsp; &amp;amp;amp;nbsp; &amp;amp;amp;nbsp; &amp;amp;amp;nbsp; &amp;amp;amp;nbsp; &amp;amp;amp;nbsp; (b) directed graph&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bnWA0w/btraoCXnXwe/jjyTTL86Uk4oHf2VKC3wsk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbnWA0w%2FbtraoCXnXwe%2FjjyTTL86Uk4oHf2VKC3wsk%2Fimg.png&quot; data-origin-width=&quot;536&quot; data-origin-height=&quot;282&quot; width=&quot;431&quot; height=&quot;227&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;(a) undirected graph&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; (b) directed graph&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 엣지를 동일한 값으로 가정하는 &lt;b&gt;unweighted graph&lt;/b&gt;와 가중치를 갖도록 하는 &lt;b&gt;weighted graph(가중 그래프)&lt;/b&gt;가 존재합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;220&quot; data-origin-height=&quot;126&quot; width=&quot;255&quot; height=&quot;146&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cAyMve/btrapFsyhq3/72IKePDNglWa1MFdmsd7A0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cAyMve/btrapFsyhq3/72IKePDNglWa1MFdmsd7A0/img.png&quot; data-alt=&quot;weighted graph&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cAyMve/btrapFsyhq3/72IKePDNglWa1MFdmsd7A0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcAyMve%2FbtrapFsyhq3%2F72IKePDNglWa1MFdmsd7A0%2Fimg.png&quot; data-origin-width=&quot;220&quot; data-origin-height=&quot;126&quot; width=&quot;255&quot; height=&quot;146&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;weighted graph&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Graph-based ranking&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;그래프 기반의 랭킹 알고리즘&lt;/b&gt;은 자료구조의 한 종류인 그래프를 기반으로 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 알고리즘은 vertex(정점)의 local한 정보만을 반영하지 않고, 전체 그래프의 &lt;b&gt;global information&lt;/b&gt;을 &lt;b&gt;재귀적으로 반영&lt;/b&gt;하여 &lt;b&gt;vertex&lt;/b&gt;(정점)의 &lt;b&gt;중요도&lt;/b&gt;를 결정하는 방법론 입니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래프 기반의 랭킹 모델은 쉽게 설명하면 &lt;b&gt;&quot;voting&quot;&lt;/b&gt; 혹은 &lt;b&gt;&quot;recommendation&quot;&lt;/b&gt;과 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래프의 vertex가 다른 vertex와 연결되어 있다면, 이는 서로에게 &quot;voting&quot;했음을 의미합니다. 더 많은 연결은 갖는 vertex는 많은 &quot;voting&quot;을 받은 것으로 간주할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 &quot;voting&quot;자체의 중요도는 &quot;voting&quot;을 행사하는 vertex의 중요도에 의해 결정됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서&lt;b&gt; vertex의 중요도&lt;/b&gt;는 &quot;&lt;b&gt;얼마나 중요한 vertex들로 부터 voting을 받았는가&lt;/b&gt;&quot;로 부터 판단이 가능합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 이러한 중요도는 vertex의 랭킹을 결정할 수 있는 요소가 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;PageRank&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;313&quot; height=&quot;288&quot; data-origin-width=&quot;250&quot; data-origin-height=&quot;230&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Rw5Wa/btrany83fFO/KtFRrzy88z0hmwc9Q154Zk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Rw5Wa/btrany83fFO/KtFRrzy88z0hmwc9Q154Zk/img.png&quot; data-alt=&quot;PageRank&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Rw5Wa/btrany83fFO/KtFRrzy88z0hmwc9Q154Zk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRw5Wa%2Fbtrany83fFO%2FKtFRrzy88z0hmwc9Q154Zk%2Fimg.png&quot; width=&quot;313&quot; height=&quot;288&quot; data-origin-width=&quot;250&quot; data-origin-height=&quot;230&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;PageRank&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;구글의 &lt;b&gt;PageRank&lt;/b&gt; 알고리즘은 대표적인 그래프 기반의 랭킹 알고리즘 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PageRank는 &lt;b&gt;directed graph&lt;/b&gt; \(G = (V,E)\)로 부터 아래와 같은 식을 통해 vetex \(V_i\)의 중요도를 계산합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$S(V_i) = (1-d) + d*\sum_{j \in {In(V_{i})}} {1\over |Out(V_j)|}&amp;nbsp; S(V_j)$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;\(In(V_i)\)는 vertex \(V_i\) 를 가르키는 vertex의 집합을 의미하며,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;\(Out(V_i\)는 vertex \(V_i\) 가 가르키는 vertex의 집합을 의미합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 기본적으로 vertex \(V_i\)의 중요도는 인접한 vertex의 집합인 \(In(V_i)\)에 속하는 vertex 들의 중요도를 더하여 구한다고 말할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;수식을 보시면 \(S(V_j)\)에 추가적으로 \({1\over |Out(V_j)|}\)를 곱하여 \(\sum_{j \in {In(V_{i})}} {1\over |Out(V_j)|}&amp;nbsp; S(V_j)\)를 계산하는 것을 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;204&quot; height=&quot;200&quot; data-origin-width=&quot;220&quot; data-origin-height=&quot;216&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Bzh5W/btraoCQCfOM/Ud2f3nJMKkJzV1qixTwthK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Bzh5W/btraoCQCfOM/Ud2f3nJMKkJzV1qixTwthK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Bzh5W/btraoCQCfOM/Ud2f3nJMKkJzV1qixTwthK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBzh5W%2FbtraoCQCfOM%2FUd2f3nJMKkJzV1qixTwthK%2Fimg.png&quot; width=&quot;204&quot; height=&quot;200&quot; data-origin-width=&quot;220&quot; data-origin-height=&quot;216&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이는 \(V_i\)와 인접한 vertex \(V_j\)의 edge가 많을수록 \(V_j\)의 개별 &quot;voting&quot; 에 대한 중요도가 희석됨을 고려하기 위함입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마지막으로 \(d\)는 damping factor를 의미합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PageRank는 기본적으로 웹 페이지의 중요도를 고려하기 위해 만들어진 모델입니다. edge는 웹 페이지 내의 링크를 통한 인접한 웹 페이지로의 이동을 의미합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;damping factor \(d\)는 edge를 통해 주어진 그래프에서 인접한 다른 vertex로 이동할 확률을 모델링하여 줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;웹 서핑을 할 때에는 기존에 고려하지 않은 새로운 페이지로의 이동 확률 또한 존재합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;수식의 \(1-d\)는 이러한 &quot;random surfing&quot; 확률을 모델링 한 것 입니다. d는 확률값으로 0~1의 값을 가질 수 있는데, PageRank에서는 0.85를 damping factor로 사용하였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PageRank의 학습은 임의의 Vertex 중요도값에서 시작하여 기준치를 달성할 때 까지 재귀적으로 진행됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;iteration \(k\)에서의 Error 는 \(S^{k+1}(V_i) - S^k(V_i)\)로 계산할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 때 그래프의 수렴은 중요도의 초기값에는 영향을 받지 않고, 오로지 반복 횟수에만 영향을 받게 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;directed/undirected, weighted/unweighted를 모두 고려한 다음 4가지 모델의 결과가 이러한 사실을 잘 보여주고 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;345&quot; height=&quot;300&quot; data-origin-width=&quot;634&quot; data-origin-height=&quot;552&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dhfznv/btramfBvV4G/98WHbfFfvy0QnEwr4KEy8K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dhfznv/btramfBvV4G/98WHbfFfvy0QnEwr4KEy8K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dhfznv/btramfBvV4G/98WHbfFfvy0QnEwr4KEy8K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdhfznv%2FbtramfBvV4G%2F98WHbfFfvy0QnEwr4KEy8K%2Fimg.png&quot; width=&quot;345&quot; height=&quot;300&quot; data-origin-width=&quot;634&quot; data-origin-height=&quot;552&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1.TextRank&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;TextRank&amp;nbsp;&lt;/b&gt;알고리즘은 PageRank를 Text 데이터에 적용하기 위한 variation 구조라고 할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;본 논문에서는 Keyword Extraction과 Sentence Extraction을 위한 두개의 TextRank 방법론을 제시하고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Model architecture&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;PageRank&lt;/b&gt;는 기본적으로 &lt;b&gt;unweighted, directed graph&lt;/b&gt;를 구성하여 vertex의 중요도를 계산합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$S(V_i) = (1-d) + d*\sum_{j \in {In(V_{i})}} {1\over |Out(V_j)|}&amp;nbsp; S(V_j)$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;반면에&lt;b&gt; TextRank&lt;/b&gt;는 &lt;b&gt;weighted graph&lt;/b&gt;와&amp;nbsp;&lt;b&gt;undirected graph &lt;/b&gt;또한&amp;nbsp;중요도를 계산할 수 있도록 개념을 확장하였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이는 윕 페이지에 비해 상호 복잡한 연관관계를 갖는 text data의 특성을 반영하기 위한 것입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 TextRank의 그래프를 구성할 때에는 directed/undirected, weighted/unweighted의 형태 중 자유롭게 선택이 가능합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;weighted graph를 고려한다면, vertex \(V_i\)에 대한 중요도는 다음의 가중합 과정을 통해 계산할 수 있을 것 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$WS(V_i) = (1-d) + d*\sum_{V_j \in {In(V_{i})}} \frac{w_{ji}}{\sum_{V_k\in{Out}(V_j)} w_{jk}} WS(V_j)$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각각 vertex 사이 edge에 대한 가중치는 Keyword Extraction과 Sentence Extraction 방법에 따라 각각 다르게 계산 됩니다. 이는 이후의 과정에서 자세히 설명드리도록 하겠습니다.&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;TextRank를 text data에 적용하기 위해서는 그래프에 추가한 text의 형태에 상관없이 다음의 네가지 단계를 따르면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1) task에 맞는 가장 적당한 text units을 정의하여 그래프에 vertex로 추가합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2) text unit 사이의 관계를 정의하고, vertex 사이에 edge로서 추가합니다. 이 때, edge는 앞서 설명드린대로 directed/undirected, weighted/unweighted의 형태 중 자유롭게 선택 가능합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3) 그래프가 수렴할때까지 랭킹 알고리즘을 반복합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4) 최종적으로 vertex의 중요도를 기반으로 정렬하여 ranking/selection에 사용합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;TextRank for Keyword Extraction&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;TextRank를 Keyword Extraction을 위해 사용한다면, 주어진 Text data에 대한 최종 결과는 단어 혹은 구문의 집합이 될 것입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;따라서 하나 이상의 어휘(lexical units)로 구성된 시퀀스(1~n gram)를 Vertex로 사용하고, Vertex 사이에 유의미한 edge를 정의하여 Keyword Extraction을 위한 중요도를 판단해야 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;본 논문에서는 어휘 단위(lexical units)의 co-occurrence를 통해 TextRank 그래프의 edge를 정의하였습니다.&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;co-occurrence는 Window size N 이내의 동시에 출현을 고려하여 Vertex를 연결시켜 줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;필터링을 통하여 원하는 조건에 맞는 단어만을 Vertex에 추가하는 방법 또한 존재합니다. 예를 들면, 오직 명사와 동사만을 vertex로 추가 하여 그래프릉 생성할 수 있을 것 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후 과정에서 최적의 필터링 조합을 찾기 위한 실험을 진행한 결과, 명사와 형용사만을 그래프에 추가하였을 때 가장 좋은 결과를 보였다고 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정리해 보면, TextRank의 keyword extraction 알고리즘은 다음과 같이 비 지도형태로 진행됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1) Text를 토큰화 하고, 필터링을 위해 POS 태깅을 진행합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;594&quot; height=&quot;203&quot; data-origin-width=&quot;900&quot; data-origin-height=&quot;308&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c0Q6Wq/btrazM4Wz8a/Q38JYGoY4iEuenoFfeKX2K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c0Q6Wq/btrazM4Wz8a/Q38JYGoY4iEuenoFfeKX2K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c0Q6Wq/btrazM4Wz8a/Q38JYGoY4iEuenoFfeKX2K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc0Q6Wq%2FbtrazM4Wz8a%2FQ38JYGoY4iEuenoFfeKX2K%2Fimg.png&quot; width=&quot;594&quot; height=&quot;203&quot; data-origin-width=&quot;900&quot; data-origin-height=&quot;308&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2) 필터링을 진행한 vertex를 그래프에 추가하고, Co-occurrence를 고려하여 edge 또한 추가합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$WS(V_i) = (1-d) + d*\sum_{V_j \in {In(V_{i})}} \frac{w_{ji}}{\sum_{V_k\in{Out}(V_j)} w_{jk}} WS(V_j)$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3) 초기 vertex 중요도를 1로 설정하고 수렴할때가지 알고리즘을 반복합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;756&quot; data-origin-height=&quot;600&quot; width=&quot;421&quot; height=&quot;334&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8VBcK/btrav7PiCJV/M05MS4T98ubJ3XtFlPMEq1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8VBcK/btrav7PiCJV/M05MS4T98ubJ3XtFlPMEq1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8VBcK/btrav7PiCJV/M05MS4T98ubJ3XtFlPMEq1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8VBcK%2Fbtrav7PiCJV%2FM05MS4T98ubJ3XtFlPMEq1%2Fimg.png&quot; data-origin-width=&quot;756&quot; data-origin-height=&quot;600&quot; width=&quot;421&quot; height=&quot;334&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4) 최종적으로 얻은 중요도를 정렬하여 Top-N개의 vertex를 문장의 keyword로 정의합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;830&quot; data-origin-height=&quot;234&quot; width=&quot;564&quot; height=&quot;159&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uv2kO/btraqSrQIuD/FI28z7J3hrV2kbUaKgqgSK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uv2kO/btraqSrQIuD/FI28z7J3hrV2kbUaKgqgSK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uv2kO/btraqSrQIuD/FI28z7J3hrV2kbUaKgqgSK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fuv2kO%2FbtraqSrQIuD%2FFI28z7J3hrV2kbUaKgqgSK%2Fimg.png&quot; data-origin-width=&quot;830&quot; data-origin-height=&quot;234&quot; width=&quot;564&quot; height=&quot;159&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;본 논문에서는 그래프가 너무 커지는 것을 방지하기 위하여 n-gram이 아닌 개별 단어들만을 vertex로 추가하였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 개별 키워드들을 합치는 post-processing 작업을 통해 multi-word keyword로의 변환 또한 가능하다고 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;TextRank for Sentence Extraction&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;TextRank 알고리즘은 Sentence를 vertex로하는 그래프에 대해서도 적용이 가능합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 문장에 대해서는 일일이 동시출현을 고려할 수가 없습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 다음과 같이 문장 \(S_i = w_1^i, w_2^i, \ldots, w_{N_i}^i\), \(S_j = w_1^j, w_2^j, \ldots, w_{N_j}^j\) 사이에서 동시에 출현하는 단어의 개수를 고려하여 edge를 정의합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$Similarity( S_i, S_j) = \frac{|\{ w_k | w_k \in S_i\ \And \ w_k \in S_j \} |}{\log(| S_i |) + \log(|S_j|) }.$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 Sentence Extraction을 위한 TextRank는 문장에 중요도를 부여하는 과정과 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정리해 보면, Sentence Extraction 과정은 다음과 같이 진행됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1) 각 문장에 대한 인덱스를 지정합니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;828&quot; data-origin-height=&quot;894&quot; width=&quot;557&quot; height=&quot;601&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cVrfqv/btrapGSJ14o/Ghbmb8aKoVNNo8xp8KZE91/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cVrfqv/btrapGSJ14o/Ghbmb8aKoVNNo8xp8KZE91/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cVrfqv/btrapGSJ14o/Ghbmb8aKoVNNo8xp8KZE91/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcVrfqv%2FbtrapGSJ14o%2FGhbmb8aKoVNNo8xp8KZE91%2Fimg.png&quot; data-origin-width=&quot;828&quot; data-origin-height=&quot;894&quot; width=&quot;557&quot; height=&quot;601&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2) 그래프에 문장을 vertex로 추가하고, 주어진 수식을 이용하여 vertex 사이의 edge또한 정의합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$Similarity( S_i, S_j) = \frac{|\{ w_k | w_k \in S_i\ \And \ w_k \in S_j \} |}{\log(| S_i |) + \log(|S_j|) }.$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3) Vertex의 중요도를 초기화하고 수렴할때까지 알고리즘을 반복합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;840&quot; data-origin-height=&quot;696&quot; width=&quot;392&quot; height=&quot;325&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b2qEi2/btrasujWZce/KopCdNjRPCkCmGkcSzwKR0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b2qEi2/btrasujWZce/KopCdNjRPCkCmGkcSzwKR0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b2qEi2/btrasujWZce/KopCdNjRPCkCmGkcSzwKR0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb2qEi2%2FbtrasujWZce%2FKopCdNjRPCkCmGkcSzwKR0%2Fimg.png&quot; data-origin-width=&quot;840&quot; data-origin-height=&quot;696&quot; width=&quot;392&quot; height=&quot;325&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4) 최종적으로 정렬을 통해 중요도가 높은 문장들을 사용하여 문서에 대한 요약을 생성합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;840&quot; data-origin-height=&quot;766&quot; width=&quot;506&quot; height=&quot;462&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c6CvhW/btrax8NYIyY/tOdDKUv6eC9hoWU9ybK940/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c6CvhW/btrax8NYIyY/tOdDKUv6eC9hoWU9ybK940/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c6CvhW/btrax8NYIyY/tOdDKUv6eC9hoWU9ybK940/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc6CvhW%2Fbtrax8NYIyY%2FtOdDKUv6eC9hoWU9ybK940%2Fimg.png&quot; data-origin-width=&quot;840&quot; data-origin-height=&quot;766&quot; width=&quot;506&quot; height=&quot;462&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;2.Results&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;result 1.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1720&quot; data-origin-height=&quot;652&quot; width=&quot;733&quot; height=&quot;278&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/crcTeV/btrax8UKqP1/ECu17Iv7KUQL0xjneRUK3K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/crcTeV/btrax8UKqP1/ECu17Iv7KUQL0xjneRUK3K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/crcTeV/btrax8UKqP1/ECu17Iv7KUQL0xjneRUK3K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcrcTeV%2Fbtrax8UKqP1%2FECu17Iv7KUQL0xjneRUK3K%2Fimg.png&quot; data-origin-width=&quot;1720&quot; data-origin-height=&quot;652&quot; width=&quot;733&quot; height=&quot;278&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;TextRank의 Keyword Extraction에 대한 검증 결과입니다. 결과를 통하여 다음의 사실들을 알 수 있었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1) TextRank가 가장 뛰어난 F-1 score를 보였음.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2) window size를 늘리는 것은 역효과를 불러옴&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3) 같은 조건에서 비교해 봤을 때, Undiriected 그래프를 활용한 모델이 directed 그래프를 활용한 모델보다 성능이 좋지 못했음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4) 명사, 형용사를 vertex로 사용하였을 때, 가장 성능이 좋았음.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;result 2.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;758&quot; data-origin-height=&quot;470&quot; width=&quot;452&quot; height=&quot;280&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1Y38N/btraoCb9K8z/rWqnPRkRiyUuAbE0KyW6Nk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1Y38N/btraoCb9K8z/rWqnPRkRiyUuAbE0KyW6Nk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1Y38N/btraoCb9K8z/rWqnPRkRiyUuAbE0KyW6Nk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1Y38N%2FbtraoCb9K8z%2FrWqnPRkRiyUuAbE0KyW6Nk%2Fimg.png&quot; data-origin-width=&quot;758&quot; data-origin-height=&quot;470&quot; width=&quot;452&quot; height=&quot;280&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두번째는 Sentence Extraction에 대한 실험 결과입니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비교를 위한 지표로는 ROUGE score가 사용되었습니다. ROUGE score에 대한 자세한 설명은 아래의 글을 참고 부탁드립니다.&lt;/p&gt;
&lt;figure id=&quot;og_1627238565769&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[자연어처리][Metric] ROUGE score : Recall-Oriented Understudy for Gisting Evaluation&quot; data-og-description=&quot;ROUGE ROUGE(Recall-Oriented Understudy for Gisting Evaluation)는 text summarization, machine translation과 같은 generation task를 평가하기 위해 사용되는 대표적인 Metric입니다. 본 글의 내용은 ROUGE s..&quot; data-og-host=&quot;supkoon.tistory.com&quot; data-og-source-url=&quot;https://supkoon.tistory.com/26?category=871653&quot; data-og-url=&quot;https://supkoon.tistory.com/26&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/0T33z/hyK1rwwFFd/CrAKimqzEBAWh0wDsEafz1/img.png?width=710&amp;amp;height=1089&amp;amp;face=0_0_710_1089,https://scrap.kakaocdn.net/dn/bYzuBj/hyKZUf2QIf/hLip2kav8soxsA40Ek1aO1/img.png?width=710&amp;amp;height=1089&amp;amp;face=0_0_710_1089,https://scrap.kakaocdn.net/dn/bUCokY/hyK1jebyXJ/Pw66SlDlwZuYIAWIwXnvJK/img.jpg?width=2900&amp;amp;height=3867&amp;amp;face=0_0_2900_3867&quot;&gt;&lt;a href=&quot;https://supkoon.tistory.com/26?category=871653&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://supkoon.tistory.com/26?category=871653&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/0T33z/hyK1rwwFFd/CrAKimqzEBAWh0wDsEafz1/img.png?width=710&amp;amp;height=1089&amp;amp;face=0_0_710_1089,https://scrap.kakaocdn.net/dn/bYzuBj/hyKZUf2QIf/hLip2kav8soxsA40Ek1aO1/img.png?width=710&amp;amp;height=1089&amp;amp;face=0_0_710_1089,https://scrap.kakaocdn.net/dn/bUCokY/hyK1jebyXJ/Pw66SlDlwZuYIAWIwXnvJK/img.jpg?width=2900&amp;amp;height=3867&amp;amp;face=0_0_2900_3867');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[자연어처리][Metric] ROUGE score : Recall-Oriented Understudy for Gisting Evaluation&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;ROUGE ROUGE(Recall-Oriented Understudy for Gisting Evaluation)는 text summarization, machine translation과 같은 generation task를 평가하기 위해 사용되는 대표적인 Metric입니다. 본 글의 내용은 ROUGE s..&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;supkoon.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결과를 통해 TextRank를 사용한 Sentence Extraction(Document summarization)이 가장 좋은 성능을 보이지는 못했지만, 꽤나 좋은 성능을 보였다는 사실을 알 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 정답을 학습하는 기존의 지도학습 모델들과 다르게, TextRank는 비지도 학습만을 필요로 한다는 장점이 존재하였습니다. 또한 TextRank는 문장 사이의 유사도와 중요도 순위를 동시에 얻을 수 있다는 점에서 우수한 모델임을 알 수 있었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;마무리&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;TextRank는 그래프 기반의 랭킹 알고리즘으로 PageRank 알고리즘을 Text Data에 적용한 Variation 구조라고 할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;TextRank는 TextData를 활용하여 그래프를 구성하였으며, 비지도 학습만으로 keyword extraction과 sentence extraction에서 매우 좋은 성능을 보여주었습니다. 논문이 전체적으로 어렵지 않았으며, 읽는 과정에서도 TextRank가 데이터에 간편하게 적용될 수 있을 것 같다는 생각이 들었습니다. 그래프 기반의 방법을 처음 리뷰해보면서 새로 배우게 되는 부분이 많았던 것 같습니다. 감사합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>데이터과학/자연어처리</category>
      <category>graph</category>
      <category>NLP</category>
      <category>pagerank</category>
      <category>text summarization</category>
      <category>textrank</category>
      <category>논문리뷰</category>
      <category>딥러닝</category>
      <category>머신러닝</category>
      <category>문서 요약</category>
      <category>자연어처리</category>
      <author>섭구</author>
      <guid isPermaLink="true">https://supkoon.tistory.com/39</guid>
      <comments>https://supkoon.tistory.com/39#entry39comment</comments>
      <pubDate>Mon, 26 Jul 2021 04:09:18 +0900</pubDate>
    </item>
    <item>
      <title>[자연어처리][paper review] Character-level Convolutional Networks for Text Classification</title>
      <link>https://supkoon.tistory.com/38</link>
      <description>&lt;script&gt; MathJax = { tex: {inlineMath: [['$', '$'], ['\\(', '\\)']]} }; &lt;/script&gt;
&lt;script src=&quot;https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-chtml.js&quot;&gt;&lt;/script&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;b&gt;CNN&lt;/b&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;CNN&lt;/b&gt;은 컴퓨터 비전 분야를 위해 개발되었으며, 대중적으로 사용되고 있는 가장 보편화된 이미지 처리 알고리즘입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CNN은 가중치를 갖는 필터를 사용하기 때문에 개별 픽셀에 대한 가중치를 고려하지 않아도 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 CNN을 사용하는 모델은 파라미터를 효율적으로 사용하여 매우 큰 차원의 이미지를 처리할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lbWRa/btrakpqCm3q/fTkYVNFZWL3A9eh0Zq8uj1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lbWRa/btrakpqCm3q/fTkYVNFZWL3A9eh0Zq8uj1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIIIx3%2FbtranzlH106%2FUKCqyDSM6cNKMqNKlB2D5K%2Fimg.png&quot; data-origin-width=&quot;1026&quot; data-origin-height=&quot;624&quot; style=&quot;width: 49.6816%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lbWRa/btrakpqCm3q/fTkYVNFZWL3A9eh0Zq8uj1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlbWRa%2FbtrakpqCm3q%2FfTkYVNFZWL3A9eh0Zq8uj1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1026&quot; height=&quot;624&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Jvazc/btrany8wC5c/d5DG3bhRqmnDiL2OyLo2t1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Jvazc/btrany8wC5c/d5DG3bhRqmnDiL2OyLo2t1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc97E0w%2Fbtrao6XkPFS%2Fk5Rj3EfJk9bwkchoSPx6rk%2Fimg.png&quot; data-origin-width=&quot;1116&quot; data-origin-height=&quot;686&quot; style=&quot;width: 49.1556%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Jvazc/btrany8wC5c/d5DG3bhRqmnDiL2OyLo2t1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJvazc%2Fbtrany8wC5c%2Fd5DG3bhRqmnDiL2OyLo2t1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1116&quot; height=&quot;686&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;CNN in NLP&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CNN은 자연어 처리를 위해서도 효과적으로 사용되고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실제로 전통적인 일부 자연어처리 Task의 경우, CNN이 훌륭한 성능을 보인 사례들이 존재합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대표적인 CNN의 적용분야는 자연어처리의 가장 주된 Task 중 하나인 Text Classifiction입니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1107&quot; data-origin-height=&quot;468&quot; width=&quot;555&quot; height=&quot;235&quot; data-filename=&quot;blob&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/czAT2n/btranzNgDG8/XYpLLhJlA5kWwrveqda6G0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/czAT2n/btranzNgDG8/XYpLLhJlA5kWwrveqda6G0/img.png&quot; data-alt=&quot;Word based ConvNets&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/czAT2n/btranzNgDG8/XYpLLhJlA5kWwrveqda6G0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FczAT2n%2FbtranzNgDG8%2FXYpLLhJlA5kWwrveqda6G0%2Fimg.png&quot; data-origin-width=&quot;1107&quot; data-origin-height=&quot;468&quot; width=&quot;555&quot; height=&quot;235&quot; data-filename=&quot;blob&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Word based ConvNets&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앞서 리뷰하였던 &lt;a href=&quot;https://supkoon.tistory.com/37?category=871653&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&quot;Convolutional Neural Networks for Sentence Classification&quot;&lt;/a&gt; 에서는 Word2Vec로 &lt;b&gt;임베딩된&lt;/b&gt; &lt;b&gt;단어(word)&lt;/b&gt;에 &lt;b&gt;CNN&lt;/b&gt;을 적용하는 방법으로 Classification 작업을 성공적으로 수행할 수 있었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Word based ConvNet과 같이, 대부분의 NLP Task는 단어에 대한 임베딩을 가장 기본적인 입력으로 합니다. 단어 기반의 임베딩은 N-gram과 같은 방법을 사용하여 여전히 뛰어난 효과를 보이고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2016년에 발표된 본 논문은 &lt;b&gt;문자(Character)&lt;/b&gt;단위의 &lt;b&gt;CNN&lt;/b&gt;을 사용한 &lt;b&gt;Text Classification&lt;/b&gt; 모델 &lt;b&gt;Character-level ConvNet&lt;/b&gt;을 제안하고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1.Character-level ConvNet&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1202&quot; data-origin-height=&quot;362&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bNFQEk/btranEtM4gm/eIB2NynVBfgNdK9ShOeaI1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bNFQEk/btranEtM4gm/eIB2NynVBfgNdK9ShOeaI1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bNFQEk/btranEtM4gm/eIB2NynVBfgNdK9ShOeaI1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbNFQEk%2FbtranEtM4gm%2FeIB2NynVBfgNdK9ShOeaI1%2Fimg.png&quot; data-origin-width=&quot;1202&quot; data-origin-height=&quot;362&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Input representation&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1132&quot; data-origin-height=&quot;400&quot; width=&quot;574&quot; height=&quot;203&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IDlER/btrapslVy0H/S0EyXxG1ppXBMzYaAldNKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IDlER/btrapslVy0H/S0EyXxG1ppXBMzYaAldNKK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IDlER/btrapslVy0H/S0EyXxG1ppXBMzYaAldNKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIDlER%2FbtrapslVy0H%2FS0EyXxG1ppXBMzYaAldNKK%2Fimg.png&quot; data-origin-width=&quot;1132&quot; data-origin-height=&quot;400&quot; width=&quot;574&quot; height=&quot;203&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 모델의 입력에 대해 먼저 설명드리도록 하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Character-level ConvNet이라는 이름에 맞게, 본 모델은 문자로 구성된 시퀀스를 입력으로 받습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하나의 문자 시퀀스는 \(l_0\)의 길이를 갖는 고정길이 벡터입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;따라서 시퀀스의 길이가 \(l_0\)를 초과하는 문자에 대해서는 고려하지 않으며, 시퀀스가 \(l_0\)보다 짧아 미달되거나 존재하지 않는 문자에 대해서는 영벡터(Zero-vector)로 처리합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;219&quot; height=&quot;281&quot; data-origin-width=&quot;862&quot; data-origin-height=&quot;1105&quot; data-filename=&quot;blob&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/LEctv/btrasuDKaHz/AeqJcQVbBq9FrJMUErA50k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/LEctv/btrasuDKaHz/AeqJcQVbBq9FrJMUErA50k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/LEctv/btrasuDKaHz/AeqJcQVbBq9FrJMUErA50k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLEctv%2FbtrasuDKaHz%2FAeqJcQVbBq9FrJMUErA50k%2Fimg.png&quot; width=&quot;219&quot; height=&quot;281&quot; data-origin-width=&quot;862&quot; data-origin-height=&quot;1105&quot; data-filename=&quot;blob&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각각의 문자는 One-hot의 형태로 표현됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 모델이 \(m\)개의 문자를 사용한다면 개별 문자는 \(m\)차원의 특성벡터로 표현될 것이며, 전체 시퀀스는 \(l_0\times m\) 차원의 행렬로 표현될 것입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Character quantization&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;본 논문에서는 총 70개의 알파벳 문자를 사용하여 모델링하였습니다.\((m=70)\)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;70개의 문자는 26개의 영어 문자, 10개의 숫자, 33개의 기타 문자, 그리고 1개의 space 문자를 포함하고 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;802&quot; data-origin-height=&quot;108&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/TOrhV/btrapGR4U53/Z5B6MELgeZ0v0cabSE2YF0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/TOrhV/btrapGR4U53/Z5B6MELgeZ0v0cabSE2YF0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/TOrhV/btrapGR4U53/Z5B6MELgeZ0v0cabSE2YF0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FTOrhV%2FbtrapGR4U53%2FZ5B6MELgeZ0v0cabSE2YF0%2Fimg.png&quot; data-origin-width=&quot;802&quot; data-origin-height=&quot;108&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이는 대, 소문자의 구분을 따로 하지 않는 형태입니다. 저자들은 대, 소문자의 구분이 주는 영향에 대한 실험 또한 이후에 진행하였습니다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Data Augmentation using Thesaurus&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Data augmentation은 모델의 일반화 성능을 끌어올릴 수 있는 효과적인 방법입니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 이미지 데이터에 적용하는 augmentation 방법은 텍스트 데이터에 잘 맞지 않습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가장 좋은 text 데이터의 augmentation 방법은 사실 인간이 직접 rephrasing를 하는 것 입니다. 하지만 이는 데이터의 크기가 증가할 수 록 비용부담이 크기 마련입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 일반적인 선택은 단어의 synonym(Thesaurus)을 활용하는 방법이 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저자들은 기하분포 \(P[r] \sim p^r\)로부터 샘플링된 r개의 단어를 synonym으로 교체하였으며, 같은 기하분포 \(P[s] \sim q^s\)로 부터 샘플링된 s를 통해 synonym의 index를 결정하였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(기하분포를 통해 추출하였기 때문에, 자주 사용되는 의미와 거리가 멀수록 synonym으로 선택될 가능성이 적을 것이라는 직관적인 생각을 해볼 수 있습니다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ex) [아기,유아,소년,청년]일때, 아기 synonym으로 선택될 확률 : 유아 &amp;gt; 소년 &amp;gt; 청년&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Model architecture&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1132&quot; data-origin-height=&quot;400&quot; width=&quot;535&quot; height=&quot;189&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/y9vXG/btramgfZsKY/sN0Av1kBQs1RLVewJno2HK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/y9vXG/btramgfZsKY/sN0Av1kBQs1RLVewJno2HK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/y9vXG/btramgfZsKY/sN0Av1kBQs1RLVewJno2HK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fy9vXG%2FbtramgfZsKY%2FsN0Av1kBQs1RLVewJno2HK%2Fimg.png&quot; data-origin-width=&quot;1132&quot; data-origin-height=&quot;400&quot; width=&quot;535&quot; height=&quot;189&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;본 모델의 가장 핵심적인 부분은 &lt;b&gt;temporal convolutional module&lt;/b&gt; 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;temporal convolutional module은 &lt;b&gt;시퀀스&lt;/b&gt;를 다룰 때 많이 사용하는 CNN의 일종입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일반적으로 이미지 처리를 위해 수행되는 convolution 계산이 2개의 축을 따라 움직이는 것과는 다르게, 시퀀스를 다루기 위한 convolution은 시퀀스의 흐름에 따른 축으로만 이동하며 &lt;b&gt;1-D convolution&lt;/b&gt; 계산을 수행합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;temporal convolutional \(h(y)\)는 다음과 같은 수식으로도 표현할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$h(y)=\sum^k_{x=1}f(x)\cdot&amp;nbsp;g(y\cdot&amp;nbsp;d-x+c)$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;\(g(x)\)는 \(g(x) \in [1,l] \rightarrow \mathbb{R}\)인 input function을,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;\(f(x)\)는 \(f(x) \in [1,k] \rightarrow \mathbb{R}\)인 kernel function을,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;\(c\)는 \(c=k-d+1\)인 offset constant를 의미합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 1-d convolution인 \(h(y)\)의 output은 \(h(y) \in [1,\lfloor(l-k)/d\rfloor + 1]\rightarrow \mathbb{R}\)이 될 것입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일반적인 CNN과 같이 temporal convolutional module 또한 이러한 &lt;b&gt;kernel function&lt;/b&gt;들의 &lt;b&gt;집합&lt;/b&gt;을 가중치로 갖습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;input&lt;span&gt; \(g_i(x)\)&lt;/span&gt;에 대한 output&lt;span&gt; \(h_j(y)\)의 계산을 위해 사용되는&lt;/span&gt; 가중치는 다음과 같이 표현가능합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$f_{ij}(x) (i=1,2,...,m\,\,\&amp;amp; j=1,2,...,n) $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 output \(h_j(y)\)는 \(g_i(x)\)와 \(f_{ij}\)사이의 convolution 연산을 통해 계산된다고 할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1132&quot; data-origin-height=&quot;400&quot; width=&quot;574&quot; height=&quot;203&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lDItB/btraoPn77ue/k1E21I6mWV1PWnDqOKe7H0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lDItB/btraoPn77ue/k1E21I6mWV1PWnDqOKe7H0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lDItB/btraoPn77ue/k1E21I6mWV1PWnDqOKe7H0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlDItB%2FbtraoPn77ue%2Fk1E21I6mWV1PWnDqOKe7H0%2Fimg.png&quot; data-origin-width=&quot;1132&quot; data-origin-height=&quot;400&quot; width=&quot;574&quot; height=&quot;203&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이어지는 &lt;b&gt;temporal max-pooling&lt;/b&gt; 또한 &lt;b&gt;1-D&lt;/b&gt; &lt;b&gt;버전의 max-pooling&lt;/b&gt;을 의미합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 마찬가지로 아래와 같이 temporal max-pooling 연산을 표현할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$h(y)=\max^k_{x=1}g(y\cdot&amp;nbsp;d-x+c)$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;\(g(x)\)는 \(g(x) \in [1,l] \rightarrow \mathbb{R}\)인 input function을 의미하며,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1d max-pooling function인 \(h(y)\)의 output은 \(h(y) \in [1,\lfloor(l-k)/d\rfloor + 1]\rightarrow \mathbb{R}\)이 될 것입니다.&lt;br /&gt;pooling은 겹치지 않도록 stride를 유지하여 진행되었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;max-pooling은 당시 모델들이 어려움을 겪었던 6-layer 이상의 ConvNet을 본 모델이 구성할 수 있도록 도움을 주었다고 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최종적으로 fully-connected layer의 classification을 위한 output node 수는 task에 맞게 설정됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제안하는 모델의 세부 구조는 다음과 같습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;499&quot; height=&quot;192&quot; data-origin-width=&quot;878&quot; data-origin-height=&quot;338&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nvfyG/btrao7oPStm/nfiKRtblJsBsfj5K443oKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nvfyG/btrao7oPStm/nfiKRtblJsBsfj5K443oKK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nvfyG/btrao7oPStm/nfiKRtblJsBsfj5K443oKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnvfyG%2Fbtrao7oPStm%2FnfiKRtblJsBsfj5K443oKK%2Fimg.png&quot; width=&quot;499&quot; height=&quot;192&quot; data-origin-width=&quot;878&quot; data-origin-height=&quot;338&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;520&quot; height=&quot;136&quot; data-origin-width=&quot;802&quot; data-origin-height=&quot;210&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b97dEH/btrasTQL8TF/E6pAoxBcL59PLEDndxyQK1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b97dEH/btrasTQL8TF/E6pAoxBcL59PLEDndxyQK1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b97dEH/btrasTQL8TF/E6pAoxBcL59PLEDndxyQK1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb97dEH%2FbtrasTQL8TF%2FE6pAoxBcL59PLEDndxyQK1%2Fimg.png&quot; width=&quot;520&quot; height=&quot;136&quot; data-origin-width=&quot;802&quot; data-origin-height=&quot;210&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비선형 활성함수로는 ReLU \(max\{0,x\}\)가 사용되었으며, SGD를 통해 학습이 진행되었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;2.Results&lt;/b&gt;&lt;/h2&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Comparison models&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비교를 위해 다음과 같은 전통적인 선형모델과 비 선형의 딥러닝모델이 사용되었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Traiditional methods&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1)Bag of words , logistic regression&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2)Bag of words + TFIDF , logistic regression&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3)Bag of ngrams , logistic regression&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4)Bag of ngrams +TFIDF, logistic regression&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5)Bag of means(kmeans of Word2Vec), logistic regression&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Deep learning methods&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1)Word-based ConvNets&lt;/p&gt;
&lt;figure id=&quot;og_1627173932488&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[자연어처리][paper review] Convolutional Neural Networks for Sentence Classification&quot; data-og-description=&quot;CNN CNN은 컴퓨터 비전 분야를 위해 개발되었으며, 대중적으로 사용되고 있는 가장 보편화된 이미지 처리 알고리즘입니다. CNN은 가중치를 갖는 필터를 사용하기 때문에 개별 픽셀에 대한 가중치&quot; data-og-host=&quot;supkoon.tistory.com&quot; data-og-source-url=&quot;https://supkoon.tistory.com/37&quot; data-og-url=&quot;https://supkoon.tistory.com/37&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/ugY1l/hyKZWqrLaP/K95P1p8EvVZQhZV9FSlFa1/img.png?width=800&amp;amp;height=381&amp;amp;face=0_0_800_381,https://scrap.kakaocdn.net/dn/nckCa/hyKZZAIcfv/Qa3ymveLHbM1sqXIIlNJyk/img.png?width=800&amp;amp;height=381&amp;amp;face=0_0_800_381,https://scrap.kakaocdn.net/dn/bwdj8V/hyKZ9i1Dk1/8XCdAzGxQ9X9fwO8OxZxV1/img.png?width=1116&amp;amp;height=476&amp;amp;face=0_0_1116_476&quot;&gt;&lt;a href=&quot;https://supkoon.tistory.com/37&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://supkoon.tistory.com/37&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/ugY1l/hyKZWqrLaP/K95P1p8EvVZQhZV9FSlFa1/img.png?width=800&amp;amp;height=381&amp;amp;face=0_0_800_381,https://scrap.kakaocdn.net/dn/nckCa/hyKZZAIcfv/Qa3ymveLHbM1sqXIIlNJyk/img.png?width=800&amp;amp;height=381&amp;amp;face=0_0_800_381,https://scrap.kakaocdn.net/dn/bwdj8V/hyKZ9i1Dk1/8XCdAzGxQ9X9fwO8OxZxV1/img.png?width=1116&amp;amp;height=476&amp;amp;face=0_0_1116_476');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[자연어처리][paper review] Convolutional Neural Networks for Sentence Classification&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;CNN CNN은 컴퓨터 비전 분야를 위해 개발되었으며, 대중적으로 사용되고 있는 가장 보편화된 이미지 처리 알고리즘입니다. CNN은 가중치를 갖는 필터를 사용하기 때문에 개별 픽셀에 대한 가중치&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;supkoon.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2)LSTM&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;550&quot; data-origin-height=&quot;218&quot; width=&quot;313&quot; height=&quot;124&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bZOVI1/btrav8mHrxt/WFIzu9kfJTmLHj69LSexm1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bZOVI1/btrav8mHrxt/WFIzu9kfJTmLHj69LSexm1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bZOVI1/btrav8mHrxt/WFIzu9kfJTmLHj69LSexm1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbZOVI1%2Fbtrav8mHrxt%2FWFIzu9kfJTmLHj69LSexm1%2Fimg.png&quot; data-origin-width=&quot;550&quot; data-origin-height=&quot;218&quot; width=&quot;313&quot; height=&quot;124&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Datasets&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CNN은 학습을 위해 보통 많은 양의 데이터를 필요로 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 당시의 텍스트 데이터의 크기가 크지 않았는지 새로 대규모 데이터를 생성하여 사용하였다고 합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1436&quot; data-origin-height=&quot;488&quot; width=&quot;636&quot; height=&quot;216&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/L3H5h/btraoCbvGiP/Is8szSKC2COqDXmH8V7Xqk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/L3H5h/btraoCbvGiP/Is8szSKC2COqDXmH8V7Xqk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/L3H5h/btraoCbvGiP/Is8szSKC2COqDXmH8V7Xqk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FL3H5h%2FbtraoCbvGiP%2FIs8szSKC2COqDXmH8V7Xqk%2Fimg.png&quot; data-origin-width=&quot;1436&quot; data-origin-height=&quot;488&quot; width=&quot;636&quot; height=&quot;216&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;result 1.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모든 모델의 Training error를 비교한 결과입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Lg,Sm은 제안하는 모델의 크기에 따른 분류이며, Full은 소문자 대문자를 구분하여 함께 사용한 모델을 의미합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1472&quot; data-origin-height=&quot;1168&quot; width=&quot;728&quot; height=&quot;577&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/F0aqw/btraoBDIXFZ/kF9YXzA3aJh77PUUqHn3dK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/F0aqw/btraoBDIXFZ/kF9YXzA3aJh77PUUqHn3dK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/F0aqw/btraoBDIXFZ/kF9YXzA3aJh77PUUqHn3dK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FF0aqw%2FbtraoBDIXFZ%2FkF9YXzA3aJh77PUUqHn3dK%2Fimg.png&quot; data-origin-width=&quot;1472&quot; data-origin-height=&quot;1168&quot; width=&quot;728&quot; height=&quot;577&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음은 Character level ConvNet과 comparison model 사이의 error 차이를 comparison model 모델의 error로 나누어 시각화한 결과입니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;637&quot; height=&quot;361&quot; data-origin-width=&quot;1472&quot; data-origin-height=&quot;745&quot; data-filename=&quot;blob&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cwdiDI/btranzmoRAT/YplaeISOrhxBtJ2keW4lNk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cwdiDI/btranzmoRAT/YplaeISOrhxBtJ2keW4lNk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cwdiDI/btranzmoRAT/YplaeISOrhxBtJ2keW4lNk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcwdiDI%2FbtranzmoRAT%2FYplaeISOrhxBtJ2keW4lNk%2Fimg.png&quot; width=&quot;637&quot; height=&quot;361&quot; data-origin-width=&quot;1472&quot; data-origin-height=&quot;745&quot; data-filename=&quot;blob&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 결과를 통해 다음의 사실들을 알 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1) Character level ConvNet은 효과적인 방법임.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결과를 통해 Character level ConvNet의 성능이 뛰어남을 알 수 있었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이는 언어 또한 다른 종류의 신호(signal)과 전혀 다를 게 없다는 강한 증거라고 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래는 첫번째 CNN layer의 가중치를 시각화 한 결과입니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;786&quot; height=&quot;139&quot; data-origin-width=&quot;1472&quot; data-origin-height=&quot;260&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/LOVol/btranWuz4X2/wkEEryHusagMBzKkyG2Ng0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/LOVol/btranWuz4X2/wkEEryHusagMBzKkyG2Ng0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/LOVol/btranWuz4X2/wkEEryHusagMBzKkyG2Ng0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLOVol%2FbtranWuz4X2%2FwkEEryHusagMBzKkyG2Ng0%2Fimg.png&quot; width=&quot;786&quot; height=&quot;139&quot; data-origin-width=&quot;1472&quot; data-origin-height=&quot;260&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2) 큰 데이터에서 더 좋은 성능을 보였음&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이는 학습을 위해 많은 데이터를 필요로하는 CNN의 특성 때문입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3) User가 만든 real world 데이터에 대해서 더 좋은 성능을 보임.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Character level ConvNet는 Amazon review 데이터셋과 같이 정교하게 작성되지 않은(less curated) 유저 데이터셋에서 더 좋은 성능을 보였습니다. 이는 모델이 실제 상황에서 더욱 뛰어난 성능을 보인다는 것을 알 수 있게 합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4) 대문자를 추가하여 모델링하였을 때, 오히려 성능이 좋지 못했음.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저자들은 대, 소문자간의 의미차이가 실제로 존재하지 않기 때문에, 소문자만 사용했을때 regularization effect를 가져온다고 분석하였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5) 분류 작업에 따른 성능차이는 크지 않았음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;6) Bag-of-means는 좋은 선택이 아니었음.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Word2Vec 기반의 k-means 클러스터링을 진행하여 임베딩하였을 때, 오히려 결과가 좋지 못했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;distributed word representation을 단순하게 활용하여 역효과가 생겼다고 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;마무리&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Word-based CNN과 더불어 본 논문은 Text Classification을 위한 Character level의 CNN 모델을 제안하고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문자 기반의 CNN은 확실히 단어 기반의 방법과 비교하여 장, 단점이 존재합니다. 예를 들면, 단어 기반의 방법이 임베딩하지 못하는 단어를 문자 기반의 방법은 임베딩할 수 있습니다. &lt;a href=&quot;https://supkoon.tistory.com/15?category=871653&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;FastText&lt;/a&gt;가 좋은 예시가 될 것 같습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재는 본 논문의 방법이 많이 사용되지는 않겠지만, 기존의 다양한 방법들을 잘 공부해 놓는게 중요하다고 생각합니다. 감사합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>데이터과학/자연어처리</category>
      <category>CNN</category>
      <category>NLP</category>
      <category>Text Classification</category>
      <category>논문리뷰</category>
      <category>딥러닝</category>
      <category>머신러닝</category>
      <category>자연어처리</category>
      <author>섭구</author>
      <guid isPermaLink="true">https://supkoon.tistory.com/38</guid>
      <comments>https://supkoon.tistory.com/38#entry38comment</comments>
      <pubDate>Sun, 25 Jul 2021 10:42:13 +0900</pubDate>
    </item>
    <item>
      <title>[자연어처리][paper review] Convolutional Neural Networks for Sentence Classification</title>
      <link>https://supkoon.tistory.com/37</link>
      <description>&lt;script&gt; MathJax = { tex: {inlineMath: [['$', '$'], ['\\(', '\\)']]} }; &lt;/script&gt;
&lt;script src=&quot;https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-chtml.js&quot;&gt;&lt;/script&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;CNN&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;CNN&lt;/b&gt;은 컴퓨터 비전 분야를 위해 개발되었으며, 대중적으로 사용되고 있는 가장 보편화된 이미지 처리 알고리즘입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CNN은 가중치를 갖는 필터를 사용하기 때문에 개별 픽셀에 대한 가중치를 고려하지 않아도 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 CNN을 사용하는 모델은 파라미터를 효율적으로 사용하여 매우 큰 차원의 이미지를 처리할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IIIx3/btranzlH106/UKCqyDSM6cNKMqNKlB2D5K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IIIx3/btranzlH106/UKCqyDSM6cNKMqNKlB2D5K/img.png&quot; data-origin-width=&quot;1026&quot; data-origin-height=&quot;624&quot; width=&quot;444&quot; height=&quot;270&quot; style=&quot;width: 49.6816%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IIIx3/btranzlH106/UKCqyDSM6cNKMqNKlB2D5K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIIIx3%2FbtranzlH106%2FUKCqyDSM6cNKMqNKlB2D5K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1026&quot; height=&quot;624&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c97E0w/btrao6XkPFS/k5Rj3EfJk9bwkchoSPx6rk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c97E0w/btrao6XkPFS/k5Rj3EfJk9bwkchoSPx6rk/img.png&quot; data-origin-width=&quot;1116&quot; data-origin-height=&quot;686&quot; style=&quot;width: 49.1556%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c97E0w/btrao6XkPFS/k5Rj3EfJk9bwkchoSPx6rk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc97E0w%2Fbtrao6XkPFS%2Fk5Rj3EfJk9bwkchoSPx6rk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1116&quot; height=&quot;686&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;CNN in NLP&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CNN은 자연어 처리를 위해서도 효과적으로 사용되고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실제로 전통적인 일부 자연어처리 Task의 경우, CNN이 훌륭한 성능을 보인 사례들이 존재합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Sentence(Text,Document) Classifiction은 자연어처리의 가장 주된 Task 중 하나입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2014년 발표된 본 논문은 &lt;b&gt;CNN&lt;/b&gt;을 사용한 &lt;b&gt;Sentence Classification&lt;/b&gt; 모델을 제안하고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 본 논문은 CNN과 Word2Vec 등의 언어모델에 대한 기본적인 이해를 필요로 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래의 리뷰들 외에도 기존에 다양한 언어모델에 대한 리뷰를 진행하였습니다. 자세한 설명이 필요하신 분께서는 기존의 리뷰들을 참고 부탁드립니다.&lt;/p&gt;
&lt;figure id=&quot;og_1627062807918&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[자연어처리][paper review] Word2Vec: Efficient Estimation of Word Representations in Vector Space&quot; data-og-description=&quot;기존의 count based word representaion 방법들은 간단하지만, 단어 간의 유사도를 판단할 수 없습니다. 예를 들면, 삼겹살 [0,0,0,0,0,1] , 목살 [0,0,0,1,0,0] , 연필 [0,1,0,0,0,0] 세 개의 임베딩 된 단어가..&quot; data-og-host=&quot;supkoon.tistory.com&quot; data-og-source-url=&quot;https://supkoon.tistory.com/11?category=871653&quot; data-og-url=&quot;https://supkoon.tistory.com/11&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/F9k34/hyKY9qH3u0/HLCahH9XBu5sb1P1y3cmP0/img.png?width=740&amp;amp;height=862&amp;amp;face=0_0_740_862,https://scrap.kakaocdn.net/dn/jvI76/hyKZZGMA8I/hJUuj3pu8EYwl1aKIKWun1/img.png?width=740&amp;amp;height=862&amp;amp;face=0_0_740_862,https://scrap.kakaocdn.net/dn/dMH1Eb/hyKZWQO6Li/thgJ6lJuVcLfAtqAtPTOj0/img.png?width=1522&amp;amp;height=988&amp;amp;face=0_0_1522_988&quot;&gt;&lt;a href=&quot;https://supkoon.tistory.com/11?category=871653&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://supkoon.tistory.com/11?category=871653&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/F9k34/hyKY9qH3u0/HLCahH9XBu5sb1P1y3cmP0/img.png?width=740&amp;amp;height=862&amp;amp;face=0_0_740_862,https://scrap.kakaocdn.net/dn/jvI76/hyKZZGMA8I/hJUuj3pu8EYwl1aKIKWun1/img.png?width=740&amp;amp;height=862&amp;amp;face=0_0_740_862,https://scrap.kakaocdn.net/dn/dMH1Eb/hyKZWQO6Li/thgJ6lJuVcLfAtqAtPTOj0/img.png?width=1522&amp;amp;height=988&amp;amp;face=0_0_1522_988');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[자연어처리][paper review] Word2Vec: Efficient Estimation of Word Representations in Vector Space&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;기존의 count based word representaion 방법들은 간단하지만, 단어 간의 유사도를 판단할 수 없습니다. 예를 들면, 삼겹살 [0,0,0,0,0,1] , 목살 [0,0,0,1,0,0] , 연필 [0,1,0,0,0,0] 세 개의 임베딩 된 단어가..&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;supkoon.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;figure id=&quot;og_1627062832393&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[자연어처리] [paper review] Word2vec: Distributed Representations of Words and Phrases and their Compositionality&quot; data-og-description=&quot;본 논문은 이전에 리뷰한 Word2vec의 후속 논문으로 같은해에 발표되었습니다. 따라서 전체적인 개념보다는 이전 논문에서 발표한 Skip-gram 방법론의 representation quality와 computation efficiency 개선을 목&quot; data-og-host=&quot;supkoon.tistory.com&quot; data-og-source-url=&quot;https://supkoon.tistory.com/13?category=871653&quot; data-og-url=&quot;https://supkoon.tistory.com/13&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/nVnsF/hyKZ5fVrxF/BHfTtAyLyecUW4CXQ5zYTK/img.png?width=800&amp;amp;height=409&amp;amp;face=0_0_800_409,https://scrap.kakaocdn.net/dn/E7ZBX/hyKZgi3mRN/xfnLU4poB9CxkeLxriFxl0/img.png?width=800&amp;amp;height=409&amp;amp;face=0_0_800_409,https://scrap.kakaocdn.net/dn/bjvUfk/hyKZWcdA98/MY2be3KrvCCaJfgbbOxCI0/img.jpg?width=2900&amp;amp;height=3867&amp;amp;face=0_0_2900_3867&quot;&gt;&lt;a href=&quot;https://supkoon.tistory.com/13?category=871653&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://supkoon.tistory.com/13?category=871653&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/nVnsF/hyKZ5fVrxF/BHfTtAyLyecUW4CXQ5zYTK/img.png?width=800&amp;amp;height=409&amp;amp;face=0_0_800_409,https://scrap.kakaocdn.net/dn/E7ZBX/hyKZgi3mRN/xfnLU4poB9CxkeLxriFxl0/img.png?width=800&amp;amp;height=409&amp;amp;face=0_0_800_409,https://scrap.kakaocdn.net/dn/bjvUfk/hyKZWcdA98/MY2be3KrvCCaJfgbbOxCI0/img.jpg?width=2900&amp;amp;height=3867&amp;amp;face=0_0_2900_3867');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[자연어처리] [paper review] Word2vec: Distributed Representations of Words and Phrases and their Compositionality&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;본 논문은 이전에 리뷰한 Word2vec의 후속 논문으로 같은해에 발표되었습니다. 따라서 전체적인 개념보다는 이전 논문에서 발표한 Skip-gram 방법론의 representation quality와 computation efficiency 개선을 목&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;supkoon.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1. CNN for Sentence Classification&lt;/b&gt;&lt;/h2&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Input representation&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모델을 위한 입력구조에 대해 먼저 설명드리도록 하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문장의 i번째 단어는 k차원의 임베딩으로 표현되어 아래와 같이 표기합니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;\(\mathbf{x}_i \in \mathbb{R}^k\)&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;따라서 길이가 n인 문장은 아래와 같이 표현할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;\begin{align} \mathbf{x}_{1:n} = \mathbf{x}_{1} \oplus \mathbf{x}_{2} \oplus \ldots \oplus \mathbf{x}_{n} \end{align}&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;\(\oplus\)는 단순한 concatenate를 표현하는 연산자 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일반화 한다면 i번째부터 j개 단어의 concatenation은 \(\mathbf{x}_{i:i+j}\)가 될 것입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;\begin{align} \mathbf{x}_{i:i+j} = \mathbf{x}_{i} \oplus \mathbf{x}_{i+1} \oplus \ldots \oplus \mathbf{x}_{i+j} \end{align}&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Model architecture&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1108&quot; data-origin-height=&quot;528&quot; width=&quot;724&quot; height=&quot;345&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ewe6qb/btramfgC5rV/dI5IkPPOCWNxzcjnkC5aF0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ewe6qb/btramfgC5rV/dI5IkPPOCWNxzcjnkC5aF0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ewe6qb/btramfgC5rV/dI5IkPPOCWNxzcjnkC5aF0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fewe6qb%2FbtramfgC5rV%2FdI5IkPPOCWNxzcjnkC5aF0%2Fimg.png&quot; data-origin-width=&quot;1108&quot; data-origin-height=&quot;528&quot; width=&quot;724&quot; height=&quot;345&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각각 k차원으로 임베딩된 h개 단어들에 적용되는 CNN \(filter\)는 \(\mathbf{w} \in \mathbb{R}^{hk}\)를 포함하고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일반적인 convolution 연산을 사용하여 일반화 한다면,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하나의 윈도우에 해당하는 \(\mathbf{x}_{i:i+h-1}\)로 부터 특성 \(c_i\)는 다음의 연산을 통해 생성될 것입니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;\begin{align} c_i = f(\mathbf{w} \cdot \mathbf{x}_{i:i+h-1} + b) \end{align}&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;\(b \in \mathbb{R}\)는 bias를, \(f\)는 비 선형 활성화 함수를 의미합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1116&quot; data-origin-height=&quot;476&quot; width=&quot;644&quot; height=&quot;275&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dqUuPB/btraqR6q0on/QzqLZsmu28DwB6hsKxzO7k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dqUuPB/btraqR6q0on/QzqLZsmu28DwB6hsKxzO7k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dqUuPB/btraqR6q0on/QzqLZsmu28DwB6hsKxzO7k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdqUuPB%2FbtraqR6q0on%2FQzqLZsmu28DwB6hsKxzO7k%2Fimg.png&quot; data-origin-width=&quot;1116&quot; data-origin-height=&quot;476&quot; width=&quot;644&quot; height=&quot;275&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 하나의 필터 \(\mathbf{w} \in \mathbb{R}^{hk}\)는 문장의 가능한 모든 window인&amp;nbsp;&amp;nbsp;\(\{\mathbf{x}_{1:h}, \mathbf{x}_{2:h+1}, \ldots, \mathbf{x}_{n-h+1:n}\}\)에 각각 적용되어&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래의 feature map \(\mathbf{c} \in \mathbb{R}^{n-h+1}\)을 생성하게 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$\mathbf{c} = [c_{1}, c_{2}, \ldots , c_{n-h+1}]$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1116&quot; data-origin-height=&quot;476&quot; width=&quot;655&quot; height=&quot;279&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dzqYUd/btrakTrCBwX/cvYPd55gYom9T8Br3AtjDk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dzqYUd/btrakTrCBwX/cvYPd55gYom9T8Br3AtjDk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dzqYUd/btrakTrCBwX/cvYPd55gYom9T8Br3AtjDk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdzqYUd%2FbtrakTrCBwX%2FcvYPd55gYom9T8Br3AtjDk%2Fimg.png&quot; data-origin-width=&quot;1116&quot; data-origin-height=&quot;476&quot; width=&quot;655&quot; height=&quot;279&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;feature map \(\mathbf{c}\)는 이후에 max pooling을 거치게 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$\hat{c} = max\{\mathbf{c}\}$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이는 하나의 feature map에 해당하는 하나의 특성이 추출됨을 의미합니다.(one feature from one filter)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저자들은 가장 중요한 하나의 특성만을 추출하기 위함이라고 얘기하고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 pooling은 다양한 길이의 문장을 다룰 수 있다는 장점이 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제안하는 모델은 여러개의 필터를 사용하여 이러한 과정을 수행합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각각의 필터는 하나의 특징을 추출 할 수 있을것이며, 결과적으로 모델은 여러개의 매우 중요한 특성을 추출해 낼 수 있을 것입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;본 모델은 다양한 variation이 존재할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Window size를 다르게 하는 필터들을 사용한다면, 보다 다양한 특성 추출을 기대해 볼 수 있을 것 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저자들은 task-specific하게 fine-tuning이 가능한 필터와 학습이 진행되지 않는 static 필터를 함께 사용하는 방법 또한 제시하고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1116&quot; data-origin-height=&quot;476&quot; width=&quot;621&quot; height=&quot;265&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cyKRQC/btrakSzuGPe/dU5EavtZUc7aUdRULBwsJK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cyKRQC/btrakSzuGPe/dU5EavtZUc7aUdRULBwsJK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cyKRQC/btrakSzuGPe/dU5EavtZUc7aUdRULBwsJK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcyKRQC%2FbtrakSzuGPe%2FdU5EavtZUc7aUdRULBwsJK%2Fimg.png&quot; data-origin-width=&quot;1116&quot; data-origin-height=&quot;476&quot; width=&quot;621&quot; height=&quot;265&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여러개의 필터들로 부터 얻은 feature들은 fully-connected layer의 입력으로 사용됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 최종적으로 모델은 softmax output layer를 통해 Positive / Negative를 Classification하게 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Regularization&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Dropout과 L2 regularization를 사용하는 것이 추가적인 정규화 방법이 될 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;fully-connected layer와 output layer 사이에 dropdout을 사용한다면 아래의 연산을 수행하게 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$y = \mathbf{w}\cdot (\mathbf{z} \circ \mathbf{r}) + b$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;\(r\)는 베르누이 분포로 부터 샘플링된 마스킹 벡터 (\(r \in \mathbb{R}^m\))로 element-wise 연산 \(\circ\)을 통해 모델에 적용됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;2.Results&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;652&quot; data-origin-height=&quot;522&quot; width=&quot;463&quot; height=&quot;371&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/brQF2j/btrao7BWrSP/1TnG8kbSI3DfP0BgYJgsU1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/brQF2j/btrao7BWrSP/1TnG8kbSI3DfP0BgYJgsU1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/brQF2j/btrao7BWrSP/1TnG8kbSI3DfP0BgYJgsU1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbrQF2j%2Fbtrao7BWrSP%2F1TnG8kbSI3DfP0BgYJgsU1%2Fimg.png&quot; data-origin-width=&quot;652&quot; data-origin-height=&quot;522&quot; width=&quot;463&quot; height=&quot;371&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저자들은 7개의 데이터셋을 활용하여 검증과정을 진행하였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각각 데이터셋에 대한 정보는 다음과 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;\(c\) : 클래스 수&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;\(l\) : 평균 문장 길이&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;\(N)\ : 데이터셋 크기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;\(|V|\) : Vocabulary 크기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;\(|V_{pre}|\) : 사전학습을 위해 사용된 단어의 수&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;\(Test\) : 테스트셋의 크기 입니다. CV는 10-fold 교차검증을 의미합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;result 1.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1298&quot; data-origin-height=&quot;1090&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cvSnLQ/btrapseNdhu/HzSMs61hlKozQQObRcOkZ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cvSnLQ/btrapseNdhu/HzSMs61hlKozQQObRcOkZ1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cvSnLQ/btrapseNdhu/HzSMs61hlKozQQObRcOkZ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcvSnLQ%2FbtrapseNdhu%2FHzSMs61hlKozQQObRcOkZ1%2Fimg.png&quot; data-origin-width=&quot;1298&quot; data-origin-height=&quot;1090&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;검증 과정에서는 4개의&lt;span&gt;&amp;nbsp;&lt;/span&gt;variant model들이 사용되었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CNN-rand : baseline 모델로, 모든 파라미터가 랜덤초기화되어 학습되는 모델입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CNN-static : pretrained Word2Vec를 사용하여 임베딩을 업데이트하지 않고, 다른 모델 파라미터만을 업데이트 하는 모델입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CNN-non-static :&lt;span&gt;&amp;nbsp;&lt;/span&gt;CNN-static과 같은 방법이지만, 임베딩 또한 포함하여 업데이트를 진행합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CNN-multichannel : 업데이트 가능한 non-static 필터와 업데이트 불가능한 static 필터를 동시에 사용하는 모델입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 CNN-rand는 좋은 성능을 보이지 못했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 CNN-static 모델의 성능을 통해, Pre-trained 임베딩을 사용한다면 매우 뛰어난 결과를 보인다는 사실을 알 수 있었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 대부분의 Task에서 CNN-static모델에 비해 CNN-non-static의 성능이 좋았다는 점에서 Fine-tuning이 성능개선에 도움을 준다는 사실을 알 수 있었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음은 Static 모델과 Non-static 모델의 실제 결과를 비교한 Table 입니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;330&quot; height=&quot;515&quot; data-origin-width=&quot;672&quot; data-origin-height=&quot;1048&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zD33d/btrajPbWZXZ/zAYNZsH7Hkkkf9UqUWLKNK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zD33d/btrajPbWZXZ/zAYNZsH7Hkkkf9UqUWLKNK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zD33d/btrajPbWZXZ/zAYNZsH7Hkkkf9UqUWLKNK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzD33d%2FbtrajPbWZXZ%2FzAYNZsH7Hkkkf9UqUWLKNK%2Fimg.png&quot; width=&quot;330&quot; height=&quot;515&quot; data-origin-width=&quot;672&quot; data-origin-height=&quot;1048&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫번째 행의 bad vs good vs terrible의 예시를 통해 fine-tuning을 진행한 쪽이 더 의미적으로 맞는 표현을 학습하였다는 것을 직관적으로 알 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마지막으로 CNN-multichannel은 overfitting을 방지해줄 것이라는 기대하에 제안된 모델이었습니다. 하지만 Dropout과 같은 기존의 정규화 방법들이 잘 작동하여 추가적인 성능개선을 얻을 수는 없었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;마무리&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;본 논문은 CNN을 활용한 Sentence Classification 모델을 제안하고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;논문이 매우 잘 읽힐정도로 어렵지 않으며, 다양한 모델비교를 진행하였다는 점이 눈이 띄었던 것 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;고정관념에 갇혀있지 않고, 모델의 장점을 고려하여 적용하였다는 점 또한 좋았던 것 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; letter-spacing: 0px;&quot;&gt;CNN은 파라미터 수를 줄여 빠른 추론,학습이 가능하다고 생각하는데, 한편으로는 이 부분에 대한 검증 또한 있었으면 좋았을 것 같다는 생각이 들었습니다. 감사합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>데이터과학/자연어처리</category>
      <category>classification</category>
      <category>CNN</category>
      <category>NLP</category>
      <category>sentence classification</category>
      <category>논문리뷰</category>
      <category>딥러닝</category>
      <category>머신러닝</category>
      <category>문서분류</category>
      <category>자연어처리</category>
      <author>섭구</author>
      <guid isPermaLink="true">https://supkoon.tistory.com/37</guid>
      <comments>https://supkoon.tistory.com/37#entry37comment</comments>
      <pubDate>Sat, 24 Jul 2021 05:10:06 +0900</pubDate>
    </item>
    <item>
      <title>[추천시스템][paper review][구현] AutoRec : Auto-encoders Meet Collaborative Filtering</title>
      <link>https://supkoon.tistory.com/36</link>
      <description>&lt;script&gt; MathJax = { tex: {inlineMath: [['$', '$'], ['\\(', '\\)']]} }; &lt;/script&gt;
&lt;script src=&quot;https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-chtml.js&quot;&gt;&lt;/script&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2015년에 발표된 본 논문은 Auto Encoder를 활용하여 협업필터링을 진행하는 모델인 AutoRec에 대하여 소개하고 있습니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Collaborative filtering&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;572&quot; data-origin-height=&quot;850&quot; width=&quot;226&quot; height=&quot;336&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cpYq1H/btraexhzoz6/8QvBCP699csDn6jc48fXS1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cpYq1H/btraexhzoz6/8QvBCP699csDn6jc48fXS1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cpYq1H/btraexhzoz6/8QvBCP699csDn6jc48fXS1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcpYq1H%2Fbtraexhzoz6%2F8QvBCP699csDn6jc48fXS1%2Fimg.png&quot; data-origin-width=&quot;572&quot; data-origin-height=&quot;850&quot; width=&quot;226&quot; height=&quot;336&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;컨텐츠 기반(content-based) 방법과 더불어 추천시스템의 한가지 큰 줄기인&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;협업 필터링(Collaborative Filtering)&lt;/b&gt;은&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;컨텐츠 기반 필터링처럼 유저, 아이템의 profile을 따로 만들 필요 없이,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;평점과 방문기록 등의 과거 상호관계(interaction)에 기반하여 추천을 제공합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;예를들어 협업필터링은 &lt;/span&gt;&lt;span&gt;&quot;유저 A와 B가 아이템 1에 대하여 비슷한 평가를 내렸다면, 유저 A가 선호하는 다른 아이템인 2에 대해서도 유저 B가 비슷한 선호도를 가지고 있지 않을까?&quot; 라는 생각과 같습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일반적인 협업필터링 상황은 m명의 User, n개의 Item에 대한 partially observed User-Item rating matrix \(R \in \mathbb{R^{m\times n}}\)이 존재합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;390&quot; height=&quot;223&quot; data-origin-width=&quot;898&quot; data-origin-height=&quot;514&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/OjVSF/btracPJWGWp/OEfg76V1kttiGQftOGn4j1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/OjVSF/btracPJWGWp/OEfg76V1kttiGQftOGn4j1/img.png&quot; data-alt=&quot;User-Item matrix&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/OjVSF/btracPJWGWp/OEfg76V1kttiGQftOGn4j1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOjVSF%2FbtracPJWGWp%2FOEfg76V1kttiGQftOGn4j1%2Fimg.png&quot; width=&quot;390&quot; height=&quot;223&quot; data-origin-width=&quot;898&quot; data-origin-height=&quot;514&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;User-Item matrix&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실제 상황에서는 User와 Item이 매우 많기 때문에, 모든 유저가 모든 아이템에 대해 평점을 내린 경우는 드물다고 할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 대부분의 Rating Matrix는&lt;span&gt;&amp;nbsp;&lt;/span&gt;partially observed 상황의 sparse한 Matrix입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;협업 필터링은 기록에 없는 User-Item 조합에 대한 예측을 진행합니다. 이러한 이유에서 협업 필터링은 Matrix Completion Task로 표현되기도 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;협업 필터링에 대한 조금 더 자세한 설명을 아래의 리뷰에 기술하여 두었습니다. 참고 부탁드립니다.&lt;/p&gt;
&lt;figure id=&quot;og_1626954966179&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[paper review][추천시스템]Matrix Factorization Techniques for recommender systems&quot; data-og-description=&quot;Recommender System 정보가 넘쳐나는 현 시대에서 추천 시스템은 전자 상거래, 온라인 뉴스 및 소셜 미디어 사이트를 포함한 많은 온라인 서비스에 널리 채택되어 기호에 맞는 상품을 제공하고 있습&quot; data-og-host=&quot;supkoon.tistory.com&quot; data-og-source-url=&quot;https://supkoon.tistory.com/30&quot; data-og-url=&quot;https://supkoon.tistory.com/30&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/q4xBW/hyKXXEbGUy/YD7qLHY6lVYH7Sq5JqIbEk/img.png?width=800&amp;amp;height=719&amp;amp;face=0_0_800_719,https://scrap.kakaocdn.net/dn/dfKTto/hyKZlDp6X3/FNoudglGWJCLqBwfibFxX1/img.png?width=800&amp;amp;height=719&amp;amp;face=0_0_800_719,https://scrap.kakaocdn.net/dn/ezbNVm/hyKXWLZsG0/ejd7aPb6W40c43NgTqFEsk/img.png?width=1072&amp;amp;height=1190&amp;amp;face=568_570_614_620&quot;&gt;&lt;a href=&quot;https://supkoon.tistory.com/30&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://supkoon.tistory.com/30&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/q4xBW/hyKXXEbGUy/YD7qLHY6lVYH7Sq5JqIbEk/img.png?width=800&amp;amp;height=719&amp;amp;face=0_0_800_719,https://scrap.kakaocdn.net/dn/dfKTto/hyKZlDp6X3/FNoudglGWJCLqBwfibFxX1/img.png?width=800&amp;amp;height=719&amp;amp;face=0_0_800_719,https://scrap.kakaocdn.net/dn/ezbNVm/hyKXWLZsG0/ejd7aPb6W40c43NgTqFEsk/img.png?width=1072&amp;amp;height=1190&amp;amp;face=568_570_614_620');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[paper review][추천시스템]Matrix Factorization Techniques for recommender systems&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Recommender System 정보가 넘쳐나는 현 시대에서 추천 시스템은 전자 상거래, 온라인 뉴스 및 소셜 미디어 사이트를 포함한 많은 온라인 서비스에 널리 채택되어 기호에 맞는 상품을 제공하고 있습&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;supkoon.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Auto Encoder&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;391&quot; height=&quot;325&quot; data-origin-width=&quot;1203&quot; data-origin-height=&quot;999&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1x9lP/btraivJIH7h/Hb6MT2gatS4uKTVzfGlANK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1x9lP/btraivJIH7h/Hb6MT2gatS4uKTVzfGlANK/img.png&quot; data-alt=&quot;Auto Encoder&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1x9lP/btraivJIH7h/Hb6MT2gatS4uKTVzfGlANK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1x9lP%2FbtraivJIH7h%2FHb6MT2gatS4uKTVzfGlANK%2Fimg.png&quot; width=&quot;391&quot; height=&quot;325&quot; data-origin-width=&quot;1203&quot; data-origin-height=&quot;999&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Auto Encoder&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Auto Encoder는 동일한 입, 출력 구조를 사용해 압축된 latent representation을 학습할 수 있는 비지도 학습 모델입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 Auto Encoder는 Encoder와 Decoder로 구성되어 서로 대칭을 이루는 구조를 가지고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;학습은 일반적으로 모델 Output과 Input 사이의 RMSE를 최소화하는 방향으로 진행됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$Encoder\,\, \phi : X \rightarrow F$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$Decoder\,\, \varphi : F \rightarrow X$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$\phi, \varphi = argmin||X-(\phi \circ \varphi)X||_2^2$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;학습이 완료된 Auto Encoder는 분리를 통해 다양한 쓰임새로 사용될 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Encoder \(\phi\)는 저차원 Latent space로의 임베딩을 위해 사용될 수 있으며, Decoder는 generative model로서 사용이 가능합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;간단하지만 강력한 성능을 가지고 있기 때문에, Auto encoder의 다양한 Variation 구조들이 Vision, Speech 등 다양한 분야에서 사용되고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;노이즈에 일반화된 성능을 보여주는 Denoising Auto Encoder, 이미지를 학습하는 Convolutional Auto Encoder,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시퀀스를 학습하는&amp;nbsp; RNN Auto Encoder, 정규분포를 사용하여 latent feature를 가정하는 Variational Auto Encoder는 대표적인 Auto Encoder 구조의 예시입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1. AutoRec&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AutoRec은 Auto Encoder를 협업 필터링에 적용한 모델로서,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Auto Encoder의 장점에 힘입어 기존의 협업필터링 모델에 비해 Representation과 Complexity 측면에서 뛰어난 모습을 보여줍니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Model architecture&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;유저, 아이템 등의 특성을 Latent space로 매핑하는 것은 협업필터링에서 특성간의 Interaction을 모델링하기 위해 대중적으로 사용되는 방법 중 하나입니다. 앞서 리뷰를 진행하였던 추천시스템 모델인 &lt;a href=&quot;https://supkoon.tistory.com/30&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;MF&lt;/a&gt;, &lt;a href=&quot;https://supkoon.tistory.com/28&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;NCF&lt;/a&gt;, &lt;a href=&quot;https://supkoon.tistory.com/31&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;FM&lt;/a&gt;, &lt;a href=&quot;https://supkoon.tistory.com/33&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;DeepFM&lt;/a&gt;, &lt;a href=&quot;https://supkoon.tistory.com/32&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Wide&amp;amp;deep&lt;/a&gt;은 서로 다른 방법론 속에서도 부분적으로는 Latent Factor를 사용하고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AutoRec 또한 Auto Encoder를 사용하여 유저 또는 아이템 벡터를 저차원의 Latent feature로 표현하는 방법으로,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;partially observed User-Item rating matrix \(R \in \mathbb{R^{m\times n}}\)에 대한 Matrix Completion을 수행합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일반적인 Latent Factor 모델과 달리, AutoRec은 아이템, 유저 중 하나에 대한 임베딩만을 진행합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저자들은 아이템을 임베딩하는 Item-based 구조를 I-AutoRec, 유저를 임베딩하는 user-based 구조를 U-AutoRec으로 명명하였습니다. 두가지 모델에 대한 방법은 동일하기 때문에 I-AutoRec을 기준으로 설명 드리도록 하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아이템 \(i \in I = \{1...n\}\)이 존재할 때,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각각의 아이템 i에 대한 평점 \(r^{(i)}\)는 모든 유저 \(u \in U = \{1...m\}\)와의 조합으로 아래와 같이 존재할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$r^{(i)} = (R_{1i},...R_{mi}) \in \mathbb{R}^m$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 실제 데이터 \(r^{(i)}\)에는 관측되지 않은 조합과 관측된 조합들이 혼재되어 있을 것 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;I-AutoRec은 각각의 아이템 i에 대한 rating vector \(r^{(i)}\)를 Auto-Encoder의 Input으로 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일반적인 Auto Encoder와 동일하게 AutoRec은 다음과 같은 Encoder &amp;amp; Decoder reconstruction 과정을 수행합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$h(r;\theta) = f(W \cdot g(Vr + \mu)+b$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;\(\theta=\{W,V,\mu,b\}\)는 모델의 파라미터이며, \(f(\cdot),g(\cdot)\)은 activation function입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;\(W \in \mathbb{R}^{m\times k},V\in \mathbb{R}^{k\times m}\) 는 각각 Encoder와 Decoder의 Weight Matrix를,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;\(\mu \in \mathbb{R}^k,b\in \mathbb{R}^m\)는 Encoder와 Decoder의 bias를 의미합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;411&quot; height=&quot;276&quot; data-origin-width=&quot;578&quot; data-origin-height=&quot;388&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tDCRC/btrahiYo3ig/7ofk2u7FNCFeBiANcRA53k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tDCRC/btrahiYo3ig/7ofk2u7FNCFeBiANcRA53k/img.png&quot; data-alt=&quot;AutoRec&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tDCRC/btrahiYo3ig/7ofk2u7FNCFeBiANcRA53k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtDCRC%2FbtrahiYo3ig%2F7ofk2u7FNCFeBiANcRA53k%2Fimg.png&quot; width=&quot;411&quot; height=&quot;276&quot; data-origin-width=&quot;578&quot; data-origin-height=&quot;388&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;AutoRec&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 그림은 하나의 아이템에 대한 AutoRec 구조를 보여줍니다. 하지만 n개 만큼의 AutoRec 구조가 존재하는 것은 아닙니다. 모든 개별적인 아이템에 대한 AutoRec은 파라미터를 공유하는 하나의 모델입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Training&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AutoRec은 일반적인 Auto Encoder와 동일하게 RMSE를 최소화 하는 방향으로 학습을 진행합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$\min_{\theta}\sum_{r\in S} ||r-h(r;\theta)||_2^2$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 때 중요한점은, 관측되지 않은 데이터에 대해서는 역전파를 진행하지 않고, 관측된 데이터의 파라미터에 대해서만 역전파를 통해 업데이트가 된다는 것 입니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;411&quot; height=&quot;276&quot; data-origin-width=&quot;578&quot; data-origin-height=&quot;388&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tDCRC/btrahiYo3ig/7ofk2u7FNCFeBiANcRA53k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tDCRC/btrahiYo3ig/7ofk2u7FNCFeBiANcRA53k/img.png&quot; data-alt=&quot;AutoRec&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tDCRC/btrahiYo3ig/7ofk2u7FNCFeBiANcRA53k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtDCRC%2FbtrahiYo3ig%2F7ofk2u7FNCFeBiANcRA53k%2Fimg.png&quot; width=&quot;411&quot; height=&quot;276&quot; data-origin-width=&quot;578&quot; data-origin-height=&quot;388&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;AutoRec&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이전의 그림을 다시 살펴보겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;회색 플레이트는 관측된 데이터, 흰색 플레이트는 관측되지 않은 데이터를 의미합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;관측된 데이터에 해당하는 회색 플레이트의 Connection은 실선의 형태로 업데이트를 진행하며,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;관측되지 않은 데이터인 흰색 플레이트의 Connection은 점선으로 표시하여 업데이트 하지 않는다는 것을 알 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 오버피팅을 방지하기 위해 정규화 항을 최적화식에 추가할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음은 최종적인 AutoRec의 목적함수입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$\min_{\theta}\sum_{i=1}^n||r^{(i)}-h(r^{(i)};\theta)||_{O}^2+ {\lambda\over 2}\cdot(||W||_F^2+||V||_F^2)$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;\(||\cdot||_O^2\) 는 관측된 데이터(Observed data)에 대해서만 RMSE를 계산함을 의미합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;학습이 진행되는 파라미터는&amp;nbsp; \(2mk+m+k\)개 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Encoder, Decoder가 각각 mk개의 임베딩 파라미터를 갖고, bias를 위해 m, k개의 파라미터가 사용됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존의 협업필터링에 비하여 굉장히 적은 파라미터가 필요함을 알 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(Auto Encoder는 Encoder와 Decoder의 파라미터를 묶는경우도 존재하기 때문에, 약간의 성능하락을 감수한다면, 더욱 파라미터 수를 줄일 수 있을 것이라고 생각됩니다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최종적으로 학습된 파라미터를 통해 I-AutoRec이 예측하는 평점은 다음과 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$\hat{R_{ui}} = (h(r^{(i)};\hat{\theta})_u$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;유저 기반의 U-AutoRec은 아래의 가정에서 출발하여 동일하게 진행하시면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;유저 \(u \in U = \{1...m\}\)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;유저 u와 모든 아이템의 평점 조합&amp;nbsp; \(r^{(u)} = (R_{u1},...R_{un}) \in \mathbb{R}^n\)&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Comparison&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대표적인 Latent Factor 모델인 &lt;a href=&quot;https://supkoon.tistory.com/30&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;MF&lt;/a&gt;와의 간단한 비교를 진행해 보겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;552&quot; width=&quot;549&quot; height=&quot;237&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HyxOt/btrai8udf7O/Rf2rHocxWxvst2XYoJi2w1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HyxOt/btrai8udf7O/Rf2rHocxWxvst2XYoJi2w1/img.png&quot; data-alt=&quot;Matrix Factorization&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HyxOt/btrai8udf7O/Rf2rHocxWxvst2XYoJi2w1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHyxOt%2Fbtrai8udf7O%2FRf2rHocxWxvst2XYoJi2w1%2Fimg.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;552&quot; width=&quot;549&quot; height=&quot;237&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Matrix Factorization&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MF는 SVD와 유사한 방법으로 각기 다른 차원의 User, Item Matrix를 동시에 Latent space로 매핑합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 앞서 말씀드린대로, AutoRec은 I-AutoRec, U-AutoRec 각각의 형태에서 유저와 아이템 중 하나만을 매핑합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어떠한 방법이 옳다라는 판단을 내릴수는 없지만, 서로 다른 방법을 사용하고 있음을 알 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 MF가 Linear한 저차원의 Latent representation과 Interaction을 학습하는 반면,&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AutoRec은 non-linear한&amp;nbsp; Activation Function을 사용하여 복잡한 non-linear latent representation을 학습할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(이전의 &lt;a href=&quot;https://supkoon.tistory.com/33&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;DeepFM &lt;/a&gt;논문의 experiments에서 high-order Interaction을 학습하는 모델들이 low-order Interaction을 학습하는 모델에 비해서 모두 좋은 성능을 보였기 때문에, 이 점에 있어서는 AutoRec이 조금 더 낫지않나 하는 생각이 들었습니다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;2.Results&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모델 검증을 위한 과정에는 Movielens dataset과 Netflix dataset이 사용되었으며 다음 네가지 실험이 진행되었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;result 1.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;324&quot; height=&quot;131&quot; data-origin-width=&quot;460&quot; data-origin-height=&quot;186&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bmJb4N/btracLtAeKL/9f55l0GYc8N7iRyba4edd0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bmJb4N/btracLtAeKL/9f55l0GYc8N7iRyba4edd0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bmJb4N/btracLtAeKL/9f55l0GYc8N7iRyba4edd0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbmJb4N%2FbtracLtAeKL%2F9f55l0GYc8N7iRyba4edd0%2Fimg.png&quot; width=&quot;324&quot; height=&quot;131&quot; data-origin-width=&quot;460&quot; data-origin-height=&quot;186&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫번째 실험은 User based 모델과 Item based 모델의 성능 비교입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비교모델과 AutoRec 모두 Item based 모델의 성능이 좋았음을 알 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이는 rating per user보다 rating per Item이 상대적으로 높은 경우가 많았기 때문이라고 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 I-AutoRec의 성능이 가장 좋았음을 확인할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;result 2.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;382&quot; data-origin-height=&quot;174&quot; width=&quot;255&quot; height=&quot;116&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b1Tfqa/btraeyOcfbw/vXK0L4kQJcD8n93f225nhk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b1Tfqa/btraeyOcfbw/vXK0L4kQJcD8n93f225nhk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b1Tfqa/btraeyOcfbw/vXK0L4kQJcD8n93f225nhk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb1Tfqa%2FbtraeyOcfbw%2FvXK0L4kQJcD8n93f225nhk%2Fimg.png&quot; data-origin-width=&quot;382&quot; data-origin-height=&quot;174&quot; width=&quot;255&quot; height=&quot;116&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두번째 실험은 비 선형의 latent feature를 학습하는게 정말 도움이 되었는지를 검증하는 실험입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;hidden layer에 비 선형성을 추가시켜주는 sigmoid \(g(\cdot)\)의 사용이 AutoRec의 성능에 큰 영향을 준다는 사실을 알 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;result 3.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;558&quot; data-origin-height=&quot;212&quot; width=&quot;350&quot; height=&quot;133&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/PDRaM/btragL7dvx1/A92dXKjNwUzJOw6sr1gTlk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/PDRaM/btragL7dvx1/A92dXKjNwUzJOw6sr1gTlk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/PDRaM/btragL7dvx1/A92dXKjNwUzJOw6sr1gTlk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPDRaM%2FbtragL7dvx1%2FA92dXKjNwUzJOw6sr1gTlk%2Fimg.png&quot; data-origin-width=&quot;558&quot; data-origin-height=&quot;212&quot; width=&quot;350&quot; height=&quot;133&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;당시 쓰이던 모든 Baseline들과의 성능 비교입니다. I-AutoRec이 가장 낮은 RMSE를 달성하였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;result 4.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;450&quot; data-origin-height=&quot;310&quot; width=&quot;326&quot; height=&quot;224&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/OKZ0c/btradSzmwXQ/7MQvnnYz1jL4VRKM7A0iR0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/OKZ0c/btradSzmwXQ/7MQvnnYz1jL4VRKM7A0iR0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/OKZ0c/btradSzmwXQ/7MQvnnYz1jL4VRKM7A0iR0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOKZ0c%2FbtradSzmwXQ%2F7MQvnnYz1jL4VRKM7A0iR0%2Fimg.png&quot; data-origin-width=&quot;450&quot; data-origin-height=&quot;310&quot; width=&quot;326&quot; height=&quot;224&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;히든 유닛의 수에 따른 RMSE의 성능을 비교해 보았습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;깊게 AutoRec을 만드는 것이 성능 향상에 도움을 준다는 사실을 말해주고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;3.구현&lt;/b&gt;&lt;/h2&gt;
&lt;figure id=&quot;og_1627022040538&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - supkoon/AutoRec-tf&quot; data-og-description=&quot;Contribute to supkoon/AutoRec-tf development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/supkoon/AutoRec-tf&quot; data-og-url=&quot;https://github.com/supkoon/AutoRec-tf&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dhli13/hyKZbg9Ya8/9DBM1ImxqeqotbVJGkHmw0/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/supkoon/AutoRec-tf&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/supkoon/AutoRec-tf&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dhli13/hyKZbg9Ya8/9DBM1ImxqeqotbVJGkHmw0/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;GitHub - supkoon/AutoRec-tf&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Contribute to supkoon/AutoRec-tf development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AutoRec에 대한 구현을 진행해 보았습니다. 관측되지 않은 데이터에 대해서는 마스킹을 진행하여 MSELoss를 계산하였습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;513&quot; height=&quot;120&quot; data-origin-width=&quot;1378&quot; data-origin-height=&quot;322&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/TGIFR/btranXMsqAz/EW4eRkGuI6EZDSYHUUkCzK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/TGIFR/btranXMsqAz/EW4eRkGuI6EZDSYHUUkCzK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/TGIFR/btranXMsqAz/EW4eRkGuI6EZDSYHUUkCzK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FTGIFR%2FbtranXMsqAz%2FEW4eRkGuI6EZDSYHUUkCzK%2Fimg.png&quot; width=&quot;513&quot; height=&quot;120&quot; data-origin-width=&quot;1378&quot; data-origin-height=&quot;322&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;논문과 같은 MovieLens-1M 데이터를 활용하였는데, 어느정도 비슷한 결과가 나오는것 같습니다. 감사합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;마무리&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AutoRec은 Auto Encoder를 사용하여 특성을 Latent space로 매핑하는 협업 필터링 방법입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비록 간단한 논문이지만, 기존의 방법들을 다른 시각에서 접근하여 우수한 성능을 보였다는 점이 좋게 느껴졌습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특히 Auto Encoder라는 방법을 처음 추천시스템에 사용하였다는 점이 큰 Contribution인 것 같습니다. 감사합니다.&lt;/p&gt;</description>
      <category>데이터과학/추천시스템</category>
      <category>auto encoder</category>
      <category>AutoRec</category>
      <category>RecommenderSystem</category>
      <category>논문리뷰</category>
      <category>딥러닝</category>
      <category>머신러닝</category>
      <category>추천시스템</category>
      <author>섭구</author>
      <guid isPermaLink="true">https://supkoon.tistory.com/36</guid>
      <comments>https://supkoon.tistory.com/36#entry36comment</comments>
      <pubDate>Fri, 23 Jul 2021 01:26:32 +0900</pubDate>
    </item>
    <item>
      <title>[추천시스템][paper review][구현] DeepFM: A Factorization-Machine based Neural Network for CTR Prediction</title>
      <link>https://supkoon.tistory.com/33</link>
      <description>&lt;script&gt; MathJax = { tex: {inlineMath: [['$', '$'], ['\\(', '\\)']]} }; &lt;/script&gt;
&lt;script src=&quot;https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-chtml.js&quot;&gt;&lt;/script&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;본 논문은 2017년 발표된 논문으로 앞서 리뷰하였던 &lt;a href=&quot;https://supkoon.tistory.com/31&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Factorization Machines&lt;/a&gt;을 신경망으로 확장한 &lt;b&gt;DeepFM&lt;/b&gt; 모델을 제안하고 있습니다. DeepFM은 추천시스템에서 중요시되는 CTR 예측을 위한 모델로서, 기존의 모델들의 장점들을 잘 취합한 모델이라고 할 수 있습니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;CTR(Click-through rate) in Recommender system&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;512&quot; data-origin-height=&quot;512&quot; width=&quot;179&quot; height=&quot;179&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/deOzzK/btq97PwpkfC/THmAqSxJ4LG0qyghwoNoIk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/deOzzK/btq97PwpkfC/THmAqSxJ4LG0qyghwoNoIk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/deOzzK/btq97PwpkfC/THmAqSxJ4LG0qyghwoNoIk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdeOzzK%2Fbtq97PwpkfC%2FTHmAqSxJ4LG0qyghwoNoIk%2Fimg.png&quot; data-origin-width=&quot;512&quot; data-origin-height=&quot;512&quot; width=&quot;179&quot; height=&quot;179&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CTR(Click-through rate)이란 추천된 아이템을 유저가 클릭할 확률을 의미합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; letter-spacing: 0px;&quot;&gt;&lt;b&gt;추천시스템&lt;/b&gt;에 있어 &lt;b&gt;CTR(Click-through rate)&lt;/b&gt;의 예측은 매우 중요한 요소 중 하나입니다. &lt;/span&gt;대부분의 추천시스템은 CTR의 최대화를 목표로 하고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;CTR의 예측을 위해서는 &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;클릭 이전에 숨겨진 사용자의 Implicit feature를 학습해야 합니다.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;본 논문의 저자들은 실험을 통하여 유저들이 &lt;b&gt;식사 시간(시간)&lt;/b&gt;에 &lt;b&gt;음식 배달 앱(앱 종류)&lt;/b&gt;을 자주 다운로드한다는 사실을 발견하였으며, &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이는 &lt;b&gt;앱 종류&lt;/b&gt;와 &lt;b&gt;시간&lt;/b&gt; 사이의 &lt;b&gt;order-2 Interaction&lt;/b&gt;이 CTR의 신호가 되었음을 알 수 있는 예시입니다.&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;또한, &lt;b&gt;남자(성별)&lt;/b&gt; &lt;b&gt;아이들(나이)이&lt;/b&gt; &lt;b&gt;슈팅게임 &lt;/b&gt;&lt;b&gt;어플(앱 종류)&lt;/b&gt;과 &lt;b&gt;RPG 게임 어플(앱 종류)&lt;/b&gt;을 좋아한다는 사실은 &lt;b&gt;성별&lt;/b&gt;, &lt;b&gt;나이&lt;/b&gt;, &lt;b&gt;앱&lt;/b&gt;&amp;nbsp;&lt;b&gt;종류&lt;/b&gt; 사이의 &lt;b&gt;order-3 interaction&lt;/b&gt;이 CTR에 신호가 될 수 있음을 보여주는 예시가 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러한 Implicit feature 사이의 Interaction은 보통 매우 복잡하며, 양질의 추천을 위해서는 낮은 차원의 Interaction부터 고차원의 Interaction이 모두 중요하게 고려되야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다양한 차원의 Interaction을 고려하는 것이 추천시스템의 성능을 끌어올려준다는 것은 &lt;a href=&quot;https://supkoon.tistory.com/32&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Wide &amp;amp; Deep&lt;/a&gt;&amp;nbsp;과&amp;nbsp;&lt;a href=&quot;https://supkoon.tistory.com/31&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;FM&lt;/a&gt;의 연구를 통해서도 알 수 있었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앞선 두가지의 예시는 누구나 납득할만한 Interaction이며, 전문가를 고용하여 모델링 할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만, '&lt;b&gt;기저귀&lt;/b&gt;를 구매하는 사람은&amp;nbsp;&lt;b&gt;맥주&lt;/b&gt;를 함께 구매한다&lt;b&gt;(order-2)&lt;/b&gt;'와 같은 대부분의 Interaction들은 데이터 속에 숨겨져있어 전문가조차도 쉽사리 찾을 수 없습니다. (아버지들이 기저귀를 자주 구매하는 듯 합니다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사실 아무리 이해하기 쉬운 Interaction들이 존재한다 하더라도, 인력을 사용하여 기하급수적으로 늘어나는 모든 Interaction을 모델링할 수는 없습니다. 따라서 CTR을 증가시키기 위해서는 머신러닝 모델을 사용하여 특성간의 다양한 Interaction을 포착할 수 있어야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Related studies&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2010년 발표된 &lt;b&gt;&lt;a href=&quot;https://supkoon.tistory.com/31&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;FM(Factorization Machines)&lt;/a&gt;&lt;/b&gt;은 Latent space로 각각의 특성들을 매핑하여 내적을 통해 Interaction을 계산할 수 있는 방법입니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1038&quot; data-origin-height=&quot;170&quot; width=&quot;525&quot; height=&quot;86&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GptyU/btrack3e9aY/IqUlkcLOU1KPOktG47XKhk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GptyU/btrack3e9aY/IqUlkcLOU1KPOktG47XKhk/img.png&quot; data-alt=&quot;Factorization machines(order-2)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GptyU/btrack3e9aY/IqUlkcLOU1KPOktG47XKhk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGptyU%2Fbtrack3e9aY%2FIqUlkcLOU1KPOktG47XKhk%2Fimg.png&quot; data-origin-width=&quot;1038&quot; data-origin-height=&quot;170&quot; width=&quot;525&quot; height=&quot;86&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Factorization machines(order-2)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;FM의 &lt;b&gt;factorized&lt;span&gt;&amp;nbsp;&lt;/span&gt;parametrization&lt;/b&gt;은 order-2에서부터 order-n까지의 Interaction을 내적을 통해 모두 모델링 할 수 있게 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;FM이 Linear complexity를 갖고있다고는 하지만, 실제로는 높은 복잡도로 인하여 High-order가 아닌 order-2 모델링이 주로 사용됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2016년 발표된 구글의 &lt;a href=&quot;https://supkoon.tistory.com/32&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;b&gt;Wide &amp;amp; deep&lt;/b&gt; &lt;/a&gt;은 Linear(&quot;wide&quot;) 모델과 neural network(&quot;Deep&quot;) 모델을 합친 구조로서, low-order와 high-order Interaction을 모두 모델링할 수 있었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 Wide&amp;amp;deep 구조는 high-order Interaction을 모델링하기 위해 직접 선정한 feature를 &lt;b&gt;cross-product transformation&lt;/b&gt; 하여 새로운 특성으로 추가하는 방법을 채택하고 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;876&quot; data-origin-height=&quot;438&quot; width=&quot;450&quot; height=&quot;225&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bhMF1r/btradTDOHat/nPShwcpCXXnr3zHwNb8lk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bhMF1r/btradTDOHat/nPShwcpCXXnr3zHwNb8lk1/img.png&quot; data-alt=&quot;Wide &amp;amp;amp;amp; Deep&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bhMF1r/btradTDOHat/nPShwcpCXXnr3zHwNb8lk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbhMF1r%2FbtradTDOHat%2FnPShwcpCXXnr3zHwNb8lk1%2Fimg.png&quot; data-origin-width=&quot;876&quot; data-origin-height=&quot;438&quot; width=&quot;450&quot; height=&quot;225&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Wide &amp;amp; Deep&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;추천시스템이 여전히 전문화된 feature engineering을 필요로 하고 있었음을 알 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1.DeepFM&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DeepFm의 가장 큰 Contribution은 End-to-End로 모든 Order의 Interaction을 모델링할 수 있다는 것 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 DeepFM은 전문화된 feature engineering을 필요로하지 않습니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Model architecture&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;866&quot; data-origin-height=&quot;440&quot; width=&quot;563&quot; height=&quot;286&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6NjSc/btq98dcqMFC/ItbvTkTxQvd4KZW1nVDjxK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6NjSc/btq98dcqMFC/ItbvTkTxQvd4KZW1nVDjxK/img.png&quot; data-alt=&quot;Deep FM&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6NjSc/btq98dcqMFC/ItbvTkTxQvd4KZW1nVDjxK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6NjSc%2Fbtq98dcqMFC%2FItbvTkTxQvd4KZW1nVDjxK%2Fimg.png&quot; data-origin-width=&quot;866&quot; data-origin-height=&quot;440&quot; width=&quot;563&quot; height=&quot;286&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Deep FM&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;DeepFM&lt;/b&gt;은 &lt;b&gt;FM Component&lt;/b&gt;와 &lt;b&gt;Deep Component&lt;/b&gt;로 이루어져 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각각&lt;b&gt; FM component&lt;/b&gt;는 &lt;b&gt;Low-order&lt;/b&gt;를, &lt;b&gt;Deep component&lt;/b&gt;는 &lt;b&gt;High-order&lt;/b&gt;를 모델링하기 위해 사용됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두개의 Component는 서로 같은 Input과 Embedding을 공유합니다. 따라서 이는 Wide &amp;amp; deep 모델과의 차별점이라고 할 수있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 모든 파라미터는 아래의 예측 통해 동시에 학습이 진행됩니다(jointly training).&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$\hat{y} = sigmoid(y_{FM} + y_{DNN})$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;본 추천시스템의 목적은 CTR의 예측이기 때문에, \(\hat{y} \in (0,1)\) 이며 sigmoid 함수를 사용하고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각각의 Component에 대해 자세히 설명을 드리도록 하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1) FM Component&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;842&quot; data-origin-height=&quot;494&quot; width=&quot;530&quot; height=&quot;311&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dJrJDR/btracP9KTq9/736L8FNdsXWCXDm72vp2Hk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dJrJDR/btracP9KTq9/736L8FNdsXWCXDm72vp2Hk/img.png&quot; data-alt=&quot;FM Component&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dJrJDR/btracP9KTq9/736L8FNdsXWCXDm72vp2Hk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdJrJDR%2FbtracP9KTq9%2F736L8FNdsXWCXDm72vp2Hk%2Fimg.png&quot; data-origin-width=&quot;842&quot; data-origin-height=&quot;494&quot; width=&quot;530&quot; height=&quot;311&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;FM Component&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;FM Component는 간단하게 Factorization Machine이라고 할 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;FM은 order-1 Interaction 뿐만 아니라, latent feature의 내적을 사용하여 order-2 Interaction 또한 모델링 할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존의 FM과 거의 동일한 아래의 수식으로 FM Component는 계산이 가능합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$y_{FM} = &amp;lt;w,x&amp;gt; + \sum_{j_{1}=1}^{d}\sum_{j_{2}=j_{1}+1}^{d}&amp;lt;v_{j_{1}}, v_{j_{2}}&amp;gt; x_{j_{1}}x_{j_{2}}$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$w \in R^d, V_i \in R^k$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;\(w\)는 특성의 order-1 가중치를 의미합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;\(V_i\)는 i번째 feature의 latent vector를 의미하며, \(&amp;lt;V_i,V_j&amp;gt;\)는 특성 i, j 사이의 내적으로, order-2 가중치를 의미합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존의 FM구조와 거의 동일하기 때문에 자세한 내용은 아래의 리뷰를 참고 부탁드립니다.&lt;/p&gt;
&lt;figure id=&quot;og_1626890120117&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[paper review][추천시스템] Factorization Machines&quot; data-og-description=&quot;머신러닝과 데이터 마이닝에서 SVM은 가장 대중적으로 사용되는 예측기 중 하나입니다. SVM은 General Predictor로서 데이터의 형태에 크게 규제받지 않고 분류, 회귀 등 다양한 작업을 수행할 수 있다&quot; data-og-host=&quot;supkoon.tistory.com&quot; data-og-source-url=&quot;https://supkoon.tistory.com/31&quot; data-og-url=&quot;https://supkoon.tistory.com/31&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dboX7Y/hyKXNOrNcQ/EkL6kwUR5kkG2U72yKpWU1/img.png?width=800&amp;amp;height=375&amp;amp;face=0_0_800_375,https://scrap.kakaocdn.net/dn/5ohxo/hyKXZnNx7C/M68OkaEmjhI7DI1X7lISg1/img.png?width=800&amp;amp;height=375&amp;amp;face=0_0_800_375,https://scrap.kakaocdn.net/dn/cVjRy1/hyKXOmgXDP/jxjikP65QNojzRJnqxnsE0/img.png?width=1094&amp;amp;height=514&amp;amp;face=0_0_1094_514&quot;&gt;&lt;a href=&quot;https://supkoon.tistory.com/31&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://supkoon.tistory.com/31&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dboX7Y/hyKXNOrNcQ/EkL6kwUR5kkG2U72yKpWU1/img.png?width=800&amp;amp;height=375&amp;amp;face=0_0_800_375,https://scrap.kakaocdn.net/dn/5ohxo/hyKXZnNx7C/M68OkaEmjhI7DI1X7lISg1/img.png?width=800&amp;amp;height=375&amp;amp;face=0_0_800_375,https://scrap.kakaocdn.net/dn/cVjRy1/hyKXOmgXDP/jxjikP65QNojzRJnqxnsE0/img.png?width=1094&amp;amp;height=514&amp;amp;face=0_0_1094_514');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[paper review][추천시스템] Factorization Machines&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;머신러닝과 데이터 마이닝에서 SVM은 가장 대중적으로 사용되는 예측기 중 하나입니다. SVM은 General Predictor로서 데이터의 형태에 크게 규제받지 않고 분류, 회귀 등 다양한 작업을 수행할 수 있다&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;supkoon.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2) Deep Component&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;842&quot; data-origin-height=&quot;440&quot; width=&quot;530&quot; height=&quot;277&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BDIUF/btq99mHe0fv/zEbzvSAOkGUKseNQr4AHj0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BDIUF/btq99mHe0fv/zEbzvSAOkGUKseNQr4AHj0/img.png&quot; data-alt=&quot;Deep Component&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BDIUF/btq99mHe0fv/zEbzvSAOkGUKseNQr4AHj0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBDIUF%2Fbtq99mHe0fv%2FzEbzvSAOkGUKseNQr4AHj0%2Fimg.png&quot; data-origin-width=&quot;842&quot; data-origin-height=&quot;440&quot; width=&quot;530&quot; height=&quot;277&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Deep Component&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Deep Component는 feed-forward neural network로서 high-order Interaction을 학습하기 위한 구조입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CTR 예측을 위한 데이터는 매우 Sparse한 categorical 특성과 Continuous한 특성이 혼재되어 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 Deep Component는 모든 특성의 저차원 임베딩을 신경망의 Input으로 활용합니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;772&quot; data-origin-height=&quot;236&quot; width=&quot;523&quot; height=&quot;160&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/VDdmH/btq99cqO5Zd/IluKK3wfLCswBoDv8vvwh1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/VDdmH/btq99cqO5Zd/IluKK3wfLCswBoDv8vvwh1/img.png&quot; data-alt=&quot;Embedding Layer&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/VDdmH/btq99cqO5Zd/IluKK3wfLCswBoDv8vvwh1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVDdmH%2Fbtq99cqO5Zd%2FIluKK3wfLCswBoDv8vvwh1%2Fimg.png&quot; data-origin-width=&quot;772&quot; data-origin-height=&quot;236&quot; width=&quot;523&quot; height=&quot;160&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Embedding Layer&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;포인트는 두가지 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫번째는 각기 다른 길이의 특성벡터를 동일한 크기의 임베딩 벡터로 표현한다는 것 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두번째는 FM Component에서 order-2 Interaction을 계산하기 위한 latent feature로 쓰인 \(V\)가 Deep Component에서는 input특성들을 임베딩 벡터로 만들기 위한 Embedding layer의 가중치역할을 한다는 것 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 두가지 Component가 동일한 임베딩 층을 공유하고 있음을 다시한번 확인할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$a^{(0)} = [e_1,e_2,...,e_m]$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;\(a^{(0)}\)는 임베딩 층의 output이며, \(e_i\)는 \(i\)번째 특성의 임베딩, m은 특성의 수 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$a^{(l+1)} = \sigma(W^{(l)}a^{(l)}+b^{(l)})$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;\(a^{(0)}\)는 심층 신경망의 input이 되며, \(ㅣ\)번째 층은 일반적인 신경망의 연산을 수행합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$y_{DNN} = \sigma(W^{|H|+1}a^{|H|}+b^{|H|+1})$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;\(H\)개의 hidden layer를 거친 Deep component의 output은 위와 같습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Wide &amp;amp; deep과의 차별점은 역시 두개의 Component가 동일한 임베딩을 공유하는 것 입니다. 임베딩을 공유하는 것은 다음과 같은 이점을 가져옵니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1) raw feature로 부터 low-order와 high-order feature Interaction을 동시에 학습할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2) 별도의 전문적인 Feature engineering을 필요로 하지 않습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Comparison with other Model&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1710&quot; data-origin-height=&quot;440&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/enKnuB/btraeuKuIQB/3yo2P3DC7PVLgo5E2MCzUk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/enKnuB/btraeuKuIQB/3yo2P3DC7PVLgo5E2MCzUk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/enKnuB/btraeuKuIQB/3yo2P3DC7PVLgo5E2MCzUk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FenKnuB%2FbtraeuKuIQB%2F3yo2P3DC7PVLgo5E2MCzUk%2Fimg.png&quot; data-origin-width=&quot;1710&quot; data-origin-height=&quot;440&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;554&quot; height=&quot;161&quot; data-origin-width=&quot;812&quot; data-origin-height=&quot;236&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/deyWC0/btraew9vPW7/kGLTfkPCs01jbR3DCDgRZ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/deyWC0/btraew9vPW7/kGLTfkPCs01jbR3DCDgRZ1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/deyWC0/btraew9vPW7/kGLTfkPCs01jbR3DCDgRZ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdeyWC0%2Fbtraew9vPW7%2FkGLTfkPCs01jbR3DCDgRZ1%2Fimg.png&quot; width=&quot;554&quot; height=&quot;161&quot; data-origin-width=&quot;812&quot; data-origin-height=&quot;236&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;존재하는 CTR prediction 모델들과의 비교입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Pre-training이 필요하지 않다는 점,&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Low order와 High order Interaction이 모두 모델링 가능하다는 점,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;추가적인 Feature Engineering을 필요로하지 않는다는 점에서 DeepFm이 비교 우위에 있음을 알 수 있습니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;2. Results&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;검증은 Click records를 포함하고 있는 Criteo Dataset과 Company Dataset에서 이루어졌습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비교를 위한 Metric에는 AUC와 LogLoss가 사용되었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;result 1.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;828&quot; data-origin-height=&quot;230&quot; width=&quot;562&quot; height=&quot;156&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tY0Jr/btracOXpHhG/dpBxcaLMpD1N0jrnIwu9u0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tY0Jr/btracOXpHhG/dpBxcaLMpD1N0jrnIwu9u0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tY0Jr/btracOXpHhG/dpBxcaLMpD1N0jrnIwu9u0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtY0Jr%2FbtracOXpHhG%2FdpBxcaLMpD1N0jrnIwu9u0%2Fimg.png&quot; data-origin-width=&quot;828&quot; data-origin-height=&quot;230&quot; width=&quot;562&quot; height=&quot;156&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫번째 실험은 Efficiency 비교입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각각은 Linear 모델 대비 각 모델이 학습에 걸린 시간을 의미합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DeepFM의 학습시간이 크게 우위에 있는 것은 아니지만, Pre-training을 필요로하지 않는다는 점이 주목할 만 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;result 2.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;828&quot; data-origin-height=&quot;468&quot; width=&quot;529&quot; height=&quot;299&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bbKWU4/btq99nlVAvB/gXLPWEfiuzwdBAZQDPr5b0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bbKWU4/btq99nlVAvB/gXLPWEfiuzwdBAZQDPr5b0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bbKWU4/btq99nlVAvB/gXLPWEfiuzwdBAZQDPr5b0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbbKWU4%2Fbtq99nlVAvB%2FgXLPWEfiuzwdBAZQDPr5b0%2Fimg.png&quot; data-origin-width=&quot;828&quot; data-origin-height=&quot;468&quot; width=&quot;529&quot; height=&quot;299&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두번째는 Effectiveness 비교입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 유일하게 Interaction을 고려하지 않는 LR모델이 나머지 Interaction을 고려하는 모델에 비해 성능이 떨어졌음을 확인할 수 있습니다. 따라서 Interaction의 고려가 CTR 예측에 긍정적인 영향을 준다는 것을 알 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 High-order를 고려하는 모델들이 Low-order Interaction만을 고려하는 모델보다 성능이 좋았습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 최종적으로는 임베딩을 공유하는 DeepFM이 가장 좋은 CTR 예측 성능을 보였음을 알 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;3.구현&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DeepFm에 대한 구현을 Movielens dataset을 활용하여 진행해 보았습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CTR을 예측하는것이 더 적절하지만, 유사하게 평점 0~3.5 --&amp;gt; 0 , 4.0~5.0--&amp;gt; 1로 예측하는 binary classification을 진행하였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;공부를 위한 목적이 크기 때문에, 논문의 모델을 구현하는데에 초점을 맞추었습니다. 양해 부탁드립니다.&lt;/p&gt;
&lt;figure id=&quot;og_1626893669548&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - supkoon/deep_fm&quot; data-og-description=&quot;Contribute to supkoon/deep_fm development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/supkoon/deep_fm&quot; data-og-url=&quot;https://github.com/supkoon/deep_fm&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cPSK1T/hyKXVyWwsj/Heul1qg8IPsU1mpfCLVU31/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/supkoon/deep_fm&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/supkoon/deep_fm&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cPSK1T/hyKXVyWwsj/Heul1qg8IPsU1mpfCLVU31/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;GitHub - supkoon/deep_fm&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Contribute to supkoon/deep_fm development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;마무리&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DeepFM은 deep component와 FM component를 결합한 추천시스템입니다. DeepFM은 크게 세가지 장점이 존재하였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫번째로는 Deep, FM Component를 통해 High-order Interaction과 Low-order Interaction을 모두 모델링 할 수 있다는 것 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두번째로는 두개의 Component 사이에 임베딩을 공유하여 부가적인 Featrue engineering을 필요로 하지 않는다는 것 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마지막은 DeepFM이 Pre-training을 필요로 하지 않는 다는 것 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존의 모델들의 장점들을 잘 취합하여 효율적이며 효과적인 모델을 잘 개발한 것 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특히 동일한 임베딩을 활용하여 다른 역할로 각각의 Component에서 활용한다는 아이디어가 좋았던 것 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>데이터과학/추천시스템</category>
      <category>DeepFM</category>
      <category>Factorization machine</category>
      <category>FM</category>
      <category>recommender system</category>
      <category>논문리뷰</category>
      <category>딥러닝</category>
      <category>머신러닝</category>
      <category>추천시스템</category>
      <author>섭구</author>
      <guid isPermaLink="true">https://supkoon.tistory.com/33</guid>
      <comments>https://supkoon.tistory.com/33#entry33comment</comments>
      <pubDate>Thu, 22 Jul 2021 04:02:26 +0900</pubDate>
    </item>
    <item>
      <title>[추천시스템][paper review][구현] Wide &amp;amp; Deep Learning for Recommender Systems</title>
      <link>https://supkoon.tistory.com/32</link>
      <description>&lt;script&gt; MathJax = { tex: {inlineMath: [['$', '$'], ['\\(', '\\)']]} }; &lt;/script&gt;
&lt;script src=&quot;https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-chtml.js&quot;&gt;&lt;/script&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Wide &amp;amp; deep은 2016년 구글이 발표한 논문으로, Memorization과 Generalization을 동시에 잘 수행할 수 있는 추천시스템 모델을 소개하고 있습니다. Wide &amp;amp; deep은 구글 플레이스토어의 추천시스템에 활용되어 매우 효율적이며 효과적인 성능을 보여준 시스템입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Memorization, Generalization&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선, 본 논문에서 중점적으로 여기고 있는 Memorization과 Generalization의 정의에 대해 설명드리도록 하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1) Memorization&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일반적인 regression은 종종 One-hot vector를 사용하여 학습합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어 One-hot 상황에서 (User == 정구섭)를 표현하는 Binary feature는 User가 &quot;정구섭&quot; 일때 1의 값을 갖게됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, 모델은 &quot;정구섭&quot;이라는 User 특성의 출현(occurence)를 학습하게 되는 것 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Memorization은 기존의 특성들을 사용하여 &lt;b&gt;새로운 특성&lt;/b&gt;을 만들어 학습하는 것을 의미합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일반적으로 간단하게 Memorization은 동시출현(co-occurrence)빈도를 표현하는 &lt;b&gt;Cross-product&lt;/b&gt;로 생성이 가능합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Cross-product&lt;/b&gt; &lt;b&gt;Tranformation&lt;/b&gt;은 One-hot vector 사이의 AND 연산(cross product)을 통해 동시출현 여부를 의미하는 새로운 Binary feature를 생성할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어, AND(User = 정구섭, Item = 맥북) 이라는 새로운 Memorization 특성은 One-hot 특성간의 Cross-product transformation을 통해 생성이 가능합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;생성된 특성은 User가 &quot;정구섭&quot;인 동시에 Item 특성이 &quot;맥북&quot; 일 때 비로소 1의 값을 갖게 될 것입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, Memorization은 각각의 특성들의 동시 출현을 바탕으로 새로운 특성을 생성하여 상호작용을 '암기'하는 것 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;추천시스템에서&lt;/b&gt; &lt;b&gt;Memorization&lt;/b&gt;은 과거의 동시출현이 평가(Rating)에 끼친 영향에 대한 설명력을 제공하며, 매우 Topical하고 상품에 직접적으로 관련된 정보들을 추천하도록 도와줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 반대로 등장하지 않은 조합에 대한 설명력이 떨어지며, 특성간의 Cross-product transformation이라는 무거운 feature engineering을 필요로 한다는 단점이 존재합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2) Generalization&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Generalization은 Memorization과 반대로, 새로운 특성 조합에 대한 일반화된 예측을 가능하게 하는 방법입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앞서 리뷰하였던 &lt;a href=&quot;https://supkoon.tistory.com/30&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Matrix Factorization&lt;/a&gt; , &lt;a href=&quot;https://supkoon.tistory.com/31&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Factorization Machines&lt;/a&gt;&amp;nbsp;같은 임베딩 기반 모델들은 각각의 특성들을 동일한 차원의 Latent space로 매핑하여 Dense한 벡터로 표현합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;새로 표현된 Dense한 특성벡터는 서로 내적이 가능하며, 따라서 별도의 Cross-product transformation을 필요로 하지 않습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;무엇보다도 Generalization은 과거에 관측되지 않은 특성의 조합에 대한 일반화된 예측을 제공해 줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 &lt;b&gt;추천시스템에서&lt;/b&gt; &lt;b&gt;Generalization&lt;/b&gt;은 추천의 &lt;b&gt;다양성&lt;/b&gt;을 증가시키며, 비주류 아이템을 거의 추천하지 않는 &lt;b&gt;Long-tail problem&lt;/b&gt;을 극복하도록 도와줄 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 Generalization은 Memorization에 비해 상대적으로 적은 feature engineering을 필요로 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 실제로 존재할수 없는 관계에 대해서도 과도한 일반화 결과를 내놓을 가능성이 존재합니다.Cross-product가 같은 경우를 존재하지 않는 조합으로 '암기'하는 것과는 대조적입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단적으로 한화와 토트넘의 우승가능성에 대해서도 Generalization 모델은 Memorization 모델보다 높은 가능성을 점칠 것 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이처럼 Generalization과 Memorization은 각자의 장점을 가지고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;추천시스템은 일반적인 작업과는 다르게 정확한 정답이 존재하지 않는 문제라고 할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 추천시스템에서는 여전히 logistic regression과 같은 Memorization에 특화된 Linear 모델과&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://supkoon.tistory.com/30&quot;&gt;Matrix Factorization&lt;/a&gt;&amp;nbsp;,&amp;nbsp;&lt;a href=&quot;https://supkoon.tistory.com/31&quot;&gt;Factorization Machines&lt;/a&gt;,&amp;nbsp;&lt;a href=&quot;https://supkoon.tistory.com/28&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;NCF&lt;/a&gt;와 같이 Generalization에 특화된 Embedding based 모델이 모두 사용되고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Wide &amp;amp; deep&lt;/b&gt;의 가장 큰 Contribution은 Memorization과 Generalization을 동시에 수행할 수 있다는 점 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 Wide &amp;amp; deep은 과거의 기록으로부터 어느정도 보장되었으며, 다양한 추천 결과를 동시에 제공할 수 있는 추천시스템 모델입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1.Wide &amp;amp; deep&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Model architecture&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Wide &amp;amp; deep 모델의 구조에 대하여 알아보겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Wide &amp;amp; deep은 Wide part와 Deep part로 나누어져 있으며, 각각 Memorization과 Generalization을 담당하고 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;1192&quot; height=&quot;269&quot; data-origin-width=&quot;1786&quot; data-origin-height=&quot;402&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/waH3O/btrac0v21pC/liImOjoC5oVxNNU8yYWCkK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/waH3O/btrac0v21pC/liImOjoC5oVxNNU8yYWCkK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/waH3O/btrac0v21pC/liImOjoC5oVxNNU8yYWCkK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwaH3O%2Fbtrac0v21pC%2FliImOjoC5oVxNNU8yYWCkK%2Fimg.png&quot; width=&quot;1192&quot; height=&quot;269&quot; data-origin-width=&quot;1786&quot; data-origin-height=&quot;402&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1) Wide component&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;498&quot; data-origin-height=&quot;402&quot; width=&quot;335&quot; height=&quot;270&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bwda0W/btq97mHHBQq/8pcx1jAzpdavKgWQIVeOB0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bwda0W/btq97mHHBQq/8pcx1jAzpdavKgWQIVeOB0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bwda0W/btq97mHHBQq/8pcx1jAzpdavKgWQIVeOB0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbwda0W%2Fbtq97mHHBQq%2F8pcx1jAzpdavKgWQIVeOB0%2Fimg.png&quot; data-origin-width=&quot;498&quot; data-origin-height=&quot;402&quot; width=&quot;335&quot; height=&quot;270&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Wide &amp;amp; deep 모델의 Wide는 Memorization을 담당하는 generalized linear model을 의미합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$y= W^Tx+b$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;\(w = [w_1,w_2,...,w_d]\)는 모델의 파라미터 , \(b\)는 bias 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;\(y\)는 feature vector \(x =[x_1,x_2,...,x_d]\)에 대한 예측을 의미합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 때, Wide는 memorization을 담당하기 때문에 feature set \(x\)는 개별적인 raw 특성과 cross-product transformation으로 생성된 새로운 특성을 함께 포함하고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;cross-product feature는 다음의 식으로 구할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$\phi_k(x)= \prod_{i=1}^d x_i^{c_{ki}},\,\,\,\,c_{ki} \in \{0,1\}$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어 설명드리겠습니다. 다음의 feature로 구성된 x가 있다고 가정해보겠습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;$$x = [유저, 아이템, 나이]$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 때, k번째 cross-product feature \(\phi_k(x)\)는 유저(\(x_1\))와 나이(\(x_3\))의 cross-product를 고려하는 특성입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;k번째 cross-product feature에 i번째 특성이 포함되면, 해당 \(c_{ki}\) 값은 1로 세팅됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$c_{k유저}=c_{k나이}=1,\, c_{k아이템}=0$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 \(\phi_k(x)\)는 다음과 같이 계산됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$\phi_k(x) = x_{유저}^1x_{아이템}^0x_{나이}^1$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이는 cross-product feature를 계산하기 위해 선택된 개별 boolean 특성의 곱을 의미합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Wide part는 새로운 특성을 기존의 raw특성에 concatenate하여 모델을 학습합니다. 이러한 작업은 generalized linear model 자체에도 비 선형성을 추가해 줍니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; style=&quot;width: 61.03311542171258%;&quot; data-origin-width=&quot;876&quot; data-origin-height=&quot;438&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bIaFp5/btracjJHFil/mSI5c9w4oBvh6zwAeViyOK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bIaFp5/btracjJHFil/mSI5c9w4oBvh6zwAeViyOK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bIaFp5/btracjJHFil/mSI5c9w4oBvh6zwAeViyOK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbIaFp5%2FbtracjJHFil%2FmSI5c9w4oBvh6zwAeViyOK%2Fimg.png&quot; style=&quot;width: 61.03311542171258%;&quot; data-origin-width=&quot;876&quot; data-origin-height=&quot;438&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;본 논문에서는 그림과 같이 두가지의 Sparse feature인 User Installed App, Impression App을 사용하여 Cross-product feature를 추가하였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2) deep component&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bEruj7/btrackIDDAX/GGkUK07piIFSyPxBvMGRd0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bEruj7/btrackIDDAX/GGkUK07piIFSyPxBvMGRd0/img.png&quot; data-origin-width=&quot;438&quot; data-origin-height=&quot;360&quot; width=&quot;293&quot; height=&quot;241&quot; style=&quot;width: 37.384%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bEruj7/btrackIDDAX/GGkUK07piIFSyPxBvMGRd0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbEruj7%2FbtrackIDDAX%2FGGkUK07piIFSyPxBvMGRd0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;438&quot; height=&quot;360&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ZgtQI/btq9341qTLu/zwXFqCqsIXckfz7jB1EJe1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ZgtQI/btq9341qTLu/zwXFqCqsIXckfz7jB1EJe1/img.png&quot; data-origin-width=&quot;876&quot; data-origin-height=&quot;438&quot; style=&quot;width: 61.4532%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ZgtQI/btq9341qTLu/zwXFqCqsIXckfz7jB1EJe1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZgtQI%2Fbtq9341qTLu%2FzwXFqCqsIXckfz7jB1EJe1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;876&quot; height=&quot;438&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;wide &amp;amp; deep 모델의 Deep는 feed-forward neural network로서 모델의 Generalization을 담당합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 categorical feature는 embedding layer를 통해 저차원의 특성으로 변환되며, Continuous feature와 concatenate되어 심층 신경망의 입력이 됩니다. 이 때, 임베딩 층은 랜덤으로 초기화되며 모델 학습과정에서 함께 학습됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 각각의 hidden layer에서는 다음과 같은 일반적인 신경망 연산이 진행됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$a^{(l+1)} = f(W^{(l)}a^{(l)} + b^{(l)} )$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;\(l\)번째 층의 \(W^l\)는 weight를, \(b^l\)는 bias를, \(a^l\)는 activation function을 의미하며 본 논문에서는 ReLu를 사용했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Joint Training of Wide &amp;amp; Deep&amp;nbsp;&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1758&quot; data-origin-height=&quot;418&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dm6LjV/btq99mfSp9h/hiICNoE2kDMyYHQPc08Gzk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dm6LjV/btq99mfSp9h/hiICNoE2kDMyYHQPc08Gzk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dm6LjV/btq99mfSp9h/hiICNoE2kDMyYHQPc08Gzk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdm6LjV%2Fbtq99mfSp9h%2FhiICNoE2kDMyYHQPc08Gzk%2Fimg.png&quot; data-origin-width=&quot;1758&quot; data-origin-height=&quot;418&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;864&quot; data-origin-height=&quot;428&quot; width=&quot;489&quot; height=&quot;242&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cetILc/btq934NWTeC/h72K8EaU3PvKuDFBfm084K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cetILc/btq934NWTeC/h72K8EaU3PvKuDFBfm084K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cetILc/btq934NWTeC/h72K8EaU3PvKuDFBfm084K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcetILc%2Fbtq934NWTeC%2Fh72K8EaU3PvKuDFBfm084K%2Fimg.png&quot; data-origin-width=&quot;864&quot; data-origin-height=&quot;428&quot; width=&quot;489&quot; height=&quot;242&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;WIde &amp;amp; deep 모델은 output layer에서 Wide part와 Deep part의 output을 가중합(weighted sum)합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 모델은 일반적인 logistic regression을 사용하여 동시에 학습(joint training)이 가능합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Wide &amp;amp; deep은 output layer를 통하여 동시에 역전파가 진행됩니다. 따라서 이는 단순한 앙상블과는 다르다고 할 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Wide part는 FTRL알고리즘이 Optimizer로 사용되었으며, Deep part는 AdaGrad가 사용되었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일반적인 binary classification의 경우 모델의 예측은 최종적으로 다음과 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$p(Y=1|x = \sigma(w^{T}_{wide}[x,\phi(x)]+w^{T}_{deep}a^{(l_{f})}+b)$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Wide part에는 cross product feature \(\phi(x)\)가 raw feature \(x\)와 concat 되어 \([x,\phi(x)]\)를 이루고 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 final activation \(a^{(l_f)}\)를 거친 Deep과 Wide가 더해져 sigmoid 함수 \(\sigma\)를 통해 예측을 진행됨을 알 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;본 논문에서는 Google play 스토어의 앱 다운 확률을 예측하였습니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;2.results&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저자들은 실제 환경에서의 Wide &amp;amp; deep 모델 성능을 검증하기 위하여 구글 플레이 스토어의 실제 데이터를 사용하여 실험을 진행하였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;result 1.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;577&quot; height=&quot;212&quot; data-origin-width=&quot;838&quot; data-origin-height=&quot;308&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pCDCY/btq97m8Rib0/vltQ2pjVhKuuq0pytTI4lk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pCDCY/btq97m8Rib0/vltQ2pjVhKuuq0pytTI4lk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pCDCY/btq97m8Rib0/vltQ2pjVhKuuq0pytTI4lk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpCDCY%2Fbtq97m8Rib0%2FvltQ2pjVhKuuq0pytTI4lk%2Fimg.png&quot; width=&quot;577&quot; height=&quot;212&quot; data-origin-width=&quot;838&quot; data-origin-height=&quot;308&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫번째 실험은 추천시스템 사용에 따른 어플 다운로드의 증감을 분석하는 app acquisition gain 평가입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실험은 3주간의 A/B Test로 진행 되었는데, Wide, Deep, Wide &amp;amp; deep 3가지 모델을 각각 전체의 1퍼센트에 해당하는 유저들에게 적용하였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실험 결과 Wide &amp;amp; deep 모델이 Deep model에 비해 3.9% 더 높은 어플 다운로드 증가율을 보여주었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Offline test set을 통해 얻은 Offline AUC의 경우에도 Wide &amp;amp; deep이 가장 우수한 성능을 보였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만, 온라인 실험에 비해서는 작은 영향을 주었다는 사실을 알 수 있었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이는 실제 상황에서는 label이 고정되어 있지 않고, 훨씬 더 다양한 경우가 존재하기 때문에 Memorization과 Generalization을 함께 고려하는 Wide &amp;amp; deep 구조가 더 유효한 성능을 보인 것이라고 저자들은 말하고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;result 2.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;848&quot; data-origin-height=&quot;266&quot; width=&quot;612&quot; height=&quot;192&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/og3Dj/btq97OqyBEB/WM9P4iyNYdVwMzvfXj8lIK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/og3Dj/btq97OqyBEB/WM9P4iyNYdVwMzvfXj8lIK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/og3Dj/btq97OqyBEB/WM9P4iyNYdVwMzvfXj8lIK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fog3Dj%2Fbtq97OqyBEB%2FWM9P4iyNYdVwMzvfXj8lIK%2Fimg.png&quot; data-origin-width=&quot;848&quot; data-origin-height=&quot;266&quot; width=&quot;612&quot; height=&quot;192&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두번째 실험은 Service time을 비교한 결과입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Wide &amp;amp; deep은 멀티 스레드 환경에서 더 잘 작동하기 때문에, 실제 상황에 적용하기에 매우 적합한 모델임을 알 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;3.구현&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Movielens 데이터를 활용하여 Wide &amp;amp; deep 구조에 대한 구현을 진행해 보았습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Tag(Text)에 따른 평점을 고려하여 각각의 Tag에 대한 Sentiment score를 새로운 특성으로 추가하였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 Genre(장르)와 Year(개봉연도)를 활용하여 Cross-product transformation을 진행하였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Movielens 데이터는 매우 sparse하며 사용할 수 있는 특성이 많지 않기 때문에 좋은 성능을 보이지는 못했습니다. 이점 양해 부탁드립니다.&lt;/p&gt;
&lt;figure id=&quot;og_1626867526618&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - supkoon/wide_deep&quot; data-og-description=&quot;Contribute to supkoon/wide_deep development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/supkoon/wide_deep&quot; data-og-url=&quot;https://github.com/supkoon/wide_deep&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/xI7rJ/hyKXZA3gKN/PYkeEFEwMVpcxkBtq0rcu1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/supkoon/wide_deep&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/supkoon/wide_deep&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/xI7rJ/hyKXZA3gKN/PYkeEFEwMVpcxkBtq0rcu1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;GitHub - supkoon/wide_deep&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Contribute to supkoon/wide_deep development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;마무리&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Wide &amp;amp; Deep은 Memorization을 수행하는 Wide part와 Generalization을 수행하는 Deep part가 결합된 추천시스템 모델입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각각 Linear 모델과 embedding-based 모델의 장점을 취합하여 Online, Offline 테스트에서 모두 우수한 성능을 보였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특히 실제 환경에서의 Serving 능력도 매우 좋은 모델임을 알 수 있었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;구글에서 나온 논문인 만큼 실제 환경에서의 검증을 철저하게 진행하였다는 점이 강점으로 다가왔습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;추천시스템을 공부하면서 비슷한 방법론들의 변형이 자주 등장하는 것 같습니다. 서베이를 참고하여 서순을 따라가니 이해가 더 잘되는 것 같아 기분이 좋습니다. 다음 시간에는 DeepFM 모델을 공부해보도록 하겠습니다. 감사합니다.&amp;nbsp;&lt;/p&gt;</description>
      <category>데이터과학/추천시스템</category>
      <category>recommender system</category>
      <category>Wide&amp;amp;deep</category>
      <category>Widedeep</category>
      <category>논문리뷰</category>
      <category>딥러닝</category>
      <category>머신러닝</category>
      <category>추천시스템</category>
      <author>섭구</author>
      <guid isPermaLink="true">https://supkoon.tistory.com/32</guid>
      <comments>https://supkoon.tistory.com/32#entry32comment</comments>
      <pubDate>Wed, 21 Jul 2021 17:36:09 +0900</pubDate>
    </item>
    <item>
      <title>[추천시스템][paper review][구현] Factorization Machines</title>
      <link>https://supkoon.tistory.com/31</link>
      <description>&lt;script&gt; MathJax = { tex: {inlineMath: [['$', '$'], ['\\(', '\\)']]} }; &lt;/script&gt;
&lt;script src=&quot;https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-chtml.js&quot;&gt;&lt;/script&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;머신러닝과 데이터 마이닝에서 SVM은 가장 대중적으로 사용되는 예측기 중 하나입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SVM은 &lt;b&gt;General Predictor&lt;/b&gt;로서 데이터의 형태에 크게 규제받지 않고 분류, 회귀 등 다양한 작업을 수행할 수 있다는 장점이 존재합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;추천시스템&lt;/b&gt;은 대부분의 경우 User x Item으로 구성된 평점 행렬(rating matrix)을 채워나가는 &lt;b&gt;Matrix Completion&lt;/b&gt;과 같습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 모든 유저가 모든 아이템을 평가하지 않는 이상 &lt;b&gt;Sparse&lt;/b&gt;한 환경이 자주 발생하게 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아쉽게도 추천시스템에 있어서 SVM은 대부분의 경우 좋은 선택이 되지 못합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;매우 Sparse한 환경에서는 복잡한 커널트릭이 잘 작동하지 않기 때문입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2010년부터 현재까지, 추천시스템을 대표하는 알고리즘 중 하나는 협업 필터링의 일종인 &lt;b&gt;Latent Factor model&lt;/b&gt; 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Matrix Factorization&lt;/b&gt;은 가장 대중적인 Latent Factor model로서, SVD(singular value decomposition)와 유사하게 &lt;span style=&quot;color: #666666;&quot;&gt;유저와 아이템을 f차원의 잠재 공간(latent factor space)으로 매핑합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;531&quot; height=&quot;229&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;552&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/y3rHY/btq98ujAe8H/TxN22NgHz8QZ8lqv57c2aK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/y3rHY/btq98ujAe8H/TxN22NgHz8QZ8lqv57c2aK/img.png&quot; data-alt=&quot;Matrix Factorization&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/y3rHY/btq98ujAe8H/TxN22NgHz8QZ8lqv57c2aK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fy3rHY%2Fbtq98ujAe8H%2FTxN22NgHz8QZ8lqv57c2aK%2Fimg.png&quot; width=&quot;531&quot; height=&quot;229&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;552&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Matrix Factorization&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Matrix Factorization에서 Latent Factor는 User, Item 사이에 존재하는 패턴을 통해 찾을 수 있으며, f개의 latent factor로 표현된 user, item vector \(p_u,q_i\)의 내적으로 둘 사이의 상호관계 \(\hat{r_{ui}}\)를 간단히 구할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$\hat{r_{ui}} = q^{T}_i p_u$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;추천시스템을 위한 Matrix Factorization의 자세한 설명은 아래의 리뷰를 참고 부탁드립니다.&lt;/p&gt;
&lt;figure id=&quot;og_1626777681573&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[paper review][추천시스템]Matrix Factorization Techniques for recommender systems&quot; data-og-description=&quot;Recommender System 정보가 넘쳐나는 현 시대에서 추천 시스템은 전자 상거래, 온라인 뉴스 및 소셜 미디어 사이트를 포함한 많은 온라인 서비스에 널리 채택되어 기호에 맞는 상품을 제공하고 있습&quot; data-og-host=&quot;supkoon.tistory.com&quot; data-og-source-url=&quot;https://supkoon.tistory.com/30&quot; data-og-url=&quot;https://supkoon.tistory.com/30&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cdk0lG/hyKWTBABki/WFIUij9d1Y8roeMwXyjpu0/img.png?width=800&amp;amp;height=719&amp;amp;face=0_0_800_719,https://scrap.kakaocdn.net/dn/cEj66Z/hyKXYabwxV/7gZyW2kKV6CayfAIhu4ldk/img.png?width=800&amp;amp;height=719&amp;amp;face=0_0_800_719,https://scrap.kakaocdn.net/dn/8m3c1/hyKWINA0lE/XurB0mAkKPsAWuSxKs9jaK/img.png?width=1072&amp;amp;height=1190&amp;amp;face=568_570_614_620&quot;&gt;&lt;a href=&quot;https://supkoon.tistory.com/30&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://supkoon.tistory.com/30&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cdk0lG/hyKWTBABki/WFIUij9d1Y8roeMwXyjpu0/img.png?width=800&amp;amp;height=719&amp;amp;face=0_0_800_719,https://scrap.kakaocdn.net/dn/cEj66Z/hyKXYabwxV/7gZyW2kKV6CayfAIhu4ldk/img.png?width=800&amp;amp;height=719&amp;amp;face=0_0_800_719,https://scrap.kakaocdn.net/dn/8m3c1/hyKWINA0lE/XurB0mAkKPsAWuSxKs9jaK/img.png?width=1072&amp;amp;height=1190&amp;amp;face=568_570_614_620');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[paper review][추천시스템]Matrix Factorization Techniques for recommender systems&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Recommender System 정보가 넘쳐나는 현 시대에서 추천 시스템은 전자 상거래, 온라인 뉴스 및 소셜 미디어 사이트를 포함한 많은 온라인 서비스에 널리 채택되어 기호에 맞는 상품을 제공하고 있습&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;supkoon.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 Matrix Factorization은 SVM과 반대로 일반적인 데이터에 바로 적용할 수 없으며, 대부분의 경우 Task specific한 Model이라는 단점이 존재합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;본 논문은 2010년 발표된 논문으로 추천시스템을 위한&amp;nbsp;&lt;b&gt;General predictor&lt;/b&gt;인&amp;nbsp;&lt;b&gt;Factorization Machine(FM)&lt;/b&gt;을 소개하고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;FM은 SVM과 Matrix Factorization의 장점을 함께 가지고 있는 모델입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;FM(Factorization Machines)은 다음과 같은 장점이 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1) &lt;b&gt;Sparse data&lt;/b&gt; : SVM으로 학습하기 어려운 Sparse 환경에서도 파라미터를 추정 가능합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2) &lt;b&gt;Linear Complexity&lt;/b&gt; : 선형복잡도를 가지고 있습니다. SVM과 같은 쌍대문제를 풀지 않아도 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3) &lt;b&gt;General Predictor&lt;/b&gt; : General Predictor로서 어떠한 실수 벡터를 사용하더라도 잘 작동합니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1.Factorization Machines&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Factorization Machine이라는 이름 때문에 FM을 MF와 혼동하시는 분들이 계실 것 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두 모델은 모두 기본적으로 평점과 같은 상호관계를 예측한다는 공통점이 존재합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 엄밀하게 따지면 FM과 MF은 서로 다르며, 오히려 FM은 Polynomial Regression에 가깝다고 할 수 있습니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Input representation&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1094&quot; data-origin-height=&quot;514&quot; width=&quot;660&quot; height=&quot;310&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/UiGos/btq93n0lW6a/sYj3RolAhtiBfCOSh13ge1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/UiGos/btq93n0lW6a/sYj3RolAhtiBfCOSh13ge1/img.png&quot; data-alt=&quot;FM input representation&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/UiGos/btq93n0lW6a/sYj3RolAhtiBfCOSh13ge1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUiGos%2Fbtq93n0lW6a%2FsYj3RolAhtiBfCOSh13ge1%2Fimg.png&quot; data-origin-width=&quot;1094&quot; data-origin-height=&quot;514&quot; width=&quot;660&quot; height=&quot;310&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;FM input representation&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 FM은 매우 Sparse한 feature vector X를 다룹니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Matrix Factorization이 user, item, rating 만을 사용하는 것과는 다르게, FM은 위의 그림과 같이 다양한 Feature를 concatenate하여 하나의 feature vector로 사용합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 어떠한 implicit 특성이라도 실수 형태로 하나의 특성벡터 안에 추가할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;FM은 각각의 user, item과 같은 Categorical feature는 One-hot 형태로 표현하여 x에 추가됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 x는 일반적인 경우 매우 Sparse한 벡터가 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이는 user, item을 Latent factor를 사용하여 f 차원 벡터로 나타내는 Matrix Factorization과 대조적입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;유저, 아이템을 포함한 다양한 특성이 하나의 벡터안에 공존하고 있다는 점이 SVM과 같은 일반적인 머신러닝 알고리즘과 유사합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그림의 예시에서는 '유저가 평가한 다른 영화 정보', '시간', '최근에 평가한 영화'와 같은 특성을 추가한 것을 확인할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Factorization Machine &lt;/b&gt;&lt;b&gt;Model&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;FM은 SVM의 선형커널(polynomial kernel)과 같이 모든 변수간의 상관관계를 모델링하는 형태를 가지고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #515151;&quot;&gt;하지만, &lt;/span&gt;&lt;span style=&quot;color: #515151;&quot;&gt;SVM이 Dense Parametrization을 사용하는 것과 달리 FM은 &lt;b&gt;factorized parametrization&lt;/b&gt; 방법을 사용합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #515151;&quot;&gt;&lt;b&gt;각각의 변수를 f 차원의 latent Factor로 매핑&lt;/b&gt;하여, &lt;/span&gt;&lt;span style=&quot;color: #515151;&quot;&gt;&lt;b&gt;변수간의 상관관계&lt;/b&gt;를 Matrix Factorization과 같이 &lt;b&gt;Latent Factor의 내적으로 모델링&lt;/b&gt;하는 것 입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #515151;&quot;&gt;다음의 식은 2개 특성 사이의 관계를 고려하는 &lt;b&gt;2-way&lt;/b&gt;(d=2) Factorization machine 입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;677&quot; height=&quot;111&quot; data-origin-width=&quot;1038&quot; data-origin-height=&quot;170&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/SHY3x/btq99m6IUPR/DevNH4j0DNjskQzIXwfR41/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/SHY3x/btq99m6IUPR/DevNH4j0DNjskQzIXwfR41/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/SHY3x/btq99m6IUPR/DevNH4j0DNjskQzIXwfR41/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FSHY3x%2Fbtq99m6IUPR%2FDevNH4j0DNjskQzIXwfR41%2Fimg.png&quot; width=&quot;677&quot; height=&quot;111&quot; data-origin-width=&quot;1038&quot; data-origin-height=&quot;170&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;\(w_0\)는 \(\mathbb{R}\)차원의 &lt;b&gt;Global bias&lt;/b&gt;를,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;\(w_i\)는 i번째 &lt;b&gt;개별 특성에 대한 가중치&lt;/b&gt;를,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;\(&amp;lt;v_i,v_j&amp;gt;\)는 f개 latent factor로 표현된&amp;nbsp;&lt;b&gt;변수간의 2-way Interaction&lt;/b&gt;을 계산하는 내적을 의미합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 n개의 example에 대한 m개의 특성이 존재한다면, m개의 특성은 각각 f 차원의 벡터로 표현되어 서로 내적이 가능합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 때, 혼동되기 쉬운부분은 k 명의 User를 표현하는 k개의 one-hot 벡터 또한 k개 모두 따로 f 차원으로 매핑이 된다는 사실입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예시)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Interaction 계산 시,&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;x : [유저 6차원 + 아이템 7 차원 + 다른 특성 n차원] ----factorized parametrization ----&amp;gt;&amp;nbsp; x : [(6&amp;nbsp; + 7 + n) x f 차원]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;b&gt;루헨진&lt;/b&gt; : [0,0,0,1,0,0]&amp;nbsp; --&amp;gt;&amp;nbsp; [ [f 차원] [f 차원] [f 차원] [f 차원] [f 차원] [f 차원] ]&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;야구공&lt;/b&gt; : [0,0,1,0,0,0,0] --&amp;gt; [ [f 차원] [f 차원] [f 차원] [f 차원] [f 차원] [f 차원] [f 차원] ]&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Feature vector x&lt;/b&gt; : [루헨진, 야구공, ..다른 특성들] --&amp;gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;[ [f 차원] [f 차원] [f 차원] [f 차원] [f 차원] [f 차원] [f 차원] [f 차원] [f 차원] [f 차원] [f 차원] [f 차원] [f 차원] ..... ]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;언뜻 보면 FM은 다항회귀와 매우 흡사하게 생각됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만, coefficient 대신 특성마다 latent space로의 매핑을 진행하고, latent space에서의 내적을 계산한다는 것이 FM의 가장 큰 특징입니다.(&lt;span style=&quot;color: #515151;&quot;&gt;factorized parametrization)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$&amp;lt;v_i,v_j&amp;gt; := \sum_{f=1}^k v_{i,f} \cdot v_{j,f}$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 MF와의 차이점은 MF가 user, item의 상관관계 \(W_{user} \times W_{item}\) 만을 고려한다면,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;FM은 각 특성의 1차 상관관계 \(W_i \times x_i\)와, 2차 상관관계 \(&amp;lt;v_i,\,v_j&amp;gt; x_ix_j\)를 모두 고려한다는 점 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;FM은 예시의 2-way의 경우에도 모든 Interaction을 계산할 수 있으며,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Pairwise feature interaction을 고려하기 때문에 Sparse한 환경에 매우 적합한 모델입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Expressiveness&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;latent space의 차원 f가 충분히 크다면 Positive definite matrix \(W\)에 대해 \(W=V \cdot V^T\)를 만족하는 \(V\)는 항상 존재합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #515151;&quot;&gt;이것은 충분한 크기의 f 가 선택되었을 때, &lt;span style=&quot;color: #515151;&quot;&gt;FM모델이&lt;/span&gt; 어떠한 Interaction Matrix \(W\)도 표현할 수 있음을 말합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #515151;&quot;&gt;그럼에도 불구하고, 일반적으로 모든 복잡한 Interaction을 계산하기에는 데이터가 부족하기 때문에, 작은 k를 선택하여 Sparse 상황에서의 일반화 성능을 높히는 선택을 한다고 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #515151;&quot;&gt;Parameter Estimation Under Sparsity&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일반적으로 Sparse한 환경에서는 변수들 간의 Interaction을 직접적, 독립적으로 추정하기 위한 충분한 데이터가 없는 경우가 많습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;FM은 &lt;b&gt;Sparse&lt;/b&gt;한 경우에도, 변수 사이의 &lt;b&gt;Interaction을 추정할&lt;/b&gt; &lt;b&gt;수 있습니다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다시 말하면, 하나의 Interaction에 연관된 데이터가 다른 Interaction을 추정하는데 도움을 준다는 것 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어 유저 A의 아이템 B에 대한 선호도를 모른다면,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;유저 A 혹은 아이템 B에 관한 다른 Interaction 들을 고려하여 삼단논법과 같이 이를 계산할 수 있게 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #515151;&quot;&gt;Computation&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;FM의 가장 큰 장점 중 하나는 &lt;b&gt;Linear Complexity&lt;/b&gt;를 가지고 있다는 것 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2-way Interaction만 고려하여도 \(O(kn^2)\)의 Complexity를 가질 것이라는 예상과 다르게,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래의 식을 따라가면 FM이 n-way 환경에서도 Linear Complexity \(O(kn)\)를 갖는 다는 것을 알 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1210&quot; data-origin-height=&quot;850&quot; width=&quot;459&quot; height=&quot;365&quot; data-filename=&quot;blob&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bjn94T/btq98u5cIwG/OdAHYbxR1KQJIOR3ppKqfk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bjn94T/btq98u5cIwG/OdAHYbxR1KQJIOR3ppKqfk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bjn94T/btq98u5cIwG/OdAHYbxR1KQJIOR3ppKqfk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbjn94T%2Fbtq98u5cIwG%2FOdAHYbxR1KQJIOR3ppKqfk%2Fimg.png&quot; data-origin-width=&quot;1210&quot; data-origin-height=&quot;850&quot; width=&quot;459&quot; height=&quot;365&quot; data-filename=&quot;blob&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Training&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;FM은 Linear complexity를 가지고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서&amp;nbsp;SGD를 사용하는 최적화 과정에서 FM의 파라미터 \(w_0,w_i,v_{i,f}\)는 효율적으로 학습이 가능합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;874&quot; data-origin-height=&quot;200&quot; width=&quot;546&quot; height=&quot;125&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bfe5GQ/btraax1pTkO/R86jBpDo0Prq3SlEQPhkm1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bfe5GQ/btraax1pTkO/R86jBpDo0Prq3SlEQPhkm1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bfe5GQ/btraax1pTkO/R86jBpDo0Prq3SlEQPhkm1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbfe5GQ%2Fbtraax1pTkO%2FR86jBpDo0Prq3SlEQPhkm1%2Fimg.png&quot; data-origin-width=&quot;874&quot; data-origin-height=&quot;200&quot; width=&quot;546&quot; height=&quot;125&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저, \( \sum_{j=1}^n&amp;nbsp;v_{j,&amp;nbsp;f}&amp;nbsp;x_j\) 는 \(i\)에 독립적이기 때문에 먼저 계산이 가능합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 각각의 파라미터에 대한 그레디언트는 상수시간인 \(O(1)\)안에 계산이 가능해집니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결과적으로 모든 파라미터에 대한 업데이트가 \(O(kn)\)안에 이루어지기 때문에 계산 효율적인 측면에서도 FM은 더욱 큰 메리트를 갖고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;d-way Factorization Machine&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;FM은 d-way로 일반화가 가능합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;말씀드린대로, d-way의 경우에도 선형 시간의 계산 복잡도를 가지고 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;822&quot; data-origin-height=&quot;272&quot; width=&quot;477&quot; height=&quot;158&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bmOXX1/btq91nGrtzP/XoAzLF2E0GNbYw3lNWUej0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bmOXX1/btq91nGrtzP/XoAzLF2E0GNbYw3lNWUej0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bmOXX1/btq91nGrtzP/XoAzLF2E0GNbYw3lNWUej0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbmOXX1%2Fbtq91nGrtzP%2FXoAzLF2E0GNbYw3lNWUej0%2Fimg.png&quot; data-origin-width=&quot;822&quot; data-origin-height=&quot;272&quot; width=&quot;477&quot; height=&quot;158&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;2.results&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;result 1.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫번째 실험은 SVM과의 비교입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;매우 sparse한 Netflix 데이터셋을 사용하여 차원에 따른 성능을 비교하였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 결과 SVM은 Sparse한 환경에서 학습에 실패하였으며,&amp;nbsp; FM은 차원 증가에 따른 학습이 잘 진행되었음을 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;666&quot; data-origin-height=&quot;524&quot; width=&quot;505&quot; height=&quot;397&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qAA1G/btq98ujCiSo/ZhGK4kBHbFx6g23o6ib0V1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qAA1G/btq98ujCiSo/ZhGK4kBHbFx6g23o6ib0V1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qAA1G/btq98ujCiSo/ZhGK4kBHbFx6g23o6ib0V1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqAA1G%2Fbtq98ujCiSo%2FZhGK4kBHbFx6g23o6ib0V1%2Fimg.png&quot; data-origin-width=&quot;666&quot; data-origin-height=&quot;524&quot; width=&quot;505&quot; height=&quot;397&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;result 2.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;당시 SOTA 모델인 PITF 모델과의 비교입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파라미터 수에 따른 F1 score 성능이 거의 비슷함을 알 수 있는데,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PITF는 Task Specific 하지만, FM은 General predictor라는 점에서 FM의 우수성을 알 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;666&quot; data-origin-height=&quot;524&quot; width=&quot;467&quot; height=&quot;367&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cuExGP/btq97lUZvs4/z3kZ3xnlIcia7zIO0qZQ9K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cuExGP/btq97lUZvs4/z3kZ3xnlIcia7zIO0qZQ9K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cuExGP/btq97lUZvs4/z3kZ3xnlIcia7zIO0qZQ9K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcuExGP%2Fbtq97lUZvs4%2Fz3kZ3xnlIcia7zIO0qZQ9K%2Fimg.png&quot; data-origin-width=&quot;666&quot; data-origin-height=&quot;524&quot; width=&quot;467&quot; height=&quot;367&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;3. 구현&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;논문을 참고하여 Factorization Machine에 대한 구현을 진행하였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Movielens 데이터셋을 활용하였으며, 논문의 알고리즘을 정확히 구현하는데에 초점을 맞추었습니다. 이 점 양해 부탁드립니다.&lt;/p&gt;
&lt;figure id=&quot;og_1626802003142&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;supkoon/factorization_machine_tf&quot; data-og-description=&quot;Contribute to supkoon/factorization_machine_tf development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/supkoon/factorization_machine_tf&quot; data-og-url=&quot;https://github.com/supkoon/factorization_machine_tf&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/Y5xjY/hyKWQE05T4/vvrTJlmCZDSEymCV7HkEK1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/supkoon/factorization_machine_tf&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/supkoon/factorization_machine_tf&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/Y5xjY/hyKWQE05T4/vvrTJlmCZDSEymCV7HkEK1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;supkoon/factorization_machine_tf&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Contribute to supkoon/factorization_machine_tf development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;마무리&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;FM은 추천시스템의 한가지 모델로서 SVM과 Matrix Factorization의 장점을 모두 가지고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 SVM과 같은 &lt;b&gt;general predictor&lt;/b&gt;로서 모든 실수 특성에 대해 자유롭게 적용 가능합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;FM은 Factorized Interaction을 활용하여 feature vector의 모든 가능한 Interaction을 모델링 하기 때문에, &lt;b&gt;sparse&lt;/b&gt;한 환경에서도 Interaction을 학습할 수 있으며, 결측치에 대해서도 일반화된 예측을 보여줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 계산 효율적 측면에서도 &lt;b&gt;Linear Complexity&lt;/b&gt;를 보여주었는데, 이는 2-way FM 뿐만 아니라 일반화된 n-way FM에서도 동일하게 적용되었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Matrix Factorization과 이름은 비슷하지만, Implicit, Explicit 특성을 쉽게 추가하여 추천할 수 있다는 점이 큰 장점인 것 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 선형복잡도로 유도되는 과정이 매우 깔끔하게 느껴졌습니다. 다음 시간에는 FM에 신경망을 적용한 DeepFm과 wide&amp;amp;deep에 대해 리뷰해보도록 하겠습니다. 감사합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>데이터과학/추천시스템</category>
      <category>Factorization machine</category>
      <category>FM</category>
      <category>recommender system</category>
      <category>논문리뷰</category>
      <category>딥러닝</category>
      <category>머신러닝</category>
      <category>추천시스템</category>
      <author>섭구</author>
      <guid isPermaLink="true">https://supkoon.tistory.com/31</guid>
      <comments>https://supkoon.tistory.com/31#entry31comment</comments>
      <pubDate>Wed, 21 Jul 2021 02:46:23 +0900</pubDate>
    </item>
  </channel>
</rss>