<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>minsing-jin.log</title>
        <link>https://velog.io/</link>
        <description>존나 재밌는것을 맨듭니다.</description>
        <lastBuildDate>Sat, 17 Oct 2026 01:17:56 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>minsing-jin.log</title>
            <url>https://velog.velcdn.com/images/minsing-jin/profile/a81f0e4d-f816-48b3-afa9-11f9dd834b4f/social_profile.jpeg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. minsing-jin.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/minsing-jin" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[기술을 위한 기술]]></title>
            <link>https://velog.io/@minsing-jin/%EA%B8%B0%EC%88%A0%EC%9D%84-%EC%9C%84%ED%95%9C-%EA%B8%B0%EC%88%A0</link>
            <guid>https://velog.io/@minsing-jin/%EA%B8%B0%EC%88%A0%EC%9D%84-%EC%9C%84%ED%95%9C-%EA%B8%B0%EC%88%A0</guid>
            <pubDate>Sat, 17 Oct 2026 01:17:56 GMT</pubDate>
            <description><![CDATA[<p>기술을 먼저 생각하고 접근하거나, 기술을 위한 기술을 만드는 방식으로는 실제로 가치 있는 문제를 발견하기가 쉽지 않다.
망치를 예로 들어보자.</p>
<p>내 주변의 문제를 해결하려는 목적에서 출발한다면, 망치를 어디에 사용할 것인지부터 생각하게 된다. 문을 부수거나 벽에 못을 박는 등 구체적인 용도와 쓰임새가 있기 때문에, 그 목적에 맞는 망치를 만드는 것은 비교적 쉽다.</p>
<p>하지만 기술을 먼저 생각하면 접근 방식이 달라진다. 망치의 재료와 역학, 구조와 형태에 대한 공학적 이해에서 출발해 망치 머리를 어떻게 개선하고 더 효율적으로 만들 것인지를 고민하게 된다. 이 과정에서는 거시적인 관점에서 망치의 필요성과 사용자의 실제 쓰임새를 바라보기가 어렵다.
대신 누구보다 망치의 쇠를 잘 깎고, 나무 손잡이를 정교하게 다듬는 전문가가 될 수는 있다. 그리고 이러한 기술은 망치를 다양한 용도로 활용하려는 생산자들에게 판매하기에도 좋다.</p>
<p>그러나 문제가 있다.</p>
<p>생산자의 쓰임새에 맞게 망치를 더 잘 만들려면 상상만으로는 부족하다. 직접 생산자가 되어봐야 한다. 그리고 좋은 생산자가 되려면 결국 내 주변의 문제를 해결하는 것부터 시작해야 한다.
즉, 내가 기술적인 전문가가 되고 싶고, 기술적 해자를 갖춘 인프라를 만들고 싶다는 욕망 역시 직접 생산자가 되어보지 않는 이상 그저 재미있고 멋있어 보이는 기술에 대한 동경으로 그칠 수 있다.</p>
<p>물론 망치 머리를 깎는 과정에서도 기술적인 문제는 발견할 수 있다. 망치의 전체적인 쓰임새를 고려하지 않더라도, 쇠를 깎다가 발견한 특정 문제를 최적화하는 솔루션은 충분히 만들 수 있다.
하지만 나는 그동안 기술을 먼저 깊이 파고들고, 이를 인프라로 만들고 싶다는 막연한 목표와 욕망을 가지고 있었다.</p>
<p>딥테크 인프라는 어디에서 시작되는가
수많은 사례를 조사하면서 발견한 것은, 많은 딥테크 인프라형 창업가 역시 처음부터 기반 기술 자체를 만들려고 했던 것이 아니라는 점이다.
먼저 망치를 만들어 소비자에게 판매하거나, 직접 생산자가 되어보는 과정에서 문제를 발견했다. 그리고 그 과정에서 마주한 기술적 병목과 문제의식을 바탕으로 딥테크에 접근했다.
심지어 Etched처럼 Transformer를 위한 전용 GPU가 필요한 시대가 올 것이라는 미래적 인사이트조차, 결국 망치 머리의 쇠를 깎는 과정에서 발견한 기술적 문제의식과 미래에 대한 비전으로 이해할 수 있다.
즉, 거대한 기술적 비전도 반드시 추상적인 기술 자체에서 출발하는 것은 아니다. 실제로 무언가를 만들고 사용하면서 발견한 문제에서 시작될 수 있다.</p>
<p>학교에서 배우는 기술과 실제 가치를 만드는 기술
학교는 망치의 용도를 먼저 고민하기보다는, 망치를 구성하는 기술적 요소를 깊고 체계적으로 학습하는 곳이다.
망치의 재료공학을 배우고, 망치 머리를 어떻게 정교하게 깎을 수 있는지, 손잡이를 어떻게 잘 만들 수 있는지를 학문적으로 깊이 탐구한다.
왜냐하면 망치의 용도를 정의하거나 망치를 생산하는 파이프라인을 구축하는 기업가와 자본가들은 망치의 모든 기술적 요소를 직접 이해할 필요가 없기 때문이다. 각 부품과 기술에 대한 깊은 전문지식을 가진 사람들을 고용하면 된다.
이러한 구조에서 학교는 특정 기술을 깊이 이해하고 개선할 수 있는 전문가를 양성하는 데 집중한다.
그렇기에 학교에서 배우는 것만으로 새롭고 실질적인 가치를 만들어내기는 어렵다. 기술이 실제로 어디에 필요하고 어떻게 사용되는지, 어떤 문제를 해결할 수 있는지는 결국 본인이 직접 고민하고 경험해야 한다.</p>
<p>2주간의 기술 탐색에서 얻은 결론
나는 지난 2주 동안 내가 하고 싶은 기술을 먼저 앵커로 설정하고, 그 기술의 쓰임새를 찾거나 기술을 위한 기술을 만드는 방향으로 탐색했다.
마음에 드는 기술을 먼저 선택한 뒤, 그 기술을 기반으로 어떤 문제를 해결할 수 있을지 고민했다.
하지만 돌이켜보면 이것은 좋은 아이디어를 발견하기 어려운 접근 방식이었다.
나는 원래 흑마법이나 차력쇼처럼 남들이 쉽게 하지 못하는 기술적 도전을 좋아하는 사람이다. 그런데 지난 2주 동안 기술을 먼저 앵커로 삼으려다 보니, 애초에 차력쇼를 하기 위한 차력쇼를 고민하고 있었다.
굳이 그런 차력쇼를 하지 않아도 되는, 더 빠르고 좋은 방법이 있었는데도 말이다.
그렇다고 지난 2주가 무의미했던 것은 아니다.
오히려 유의미했다고 생각한다.
나는 기술을 먼저 앵커로 삼아 주제를 정하고 싶었고, 동시에 왜 그런 접근이 잘되지 않는지 직접 확인하고 싶은 막연한 궁금증도 있었다.
그동안 다양한 사례를 탐색하고 깊이 고민하면서, 단순히 누군가의 조언을 받아들이는 것이 아니라 내가 직접 확인하고 납득할 수 있는 결론에 도달했다.
이것이 지난 2주간 얻은 가장 큰 수확이다.</p>
<p>사고방식의 전환: 어려운 기술보다 먼저 필요한 것을 만들자
이 의문이 해결되자 오히려 나의 사고 프레임워크가 바뀌기 시작했다.
나는 그동안 딥테크라는 개념에 지나치게 매몰되어 있었다.</p>
<p>AI의 발전으로 생산성이 크게 높아졌으니, 이제는 더 어렵고 복잡한 문제에 도전해야 한다고 생각했다. 하나의 어려운 기술을 6개월씩 깊게 파고드는 것이 당연하다는 막연한 전제도 가지고 있었다.
하지만 딥테크를 하고 싶고 어려운 기술을 만들고 싶다고 해서, 반드시 처음부터 어려운 것에 도전해야 하는 것은 아니다.
망치가 어디에 쓰일지도 모르는 상태에서 망치 머리의 구조를 연구하거나 쇠를 잘 깎는 기술부터 개발할 필요는 없다.
그보다 먼저 어떤 용도와 필요성이 존재하는지, 애초에 망치라는 도구가 필요한지부터 충분히 고민해야 한다.</p>
<p>그다음에는 다양한 용도의 망치를 2주 혹은 1개월 단위로 빠르게 만들어보면서, 실제 사용자들의 반응과 피드백을 듣는 것이 더 중요하다.
직접 만들어보고, 사용해보고, 다른 사람들에게 제공하면서 비로소 무엇이 필요하고 어떤 부분이 부족한지 알 수 있다.
그 과정에서 기존 기술로는 해결하기 어려운 문제가 발견된다면, 그때 망치 머리의 구조를 연구하거나 쇠를 더 잘 깎는 기술을 깊이 파고들어도 늦지 않다.
오히려 그렇게 시작한 기술은 해결해야 할 문제가 명확하고, 실제 쓰임새가 있으며, 기술적 전문성과 해자를 쌓아야 하는 이유도 분명해진다.</p>
<p>딥테크를 포기하자는 것이 아니다. 딥테크에 도달하는 순서를 바꾸자는 것이다.
기술을 먼저 정하고 그 쓰임새를 억지로 찾는 것이 아니라, 실제로 필요한 것을 만들면서 기술적인 문제를 발견하고, 그 문제를 해결하는 과정에서 깊은 전문성과 인프라를 구축하는 것이다.
지금 당장 거대한 기술적 비전이나 어려운 문제를 선택할 필요는 없다. 작더라도 쓸모 있는 것을 빠르게 만들고, 그 경험을 통해 다음 문제를 발견하면 된다.</p>
<p>유연한 사고를 가지자. 더 빠른 방법을 찾아보자.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[우리 AI 월클 아닙니다]]></title>
            <link>https://velog.io/@minsing-jin/%EC%9A%B0%EB%A6%AC-AI-%EC%9B%94%ED%81%B4-%EC%95%84%EB%8B%99%EB%8B%88%EB%8B%A4</link>
            <guid>https://velog.io/@minsing-jin/%EC%9A%B0%EB%A6%AC-AI-%EC%9B%94%ED%81%B4-%EC%95%84%EB%8B%99%EB%8B%88%EB%8B%A4</guid>
            <pubDate>Mon, 12 Oct 2026 08:21:12 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/minsing-jin/post/c06e64d5-2cf1-4f4c-9561-f07b373687aa/image.png" alt=""></p>
<p>AI의 장문의 글을 읽다보면 내가 ai의 답변대로 생각한다.</p>
<p>AI가 암묵지를 끌어내올수 있지만 ai에게 시키는것은 인간의 몫이다. 인간은 계속 ai를 활용해서 암묵지를 끌어올수있도록 생각하고 결정해야한다. 무엇을 모르는지를 계속 대화하면서 알아내야한다. 내가 모르는 지점을 AI가 단번에 도달하게 하거나 ai가 창조적인 아이디어를 추천하는것은 아직 한계가 있다.
내가 써본 ai는 물어본만큼 답해준다. 잘 시키거나 물어보려면 인간이 잘 알아야한다. 사람들은 AI가 사람을 대체할거다, AI 가 세상을 지배할거다라는 말이 계속 팽배하고 있다. 나는 회의적이다. AGI오면, 모델이 발전하면 다 대체되는거 아니겠냐는 무적의 논리를 제시한다면 할말이 없지만 저거도 지금은 나에게 부족하다. 지능의 정의가 뭉뚱그려져서 사람들은 공포에 휩싸이고있다. &quot;사고&quot;를 한다는건 많이 안다는것이 아니다. 스스로 판단할줄 알고, 기억하고, 변해야한다. 반면 AI는, 적어도 지금의 llm은 나에게 말할수 있는 백과사전이라고 느껴진다.
많이 알고있지만 좋은 판단을 하고, task를 완수하기 위해서는 강화학습으로 돌리고있다.</p>
<p>인간이 배우는 과정과는 비슷하지만 인간은 수세기동안 거쳐온 진화 유전자를 기반으로 현대 문명, 그리고 4차원의 시공간과 더불어서 다른 인간, 부모와 상호작용하면서 실수를 통해서 배운다. 인간 자체도 복잡계이고, 이 환경 자체도 복잡계이다. 이것을 모두 모델링한 &quot;환경 시뮬레이션&quot;에서 모델을 학습시키는것은 현재의 기술력으로는 불가능하다.
어쩌면 디지털로 이루어진 지금의 온라인 세계에서는 불가능할것이다. 고무적인것은 연구들이 그런 방향으로는 가고 있다. 강력히 통제된 환경에서 강화학습을 통해 길러진 AI의 판단력은 인간을 따라잡을 수 없다. 세상의 유기체들이 복잡계의 환경에서 상호작용하고 수세기동안 실수와 죽음을 반복하면서 길러진 판단력은 그 환경을 완벽히 모델링하지 않는 이상은 어렵다.</p>
<p>우리는 여기서 에이전트가 왜 코딩을 잘할수있는지를 반추해볼 수 있다. 프로그래밍이라는것은 0과 1로 이루어져있는 디지털이라는 통제되고 descrete한 공간에서 논리를 이용해서 새로운 것을 만드는 행위이다. 프로그래밍은 세상에 비해서는 통제하기 매우쉽고, 유한세계이다. 계산 가능하다. 프로그래밍이라는 규칙과 논리는 유한한 space에서 하는 작업이기에 빠르게 대체가 가능하다. 다만 인간의 뇌, 인지 에너지로는 프로그래밍을 숙련하기 위해서는 인간이 이해할 수 있는 형태로 변환해야만 이해하고, 작업속도를 낼수있다. 0과 1의 기계어에서 인간이 읽을 수 있는 프로그래밍 언어로 만들어지는것이다. 프로그래밍은 때문에 패턴읽기에 강력한 AI가 습득하고 완성도있게 활용할 수 있는 좋은 영역이다.</p>
<p>돌아와서 내가 AI에게 의미있는 조언을 끌어내기 위해서는 내가 원하는걸 명확히하고, 깊이있게 사고할 수 있고, 생각의 주체가 내가 되어야만 좋은 방향을 잡을 수있다. 내가 깨달은것은 두가지다.</p>
<ol>
<li>AI는 &quot;나에게 좋은 결정&quot;을 못한다.</li>
<li>질문도 제한된 공간, 혹은 제약이 있는 질문일수록 의미있는 답변을 준다.</li>
</ol>
<p>복잡한세계(주식, 인간의 인생, 개인적인 질문)와 연관될수록 AI에게 자율성을 주는 질문을 던지거나 시키면 의미있는 결과물을 얻기 어려울것이다. 하지만 이 복잡한 세계를 단순한 세계로 줄일수있는 좋은 제약이 걸린 질문과 지시를 AI에게 내린다면 내가 원하는 결과물을 얻을 수 있다. 이 때문에 domain knowledge가 중요한것도 특정 분야가 복잡한 세계일수록 단순한 세계로 줄일 수 있는 제약을 줄 수 있는 capability이기 때문에 중요하다는것이다. 때문에 AI 가 좋아질수록 인간은 덜배울것이 아니라 더 알아야한다. 사주풀이나 인간관계 고민상담도 모두 패턴화 되어있기 좋은 문제들이기에 유용하다. 이것 또한 제한된 공간으로 만들어버릴수있는 것이다.</p>
<p>하루 8-9시간 gpt 6 pro와 이야기하다보면 힘만 빠지고, 의미있는 결론에 도달하지 못한 경우가 많았다. 왜일까?</p>
<p>AI는 나에게 조언을 준다. 그리고 나는 그것을 읽는다. 초반에는 내가 무엇을 모르는지 모르는 상태에서 시작하니 AI에게 복잡한세계에 대한 질문을 그대로 넣어버린다. 그것에 목적과 의도가 없는 상태에서 내가 요구를 하면 평균적인 답을 준다. 그 질문에 대해서 나온 평균적인 답은 실질적인 해결책과는 거리가 멀거나 이미 해결된 문제이거나 사실 문제가 아니었던것이었다.</p>
<p>또한 나는 무엇을 모르는지 모르기때문에 AI 의 답변이 좋은것인지 검수할 수 없다. 그렇기에 나는 AI가 말한대로 생각하게 된다. 하지만 나의 질문은 질이 낮은 질문이기에 AI는 그것에 맞춰 평균적인 답변을 준다. 나는 그 평균적인 답변들의 굴레에서 빠져나오지 못하고 계속해서 AI의 장문의 말들을 읽고 AI가 말한대로 생각하고 삽질을 한다. 하지만 전문가 인간에게 물어보는것은 질이 다르다. 지식의 차이는 있어도 노하우의 차이는 크다.</p>
<p>AI로 콘텐츠 자동화했다, 글을 자동화했다, 영화 만들었다는 적어도 재밌고 좋은 컨텐츠를 만들 수 있는 사람이 지시를 해야 결과물이 나오지 AI가 알아서 만드는건 slop 싸게다. 의도를 전달할 잘하는 인간이 필요하다.</p>
<ol>
<li>인간은 AI의 답변을 듣기 이전에 충분한 생각의 시간을 확보해야한다.</li>
<li>그리고 AI에게 답변과 일처리를 잘시키기 위해서는 내가 시키고 물어볼 수 있는 지식을 계속해서 배워야한다.</li>
<li>결정과 판단은 AI의 답변대로 하는것이 아닌 AI의 제안을 곁들여서 내가 내려야한다.</li>
</ol>
<p>다른 사람들은 나와 같은 삽질을 하지 않으면 좋겠다는 마음에 이글을 전해본다. AI추천한 아이디어나 내용은 한계가 있다. 결정과 생각은 인간이 해야한다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[HalluLens 논문리뷰]]></title>
            <link>https://velog.io/@minsing-jin/HalluLens-%EB%85%BC%EB%AC%B8%EB%A6%AC%EB%B7%B0</link>
            <guid>https://velog.io/@minsing-jin/HalluLens-%EB%85%BC%EB%AC%B8%EB%A6%AC%EB%B7%B0</guid>
            <pubDate>Mon, 03 Nov 2025 11:25:43 GMT</pubDate>
            <description><![CDATA[<h3 id="🇰🇷-kohallulens로-벤치마크-직접-돌려보기"><a href="https://github.com/NomaDamas/KoHalluLens">🇰🇷 KoHalluLens로 벤치마크 직접 돌려보기!</a></h3>
<h1 id="🤷-motivation">🤷 Motivation</h1>
<ul>
<li><p>통일된 계층과 같은 할루시네이션을 분류할 프레임워크 부족</p>
</li>
<li><p>Hallucination에 대한 용어와 범위의 모호함</p>
<ul>
<li>“사실과 다른 말하기”(Factuality issue)</li>
<li>“모르는데 아는 척하기”(Hallucination)</li>
</ul>
</li>
<li><p>Factuality와 real-world의 불일치</p>
<ul>
<li>ex) 22년산 한동건(수염이 존재하는 카더가든처럼 생긴)을 train한 LLM 모델<ul>
<li>한동건의 얼굴에 대해서 묘사해달라고 하면 수염달린 카더가든 한동건이라고 함</li>
<li>내부 지식에 한에서는 llm이 충실했지만 2025년 real-world 한동건은 수염이 없는 나폴리맛피아 닮은 한동건임</li>
</ul>
</li>
</ul>
</li>
<li><p>기존 hallucination eval dataset들은 Data saturation or Leakage문제 발생</p>
<ul>
<li><p>data saturation:</p>
<p>  모델들이 성능들이 모두 좋아져서  성능 향상이 미미해지는 현상</p>
</li>
</ul>
</li>
</ul>
<h1 id="🤷-definition">🤷 Definition</h1>
<ul>
<li><p>Hallucination</p>
<ul>
<li>훈련한대로 말하지 않거나 prompt(input context)대로 답변하지 않는것</li>
</ul>
</li>
<li><p>Claim</p>
<ul>
<li>longform answer에서 검증가능한 작은 정보단위 or 사실적 진술</li>
<li>유형<ul>
<li>True: 생성된 claim의 개수</li>
<li>Flase: 생성되지 않는 claim의 개수</li>
<li>Positive: supported</li>
<li>Negative: unsupported, refuted, unverifiable</li>
</ul>
</li>
</ul>
</li>
</ul>
<h1 id="🧮-실험-setting">🧮 실험 Setting</h1>
<ul>
<li>엄선된 Wiki활용<ol>
<li>goodWiki: wikipedia Editors가 따봉한 Wiki로 필터링 - (2023/9/4)까지의 위키를 가져옴</li>
<li>WikiRank 2024: Harmonic centrality score 기준으로 10개의 구간을 나눠서 각 문서의 난이도 분류<ul>
<li>h-score란?<ul>
<li>그래프 이론에서 노드의 중요성과 영향력을 측정하는 지표임.</li>
<li>높을수록  더 접근성이 좋고, 언급이 많이 되고 많이 알려져있다는 것</li>
<li>문서 중요도와 대중성의 프록시로 활용</li>
</ul>
</li>
<li>각 extrinsic hallucination에는 위키 문서 기준으로 난이도 분류함</li>
</ul>
</li>
</ol>
<ul>
<li>어려움의 기준<ul>
<li>h-score</li>
<li>longtail knowledge</li>
</ul>
</li>
</ul>
</li>
<li>NonEntity를 만드는법<ul>
<li>Mixed Entities - 각도메인당 2000개씩 총 8000개 sample<ul>
<li>동물, 식물, 박테리아 분류, 의약품과 같은 이름들을 무작위로 섞어서 새로운 용어를 만듦</li>
<li>실제 의학, 분류학 데이터베이스(ITIS)에서 있는지 Validation → 검색 검증 x</li>
</ul>
</li>
<li>Generated Entities - 1950개의 Sample<ul>
<li>LLM이 다양한 도메인(비즈니스, 이벤트, 제품브랜드)에서 허구적인 Entity 이름 생성</li>
<li>Round-Robin<ul>
<li>단일 llm이 자신이 만든 가상의 엔티티에 정보를 제공하려는 bias 존재가능</li>
<li>두가지 모델로 허구의 Enitity를 생성, 세번째모델이 이름들을 조합하여 query를 만듦.<ul>
<li>Llama-3.1-405B-Instruct, GPT-4o, Mistral-Nemo-Instruct-2407</li>
</ul>
</li>
</ul>
</li>
<li>Brave Search API로 검색엔진으로 존재여부 검증</li>
</ul>
</li>
</ul>
</li>
</ul>
<h1 id="🤗-taxonomy">🤗 Taxonomy</h1>
<p><img src="https://velog.velcdn.com/images/minsing-jin/post/e2f7b77d-49df-46cf-9a8e-6af6fa3230b1/image.png" alt=""></p>
<h1 id="👾-extrinsic-hallucination">👾 Extrinsic Hallucination</h1>
<ul>
<li>정의: 생성된 내용이 training data와 일치 x</li>
<li>평가 방식:<ul>
<li>한번 evaluation run할때마다 데이터가 생성되고, 평가까지 완료함.<ul>
<li>wiki 문서를 보고 dynamic하게 query-gt pair를 생성함</li>
<li>LLM-as-Judge를 활용해서 각 Metric에 따라 Performance 측정</li>
</ul>
</li>
</ul>
</li>
</ul>
<h3 id="1-precisewikiqa">1. PreciseWikiQA</h3>
<ul>
<li>단답형 query-gt 500개</li>
</ul>
<p><strong>[Metric]</strong></p>
<ul>
<li><p>False refusal rate</p>
</li>
<li><p>Hallucination rate</p>
</li>
<li><p>Correct answer rate</p>
</li>
<li><p>[Eval 결과]</p>
<p>  <img src="https://velog.velcdn.com/images/minsing-jin/post/174ae3b8-e750-4e08-9a12-1008430e684f/image.png" alt=""></p>
<ul>
<li>라마 3.1 405b-instruct 는 난이도 수준에 걸쳐 일관된 Hallucination 비율을 보여줌</li>
<li>Gpt-4o와 claud-3.5-sonnet는 어려울수록 hallucination비율이 높아짐</li>
</ul>
</li>
</ul>
<h3 id="2-longwiki">2. LongWiki</h3>
<ul>
<li>Longform</li>
<li>서술형 query-gt - (250개 sampled + 50개 레벨 고려 샘플링)</li>
<li><strong>[Metric]</strong><ul>
<li>False refusal rate</li>
<li>Precision<ul>
<li>생성된 답변에서 나온 전체 claim 중 supported claim의 평균 비율</li>
<li>$\text{Precision} = \frac{\text{supported claims}}{\text{all extracted claims}}$</li>
</ul>
</li>
<li>Recall@K<ul>
<li>$\text{Recall@}K = \frac{\min(\text{supported claims},,K)}{K}$</li>
<li>Detail<ul>
<li>Precision에서 짧게 말한것에 대해서 점수를 많이 받을수도 있기에 조정</li>
<li>FN은 어떻게 아나?<ul>
<li>몰라서 K를 32개로 적당히 두고 32개가 모든</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>F1@K<ul>
<li>$\text{F1@}K = \frac{2 \cdot \text{Precision} \cdot \text{Recall@}K}{\text{Precision} + \text{Recall@}K}$</li>
</ul>
</li>
</ul>
</li>
</ul>
<p><strong>[Eval 결과]</strong></p>
<p><img src="https://velog.velcdn.com/images/minsing-jin/post/6af17806-4800-402f-8486-9afa33c05cdf/image.png" alt=""></p>
<h3 id="3-nonexistentrefusal">3. NonExistentRefusal</h3>
<ul>
<li>training하지 않은 상상의 Entitiy를 섞어서 질문하면 거부하는가?<ul>
<li>관련성 없지만 넣었을때 그럴듯해보이는 entity를 프롬프트에 넣음</li>
</ul>
</li>
<li>존재하지 않는 엔티티 1950개 생성후 query를 날림.</li>
<li>생성법<ul>
<li>Entity 생성후 Benchmark → 모델은 모릅니다유를 시전해야함<ul>
<li>Mixed Entity생성<ul>
<li>동물, 의약품, 식물, 박테리아 분류 이름 섞기</li>
<li>검증 - db검색</li>
</ul>
</li>
<li>GeneratedEntities<ul>
<li>Round Robin 방식 활용<ul>
<li>2개의 모델이 개체를 생성하고, 하나의 모델이 조합함</li>
</ul>
</li>
<li>검증 - 웹검색</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<p><strong>[Metric]</strong></p>
<ul>
<li>False Acceptance Rate</li>
</ul>
<p><strong>[Eval 결과]</strong></p>
<p><img src="https://velog.velcdn.com/images/minsing-jin/post/8e63c231-c549-430f-83c3-e105cb71db82/image.png" alt=""></p>
<h1 id="🪐-intrinsic-hallucination">🪐 Intrinsic Hallucination</h1>
<ul>
<li>정의: 생성된 내용이 input context와 일치하지 않는 생성</li>
</ul>
<h2 id="기존-벤치마크-활용-static">기존 벤치마크 활용 <strong>(Static)</strong></h2>
<ul>
<li>조건:<ul>
<li>기존의 잘알려지지 않으면서(Data leakage 문제 방지)</li>
<li>data saturation의 문제가 없는 데이터셋 사용</li>
</ul>
</li>
<li>선정된 벤치마크<ul>
<li><a href="https://github.com/vectara/hallucination-leaderboard?tab=readme-ov-file">HHEM(Hughes Hallucination Evaluation Model)</a> → 매년 업데이트<ul>
<li>text summarization → 7B미만 모델은 유용</li>
<li>실험 디테일<ul>
<li>testset<ul>
<li><a href="https://huggingface.co/datasets/abisee/cnn_dailymail/viewer/1.0.0/test?views%5B%5D=_100_test">CNN/Daily Mail corpus 활용</a></li>
</ul>
</li>
<li>factual consistency 데이터셋으로 Train한 hallucination detection <strong>모델</strong>을 사용<ul>
<li>각 LLM이 생성한 요약이 <strong>원문 내용과 사실적으로 일치하는지</strong> 평가</li>
<li>모델별 factual consistency <strong>비율 = 환각이 없는 비율</strong></li>
<li><strong>환각률 = 100 -</strong> factual consistency <strong>비율</strong></li>
<li>응답 거부율은 별도로 ‘Answer Rate’로 기록.</li>
</ul>
</li>
</ul>
</li>
<li>실험 세팅<ul>
<li>temperature = 0</li>
<li>프롬프트세팅<ul>
<li>깃허브 나와있는대로 ㄱㄱ</li>
</ul>
</li>
<li>사용모델:  <strong>HHEM-2.1-Open</strong><ul>
<li>context length 제한은 없다고 Hugging에 나오긴했는데 한번 써보고 이상하면 github 설명대로 1000개 짧은 Corpus로 샘플링</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li><a href="https://github.com/open-compass/ANAH">ANAH 2.0 - with reference set-up</a><ul>
<li><a href="https://huggingface.co/datasets/opencompass/anah">ANAH dataset</a></li>
<li>ANAH v2 model</li>
</ul>
</li>
<li><a href="https://github.com/SalesforceAIResearch/FaithEval">FaithEval</a><ul>
<li>FaithEval Benchmark dataset<ul>
<li><a href="https://huggingface.co/collections/Salesforce/faitheval-benchmark-66ff102cda291ca0875212d4">https://huggingface.co/collections/Salesforce/faitheval-benchmark-66ff102cda291ca0875212d4</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>이유<ul>
<li>benchmark set을 extrinsic처럼 Dynamic하게 하면 좋지만 llm as judge 자체에서도 할루시네이션이 생길 수 있음.</li>
</ul>
</li>
</ul>
<h3 id="1-hhem">1. HHEM</h3>
<ul>
<li>매년 업데이트 되는 Text summarization 벤치마크</li>
<li>7B 미만의 모델을 평가하는데에는 유용하다고 판단해서 넣음</li>
</ul>
<h3 id="2-anah20">2. ANAH2.0</h3>
<ul>
<li>input context로 사실적으로 정확한 정보를 주었을때 생성된 콘텐츠와 입력 context 간의 일관성 평가</li>
<li>llm as judge</li>
</ul>
<h3 id="3-faitheval">3. FaithEval</h3>
<ul>
<li>입력 Context에 노이즈를 넣거나 모순된 지식을 섞어도 잘 대답하는지 평가</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[pyimage1 doesn't exist error]]></title>
            <link>https://velog.io/@minsing-jin/pyimage1-doesnt-exist-error</link>
            <guid>https://velog.io/@minsing-jin/pyimage1-doesnt-exist-error</guid>
            <pubDate>Sun, 20 Jul 2025 06:32:26 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/minsing-jin/post/8e217767-0d3b-4860-82a0-47e205e87bc5/image.png" alt=""></p>
<p>문제 요약:</p>
<ul>
<li><code>main.py</code>에서 <code>AutoComplete.autocomplete()</code>을 실행하면 PostgreSQL 연결은 성공 메시지가 뜨지만 실제 데이터 조회 (<code>User.get_random_meme()</code>)에서 동작하지 않거나, GUI가 에러 (<code>pyimage1 doesn&#39;t exist</code>)를 발생시킴.</li>
<li>같은 코드를 단독으로 실행하면 정상 동작함.</li>
<li>Messagebox에 글자가 잘 안뜨거나 Messagebox자체가 안나오는 문제</li>
</ul>
<hr>
<h2 id="🔎-원인-분석">🔎 원인 분석</h2>
<ol>
<li><p><strong><code>pyimage1</code> doesn&#39;t exist</strong> 에러는 <code>Tkinter</code> 이미지 객체가 생성되었는데, <code>mainloop</code> 중간에 소멸되어 Tkinter가 그걸 참조할 수 없게 되는 대표적인 에러입니다.</p>
<ul>
<li>이는 <code>PhotoImage</code>나 <code>Label</code> 등에 설정된 이미지가 <code>local variable</code>로 만들어지고, 참조 없이 사라질 때 발생합니다.</li>
<li>GUI에서 이미지 보여줄 때 <code>self.image = tk.PhotoImage(...)</code>처럼 <strong>인스턴스 변수로 유지해야 합니다.</strong></li>
</ul>
</li>
<li><p><strong>PostgreSQL이 동작하지 않는 것처럼 보이는 이유</strong></p>
<ul>
<li>실제로 연결은 되었고 로그도 출력되지만, GUI 창이 뜨기 전에 <code>mainloop()</code>가 잘못 종료되어 DB 동작까지 마무리되지 않을 수 있습니다.</li>
<li>특히 GUI 내부에서 발생한 예외나 잘못된 흐름으로 인해 <code>mainloop()</code>가 조기 종료되면 이후 코드가 실행되지 않을 수 있습니다.</li>
</ul>
</li>
</ol>
<hr>
<h2 id="🛠-해결-방법">🛠 해결 방법</h2>
<h3 id="✅-2-tktk를-mainthreadexecutor의-root가-아닌-autocomplete에서-다시-생성해서-충돌-가능성">✅ 2. <code>tk.Tk()</code>를 <code>MainThreadExecutor</code>의 root가 아닌 <code>AutoComplete</code>에서 다시 생성해서 충돌 가능성</h3>
<p><code>MainThreadExecutor</code>는 <code>self.root.mainloop()</code>로 메인 이벤트 루프를 이미 돌리고 있습니다. 그런데 <code>AutoComplete.display_meme_gui()</code>에서 다시 <code>tk.Tk()</code>를 호출하는 건 <strong>중복 Tk root 생성으로 비정상 동작</strong>의 원인이 됩니다.</p>
<p><strong>해결책:</strong> <code>AutoComplete</code>에서는 새 <code>Tk()</code>를 만들지 말고 <code>Toplevel()</code>으로 만들어야 합니다.</p>
<pre><code class="language-python">self.root = tk.Toplevel()</code></pre>
<hr>
<h2 id="✅-정리된-체크리스트">✅ 정리된 체크리스트</h2>
<ul>
<li><input checked="" disabled="" type="checkbox"> <code>tk.Tk()</code> → <code>tk.Toplevel()</code>으로 바꾸기 (중복 루트 방지)</li>
</ul>
<hr>
<h2 id="🔚-결론">🔚 결론</h2>
<p>코드 구조상 동작은 맞지만, <strong>Tkinter의 이미지 관리</strong>, <strong>중복 <code>Tk()</code> 루트 생성</strong>, 그리고 <strong>DB 연결의 암시적 종료 시점</strong>이 문제를 일으키고 있습니다.</p>
<p>위 3가지를 고치면 <code>main.py</code>에서도 정상적으로 <code>autocomplete()</code>과 DB 조회가 작동할 것입니다. 원하시면 <code>MemeSelectionGUI</code> 쪽 예시 코드까지 보여드릴게요.</p>
<h4 id=""></h4>
<hr>
<h2 id="깨달음">깨달음</h2>
<p>역시 알기 위해서는 수단과 방법을 가리지 말아야한다. perplexity가 못한걸 chatgpt가 해냈다. 그리고 알기 위해서는 pyimage2 error로 검색했으면 알았을것이다. </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[What is daemon?]]></title>
            <link>https://velog.io/@minsing-jin/What-is-daemon</link>
            <guid>https://velog.io/@minsing-jin/What-is-daemon</guid>
            <pubDate>Sat, 19 Jul 2025 06:33:52 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/minsing-jin/post/8744bd87-3cb4-4a95-aaf1-0788fc9b9528/image.png" alt=""></p>
<p>In computing, a daemon is a program that runs as a background process, rather than being under the direct control of an interactive user. </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[POMDP가 뭐야?]]></title>
            <link>https://velog.io/@minsing-jin/POMDP%EA%B0%80-%EB%AD%90%EC%95%BC</link>
            <guid>https://velog.io/@minsing-jin/POMDP%EA%B0%80-%EB%AD%90%EC%95%BC</guid>
            <pubDate>Sun, 29 Jun 2025 06:20:11 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/minsing-jin/post/7eb01fe5-2570-49d1-8271-1c71ebf71e10/image.png" alt=""></p>
<h2 id="📌-pomdp-구성요소-수식-기반">📌 POMDP 구성요소 (수식 기반)</h2>
<p>POMDP는 다음 7개의 요소로 정의됩니다:</p>
<p>$$
\text{POMDP} = \langle S, A, T, R, O, Z, \gamma \rangle
$$</p>
<table>
<thead>
<tr>
<th>기호</th>
<th>의미</th>
</tr>
</thead>
<tbody><tr>
<td>$S$</td>
<td>상태(state)들의 집합</td>
</tr>
<tr>
<td>$A$</td>
<td>행동(action)들의 집합</td>
</tr>
<tr>
<td>$T(s&#39; \mid s, a)$</td>
<td>상태 전이 확률: 행동 $a$를 취했을 때, 상태 $s$에서 $s&#39;$로 전이할 확률</td>
</tr>
<tr>
<td>$R(s, a)$</td>
<td>보상 함수: 상태 $s$에서 행동 $a$를 했을 때의 기대 보상</td>
</tr>
<tr>
<td>$O$</td>
<td>관측값(observation)들의 집합</td>
</tr>
<tr>
<td>$Z(o \mid s&#39;, a)$</td>
<td>관측 확률: $a$를 했을 때 $s&#39;$에 도달한 뒤, 관측값 $o$를 얻을 확률</td>
</tr>
<tr>
<td>$\gamma$</td>
<td>할인율 (0 ≤ $\gamma$ ≤ 1)</td>
</tr>
</tbody></table>
<hr>
<h2 id="📌-1-belief-state-신념-상태">📌 1. <strong>belief state</strong> (신념 상태)</h2>
<p>에이전트는 현재 상태를 직접 알 수 없으므로, 다음과 같이 상태에 대한 확률 분포를 유지합니다:</p>
<p>$$
b(s) = P(\text{현재 상태가 } s)
$$</p>
<p>이를 <strong>belief state</strong>라고 부릅니다.
즉, 상태 공간 $S$에 대해 다음과 같은 확률 분포를 가집니다:</p>
<p>$$
b: S \rightarrow [0, 1], \quad \sum_{s \in S} b(s) = 1
$$</p>
<hr>
<h2 id="📌-2-belief-업데이트-수식-bayes-필터">📌 2. <strong>Belief 업데이트 수식 (Bayes 필터)</strong></h2>
<p>행동 $a$ 후 관측 $o$를 받았을 때 belief를 업데이트하는 수식은:</p>
<p>$$
b&#39;(s&#39;) = \eta \cdot Z(o \mid s&#39;, a) \cdot \sum_{s \in S} T(s&#39; \mid s, a) \cdot b(s)
$$</p>
<p>여기서:</p>
<ul>
<li>$b(s)$: 기존 신념</li>
<li>$T(s&#39; \mid s, a)$: 상태 전이 확률</li>
<li>$Z(o \mid s&#39;, a)$: 관측 확률</li>
<li>$\eta$: 정규화 상수 (전체 합이 1이 되도록)</li>
</ul>
<hr>
<h2 id="📌-3-가치-함수-value-function">📌 3. <strong>가치 함수 (Value Function)</strong></h2>
<p>belief에 기반한 가치 함수는 다음과 같이 정의됩니다:</p>
<p>$$
V(b) = \max_{a \in A} \left[ \sum_{s \in S} b(s) R(s, a) + \gamma \sum_{o \in O} P(o \mid b, a) V(b_{a,o}) \right]
$$</p>
<p>여기서:</p>
<ul>
<li>$P(o \mid b, a)$: belief 상태 $b$에서 행동 $a$ 후 관측 $o$가 나올 확률</li>
<li>$b_{a,o}$: 행동 $a$ 후 관측 $o$에 대한 belief 업데이트 결과</li>
<li>$V(b_{a,o})$: 업데이트된 belief에 대한 가치</li>
</ul>
<hr>
<h2 id="📌-4-관측-확률-계산">📌 4. <strong>관측 확률 계산</strong></h2>
<p>$$
P(o \mid b, a) = \sum_{s&#39;} Z(o \mid s&#39;, a) \sum_{s} T(s&#39; \mid s, a) b(s)
$$</p>
<hr>
<h2 id="🧠-핵심-요약">🧠 핵심 요약</h2>
<table>
<thead>
<tr>
<th>개념</th>
<th>수식</th>
<th></th>
<th></th>
</tr>
</thead>
<tbody><tr>
<td>Belief $b(s)$</td>
<td>상태 $s$에 있을 확률</td>
<td></td>
<td></td>
</tr>
<tr>
<td>업데이트</td>
<td>(b&#39;(s&#39;) = \eta Z(o</td>
<td>s&#39;,a) \sum_s T(s&#39;</td>
<td>s,a) b(s))</td>
</tr>
<tr>
<td>가치함수</td>
<td>(V(b) = \max_a [ \sum_s b(s) R(s,a) + \gamma \sum_o P(o</td>
<td>b,a) V(b_{a,o}) ])</td>
<td></td>
</tr>
</tbody></table>
<hr>
<h2 id="❗-어려운-점">❗ 어려운 점</h2>
<ul>
<li><strong>Belief space</strong>는 연속적인 고차원 확률 분포 → 계산량이 매우 큼</li>
<li>그래서 <strong>근사 알고리즘</strong> (예: Particle Filter, Point-based Value Iteration)이 자주 사용됨</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[batch vs batch size]]></title>
            <link>https://velog.io/@minsing-jin/batch-vs-batch-size</link>
            <guid>https://velog.io/@minsing-jin/batch-vs-batch-size</guid>
            <pubDate>Sun, 25 May 2025 05:32:21 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/minsing-jin/post/e29aa75e-bffc-4fd9-a757-7031628e26e2/image.png" alt=""></p>
<h1 id="batch">batch</h1>
<ul>
<li>데이터 Sample 묶음</li>
</ul>
<h1 id="batch-size">batch size</h1>
<ul>
<li>batch 1 묶음에 들어가는 sample의 개수</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[임베딩과 tokenize개념]]></title>
            <link>https://velog.io/@minsing-jin/%EC%9E%84%EB%B2%A0%EB%94%A9%EA%B3%BC-tokenize%EA%B0%9C%EB%85%90</link>
            <guid>https://velog.io/@minsing-jin/%EC%9E%84%EB%B2%A0%EB%94%A9%EA%B3%BC-tokenize%EA%B0%9C%EB%85%90</guid>
            <pubDate>Mon, 12 May 2025 12:24:31 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/minsing-jin/post/8ff55e53-a944-492c-8ad0-db7584523849/image.png" alt=""></p>
<h1 id="tokenize">tokenize</h1>
<ul>
<li>sequence(text, frame으로 나뉘어진 f0음성등)을 token으로 나눠서 수치화한것, 인덱싱으로 매핑한것</li>
</ul>
<h1 id="embedding">embedding</h1>
<ul>
<li>token들에 대해서 의미적인 연관성을 기반으로 배치한것</li>
<li>nn.Embedding 레이어를 통과하던 이미 만들어진 word2vec과 같은 임베딩 모델을 통과하든 첫번째 개념이 상통하면 어떤방식으로든 임베딩이라는 행위를 한것</li>
</ul>
<p><img src="https://velog.velcdn.com/images/minsing-jin/post/f3299e12-8829-44b7-a049-9fd4fa7873e1/image.png" alt=""></p>
<p><a href="https://wikidocs.net/64779">https://wikidocs.net/64779</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[텐서 조작 팁 - unsqueeze는 뭐냐?]]></title>
            <link>https://velog.io/@minsing-jin/%ED%85%90%EC%84%9C-%EC%A1%B0%EC%9E%91-%ED%8C%81-unsqueeze%EB%8A%94-%EB%AD%90%EB%83%90</link>
            <guid>https://velog.io/@minsing-jin/%ED%85%90%EC%84%9C-%EC%A1%B0%EC%9E%91-%ED%8C%81-unsqueeze%EB%8A%94-%EB%AD%90%EB%83%90</guid>
            <pubDate>Mon, 12 May 2025 11:54:15 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/minsing-jin/post/97025a0e-50e2-46fb-a606-eef1704ef249/image.png" alt=""></p>
<h1 id="텐서-조작-팁">텐서 조작 팁</h1>
<p><a href="https://sputnik-kr.tistory.com/229">https://sputnik-kr.tistory.com/229</a></p>
<h1 id="unsqueeze는-뭐냐">unsqueeze는 뭐냐?</h1>
<p><code>unsqueeze</code>는 PyTorch에서 <strong>텐서에 새로운 차원(길이 1인 축)을 추가하는 함수</strong>입니다.<br>예를 들어,  </p>
<ul>
<li><code>quantized_f0</code>의 shape이 <code>(1703,)</code>라면,  </li>
<li><code>quantized_f0.unsqueeze(0)</code>을 하면 shape이 <code>(1, 1703)</code>이 됩니다[2][3][4][7].</li>
</ul>
<p>이렇게 하면 기존에 없던 batch 차원이 생겨서,  </p>
<ul>
<li><code>[1703]</code> → <code>[1][1703]</code><br>즉, <strong>배치가 1개인 시퀀스</strong>처럼 사용할 수 있습니다.</li>
</ul>
<h3 id="왜-쓰나">왜 쓰나?</h3>
<ul>
<li>딥러닝 모델(특히 Conv1d, RNN 등)은 입력에 batch 차원이 있기를 기대합니다.</li>
<li>데이터의 차원을 맞추거나, 연산(broadcasting)이나 네트워크 입력을 위해 자주 사용합니다[4][5][7].</li>
</ul>
<h3 id="예시">예시</h3>
<pre><code class="language-python">import torch
x = torch.tensor([1, 2, 3, 4])       # shape: (4,)
x1 = x.unsqueeze(0)                  # shape: (1, 4)
x2 = x.unsqueeze(1)                  # shape: (4, 1)</code></pre>
<ul>
<li><code>unsqueeze(0)</code>은 맨 앞에 차원을 추가,  </li>
<li><code>unsqueeze(1)</code>은 두 번째 위치에 차원을 추가합니다.</li>
</ul>
<hr>
<p><strong>정리:</strong><br><code>unsqueeze</code>는 텐서에 새로운 차원을 추가해 shape을 바꿔주는 함수입니다.<br>딥러닝에서 배치 차원 등을 맞출 때 필수적으로 사용합니다[2][3][4][5][7].</p>
<p>Citations:
[1] <a href="https://pplx-res.cloudinary.com/image/private/user_uploads/35150927/dcfdae12-8bbe-4f0b-89ae-d9a629d4a871/image.jpg">https://pplx-res.cloudinary.com/image/private/user_uploads/35150927/dcfdae12-8bbe-4f0b-89ae-d9a629d4a871/image.jpg</a>
[2] <a href="https://pplx-res.cloudinary.com/image/private/user_uploads/35150927/dcfdae12-8bbe-4f0b-89ae-d9a629d4a871/image.jpg">https://pplx-res.cloudinary.com/image/private/user_uploads/35150927/dcfdae12-8bbe-4f0b-89ae-d9a629d4a871/image.jpg</a>
[3] <a href="https://pytorch.org/docs/stable/generated/torch.unsqueeze.html">https://pytorch.org/docs/stable/generated/torch.unsqueeze.html</a>
[4] <a href="https://stackoverflow.com/questions/57237352/what-does-unsqueeze-do-in-pytorch">https://stackoverflow.com/questions/57237352/what-does-unsqueeze-do-in-pytorch</a>
[5] <a href="https://www.codecademy.com/resources/docs/pytorch/tensors/unsqueeze">https://www.codecademy.com/resources/docs/pytorch/tensors/unsqueeze</a>
[6] <a href="https://www.codecademy.com/resources/docs/pytorch/tensor-operations/unsqueeze">https://www.codecademy.com/resources/docs/pytorch/tensor-operations/unsqueeze</a>
[7] <a href="https://www.datasciencebyexample.com/2023/05/19/squeeze-and-unsqueeze-in-pytorch/">https://www.datasciencebyexample.com/2023/05/19/squeeze-and-unsqueeze-in-pytorch/</a>
[8] <a href="https://dnmtechs.com/understanding-the-unsqueeze-function-in-pytorch/">https://dnmtechs.com/understanding-the-unsqueeze-function-in-pytorch/</a>
[9] <a href="https://www.projectpro.io/recipes/unsqueeze-torch-tensor">https://www.projectpro.io/recipes/unsqueeze-torch-tensor</a>
[10] <a href="https://blog.naver.com/je_un/222297587260">https://blog.naver.com/je_un/222297587260</a>
[11] <a href="https://codemax.app/snippet/what-does-unsqueeze-do-in-pytorch-in-python/">https://codemax.app/snippet/what-does-unsqueeze-do-in-pytorch-in-python/</a>
[12] <a href="https://stackoverflow.com/questions/57237352/what-does-unsqueeze-do-in-pytorch/57237378">https://stackoverflow.com/questions/57237352/what-does-unsqueeze-do-in-pytorch/57237378</a>
[13] <a href="https://www.tutorialspoint.com/how-to-squeeze-and-unsqueeze-a-tensor-in-pytorch">https://www.tutorialspoint.com/how-to-squeeze-and-unsqueeze-a-tensor-in-pytorch</a>
[14] <a href="https://iifx.dev/en/articles/332257550">https://iifx.dev/en/articles/332257550</a>
[15] <a href="https://sanghyu.tistory.com/86">https://sanghyu.tistory.com/86</a>
[16] <a href="https://www.slingacademy.com/article/pytorch-squeezing-and-unsqueezing-tensors/">https://www.slingacademy.com/article/pytorch-squeezing-and-unsqueezing-tensors/</a>
[17] <a href="https://stackoverflow.com/questions/57237352/what-does-unsqueeze-do-in-pytorch/65831759">https://stackoverflow.com/questions/57237352/what-does-unsqueeze-do-in-pytorch/65831759</a>
[18] <a href="https://www.youtube.com/watch?v=VTryujXrMOs">https://www.youtube.com/watch?v=VTryujXrMOs</a>
[19] <a href="https://blog.csdn.net/chengyq116/article/details/106962842">https://blog.csdn.net/chengyq116/article/details/106962842</a>
[20] <a href="https://researchdatapod.com/understanding-unsqueeze-in-pytorch-a-beginner-friendly-guide/">https://researchdatapod.com/understanding-unsqueeze-in-pytorch-a-beginner-friendly-guide/</a>
[21] <a href="https://myscale.com/blog/mastering-tensor-manipulation-pytorch-guide-torch-unsqueeze/">https://myscale.com/blog/mastering-tensor-manipulation-pytorch-guide-torch-unsqueeze/</a>
[22] <a href="https://pytorch.org/docs/stable/generated/torch.Tensor.unsqueeze.html">https://pytorch.org/docs/stable/generated/torch.Tensor.unsqueeze.html</a></p>
<hr>
<p>Answer from Perplexity: pplx.ai/share</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[nn.Embedding이란]]></title>
            <link>https://velog.io/@minsing-jin/nn.Embedding%EC%9D%B4%EB%9E%80</link>
            <guid>https://velog.io/@minsing-jin/nn.Embedding%EC%9D%B4%EB%9E%80</guid>
            <pubDate>Mon, 12 May 2025 11:40:56 GMT</pubDate>
            <description><![CDATA[<h1 id="동기">동기</h1>
<p>내가 아는 embedding의 개념은 자연어 혹은 entity들을 사용자가 원하는 의미적 유사도대로 임베딩 space에 수치화 해서 배치하는것으로 알고 있다. </p>
<p>근데 자연어인 lyrics를 바로 nn.Embedding에 통과 시키는것이 아닌 Lyrics가 이미 vector화 되어있는 텐서 상태로 통과 시키는것일까?</p>
<h1 id="lexical-embedding-방법">lexical embedding 방법</h1>
<p><a href="https://tutorials.pytorch.kr/beginner/nlp/word_embeddings_tutorial.html?_gl=1*ety1mu*_ga*NTA5MzY4Nzc3LjE3NDY0MjkxMTg.*_ga_L5NC8SBFPY*czE3NDcwMzQ3MzMkbzEkZzAkdDE3NDcwMzQ3MzMkajYwJGwwJGgw*_ga_LEHG248408*czE3NDcwMzQ3MzQkbzEkZzAkdDE3NDcwMzQ3MzQkajYwJGwwJGgw">embedding의 과정 - Embedding layer 방식의 embedding</a></p>
<h1 id="background">Background</h1>
<h3 id="embedding이란">Embedding이란</h3>
<h3 id="tokenization이란">tokenization이란</h3>
<h3 id="nnembedding의-작동원리">nn.Embedding의 작동원리</h3>
<ul>
<li>&quot;인덱스&quot;에 대해서 lookup table로 만들어주는것</li>
<li>토큰들(수치화가 되었든 안되었든)에 대해서 인덱스에 대해 아무무 tensor 수치로 L</li>
</ul>
<p>Lyrics 는 토크나이저 -&gt; 일반적인게 아닌 g2p 포니밈용 토크나이저
f0 는 128개의 level이고</p>
<p>Frame -&gt; 시간
128개의 Level은 음의 높낮이로 embedding
애초에 시간으로 하는게 아님 잘못된 접근</p>
<p>임베딩과정
[멜로디]</p>
<ol>
<li>프레임(시간)별로 descrete하게 나뉘어진 128 종류의 Level(음의 높낮이)를 토큰화 시킴</li>
</ol>
<p>ex) 20ms로 나뉘어진 f0</p>
<table>
<thead>
<tr>
<th>단계</th>
<th>설명</th>
</tr>
</thead>
<tbody><tr>
<td>원본 시퀀스</td>
<td>도   레   미   미   시   파   도</td>
</tr>
<tr>
<td>토큰화</td>
<td>0    1    2    2    4    5    0   → 정수 인덱스로 변환됨</td>
</tr>
<tr>
<td>임베딩 통과</td>
<td>각 토큰 인덱스가 임베딩 벡터로 변환됨 (예: vec1, vec2, ..., vecN)</td>
</tr>
<tr>
<td>임베딩 결과</td>
<td>vec0 vec1 vec2 vec2 vec4 vec5 vec0 → 각 토큰별 의미 벡터</td>
</tr>
<tr>
<td>Mean Pooling</td>
<td>전체 시퀀스의 임베딩 벡터 평균을 계산하여 길이 1의 벡터로 축소됨</td>
</tr>
<tr>
<td>최종 출력</td>
<td>평균 임베딩 벡터 (예: mean(vec0, vec1, vec2, vec2, vec4, vec5, vec0))</td>
</tr>
</tbody></table>
<ul>
<li>결과물은 도 레 미 미 시 파 도의 representation이 만들어짐</li>
<li>각각의 Vector들로 나오는것은 수치화된 도, 레, 미, 미, 시, 파, 도와 매핑이 되어있음.</li>
</ul>
<h3 id="lookup-table이란">Lookup table이란</h3>
<ul>
<li>token들의 &quot;인덱스&quot;별 vector representation</li>
</ul>
<p><img src="https://velog.velcdn.com/images/minsing-jin/post/de38bb5b-3de9-4dc7-8c95-a3b7331fae83/image.png" alt=""></p>
<pre><code class="language-python">CONTEXT_SIZE = 2
EMBEDDING_DIM = 10
# 셰익스피어 소네트(Sonnet) 2를 사용하겠습니다.
test_sentence = &quot;&quot;&quot;When forty winters shall besiege thy brow,
And dig deep trenches in thy beauty&#39;s field,
Thy youth&#39;s proud livery so gazed on now,
Will be a totter&#39;d weed of small worth held:
Then being asked, where all thy beauty lies,
Where all the treasure of thy lusty days;
To say, within thine own deep sunken eyes,
Were an all-eating shame, and thriftless praise.
How much more praise deserv&#39;d thy beauty&#39;s use,
If thou couldst answer &#39;This fair child of mine
Shall sum my count, and make my old excuse,&#39;
Proving his beauty by succession thine!
This were to be new made when thou art old,
And see thy blood warm when thou feel&#39;st it cold.&quot;&quot;&quot;.split()
# 원래는 입력을 제대로 토큰화(tokenize) 해야하지만 이번엔 간소화하여 진행하겠습니다.
# 튜플로 이루어진 리스트를 만들겠습니다. 각 튜플은 ([ i-CONTEXT_SIZE 번째 단어, ..., i-1 번째 단어 ], 목표 단어)입니다.
ngrams = [
    (
        [test_sentence[i - j - 1] for j in range(CONTEXT_SIZE)],
        test_sentence[i]
    )
    for i in range(CONTEXT_SIZE, len(test_sentence))
]
# 첫 3개의 튜플을 출력하여 데이터가 어떻게 생겼는지 보겠습니다.
print(ngrams[:3])

vocab = set(test_sentence)
word_to_ix = {word: i for i, word in enumerate(vocab)}


class NGramLanguageModeler(nn.Module):

    def __init__(self, vocab_size, embedding_dim, context_size):
        super(NGramLanguageModeler, self).__init__()
        self.embeddings = nn.Embedding(vocab_size, embedding_dim)
        self.linear1 = nn.Linear(context_size * embedding_dim, 128)
        self.linear2 = nn.Linear(128, vocab_size)

    def forward(self, inputs):
        embeds = self.embeddings(inputs).view((1, -1))
        out = F.relu(self.linear1(embeds))
        out = self.linear2(out)
        log_probs = F.log_softmax(out, dim=1)
        return log_probs


losses = []
loss_function = nn.NLLLoss()
model = NGramLanguageModeler(len(vocab), EMBEDDING_DIM, CONTEXT_SIZE)
optimizer = optim.SGD(model.parameters(), lr=0.001)

for epoch in range(10):
    total_loss = 0
    for context, target in ngrams:

        # 첫번째. 모델에 넣어줄 입력값을 준비합니다. (i.e, 단어를 정수 인덱스로
        # 바꾸고 파이토치 텐서로 감싸줍시다.)
        context_idxs = torch.tensor([word_to_ix[w] for w in context], dtype=torch.long)

        # 두번째. 토치는 기울기가 *누적* 됩니다. 새 인스턴스를 넣어주기 전에
        # 기울기를 초기화합니다.
        model.zero_grad()

        # 세번째. 순전파를 통해 다음에 올 단어에 대한 로그 확률을 구합니다.
        log_probs = model(context_idxs)

        # 네번째. 손실함수를 계산합니다. (파이토치에서는 목표 단어를 텐서로 감싸줘야 합니다.)
        loss = loss_function(log_probs, torch.tensor([word_to_ix[target]], dtype=torch.long))

        # 다섯번째. 역전파를 통해 기울기를 업데이트 해줍니다.
        loss.backward()
        optimizer.step()

        # tensor.item()을 호출하여 단일원소 텐서에서 숫자를 반환받습니다.
        total_loss += loss.item()
    losses.append(total_loss)
print(losses)  # 반복할 때마다 손실이 줄어드는 것을 봅시다!

# &quot;beauty&quot;와 같이 특정 단어에 대한 임베딩을 확인하려면,
print(model.embeddings.weight[word_to_ix[&quot;beauty&quot;]])</code></pre>
<blockquote>
<p><a href="https://tutorials.pytorch.kr/beginner/nlp/word_embeddings_tutorial.html?_gl=1*ety1mu*_ga*NTA5MzY4Nzc3LjE3NDY0MjkxMTg.*_ga_L5NC8SBFPY*czE3NDcwMzQ3MzMkbzEkZzAkdDE3NDcwMzQ3MzMkajYwJGwwJGgw*_ga_LEHG248408*czE3NDcwMzQ3MzQkbzEkZzAkdDE3NDcwMzQ3MzQkajYwJGwwJGgw">파이토치 한국어 갤러리 코드 참고</a></p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[왜 nn.Embedding을 하면 transpose를 하는걸까?]]></title>
            <link>https://velog.io/@minsing-jin/%EC%99%9C-nn.Embedding%EC%9D%84-%ED%95%98%EB%A9%B4-transpose%EB%A5%BC-%ED%95%98%EB%8A%94%EA%B1%B8%EA%B9%8C</link>
            <guid>https://velog.io/@minsing-jin/%EC%99%9C-nn.Embedding%EC%9D%84-%ED%95%98%EB%A9%B4-transpose%EB%A5%BC-%ED%95%98%EB%8A%94%EA%B1%B8%EA%B9%8C</guid>
            <pubDate>Mon, 12 May 2025 11:34:32 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/minsing-jin/post/32d7307b-960f-4501-a8a2-46078a49898f/image.png" alt=""></p>
<h1 id="동기">동기</h1>
<p>lyrics encoder과 melodyU encoder를 Summation한 뒤의 shape는 (1, 192, 1) - (b, h, time(seq_len))이다. 요녀석들은 enhanced condition encoder에서 다시 FFT 연산을 하는데 동일하게 nn.Embedding과 transpose를 해주었더니 시원하게 오류가 나온다.</p>
<h1 id="문제정의-및-해결-요약">문제정의 및 해결 요약</h1>
<ol>
<li><p>임베딩된 산출물은 nn.Embedding layer를 통과할 필요가 없음. + nn.Embedding의 정의</p>
<ul>
<li>nn.Embedding은 token별 인덱스를 기반으로 lookup table을 만드는 녀석이다. 고로 lyrics representation과 melodyU representation의 summation은 이미 Embedding의 결과물끼리 더한것이므로 float에다가 인덱스도 없으므로 nn.Embedding을 할수 없다.</li>
</ul>
</li>
</ol>
<ol start="2">
<li>transpose는 nn.Embedding layer를 통과해서 다시 정상화 시키기 위한 녀석<ul>
<li>[b,h,t]가 nn.Embedding layer를 통과하면 [b,t,h]가 되어서 다시 정상화 시키기 위해서 transpose를 시킨다.<ul>
<li>transformer encoder의 ffn이 통과할때는 [b,h,t]로 되어야함.</li>
</ul>
</li>
</ul>
</li>
</ol>
<h1 id="세부설명">세부설명</h1>
<p>PyTorch의 <code>nn.Conv1d</code> 레이어는 입력 텐서의 shape이 <strong>[batch, channels, length]</strong> 형태이길 기대합니다.<br>하지만 자연어 처리 등에서 임베딩을 거친 텐서는 보통 <strong>[batch, length, embedding_dim]</strong> (즉, [배치, 시퀀스 길이, 임베딩 차원]) 형태로 나옵니다.</p>
<p>예를 들어,  </p>
<ul>
<li>임베딩 후 텐서: <code>[batch, time, hidden]</code>  </li>
<li>Conv1d 기대 입력: <code>[batch, hidden, time]</code></li>
</ul>
<p>따라서, <strong>Conv1d에 입력하기 전에 <code>transpose</code> 또는 <code>permute</code>를 사용해 두 차원의 순서를 바꿔줘야 합니다</strong>.  
이렇게 해야만 Conv1d가 임베딩 차원을 채널로 인식하고, 시퀀스 길이를 커널이 따라가며 합성곱 연산을 올바르게 수행할 수 있습니다[6][8].</p>
<blockquote>
<p>&quot;In pytorch your input shape of[6] should actually be[6] where the feature length is represented by the channel dimension and sequence length is the length dimension. Then you can define your conv1d with in/out channels of 768 and 100 respectively to get an output of[6].<br>... you can convert it to the correct shape with Tensor.transpose.&quot;[6]</p>
</blockquote>
<p>즉,  </p>
<ul>
<li><strong>transpose는 임베딩 결과([batch, seq_len, hidden])를 Conv1d가 기대하는 입력([batch, hidden, seq_len])으로 맞추기 위해 반드시 필요합니다.</strong></li>
</ul>
<p>이것이 바로 Conv1d 앞에서 transpose를 하는 이유입니다.</p>
<p>Citations:
[1] <a href="https://cumulu-s.tistory.com/29">https://cumulu-s.tistory.com/29</a>
[2] <a href="https://pytorch.org/docs/stable/generated/torch.nn.ConvTranspose1d.html">https://pytorch.org/docs/stable/generated/torch.nn.ConvTranspose1d.html</a>
[3] <a href="https://velog.io/@gilson/View-and-Reshape-VS-permute-and-transpose">https://velog.io/@gilson/View-and-Reshape-VS-permute-and-transpose</a>
[4] <a href="https://jisuhan.tistory.com/128">https://jisuhan.tistory.com/128</a>
[5] <a href="https://westlife0615.tistory.com/257">https://westlife0615.tistory.com/257</a>
[6] <a href="https://stackoverflow.com/questions/62372938/understanding-input-shape-to-pytorch-conv1d">https://stackoverflow.com/questions/62372938/understanding-input-shape-to-pytorch-conv1d</a>
[7] <a href="https://dacon.io/forum/406022">https://dacon.io/forum/406022</a>
[8] <a href="https://discuss.pytorch.org/t/understanding-input-shape-to-pytorch-conv1d/85429">https://discuss.pytorch.org/t/understanding-input-shape-to-pytorch-conv1d/85429</a>
[9] <a href="https://www.thespacemoon.com/2021/03/03/pytorch-view-reshape-transpose/">https://www.thespacemoon.com/2021/03/03/pytorch-view-reshape-transpose/</a>
[10] <a href="https://sksdudtjs.tistory.com/50">https://sksdudtjs.tistory.com/50</a>
[11] <a href="https://iamseungjun.tistory.com/15">https://iamseungjun.tistory.com/15</a>
[12] <a href="https://jimmy-ai.tistory.com/378">https://jimmy-ai.tistory.com/378</a>
[13] <a href="https://stackoverflow.com/questions/69915792/pytorch-conv1d-gives-different-size-to-convtranspose1d">https://stackoverflow.com/questions/69915792/pytorch-conv1d-gives-different-size-to-convtranspose1d</a>
[14] <a href="https://wikidocs.net/64779">https://wikidocs.net/64779</a>
[15] <a href="https://imlim0813.tistory.com/58">https://imlim0813.tistory.com/58</a>
[16] <a href="https://velog.io/@workhard/lstm-9.-pytorch-%EC%82%AC%EC%9A%A9%EB%B2%95">https://velog.io/@workhard/lstm-9.-pytorch-%EC%82%AC%EC%9A%A9%EB%B2%95</a>
[17] <a href="https://wikidocs.net/217064">https://wikidocs.net/217064</a>
[18] <a href="https://leeejihyun.tistory.com/37">https://leeejihyun.tistory.com/37</a></p>
<hr>
<p>Answer from Perplexity: pplx.ai/share</p>
<hr>
<h1 id="embedding하면-shape가-달라지는-근거">embedding하면 shape가 달라지는 근거</h1>
<p>임베딩 레이어(Embedding Layer)를 거친 텐서의 shape이 <code>[batch, length, embedding_dim]</code>이 되는 이유는 임베딩 레이어의 동작 방식과 자연어 처리 데이터의 구조 때문입니다.</p>
<h3 id="1-임베딩-레이어의-입력과-출력-구조">1. 임베딩 레이어의 입력과 출력 구조</h3>
<ul>
<li><p>임베딩 레이어는 <strong>정수 인덱스 시퀀스</strong>(예: 단어 인덱스)를 입력으로 받습니다.</p>
</li>
<li><p>입력 shape: <code>(batch_size, sequence_length)</code>  </p>
<ul>
<li><code>batch_size</code>: 한 번에 처리하는 문장(또는 샘플)의 개수  </li>
<li><code>sequence_length</code>: 각 문장의 토큰(단어) 수</li>
</ul>
</li>
<li><p>임베딩 레이어는 각 인덱스를 임베딩 테이블에서 벡터로 변환합니다.</p>
</li>
<li><p>출력 shape: <code>(batch_size, sequence_length, embedding_dim)</code>  </p>
<ul>
<li><code>embedding_dim</code>: 각 단어를 표현하는 벡터의 차원</li>
</ul>
</li>
</ul>
<blockquote>
<p>&quot;Embedding()은 (number of samples, input_length)인 2D 정수 텐서를 입력받습니다. 이 때 각 sample은 정수 인코딩이 된 결과로, 정수의 시퀀스입니다. Embedding()은 워드 임베딩 작업을 수행하고 (number of samples, input_length, embedding word dimentionality)인 3D 실수 텐서를 리턴합니다.&quot;  </p>
<ul>
<li>[위키독스, 케라스 임베딩 층 설명][5][6]</li>
</ul>
</blockquote>
<h3 id="2-자연어-처리에서-임베딩-레이어-사용-예시">2. 자연어 처리에서 임베딩 레이어 사용 예시</h3>
<p>예를 들어,  </p>
<ul>
<li>입력: <code>[[1,[2][3], [4, 5,6]]</code> (batch_size=2, sequence_length=3)</li>
<li>임베딩 차원(embedding_dim)=8이라면  </li>
<li>출력: <code>(2, 3, 8)</code>  <ul>
<li>각 단어 인덱스가 8차원 벡터로 변환됨</li>
</ul>
</li>
</ul>
<h3 id="3-왜-이런-구조가-되는가">3. 왜 이런 구조가 되는가?</h3>
<ul>
<li><strong>각 문장(샘플)은 여러 단어(토큰)로 구성</strong>  </li>
<li><strong>각 단어는 하나의 임베딩 벡터로 변환</strong>  </li>
<li>따라서,  <ul>
<li>첫 번째 차원: 배치(문장)  </li>
<li>두 번째 차원: 시퀀스 길이(토큰 수)  </li>
<li>세 번째 차원: 임베딩 벡터 차원</li>
</ul>
</li>
</ul>
<h3 id="4-공식-문서-및-교재-근거">4. 공식 문서 및 교재 근거</h3>
<ul>
<li>&quot;Embedding 층은 크기가 (samples, sequence_length, embedding_dimensionality)인 3D 실수형 텐서를 반환한다.&quot;<br>[위키독스][5][6]</li>
<li>&quot;임베딩 레이어는 입력 시퀀스의 각 인덱스를 임베딩 테이블에서 벡터로 변환하여 (배치, 시퀀스 길이, 임베딩 차원) 형태로 출력한다.&quot;<br>[simling.tistory][3][5]</li>
</ul>
<hr>
<p><strong>정리:</strong><br>임베딩 레이어는 입력이 <code>[batch, sequence_length]</code>일 때, 각 인덱스를 임베딩 벡터로 변환해 <code>[batch, sequence_length, embedding_dim]</code> 형태의 텐서를 반환합니다. 이 구조는 자연어 처리에서 각 문장(배치), 각 단어(시퀀스), 각 임베딩 벡터(임베딩 차원)로 구성되기 때문입니다[5][6][3].</p>
<p>Citations:
[1] <a href="https://tech.kakao.com/posts/585">https://tech.kakao.com/posts/585</a>
[2] <a href="https://wikidocs.net/31379">https://wikidocs.net/31379</a>
[3] <a href="https://simpling.tistory.com/1">https://simpling.tistory.com/1</a>
[4] <a href="https://ebbnflow.tistory.com/154">https://ebbnflow.tistory.com/154</a>
[5] <a href="https://ingu627.github.io/keras/keras_ch6_org_1/">https://ingu627.github.io/keras/keras_ch6_org_1/</a>
[6] <a href="https://wikidocs.net/33793">https://wikidocs.net/33793</a>
[7] <a href="https://wikidocs.net/37001">https://wikidocs.net/37001</a>
[8] <a href="https://velog.io/@oilyhand_01/%EB%94%A5%EB%9F%AC%EB%8B%9D-%EA%B8%B0%EC%B4%88-14">https://velog.io/@oilyhand_01/%EB%94%A5%EB%9F%AC%EB%8B%9D-%EA%B8%B0%EC%B4%88-14</a>
[9] <a href="https://velog.io/@yenaryu/%EC%9E%90%EC%97%B0%EC%96%B4%EC%B2%98%EB%A6%AC-%EC%9E%91%EC%82%AC%EA%B0%80-%EC%9D%B8%EA%B3%B5%EC%A7%80%EB%8A%A5-%EB%A7%8C%EB%93%A4%EA%B8%B0">https://velog.io/@yenaryu/%EC%9E%90%EC%97%B0%EC%96%B4%EC%B2%98%EB%A6%AC-%EC%9E%91%EC%82%AC%EA%B0%80-%EC%9D%B8%EA%B3%B5%EC%A7%80%EB%8A%A5-%EB%A7%8C%EB%93%A4%EA%B8%B0</a>
[10] <a href="https://heeya-stupidbutstudying.tistory.com/entry/DL-%EC%9E%90%EC%97%B0%EC%96%B4-%EC%B2%98%EB%A6%AC%EC%97%90%EC%84%9C%EC%9D%98-%EB%8B%A8%EC%96%B4-%ED%91%9C%ED%98%84-Word-Embedding">https://heeya-stupidbutstudying.tistory.com/entry/DL-%EC%9E%90%EC%97%B0%EC%96%B4-%EC%B2%98%EB%A6%AC%EC%97%90%EC%84%9C%EC%9D%98-%EB%8B%A8%EC%96%B4-%ED%91%9C%ED%98%84-Word-Embedding</a>
[11] <a href="https://blog.naver.com/iwin1203/222010971529">https://blog.naver.com/iwin1203/222010971529</a>
[12] <a href="https://aigaeddo.tistory.com/37">https://aigaeddo.tistory.com/37</a>
[13] <a href="https://www.youtube.com/watch?v=BbBCLPl0x_U">https://www.youtube.com/watch?v=BbBCLPl0x_U</a>
[14] <a href="https://www.ibm.com/kr-ko/think/topics/vector-embedding">https://www.ibm.com/kr-ko/think/topics/vector-embedding</a>
[15] <a href="https://sjh9708.tistory.com/231">https://sjh9708.tistory.com/231</a>
[16] <a href="https://dusanbaek.tistory.com/99">https://dusanbaek.tistory.com/99</a>
[17] <a href="https://wikidocs.net/22660">https://wikidocs.net/22660</a>
[18] <a href="https://cumulu-s.tistory.com/4">https://cumulu-s.tistory.com/4</a>
[19] <a href="https://soyoung-new-challenge.tistory.com/32">https://soyoung-new-challenge.tistory.com/32</a></p>
<hr>
<p>Answer from Perplexity: pplx.ai/share</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[딥러닝 용어 정리]]></title>
            <link>https://velog.io/@minsing-jin/%EB%94%A5%EB%9F%AC%EB%8B%9D-%EC%9A%A9%EC%96%B4-%EC%A0%95%EB%A6%AC</link>
            <guid>https://velog.io/@minsing-jin/%EB%94%A5%EB%9F%AC%EB%8B%9D-%EC%9A%A9%EC%96%B4-%EC%A0%95%EB%A6%AC</guid>
            <pubDate>Sun, 11 May 2025 13:22:56 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/minsing-jin/post/dadeec1a-6a7d-4313-9c7d-e2a088820873/image.png" alt=""></p>
<h1 id="b-h-timeseq_len">[b, h, time(seq_len)]</h1>
<ul>
<li><p>Batch size</p>
</li>
<li><p>hidden channel</p>
</li>
<li><p>sequence length</p>
</li>
</ul>
<h1 id="임베딩-차원">임베딩 차원</h1>
<ul>
<li>데이터가 표현되는백터 공간의 차원수=</li>
</ul>
<h1 id="nnembedding">nn.Embedding</h1>
<h1 id="input-channel">input channel</h1>
]]></description>
        </item>
        <item>
            <title><![CDATA[Mean pooling - 임베딩 차원 맞춰보자이]]></title>
            <link>https://velog.io/@minsing-jin/Mean-pooling-%EC%9E%84%EB%B2%A0%EB%94%A9-%EC%B0%A8%EC%9B%90-%EB%A7%9E%EC%B6%B0%EB%B3%B4%EC%9E%90%EC%9D%B4</link>
            <guid>https://velog.io/@minsing-jin/Mean-pooling-%EC%9E%84%EB%B2%A0%EB%94%A9-%EC%B0%A8%EC%9B%90-%EB%A7%9E%EC%B6%B0%EB%B3%B4%EC%9E%90%EC%9D%B4</guid>
            <pubDate>Sat, 10 May 2025 14:33:50 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/minsing-jin/post/fdb95cb6-e315-4a89-ba47-67e99cbb6794/image.png" alt=""></p>
<h1 id="문제">문제</h1>
<p>Lyrics와 quantized f0된 melody를 FFT encoding을 하면 [batch size, hidden channel, time(seq_len)-&gt; 시퀀스 Length]가 나온다.
sequence length가 다를 수도 있지 않누??</p>
<h1 id="해결">해결</h1>
<p>mean pooling을 하세유~~</p>
<p>hidden channel의 각 feature마다 Mean을 때려서 seq len을 1로 맞춤 -&gt; melody도 마찬가지</p>
<p>ex)</p>
<pre><code class="language-python">  ------hidden channel---------
김  
민
재
짜
스
  mean mean mean mean mean mean ....
</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[파이썬 getter -> __getitem__이란?]]></title>
            <link>https://velog.io/@minsing-jin/%ED%8C%8C%EC%9D%B4%EC%8D%AC-getter-getitem%EC%9D%B4%EB%9E%80</link>
            <guid>https://velog.io/@minsing-jin/%ED%8C%8C%EC%9D%B4%EC%8D%AC-getter-getitem%EC%9D%B4%EB%9E%80</guid>
            <pubDate>Mon, 05 May 2025 07:19:35 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/minsing-jin/post/e8e51565-53b0-490a-966b-bf7fb019bcb9/image.png" alt=""></p>
<p><code>__getitem__</code>은 파이썬에서 <strong>객체가 인덱싱(<code>obj[key]</code>) 또는 슬라이싱(<code>obj[start:stop]</code>)될 때 호출되는 메서드</strong>입니다. 이 메서드를 클래스 안에 정의하면, 해당 클래스의 인스턴스를 리스트나 딕셔너리처럼 사용할 수 있습니다.</p>
<hr>
<h3 id="📌-기본-사용법">📌 기본 사용법</h3>
<pre><code class="language-python">class MyList:
    def __init__(self, data):
        self.data = data

    def __getitem__(self, index):
        print(f&quot;Called with index: {index}&quot;)
        return self.data[index]

my_list = MyList([10, 20, 30])
print(my_list[1])  # =&gt; Called with index: 1
                   # =&gt; 20</code></pre>
<hr>
<h3 id="🎯-주요-특징">🎯 주요 특징</h3>
<ul>
<li><code>obj[key]</code>가 호출되면 <code>obj.__getitem__(key)</code>가 자동으로 호출됩니다.</li>
<li><code>key</code>는 정수뿐만 아니라 슬라이스(slice), 튜플, 문자열 등도 될 수 있습니다.</li>
</ul>
<hr>
<h3 id="✅-슬라이싱도-지원-가능">✅ 슬라이싱도 지원 가능</h3>
<pre><code class="language-python">class MyList:
    def __init__(self, data):
        self.data = data

    def __getitem__(self, index):
        print(f&quot;Index received: {index}&quot;)
        return self.data[index]

lst = MyList([1, 2, 3, 4, 5])
print(lst[1:4])  # 슬라이스 객체(slice(1,4,None))가 전달됨</code></pre>
<hr>
<h3 id="📦-예제-2차원-배열-흉내내기">📦 예제: 2차원 배열 흉내내기</h3>
<pre><code class="language-python">class Matrix:
    def __init__(self, rows):
        self.rows = rows

    def __getitem__(self, index):
        return self.rows[index]

m = Matrix([[1, 2], [3, 4]])
print(m[0][1])  # 2</code></pre>
<hr>
<h3 id="⚠️-주의사항">⚠️ 주의사항</h3>
<ul>
<li><code>__getitem__</code>은 <strong>읽기 전용</strong>입니다. 쓰기를 하려면 <code>__setitem__</code>을 정의해야 합니다.</li>
<li><code>KeyError</code>, <code>IndexError</code> 등을 적절히 처리해주는 것이 좋습니다.</li>
</ul>
<hr>
<p>궁금하다면 <code>__setitem__</code>, <code>__delitem__</code> 도 함께 설명해줄 수 있어요. 추가로 알려드릴까요?</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[중첩된 여러 자료구조의 Element에 Func mapping하는법]]></title>
            <link>https://velog.io/@minsing-jin/%EC%A4%91%EC%B2%A9%EB%90%9C-%EC%97%AC%EB%9F%AC-%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0%EC%9D%98-Element%EC%97%90-Func-mapping%ED%95%98%EB%8A%94%EB%B2%95</link>
            <guid>https://velog.io/@minsing-jin/%EC%A4%91%EC%B2%A9%EB%90%9C-%EC%97%AC%EB%9F%AC-%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0%EC%9D%98-Element%EC%97%90-Func-mapping%ED%95%98%EB%8A%94%EB%B2%95</guid>
            <pubDate>Sun, 04 May 2025 14:41:35 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/minsing-jin/post/28c8fdd6-980e-4ad8-bd68-f32f5f3613c5/image.png" alt=""></p>
<p>nest_map을 만드세유</p>
<pre><code class="language-python">def nested_map(struct, map_fn):
    if isinstance(struct, tuple):
        return tuple(nested_map(x, map_fn) for x in struct)
    if isinstance(struct, list):
        return [nested_map(x, map_fn) for x in struct]
    if isinstance(struct, dict):
        return {k: nested_map(v, map_fn) for k, v in struct.items()}
    return map_fn(struct)</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[Stack -> Min value구하기]]></title>
            <link>https://velog.io/@minsing-jin/Stack-Min-value%EA%B5%AC%ED%95%98%EA%B8%B0</link>
            <guid>https://velog.io/@minsing-jin/Stack-Min-value%EA%B5%AC%ED%95%98%EA%B8%B0</guid>
            <pubDate>Fri, 28 Mar 2025 08:15:33 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/minsing-jin/post/40d5cf2a-99dd-4a15-899b-3b1f6fa5e747/image.png" alt=""></p>
<h1 id="직관">직관</h1>
<h2 id="sol-1-두개의-arr">Sol 1. 두개의 arr</h2>
<ol>
<li>arr 2개</li>
</ol>
<ul>
<li>stack</li>
<li>min_stack</li>
</ul>
<ol start="2">
<li>stack은 그대로 구현</li>
<li>min_stack은 stack이 반복될때마다 계속 반복적으로 최소값을 각각의 idx로 할당</li>
</ol>
<p>top이라는 Int idx를 Cursor로 활용해서 stack을 구현</p>
<h2 id="sol-2-하나의-arr로-수학적-트릭">Sol 2. 하나의 arr로 수학적 트릭</h2>
<p>홀수번째 Idx는 stack
짝수번째 idx는 min_stack</p>
<h2 id="sol-2-하나의-arr-수학적-트릭-2---아직-70">Sol 2. 하나의 arr 수학적 트릭 2 -&gt; 아직 70%</h2>
<ul>
<li><p>오직 min stack만 꺼낼 수 있는 수학적 트릭임!!</p>
</li>
<li><p>Push 연산</p>
</li>
<li><blockquote>
<p>2x - minElem</p>
</blockquote>
</li>
<li><blockquote>
<p>새로운 input x보다 작은지 큰지를 판별 -&gt; 나중에 pop 할때 min value를 복원해야할지에 대한 여부를 결정해줌
단, 새로 Push된 값이 min value보다 크다면 stack에 그냥 넣어줌</p>
</blockquote>
</li>
<li><p>Pop 연산</p>
</li>
<li><blockquote>
<p>2x-prevMinEle(stack의 이전값)</p>
</blockquote>
</li>
<li><blockquote>
<p>새로운 최소값은 2<em>minEle - y = 2</em>x - (2*x - prevMinEle) = prevMinEle로 계산됩니다.
단, pop된 값이 min value보다 크다면 그대로 진행</p>
</blockquote>
</li>
</ul>
<pre><code class="language-//">// all operations in O(1) time and O(1) extra space.

#include &lt;iostream&gt;
#include &lt;stack&gt;
using namespace std;

// A user defined stack that supports getMin() in
// addition to push(), pop() and peek()
class SpecialStack {
  private:
    stack&lt;int&gt; s;
    int minEle;

  public:
    SpecialStack() {
        minEle = -1;
    }

    // Add an element to the top of Stack
    void push(int x) {
        if (s.empty()) {
            minEle = x;
            s.push(x);
        }

        // If new number is less than minEle
        else if (x &lt; minEle) {
            s.push(2 * x - minEle);
            minEle = x;
        }

        else {
            s.push(x);
        }
    }

    // Remove the top element from the Stack
    void pop() {
        if (s.empty()) {
            return ;
        }

        int top = s.top();
        s.pop();

        // Minimum will change, if the minimum element
        // of the stack is being removed.
        if (top &lt; minEle) {
            minEle = 2 * minEle - top;
        }
    }

    // Returns top element of the Stack
    int peek() {
        if (s.empty()) {
            return -1;
        }

        int top = s.top();

        // If minEle &gt; top means minEle stores value of top.
        return (minEle &gt; top) ? minEle : top;
    }

    // Finds minimum element of Stack
    int getMin() {
        if (s.empty())
            return -1;

        // variable minEle stores the minimum element
        // in the stack.
        return minEle;
    }
};

int main() {
    SpecialStack ss;

    // Function calls
    ss.push(2);
    ss.push(3);
    cout &lt;&lt; ss.peek() &lt;&lt; &quot; &quot;;
    ss.pop();
    cout &lt;&lt; ss.getMin() &lt;&lt; &quot; &quot;;
    ss.push(1);
    cout &lt;&lt; ss.getMin() &lt;&lt; &quot; &quot;;
}</code></pre>
<h3 id="push가-동작하는-원리">push가 동작하는 원리</h3>
<pre><code>How 2*x – minEle is less than x in push()? 


x &lt; minEle which means x – minEle &lt; 0 


// Adding x on both sides
x – minEle + x &lt; 0 + x 
2*x – minEle &lt; x 
We can conclude 2*x – minEle &lt; new minEle </code></pre><h3 id="pop이-복원되는-이유">pop이 복원되는 이유</h3>
<pre><code>How previous minimum element, prevMinEle is, 2*minEle – y
in pop() is y the popped element?


 // We pushed y as 2x – prevMinEle. Here 
// prevMinEle is minEle before y was inserted


y = 2*x – prevMinEle  


// Value of minEle was made equal to x
minEle = x 


new minEle = 2 * minEle – y 
                   = 2*x – (2*x – prevMinEle)
                   = prevMinEle // This is what we wanted
</code></pre><p><a href="https://www.geeksforgeeks.org/design-a-stack-that-supports-getmin-in-o1-time-and-o1-extra-space/">https://www.geeksforgeeks.org/design-a-stack-that-supports-getmin-in-o1-time-and-o1-extra-space/</a></p>
<h2 id="sol-3-linked-list">Sol 3. Linked list</h2>
<h2 id="sol4-stack-std사용사용">Sol4. stack std사용사용</h2>
]]></description>
        </item>
        <item>
            <title><![CDATA[베이즈 정리의 해석]]></title>
            <link>https://velog.io/@minsing-jin/%EB%B2%A0%EC%9D%B4%EC%A6%88-%EC%A0%95%EB%A6%AC%EC%9D%98-%ED%95%B4%EC%84%9D</link>
            <guid>https://velog.io/@minsing-jin/%EB%B2%A0%EC%9D%B4%EC%A6%88-%EC%A0%95%EB%A6%AC%EC%9D%98-%ED%95%B4%EC%84%9D</guid>
            <pubDate>Mon, 03 Mar 2025 07:22:20 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/minsing-jin/post/ca3bedce-1ee0-4516-af38-81a9ec7d55cb/image.png" alt=""></p>
<h1 id="핵심-내용">핵심 내용</h1>
<p>필자의 해석이므로 틀린부분이 있다면 지적해주세요!</p>
<ul>
<li><p>베이지안 관점의 확률: 기존의 evidence(이미 일어난 단서들, 확률로 표현)와 hypothesis()를 기반으로 미래의 &#39;가능성&#39;, 즉 미래의 불확실성을 <strong>예측</strong>하는 개념이다. (귀납)</p>
</li>
<li><blockquote>
<p>기존: 특정 사건들에 대한 관측값의 빈도 기반으로 현상을 <strong>해석</strong>(연역)</p>
</blockquote>
</li>
<li><p>Evidence: 새로운 정보, <strong>단서</strong></p>
</li>
<li><p>Hypothesis(prior, 사전확률): 어떤 사건이 발생했다는 주장</p>
</li>
<li><p>posterior(사후 확률): E(새로운 정보)가 들어왔을때 H가 업데이트 되는 확률(이것으로 미래를 예측한다)</p>
</li>
</ul>
<p>-&gt; evidence를 관측하기 전후의 내주장에 대한 신뢰도</p>
<p><img src="https://velog.velcdn.com/images/minsing-jin/post/e7e99f58-be72-4626-85de-403ceaa5907e/image.png" alt=""></p>
<h1 id="베이즈정리의-정의">베이즈정리의 정의</h1>
<ul>
<li>베이즈 정리: 새로운 정보를 토대로 어떤 사건이 발생했다는 주장에 대한 신뢰도(예측할 미래에 대한 가능성)를 <strong>갱신</strong>해 나가는 방법</li>
</ul>
<p><a href="https://angeloyeo.github.io/2020/01/09/Bayes_rule.html">공돌이의 수학노트 고트 해석</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[기댓값 vs 평균, 왜 llm paper에서는 기댓값을 사용할까?]]></title>
            <link>https://velog.io/@minsing-jin/%EA%B8%B0%EB%8C%93%EA%B0%92-vs-%ED%8F%89%EA%B7%A0-%EC%99%9C-llm-paper%EC%97%90%EC%84%9C%EB%8A%94-%EA%B8%B0%EB%8C%93%EA%B0%92%EC%9D%84-%EC%82%AC%EC%9A%A9%ED%95%A0%EA%B9%8C</link>
            <guid>https://velog.io/@minsing-jin/%EA%B8%B0%EB%8C%93%EA%B0%92-vs-%ED%8F%89%EA%B7%A0-%EC%99%9C-llm-paper%EC%97%90%EC%84%9C%EB%8A%94-%EA%B8%B0%EB%8C%93%EA%B0%92%EC%9D%84-%EC%82%AC%EC%9A%A9%ED%95%A0%EA%B9%8C</guid>
            <pubDate>Mon, 03 Mar 2025 07:01:54 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/minsing-jin/post/d82896c8-70f9-4d82-9e17-b98a54cd1ec7/image.png" alt=""></p>
<h1 id="기댓값-vs-평균">기댓값 vs 평균</h1>
<ul>
<li><p>기댓값: 미래를 예측하기 위해서 확률들을 기반으로 구한값, 미래 가능한 결과에 대한 예측값(귀납-경험/관찰/증거에 기반한 미래 예측 판단)</p>
</li>
<li><p>평균: 빈도주의 관점으로 기존 데이터들을 가지고 구한값, 이미 관측된 데이터를 가지고 확실한 값(연역-이미 알고있는 데이터 가지고 판단)</p>
</li>
</ul>
<p>왜 twist smc, llm에서는 기댓값을 쓰는가? 평균이랑 기댓값은 똑같은거 아니누?
llm은 사전 정보들을 기반으로 불확실한 수치를 계속해서 prior를 업데이트하는 베이지안 관점이기 때문에 기댓값을 사용한다. </p>
<h1 id="이것이-가우시안-베이지안의-관점-차이">이것이 가우시안 베이지안의 관점 차이?!</h1>
<p>가우시안: 빈도와 같은 관측값으로부터 현상 분석 및 결론(정규분포)
베이지안: 경험적인 확률들 기반으로 미래 예측(확률)</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[여러분은 AI 답변을 어떻게 신뢰하시나요?]]></title>
            <link>https://velog.io/@minsing-jin/%EC%97%AC%EB%9F%AC%EB%B6%84%EC%9D%80-AI-%EB%8B%B5%EB%B3%80%EC%9D%84-%EC%96%B4%EB%96%BB%EA%B2%8C-%EC%8B%A0%EB%A2%B0%ED%95%98%EC%8B%9C%EB%82%98%EC%9A%94</link>
            <guid>https://velog.io/@minsing-jin/%EC%97%AC%EB%9F%AC%EB%B6%84%EC%9D%80-AI-%EB%8B%B5%EB%B3%80%EC%9D%84-%EC%96%B4%EB%96%BB%EA%B2%8C-%EC%8B%A0%EB%A2%B0%ED%95%98%EC%8B%9C%EB%82%98%EC%9A%94</guid>
            <pubDate>Mon, 10 Feb 2025 07:03:43 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/minsing-jin/post/f50715c8-f80f-4f95-9c01-5f600ca1bc5b/image.png" alt=""></p>
<p>기존에는 Perplexity나 ChatGPT 같은 AI 챗봇을 활용할 때, 답변의 신뢰성을 확인하려면 출처 링크를 일일이 클릭하고 내용을 직접 찾아야 했습니다. 환각현상(Hallucination)으로 인한 잘못된 정보까지 검증하려면 추가적인 시간과 에너지가 필요했죠.
그러던중 ai가 참고했다는 원문출처를 클릭하면 답변에서 참고한부분을 자동으로 찾아주는 툴이 필요하다고 생각했습니다.</p>
<p>이에 저희는 ClueHunter는 AI가 참고한 출처를 단번에 검증할 수 있도록 도와주는 크롬 익스텐션을 개발했습니다. </p>
<p>기존에는 Perplexity에서 제공하는 출처 링크를 하나씩 클릭하고, 내용을 직접 찾아야 했다면, 이제는 ClueHunter가 출처 페이지를 자동 스크롤 &amp; 핵심 내용 강조 표시까지 해줍니다!
<img src="https://velog.velcdn.com/images/minsing-jin/post/9f628aa9-f7a7-4035-89f1-f924e228e1e2/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/minsing-jin/post/89ae3e45-c1e0-422b-96d0-c1f9cab19e45/image.png" alt=""></p>
<p>현재는 Perplexity 전용 크롬 익스텐션으로 제공되지만, 앞으로 ChatGPT, Claude AI 등 다양한 AI 챗봇에서도 활용할 수 있도록 확장할 예정입니다.</p>
<p>🛠 ClueHunter는 오픈소스 프로젝트로, 여러분의 피드백을 환영합니다!</p>
<ul>
<li><a href="https://chromewebstore.google.com/detail/cluehunter-perplexity/mhkmlamlmdlkgpmfgbdnhohbggldekjf?hl=ko">ClueHunter 크롬 익스텐션</a></li>
<li><a href="https://github.com/RiceBobb/ClueHunter.js">ClueHunter.js</a></li>
<li><a href="https://github.com/RiceBobb/ClueHunter-Perplexity">ClueHunter-Perpelxity</a></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[모델이 학습한다는 의미]]></title>
            <link>https://velog.io/@minsing-jin/%EB%AA%A8%EB%8D%B8%EC%9D%B4-%ED%95%99%EC%8A%B5%ED%95%9C%EB%8B%A4%EB%8A%94-%EC%9D%98%EB%AF%B8</link>
            <guid>https://velog.io/@minsing-jin/%EB%AA%A8%EB%8D%B8%EC%9D%B4-%ED%95%99%EC%8A%B5%ED%95%9C%EB%8B%A4%EB%8A%94-%EC%9D%98%EB%AF%B8</guid>
            <pubDate>Fri, 31 Jan 2025 09:15:56 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/minsing-jin/post/5bfafa4a-5316-49bf-bca9-0490d45646dc/image.png" alt=""></p>
<p>아직 처음 배운거라 오류가 있다면 알려주세용</p>
<h1 id="ml-넓은-의미로써의-학습">ML, 넓은 의미로써의 학습</h1>
<p>모델의 가중치값을 조정해나아가는 일련의 과정</p>
<h1 id="llm에서의-학습">LLM에서의 학습</h1>
<p>모델의 단어들의 관계나 문장의 의미를 백터로 변환하는 &quot;방법&quot;을 배운 상태</p>
<h1 id="dae-denosing-autoencoder">DAE (Denosing AutoEncoder)</h1>
<ol>
<li>transformer가 문장들을 임베딩하여 백터화하고 단어들의 관계를 학습함. </li>
<li>그리고 마스킹과 복원하는 작업을 통해 각 단어의 문맥적 의미를 배우고 문장의 의미를 백터화 하는 능력 향상</li>
<li>학습된 모델은 문장의 임베딩 백터로 변환</li>
</ol>
<p>-&gt; Chatgpt피셜이라 교차검증 필요
-&gt; 백터화하는 과정과 denosing하는 과정은 따로 있는것 같다.</p>
]]></description>
        </item>
    </channel>
</rss>