<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>hoon_lander.log</title>
        <link>https://velog.io/</link>
        <description>AI Researcher</description>
        <lastBuildDate>Thu, 28 Mar 2024 14:59:43 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>hoon_lander.log</title>
            <url>https://velog.velcdn.com/images/hoon_lander/profile/ee04c15c-4ded-499f-a0a0-acc8d72f8a09/social_profile.jpeg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. hoon_lander.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/hoon_lander" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[2D Matryoshka Sentence Embedding]]></title>
            <link>https://velog.io/@hoon_lander/2D-Matryoshka-Sentence-Embedding</link>
            <guid>https://velog.io/@hoon_lander/2D-Matryoshka-Sentence-Embedding</guid>
            <pubDate>Thu, 28 Mar 2024 14:59:43 GMT</pubDate>
            <description><![CDATA[<p>2D Matryoshka Sentence Embeddings (2024)
Xianming Li, Zongxi Li, Jing Li, Haoran Xie, Qing Li</p>
<p>지난 포스트에서 Matryoshka Embedding에 대한 소개가 있었다. 이후 관련 논문을 찾아봤을 때 파급력에 비해 Variant가 하나밖에 없어서 그에 대한 소개를 진행하고자 한다.
Matryoshka Sentence Embedding (MSE)라고 줄여 적는다.</p>
<p>MSE를 통해 (약간 낮지만) 유사한 성능을 가질 수 있는 문장 임베딩을 얻을 수 있게 되었으며, 14배 더 줄어든 임베딩을 통해서도 Downstream Task에서 속도와 성능을 모두 향상 시킬 수 있는 임베딩을 만들 수 있게 되었다. 하지만 MSE는 모든 Sentence Transformer Embedding과 같게 ‘Last Transformer Layer’를 사용하는데 이는 Efficiency의 다양한 면에서 일부를 놓치고 있는 것이며 이는 Inference Speed이다. </p>
<p>Forward Pass를 많이 사용하는 MSE 특성 상 Burden이 좀 될 수 있다. 
(훈련을 할 때도 Back Prop을 위해서 Forward Pass를 해야하는데 결국 차원의 종류 개수가 6개라면 한번의 훈련에 6번 Forward Pass가 필요). BERT-base를 Ang1E Loss를 사용해서 훈련시켰을 때, intermediate layer에서 성능 하락을 목도하였는데, 모든 Layer에서 좋은 성능을 달성하고자 하는게 2D MSE의 목적이다. 즉, 2D MSE는 Embedding Size 뿐만 아니라 Transformer Layer에 대해서도 MSE가 제대로 훈련될 수 있도록 하는 연구이다.</p>
<p>아래의 그림과 같이 모든 Layer에서 Final Layer와 동일한 결과를 내고자 하는 것이다.</p>
<p><img src="https://velog.velcdn.com/images/hoon_lander/post/919935bd-54c4-42a4-88fb-ec8ffcacd8d3/image.png" alt=""></p>
<h3 id="takeaways">Takeaways</h3>
<p>2D MSE의 장점</p>
<ul>
<li>Last Layer 뿐 아니라 이전 Layer를 Last Layer처럼 쓸 수 있어서 Full Forward Pass가 필요 없다</li>
<li>이는 가용한 컴퓨팅 자원에 따라 PLM 활용 방법을 변화시킬 수 있다</li>
</ul>
<p>Method</p>
<ul>
<li>기본적인 아이디어는 Last Layer의 Loss가 Last Layer 이전의 Layer들 중 Random Sample한 Layer의 Loss와 같아지게 만드는 것</li>
<li>Loss 분포를 유사하게 만들기 위해 KL Divergence를 사용</li>
<li>즉, Last Layer의 분포를 다른 Non-Last Layer에 Distillation하는 것.</li>
</ul>
<p>Experiment</p>
<p>baseline</p>
<ul>
<li>bert base를 PLM</li>
<li>Ang1E Loss를 기본 Loss
comparison</li>
<li>Ang1E (Baseline)</li>
<li>MRL (Matryoshka Representation Learning)</li>
<li>2D MSE</li>
</ul>
<p>Result</p>
<ul>
<li>당연한 말이긴 하지만, Layer가 낮아질수록 더 낮은 성능을 보이는 일반 훈련법에 비해 2DMSE에서는 더 좋은 성능</li>
<li>기본적으로 MSE도 Distillation과 같은 모양이지만, 2DMSE는 Layer별 Distillation</li>
<li>768 차원 임베딩의 전체 성능을 비교해봤을 때는 아쉽게도 큰 차이는 없다.
<img src="https://velog.velcdn.com/images/hoon_lander/post/3d17185e-7a26-4649-804f-f36f195cc7c5/image.png" alt=""></li>
<li>Inference Time은 당연히 Lower Layer에서 가장 빠르며, 2DMSE와 다른 Baseline과 비교했을 때 성능 하락 폭은 가장 적다.
<img src="https://velog.velcdn.com/images/hoon_lander/post/6f38bf9a-c3c1-46a9-a388-435cf619c502/image.png" alt=""></li>
</ul>
<h3 id="contribution">Contribution</h3>
<ul>
<li>Inference 속도가 매우 중요하게 필요한 경우에는 더 작은 사이즈의 임베딩과 1번째 Transformer Layers에서는 매우 좋은 활용이 될 수 있다.</li>
<li>하지만 Inference 속도 이외에 정확성을 높이는 훈련을 이제 연구해야할 때가 온 것 같다.</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[Matryoshka Representation Learning]]></title>
            <link>https://velog.io/@hoon_lander/Matryoshka-Representation-Learning</link>
            <guid>https://velog.io/@hoon_lander/Matryoshka-Representation-Learning</guid>
            <pubDate>Fri, 15 Mar 2024 07:52:34 GMT</pubDate>
            <description><![CDATA[<h1 id="matryoshka-representation-learning-kusupati-et-al-neurips22-논문-리뷰">Matryoshka Representation Learning (Kusupati et al., NeurIPS’22) 논문 리뷰</h1>
<p>[근황]</p>
<p>최근 회사 업무로 인해 매우 바쁜 시간들이 지나가고 있다. 그렇다고 뭔가 실력의 향상이 이뤄졌다 라고 말하기엔 애매한 것이, 대부분 의사 결정에 필요한 회의 및 근거 마련에 초점을 두었기 때문이다. 현재 봉착한 문제에 대해 새로운 솔루션을 내는 것보단, 왜 이것이 문제인지를 설명하는 것이었기 때문에, 자료 정리 및 시각화 위주의 업무를 많이 수행한 것 같다. 이번에 정리해보고자 하는 논문은 새로운 솔루션에 대한 갈망에서 찾게된 논문이다.</p>
<p>[선정 배경]</p>
<p>이번에 정리해보고자 하는 논문은 Matryoshka Representation Learning (MRL; 또는 Matryoshka Sentence Embeddings (MSE))이라는 NeurIPS ‘22에 나온 논문이다. 찾게 된 경위는, 자주 사용하는 Sentence Transformers Main 홈페이지에 못보던 탭이 있어서 봤더니, 아예 Matryoshka Embeddings라는 탭이 있어서 읽어보게 되었다. Sentence-Transformers에서 공식적인 Training Method 및 Loss로 포함을 시킨 것을 보아 문장 임베딩 훈련에 있어 중요한 위치에 올라온 듯하다 (Adaptive Layers Tab에 보면 2D-MSE)까지 추가되어, Transformer Layer에 대한 훈련도 포함되어 있다).</p>
<p>항상 논문을 읽고 바로 이해하는 적은 없기 때문에 참고 자료를 소개하고자 한다.</p>
<ul>
<li><a href="https://aniketrege.github.io/blog/2024/mrl/">https://aniketrege.github.io/blog/2024/mrl/</a></li>
<li><a href="https://www.sbert.net/examples/training/matryoshka/README.html">https://www.sbert.net/examples/training/matryoshka/README.html</a></li>
<li><a href="https://ritvik19.medium.com/papers-explained-matryoshka-representation-learning-e7a139f6ad27">https://ritvik19.medium.com/papers-explained-matryoshka-representation-learning-e7a139f6ad27</a></li>
<li><a href="https://huggingface.co/blog/matryoshka">https://huggingface.co/blog/matryoshka</a></li>
</ul>
<p>[개요]</p>
<p>Sentence Embedding은 Clustering / Classification 등 다양한 Downstream Task에 활용될 수 있다. 단순히 Huggingface에 있는 모델을 가져다가 사용해도 되지만, NLI / STS Task 같은 Finetuning을 통해 자신의 Domain Dataset에 맞는 모델을 구성할 수 있다. </p>
<p>하지만 문제는, 보통 PLM의 임베딩 사이즈가 768차원에서 속도를 위해 차원 축소를 진행하고자 하면, 어떤 차원이 가장 좋은 성능을 나타내는 지 판단하기 어려운데 이는, 다양한 차원으로 축소한 다음 모든 경우에 대해 평가해야 하기 때문이다. </p>
<p>또한 아쉬운 점은 PCA를 사용할지, UMAP을 사용할지에 따라 결과는 천차만별이기에 따라서, 결과를 분석하기에 난이도가 증가한다. </p>
<p>따라서 MSE는 이를 한번에 진행할 수 있는 방법을 제안하는데, 왜 이름이 마트료시카인지는 결과물을 보면 이해가 된다.</p>
<p>[기법]</p>
<p>기법은 사실 매우 간단하다. 하나의 임베딩에 대해 여러 차원으로 잘라서 Downstream Task를 수행한 뒤, Loss를 모두 합치는 방식으로 진행된다. </p>
<p><img src="https://velog.velcdn.com/images/hoon_lander/post/21454104-1f5a-4195-b937-f72d5a229765/image.png" alt=""></p>
<p>위의 그림에서 d 차원의 임베딩이 있을 때, d/2, d/4, d/8, … 차원의 임베딩도 같은 task를 수행하는 것이다. 즉, 768차원의 임베딩을 8, 16, 32, 64차원의 임베딩으로 차원을 압축 / 축소해서 사용하는 것이 아니라, 임베딩 자체의 차원을 지정하여 d차원까지만 활용하는 것이다. 이렇게 각 임베딩들 끼리 포함관계를 갖기 때문에 마트료시카의 꼴이 이루어지는 것이다. 좀 더 직관적인 이미지는 아래와 같다.
<img src="https://velog.velcdn.com/images/hoon_lander/post/7b8d4aa1-c9c3-40db-84f3-ada8f600958f/image.png" alt=""></p>
<p>본 논문에서는 아쉽게도 이미지에 대한 실험을 위주로 진행했다. 아쉬운건 NLP를 다루는 본인이지만, 사실 차원축소가 더 중요하게 여겨지는 분야는 고차원의 이미지를 사용하는 이미지 분야이기 때문에 당연하긴 하다. </p>
<p><img src="https://velog.velcdn.com/images/hoon_lander/post/47e9e3ea-7769-4ad6-ae33-04cec66509cf/image.png" alt=""></p>
<p>또한 차원 축소에 대해 Grad-CAM을 통한 분석을 진행했을 때, 동일한 사진이라도 어떻게 차원 축소를 진행했는지에 따라 결과가 달라지는 것을 볼 수 있다. 위의 (c) 결과를 봤을 때 8,16 차원은 Sunglasses로 예측을 했기 때문에 Grad-CAM 결과가 눈쪽으로 가있지만, 그 이상의 차원에서는 노란색 후드에 떨어져있는 것을 볼 수 있다.</p>
<p>즉, 차원 축소 관점에서 적절한 차원을 구성하여 Speed &amp; Accuracy Trade-off의 균형을 잡는 것은 매우 중요한 일이라고 볼 수 있다.</p>
<p><img src="https://velog.velcdn.com/images/hoon_lander/post/a15afdd4-d4c2-4ea9-a05c-f744b9ef2c33/image.png" alt=""></p>
<p>위의 그림에서 볼 수 있듯, MRL을 사용한 Embedding들이 Downstream Task (Classification)에서 낮은 차원일 때 더 좋은 성능을 볼 수 있다. MRL이 아닌 임베딩들은 단순히 이미지에 대해 Feed Forward를 통해 차원을 낮춘 임베딩들이지만, MRL은 기존 임베딩에서 사용하고자 하는 차원까지만 잘라서 사용할 수 있는 것이다. </p>
<p>논문에서 진행한 실험들의 요지는 다음과 같다.</p>
<ul>
<li>MRL이 원래 임베딩에 비해 성능이 하락하는 수준이 기존보다 훨씬 적으며, 구성도 더 간편하다</li>
</ul>
<p>하지만 내가 주목한 포인트는 해당 실험들이 아니다. </p>
<p><img src="https://velog.velcdn.com/images/hoon_lander/post/436839b0-28ff-45cb-8f26-568a4f3cba24/image.png" alt=""></p>
<p>Sentence Transformers 홈페이지에 있는 마트료시카 임베딩을 활용한 Sentence Embedding의 성능 평가를 살펴보면, MRL 훈련을 진행한 임베딩이 모든 차원에서 더 좋은 성능을 나타내는 것을 볼 수 있다.</p>
<p>즉, 낮은 차원에서 더 좋은 성능을 보이는 것 뿐더러, 768차원 그대로의 비교에서도 더 좋은 성능을 나타내는 것을 볼 수 있다. 즉, MRL의 원래 취지는 차원 축소의 자유도의 증가인데, 취지를 넘어 원 임베딩 자체도 성능이 향상하게 되는 것을 볼 수 있다.</p>
<p>나는 이 현상의 이유로 다양한 관점으로 구성한 임베딩을 하나의 임베딩으로 Concat하는 과정에서 Embedding의 Expressiveness가 더 증가했기 때문이라고 생각한다. </p>
<p>해당 임베딩의 장점은 또 하나 있으며, 이는 Downstream Task 자체 성능 향상이다. 기본적으로 768차원을 모두 활용하지 않고 Downstream Task에서는 차원을 축소에서 사용하는데, PCA, UMAP이 매우 좋은 차원 축소 기법이긴 하지만 데이터의 의미를 반영해서 차원을 축소하는 면에서 아쉬운 성능을 보이긴 한다. UMAP 같은 경우는 Sentence의 의미를 파악해서 차원 축소하는 것이 아니라 전체 임베딩의 구조를 살펴본 뒤 적합한 차원 축소를 진행하기 때문이다.</p>
<p>따라서, 설령 MSE가 차원 축소를 했을 때 성능이 약간 하락하는 부분이 있다고 하더라도, PCA/ UMAP보다는 더 좋은 축소 효과를 보이지 않을까 생각한다.</p>
<p>다음 글 작성시에는 MRL의 Variants들을 정리해보고자 한다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Clustering Enhancement]]></title>
            <link>https://velog.io/@hoon_lander/Clustering-Enhancement</link>
            <guid>https://velog.io/@hoon_lander/Clustering-Enhancement</guid>
            <pubDate>Thu, 01 Feb 2024 14:10:02 GMT</pubDate>
            <description><![CDATA[<p>본 글은 최근 BERTopic을 사용해 진행하고 있는 프로젝트에서 얻은 여러가지 불만 또는 교훈을 정리한 글이다. 만약 유사한 상황에 놓인 사람이라면 공감할 수도 있을 수 있다. 완벽한 글을 위해 구조를 생각하다간 더 이상 글을 못 쓸 것 같아, 머릿속 흐름대로 작성해보고자 했다.</p>
<p>요약</p>
<ul>
<li>클러스터링의 목적</li>
<li>BERTopic, 문제점</li>
<li>해결 방법</li>
</ul>
<h3 id="clustering의-목적">Clustering의 목적</h3>
<p>NLP 분야에서 Clustering은 입력 Corpus에 대해, 유사한 문서들끼리 군집화를 해주는 기법이다. 이는 2가지 종류로 나뉘는데, 사용자가 원하는 클러스터의 개수로 정확하게 나눠주는 방식과, 가장 적합한 군집 개수를 탐색한 뒤 클러스터링을 진행하는 경우이다. </p>
<p>개인적으로 클러스터링을 수행함에 있어 전자의 경우는 효용성이 적다고 생각한다. K개의 클러스터 개수를 정확하게 알고 있는 문서 Corpus 같은 경우는 연구 Scene에서만 등장할 수 있는 매우 한정적인 상황이기에, 활용 가치가 다소 적다고 느껴진다. 실제 사용자가 클러스터링을 원할 때는, 문서 집합을 분석하지 않고 바로 그 문서 집합의 의미를 파악하고자 할 때이기 때문이며, 전체 문서의 흐름을 파악해 다음 본 Task를 수행하기 위해서이기 때문이다. </p>
<p>따라서, 클러스터링을 위해서 나는 보통 HDBSCAN을 사용하며, 다소 Noisy한 결과를 주긴하지만 후처리를 통해 보완할 수 있으며, 가장 좋은 점은 k개를 설정하지 않아도 된다는 점이다. 물론 하이퍼 파라미터에 따라, 데이터 셋에 따라 k의 범위가 들쑥날쑥하지만 클러스터 개수 k를 일일이 하나씩 탐색하며 Metric으로 평가하는 대신 버튼 하나만 누르면 되는 편안함이 있다.</p>
<h3 id="bertopic-문제점">BERTopic, 문제점</h3>
<p>이를 잘 묶어서 Topic Modeling으로 구현해낸 것이 BERTopic Module이다.
BERTopic은 입력 Corpus에 대해 UMAP 차원 축소 (차원이 지나치게 높으면 차원의 저주로 인해 클러스터링이 잘 안된다는 주장 - 그런데 그 어느 논문에서도 왜인지는 구체적으로 설명하지 않는다)를 거친 뒤, HDBSCAN으로 클러스터링을 한다. 그런 뒤, c-TFIDF, 클러스터를 하나의 문서로 간주한 뒤 TFIDF를 진행하는 기법을 적용해 문서들의 키워드를 나타내는 데, 영어에서는 잘 되는 줄 모르겠으나, 한국어로 진행했을 때는 다소 부족한 결과를 낸다. 클러스터링이 잘 됐다면, 단순히 c-TFIDF 대신 클러스터 내 단순 빈도로 진행하는 것이 더 좋을 수 있다. c-TFIDF가 다소 부족하다는 주장은 &quot;Is Neural Topic Modelling Better than Clustering? an empirical study on clustering with contextual embeddings for topics&quot; 에서도 강하게 표출하고 있다.</p>
<p>BERTopic의 구조는 꽤 잘 짜여진 편이다. 토픽 개수를 설정하지 않아도 바로 자신이 원하는 결과를 얻을 수 있다는 믿음이 있는데, 실제로 해보면 아쉽게도 그렇지 않다. 사람이 생각했을 때 비슷하다고 생각되는 문서들이 임베딩의 관점에서는 그렇지 않기 때문이다. 한국어 같은 경우는 더 문제가 큰데, &#39;합니다&#39;로 끝나는 문서들 끼리 비슷하게 뭉쳐, 개별 문서의 중요한 단어들에 집중하는 것이 아니라, 문서의 구조에 따라 묶이는 경우도 있다. 이를 방지하고자 BERTopic 에서는 문서 내의 단어들을 추출한 뒤 진행하라고 하지만, 명사구를 잘 뽑지 못한다면 이는 또다른 문제를 낳고 만다.</p>
<p>현재 이 문제를 해결하고자 다양한 후처리를 진행 중이지만, 최근에 진행해보고 있는 것은 Clustering Embedding Enhancement이다. </p>
<p>아무리 후처리를 열심히 한다고 해도 지속적으로 예외의 경우는 나타날 것이며, 토픽들의 클러스터링을 명확하게 해줄 수 있는 임베딩이 존재한다면 좋을 것이다. PLM의 임베딩을 Pretrain할 때 Clustering에 대한 훈련은 진행되지 않았기 때문에, 이에 대한 적용 시 원하는 결과를 얻기 힘들 것이라는 주장이 많다. </p>
<h3 id="해결-방법">해결 방법</h3>
<p>그래서 최근에 살펴보고 있는 논문은 
&quot;ClusTop: An unsupervised and integrated text clustering and
topic extraction framework (Chen et al., 2023)이다. Arxiv에 올라온 논문이며, 내용은 간단하다. </p>
<ul>
<li>BERTopic 절차를 수행해 먼저 Topic들을 구하여, 이를 Pseudo Label로 산출</li>
<li>해당 Pseudo Label을 Pretrained Model 위에 Classification Head를 붙여 훈련
<img src="https://velog.velcdn.com/images/hoon_lander/post/75b03caf-37d5-4942-b505-4d9b70e10e10/image.png" alt=""></li>
<li>그림과 같이 Embedding의 Coherence가 높아져, Metric상 더 높은 결과를 나타냄</li>
</ul>
<p>하지만 아쉽게도 해당 논문은 Github 구현체도 없고, Classification Head를 어떻게 구축했는지에 대한 설명이 없다. 단순히 [CLS]를 통해 분류 Head를 나타냈는지, Sentence Transformer의 Mean Pooling 방식으로 훈련했는지에 대한 언급이 하나도 없다. 위 아래로 논문을 털어봐도 정보가 등장하지 않아 어떻게 해당 결론이 도출 되었는 지 의심이 된다. </p>
<p>현재 [CLS]를 통한 훈련을 진행해보긴 했지만, 눈에 띄는 차이는 없었다. Topic Coherence / Silhoutte Score 등과 같은 Metric과 정성 평가에서 매우 유사한 결론만이 등장하였다. </p>
<p>따라서 이제 Clustering을 발전시킬 임베딩을 구하는 방법은</p>
<ul>
<li>PLM Classification을 Mean Pooling 방식으로 훈련</li>
<li>또는 PLM은 그대로 냅두고 BERT Whitening과 같이 Sentence Embedding 자체를 후처리하는 방식
을 시도해보는 것이 남았다. </li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[HDBSCAN]]></title>
            <link>https://velog.io/@hoon_lander/HDBSCAN</link>
            <guid>https://velog.io/@hoon_lander/HDBSCAN</guid>
            <pubDate>Sun, 31 Dec 2023 09:45:59 GMT</pubDate>
            <description><![CDATA[<p>최근 토픽 모델링에 관련된 업무를 진행하고 있어, 업무의 정리를 위해 본 글을 작성하고자 한다. 본 글을 읽고 나면 다음의 정보를 취득할 수 있다.</p>
<ol>
<li>토픽 모델링</li>
<li>토픽 모델링의 현 상황</li>
<li>HDBSCAN의 절차</li>
</ol>
<h3 id="토픽-모델링">토픽 모델링</h3>
<p>토픽 모델링이란, 다수의 의견이 담긴 코퍼스에 대해 어떠한 토픽들이 존재하는지를 간략하고, Human Readable하게 정리하는 기술이다. 다수의 사용자가 작성한 의견의 핵심이 &#39;토픽&#39;이라고 말했을 때, 토픽 모델링은 핵심을 요약 정리하는 Task라고 할 수 있다. 예를 들자면, 특정 상품을 팔고 있는 회사에서 자신들의 상품이 고객들에게 어떤 평가를 받고 있는지 살펴보고 싶다면 토픽 모델링을 통해 다수의 토픽을 추출하면 되는 것이다.
즉, 다량의 코퍼스를 입력으로 토픽 모델링을 수행하게 되면 다음과 같은 산출물을 얻을 수 있다.</p>
<ul>
<li>토픽: (토픽 1 = 제품 A 특성 / 토픽 2 = 제품 B 특성)</li>
<li>토픽에 포함되어 있는 문서 (토픽 1에 포함되어 있는 문서 리스트)</li>
<li>각 문서의 확률 (각 문서별로 토픽 1: 70% / 토픽 2: 30% ...)</li>
</ul>
<h3 id="토픽-모델링의-현-상황">토픽 모델링의 현 상황</h3>
<p>토픽 모델링은 확실한 수요가 있는 분야라고 생각하지만, ChatGPT와 같은 LLM으로 인해 중요도가 많이 감소하였다. 사실 이전에도 큰 두각을 보인 장르는 아닌 것이 자연어 처리 분야와 같으면서도 데이터 사이언스 쪽의 느낌이 강하기 때문에 연구자들이 Deep Dive하는 것을 원치 않은 느낌이 있다. 이번에 방문한 EMNLP에서도 토픽 모델링에 대해서는 3개 정도의 논문 (Findings 포함)만이 Accept되었고, 매년 이와 같은 수치인 것으로 보아 연구자들의 관심이 느껴진다.</p>
<p>하지만 LLM으로는 토픽 모델링을 하기 어렵다. </p>
<ul>
<li>Input Length Limit: ChatGPT 3 / 4의 토큰 Limit은 4K ~ 32K인데 토픽 모델링을 수행하기 위해 보통 산정하는 문서의 개수는 10K 이상이기 때문에 전체 문서를 입력에 포함하기 힘들다.</li>
<li>Information Leak: 만약 기업의 서베이와 같이 회사의 정보가 포함되어 있는 문서의 경우 ChatGPT에 넣는 것을 꺼리기 때문에 사용이 어렵다.</li>
</ul>
<p>즉, LLM을 직접적으로 토픽 모델링에 활용하는 것은 어렵고, LLM 이전의 Small Embedder를 사용해야 하는데 가장 많이 활용하는 방식은 다음과 같다.</p>
<ul>
<li>Variational Auto Encoder (VAE)</li>
<li>Clustering Based Topic Modeling: 다량의 코퍼스에서 Unsupervised Method로 토픽 모델링을 수행하여 자동으로 토픽을 나타내는 것은 문서들을 유사한 문서 군집으로 나누는 클러스터링과 유사하다. 따라서, 해당하는 분야에서도 클러스터링을 직접적으로 사용하는데   <ul>
<li>입력 문서들을 임베딩으로 표현한 뒤, 클러스터링 수행</li>
<li>클러스터에 포함된 문서들의 확률이 필요할 경우 표현</li>
<li>Example<ul>
<li>BERTopic</li>
</ul>
</li>
</ul>
</li>
</ul>
<h3 id="hdbscan">HDBSCAN</h3>
<p>HDBSCAN은 2013년, Density-Based Clustering Based on Hierarchical Density Estimates의 논문에서 제안되어서 사용되는 기법이지만 BERTopic을 포함해 아직까지 활용되고 있는 기법이다. 기본적으로 Clustering 기반 토픽모델링은</p>
<ul>
<li>클러스터링을 더 원활하게 해줄 수 있는 임베딩 훈련법</li>
<li>클러스터링 이후 Post Processing을 어떻게 해야할 지</li>
<li>클러스터링 결과를 사용자가 원하는 관점으로 변경
의 관점으로 진행된다. 즉, Clustering 기법은 기존의 것 (머신러닝 기법)을 고수하고 입력과 후처리에 집중하는 것이다. 이후 설명할 BERTopic 또한 HDBSCAN을 클러스터링 알고리즘으로 사용하며, 다수의 연구들이 HDBSCAN 대신 다른 클러스터링으로도 수행을 해 성능의 향상을 도모했지만 아직까지 뚜렷한 Game Changer 는 없다.</li>
</ul>
<p>HDBSCAN은 이름에서 알 수 있듯이 DBSCAN에 Hierarchical Information을 추가한 것이다. 따라서 전체적으로 DBSCAN과 HDBSCAN의 경계를 둬서 설명하지 않고 HDBSCAN을 설명하는 와중에서 DBSCAN의 내용이 자동적으로 포함되도록 설명해볼 것이다. </p>
<h3 id="절차">절차</h3>
<ol>
<li>Transform the space¶: Density / Sparsity에 기반한 공간 변형</li>
<li>Minimum Spanning Tree of Distance Weighted Graph 구성</li>
<li>연결된 Component들의 Cluster Hierarchy 구성</li>
<li>Minimum Cluster Size에 기반해 Hierarchy 요약</li>
<li>Condense the cluster tree¶: Condensed Tree로부터 Stable Cluster 추출</li>
</ol>
<h3 id="1-transform-the-space">1. Transform the Space</h3>
<p>클러스터링은 데이터의 바다에서 &#39;육지&#39;를 찾아내는 과정과 같다.
지구 전체를 데이터의 범위로 봤을 때, 육지를 클러스터, 그리고 바다를 이상치로 간주하는 것이다. 바다의 양이 줄어들게 되면 이상치가 줄어들어 육지가 명확하게 올라올 것이고, 바다의 양이 많아지게 되면 이상치가 많아져 육지가 줄어들 것이다. </p>
<p>공간을 변형시키는 과정은 바다의 높이를 낮추는 과정과 같은데, 이를 통해 클러스터가 더 두각을 보일 수 있도록 하는 것이다. 이는 단순한 비유이며 실제의 과정은 다음과 같다.</p>
<ol>
<li>두 데이터의 거리를 나타내는 Method 적용 (Any Distance Method)</li>
<li>해당 Distance를 Mutual Reachability Distance (MRD)로 변형</li>
</ol>
<p>MRD 같은 경우는 수식은 위와 같은데, 한 마디로 다음의 목적을 갖는다.</p>
<blockquote>
<p>가까운 데이터는 그대로 유지, 먼 데이터는 더 멀게 거리를 변경</p>
</blockquote>
<h3 id="2-build-the-minimum-spanning-tree-mst">2. Build the minimum spanning tree (MST)</h3>
<p>이제 클러스터링을 더 잘해줄 수 있는 공간 변형을 마치면 각 데이터들을 새로운 공간에 맞춘 거리에 대하여 Node를 데이터 / Edge를 거리로 산정한 Weighted Graph를 구성한다. </p>
<ul>
<li>MST는 존재하는 노드들을 연결할 때 최소의 간선을 활용하는 Tree이다.</li>
<li>MST는 최소의 간선 개수를 유지하면서, Edge의 가중치 합이 최소인 Tree 이다.</li>
<li>N개의 노드를 가지는 그래프는 n-1 개의 간선만을 사용해야 한다. 
<img src="https://velog.velcdn.com/images/hoon_lander/post/1965cabc-744b-4942-81dc-d4115420a0f4/image.png" alt=""></li>
</ul>
<p>이제 이 Tree를 큰 수에서 부터 작은 수의 Threshold를 기준으로 Edge를 잘라 나가면 되는데 이는 n^2의 Edge를 제거해나가기 때문에 비효율적이며, 극복할 수 있는 방법은 Prim&#39;s Algorithm이다. 이는 다 만들어진 Tree에서 Edge를 잘라나가는게 아니라 반대로 각 노드들에 대하여 지속적으로 Edge를 더해나가는 과정이다. </p>
<h3 id="3-build-the-cluster-hierarchy">3. Build the cluster hierarchy</h3>
<p>MST를 구성하면 이제 Hierarchy를 구성해야 한다. 이는 Dendogram으로 구성하는데 아래의 그림과 같다. 이는 Robust Single Linkage로 구성하며 아래에서부터 한 Pair 씩 묶어 가면서 진행된다. 
<img src="https://velog.velcdn.com/images/hoon_lander/post/a143f73e-95ba-4322-a6a7-0fd4e096b2a2/image.png" alt=""></p>
<p>계층을 구성하게 되면 Flat Cluster를 구성한다. 이는 계층으로 보이는 구조에서 1..N 클러스터를 정의하는 과정이다. DBSCAN에서는 이를 위해 특정 Threshold를 준비해 수평선으로 계층을 자르고 자른 계층에서 묶이지 않은 클러스터를 &#39;이상치&#39; / 묶여 있는 클러스터를 판단한다. </p>
<p>이를 위해 HDBSCAN은 Robust Single Linkage에 대해 차이점을 부여한다. </p>
<h3 id="4-condense-the-cluster-tree">4. Condense the cluster tree</h3>
<ul>
<li>위의 Tree에서 큰 노드부터 조금씩 부스러기들을 제거해나간다. </li>
<li>맨 위에서부터 분기를 했을 때 하나의 굵직한 클러스터로부터 부스러기들이 떨어져나간다고 생각하면 된다. </li>
<li>이 때 Minimum Cluster Size라는 새로운 파라미터가 등장하게 되는데 새롭게 분리가 된 클러스터가 MCS보다 더 작은지를 물어본다. </li>
<li>만약 MCS보다 더 작다면, 떨어져나가는 클러스터와 그 거리가 어떻게 되는지를 기록하고 본체를 유지한다. </li>
<li>그런데 두 클러스터 모두 MCS보다 더 크다면 두 클러스터 모두 Tree에 유지한다. </li>
</ul>
<p><img src="https://velog.velcdn.com/images/hoon_lander/post/175e24de-e162-4a17-8a8c-4406b7fb01b2/image.png" alt=""></p>
<h3 id="5-extract-the-clusters">5. Extract the clusters</h3>
<p>(이 부분부터는 설명이 많이 생력되어 있는데, 직접 번역을 해보면서 한땀한땀 이해하려 했습니다)
위의 그림을 보면 조금씩 Cluster가 작아지는 것을 볼 수가 있는데, 이는 클러스터가 지속적으로 떨어져 나가서이다. Y축을 봤을 때, Lambda가 커지는 것을 볼 수가 있는데 이는 distance의 역수이기 때문에 맨처음 Dendogram에서 거리가 위로 갈 수록 커지고 그것을 역수를 취했을 때 Lambda라는 숫자가 작아지는 것이다. </p>
<p>Lambda 같은 경우 Lambda-Birth / Lambda-Death로 나눌 수 있는데 이는 클러스터의 분기가 일어났을 때와 다시 분리되었을 때의 Lambda를 의미한다. </p>
<p><img src="https://velog.velcdn.com/images/hoon_lander/post/aa94b473-8cd2-4298-8884-9881785e8da6/image.png" alt=""></p>
<p>위의 그림에서 볼 수 있듯, Lambda를 활용해 각 클러스터의 면적을 구하고, Child의 면적이 Parent보다 작으면 Parent의 Cluster를 Flat Cluster로 활용하는 듯 하다.</p>
<p>너무 깊게 들어가서 시간 낭비하는 것보다, HDBSCAN의 절차의 큰 틀만 알면 될 것같다. 자료 조사를 하던 중</p>
<ul>
<li><a href="https://godongyoung.github.io/%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D/2019/07/15/HDBSCAN-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-(with-python).html">https://godongyoung.github.io/%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D/2019/07/15/HDBSCAN-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-(with-python).html</a></li>
</ul>
<p>이 더 내용적으로는 풍부하게 정리해둔 것 같아, 나는 여기까지 작성한다. </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[또 다시 글또 at EMNLP 2023]]></title>
            <link>https://velog.io/@hoon_lander/%EB%98%90-%EB%8B%A4%EC%8B%9C-%EA%B8%80%EB%98%90-at-EMNLP-2023</link>
            <guid>https://velog.io/@hoon_lander/%EB%98%90-%EB%8B%A4%EC%8B%9C-%EA%B8%80%EB%98%90-at-EMNLP-2023</guid>
            <pubDate>Sat, 09 Dec 2023 18:36:51 GMT</pubDate>
            <description><![CDATA[<p>&quot;이번 주 일요일 마감 놓치지 말고 글 작성해보셔요. 첫 제출에 시간 없다고 패스쓰시는 것보단, &quot;1회차니까 가볍게 다짐을 한 800자 정도만 작성해보자!&quot;라고 생각하시면 너무 좋답니다&quot;</p>
<p>처음으로 회사에서 컨퍼런스 (EMNLP)를 보내주게 되어서 참가하게 되었다. EMNLP 2023은 싱가포르, 센토사 섬 Resort World Sentosa 라는 곳에서 진행되었다. 
<img src="https://velog.velcdn.com/images/hoon_lander/post/2fbac886-ef5d-43c2-a6a7-acb653886022/image.png" alt="기가막힌 Resort World Sentosa"></p>
<p>변성윤님 말씀과 함께 싱가포르의 일정을 언급하는 이유는, 아무래도 싱가포르에서 여유 시간이 많아 글 작성을 할 시간이 충분할 것이라고 생각했으나, 회사 일과 학회 참가 (첫 참가)에 집중하느라 하나의 토픽을 잡아서 제대로 작성하는 것이 어려웠다. 하지만 마침 EMNLP를 참가했으니, 학회의 운영 방식과 참가 후기를 작성하고 그를 통해 나의 글또 활동의 각오를 담고자 한다. </p>
<p>또한 학회가 어떻게 운영되는 지, 솔직히 가보지 않아서 몰랐는데 누구한테 물어보기는 부끄러운 사람들이 가볍게 읽어보면 좋을 것 같다.</p>
<p>학회 운영 방식</p>
<ul>
<li><p>2023.12.05 (화)</p>
<ul>
<li>창이 공항 도착</li>
<li>주얼 창이 (Jewel Changi) 방문 및 식사<ul>
<li>송파 바쿠테에서 바쿠테 (싱가포르 갈비탕)</li>
</ul>
</li>
<li>학회장 근처 숙소 도착</li>
</ul>
</li>
<li><p>2023.12.06 (수)</p>
<ul>
<li>본격 세션</li>
<li>첫째날은 튜토리얼 위주로 진행<ul>
<li>튜토리얼은 하나의 분야에 대해 역사와 현황, 그리고 나아가야 할 방향에 대해 구석구석 살펴보는 세션</li>
<li>진짜 해당 분야에 대해 지식이 적은 사람들에게 소개를 해주는 컨셉</li>
</ul>
</li>
<li>놀랍게도 튜토리얼을 대부분 Zoom으로 진행했는데, 들어가는 곳마다 Zoom 연결이 원활하지 않아 아무런 진행이 되지 않음</li>
<li>NLP+Vis: NLP Meets Visualization / LLM-driven Instruction Following: Progresses and Concerns과 같은 튜토리얼을 들어보려했으나, 전체적으로 와이파이 문제가 심해 불가능 (...)</li>
<li>이전 ACL 2023 Retrieval-based Language Models and Applications과 같은 경우는 해당 분야의 역사와 현재 진행 방향과 Concerns를 한번에 이해할 수 있는 귀중한 시간이었는데 이번 EMNLP에서는 현장에서 제대로 된 튜토리얼을 못 들은 것이 아쉬운 시간</li>
</ul>
</li>
<li><p>2023.12.07 (목)</p>
<ul>
<li>찐 본격 학회</li>
<li>전날 하루 동안만 튜토리얼이 진행되기에 튜토리얼만을 들어, 워크샵을 놓쳤기에 워크샵에 올인</li>
<li>학회 운영 방식<ul>
<li>학회 전반부 (튜토리얼 / 워크샵) &gt; 학회 후반부 (Main Oral / Poster Session / After Party?)<ul>
<li>워크샵: 비슷한 주제의 논문들이 모여 서로 의견을 공유하고 논문을 발표하는 세션</li>
</ul>
</li>
</ul>
</li>
<li>BlackBoxNLP 2023 6th Workshop<ul>
<li><a href="https://blackboxnlp.github.io/">https://blackboxnlp.github.io/</a></li>
<li>보통 LM이나 Attention과 같이 모델의 세부 구조가 예측 / 분류에 어떤 영향을 주는지 살펴보는 워크샵</li>
</ul>
</li>
<li>The Big Picture<ul>
<li><a href="https://www.bigpictureworkshop.com/">https://www.bigpictureworkshop.com/</a></li>
<li>가장 재밌게 들었던 튜토리얼</li>
<li>1회차 워크샵이었는데 가장 많은 사람들이 모였다고 생각하는 것이, &#39;스토리&#39;가 주 핵심인 워크샵</li>
<li>The Big Picture는 연구 생태계에서 여러 의견들이 첨예하게 갈려온 역사 또는 현재 진행중인 논쟁을 정리</li>
<li>예를 들어<ul>
<li>Attention is not Explanation vs Attention is not not Explanation</li>
<li>In Context Learning을 수행할 때 정확한 Demonstration이 필요한가 vs 아닌가?</li>
</ul>
</li>
<li>즉, 연구자들이 이전이 펼친 논쟁이든 현재 진행되는 논쟁이든 랩 배틀 또는 이방원 vs 정몽주와 같은 시조 배틀과 같은 것이다.</li>
</ul>
</li>
</ul>
</li>
<li><p>2023.12.08 ~ 12.10 (금, 토, 일)</p>
<ul>
<li><p>기본적으로 금,토,일은 모두 비슷한 방식으로 진행</p>
</li>
<li><p><strong>Main Conference Oral</strong>: 
비슷한 주제의 논문들을 묶어 방을 배정하고 좌장이 학회의 MC를 맡아서 진행하고, 12분 가량의 발표 / 3분의 질의를 수행한다. 3분의 질의 중, 참석한 사람들의 질의가 없으면 좌장이 생각해둔 질문을 한다.</p>
</li>
<li><p><strong>Poster Session</strong>: 
Oral을 하지 않는 Main Conference Paper 또는 Findings Paper들이 발표를 한다. 하지만 Oral처럼 방 또는 강연장 내에서 진행하는 것이 아니라, 말 그래도 포스터를 벽에 붙이고 돗대기 시장마냥 지나가는 사람들을 향해</p>
<blockquote>
<p>  &#39;잠시만요. 자기 어필을 좀 하겠습니다. 제가 열심히 만든 자식같은 논문입니다&#39; 
라고 소개하는 시간이다. 
실제로 지나가다가 &#39;Do you want me to summarize the paper for you?&#39;와 같은 제안을 받기도 하며, 정말 열띤 토론이 진행된다. 이번 EMNLP에서는 공간이 매우 협소했는데, 밀집된 공간에 많은 사람들이 있으면 등장하는 구름 (파오운)도 보였다.</p>
</blockquote>
</li>
<li><p><strong>Keynote</strong>: 유명 인사들의 한시간 정도의 강연 (Christopher D. Manning)</p>
</li>
<li><p><strong>Social Event</strong>: 각 학회에서 진행하는 이벤트 (2023 EMNLP 같은 경우는 Universal Studio를 통째로 대관해서 학회 참가자들만 입장 가능하도록)</p>
</li>
</ul>
</li>
<li><p>학회 느낀 점</p>
<ul>
<li>회사에서는 학회를 가기 싫어하는 사람들도 존재했는데, 이를 이해하지 못했다.</li>
<li>하지만 역시 공짜로 보내주는 해외여행은 없으며, 학회를 제대로 탐닉하면 4~5시만 되도 모든 에너지가 방전된다.</li>
<li>참가하는 방식<ul>
<li>학회 참가 이전에는 Poster Session을 참가해본 적이 없으니 Underline.io에서 볼 수 있는 Oral만 봐서 Oral이 중요한 줄 알았다.</li>
<li>하지만 다음에도 기회가 있다면 Poster Session에서 자신이 관심이 있고 저자와 나누고 싶은 대화를 다 해본 뒤, Main Conference를 듣는 것이 더 좋을 것 같다.</li>
<li>이유는 Poster Session이 좀 더 밀착한 대화 / 논문에 대한 질의응답이 매우 편리한 속성 과외를 받을 수 있기 때문</li>
<li>하지만 Main Conference에서는 정말 놀랍게도 하나도 알아들을 수 없는 발음들이 많이 존재해서 앉아서 수동적으로 듣는 것보다는 능동적으로 자신의 취향에 맞는 Poster를 사냥하는 것이 더 좋을 것이다.</li>
</ul>
</li>
<li>각오<ul>
<li>Conference 논문을 작성해 1저자로 해외 컨퍼런스에 당당하게 입성</li>
<li>이를 위해, 냄비 근성이라도 당분간은 현재 연구 분야에 대한 논문 서치 및 정리 수행</li>
<li>현재 LLM이 지배하고 있는 NLP 연구 시장이지만, LLM이 하기에는 애매하고 Cost In-effective하며, 특히 Input Size가 훨씬 더 큰 Bulk Corpus로 있기에 확실히 LLM으로 수행하기 힘든 Topic Modeling이나 Clustering에 대한 연구 성과 달성</li>
<li>LLM이 뜨기 시작하니 LLM Serving을 위해 수많은 Quantization / Compression / Inference에 대한 논문들이 EMNLP에 많이 등장했다. 모델 성능 또는 연구가 아니라 엔지니어링에 대한 논문들이 많이 접수된다는 뜻은 그만큼 수요가 많이 증가했음을 시사하기에 공부를 늦출 수 없다.</li>
<li>작성한 논문 없이, 회사의 보은으로 참가한 학회에서, 학회의 운영 방식을 깨달았기에 하나의 논문을 보더라도 더 제대로 배경을 이해할 수 있게 되었으며, 논문 작성의 의지가 향상되었다.</li>
<li>작성한 논문 없이 참가했기에 이상하게 Poster Session에서 저자들에게 질문하는 것이 다소 부끄러웠으나, 차후 참가 시에는 그런 일 없이 당당하게 걷기를 하고 싶다.</li>
</ul>
</li>
</ul>
</li>
</ul>
<p>이상 EMNLP 2023 참가 후기 및 글또 또는 학업 각오를 마칩니다.
윤훈상 올림</p>
]]></description>
        </item>
    </channel>
</rss>