<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>fragrance_0.log</title>
        <link>https://velog.io/</link>
        <description>@fragrance_0의 개발로그</description>
        <lastBuildDate>Mon, 11 Mar 2024 07:50:49 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>fragrance_0.log</title>
            <url>https://velog.velcdn.com/images/fragrance_0/profile/c6368ba2-142e-44ad-912b-4801e8d9ae8c/image.jpg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. fragrance_0.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/fragrance_0" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[[논문 리뷰] ELMo]]></title>
            <link>https://velog.io/@fragrance_0/%EB%85%BC%EB%AC%B8-%EB%A6%AC%EB%B7%B0-ELMo</link>
            <guid>https://velog.io/@fragrance_0/%EB%85%BC%EB%AC%B8-%EB%A6%AC%EB%B7%B0-ELMo</guid>
            <pubDate>Mon, 11 Mar 2024 07:50:49 GMT</pubDate>
            <description><![CDATA[<blockquote>
<h3 id="1-nlp">1) NLP</h3>
<p><strong>word embedding</strong>
<strong>ELMo (<a href="https://arxiv.org/abs/1802.05365">https://arxiv.org/abs/1802.05365</a>)</strong></p>
</blockquote>
<h2 id="elmo-embeddings-from-language-models">ELMo: Embeddings from Language Models</h2>
<hr>
<p><img src="https://velog.velcdn.com/images/fragrance_0/post/da47463b-e195-43cd-b133-82356dde3396/image.png" alt=""></p>
<ul>
<li>토큰으로 임베딩한 단어를 두개의 LSTM에 입력하는 형태</li>
</ul>
<ul>
<li>Embeddings from Language Models. 임베딩 방법 중 일종인데, 사전 훈련된 언어모델이라는 것이 가장 큰 특징</li>
</ul>
<br>

<h2 id="method">Method</h2>
<hr>
<ul>
<li><strong>biLM</strong><ul>
<li>기존의 LM과 달리, 양방향을 모두 활용해 임베딩을 얻는다.</li>
<li>순방향 언어모델 +역방향 언어모델</li>
<li>문맥을 온전히 고려해서 임베딩을 얻을 수 있다.</li>
</ul>
</li>
<li>장점<ul>
<li>쉽게 다른 모델에 붙여쓸 수 잇다</li>
<li>semi-supervised learning 가능</li>
</ul>
</li>
</ul>
<br>

<h2 id="result">Result</h2>
<hr>
<ul>
<li>단순히 ELMo를 붙이는 것 만으로도 SQuAD, SNLI 등의 태스크에서 1~4%p가량의 성능향상을 보임</li>
<li>ELMo는 biLM을 통해 워드 임베딩을 얻으며, 그 덕분에 문맥을 온전히 고려할 수 있다.</li>
</ul>
<br>

<h2 id="conclusion">Conclusion</h2>
<hr>
<ol>
<li>biLM을 사용해 높은 수준의 context를 학습하는 ELMO model을 제안</li>
<li>ELMo model을 사용하면, 대부분의 NLP task에서 성능향상</li>
<li>layer에서 층이 올라갈수록, syntax보다 의미가 담긴 semantic한 정보를 담아낸다.</li>
<li>어느 한 layer를 사용하는 것보다는 모든 layer의 representation을 결합해 사용하는 것이 전반적인 성능 향상에 도움이된다.</li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[[논문 리뷰] Word2Vec]]></title>
            <link>https://velog.io/@fragrance_0/%E3%85%87%E3%85%87</link>
            <guid>https://velog.io/@fragrance_0/%E3%85%87%E3%85%87</guid>
            <pubDate>Mon, 11 Mar 2024 07:21:52 GMT</pubDate>
            <description><![CDATA[<blockquote>
<h3 id="1-nlp">1) NLP</h3>
<p><strong>word embedding</strong>
<strong>Word2Vec (<a href="https://arxiv.org/abs/1301.3781">https://arxiv.org/abs/1301.3781</a>)</strong></p>
</blockquote>
<br> 


<h2 id="📍-배경">📍 배경</h2>
<hr>
<ul>
<li>벡터 공간에 단어를 표상하고 싶은데, 효울적으로 표상하려면 어떻게 해야할까?</li>
<li>단어를 숫자로 표현해야한다!</li>
</ul>
<br> 

<h2 id="word-representation">Word Representation</h2>
<h3 id="1-local-representation">1. Local Representation</h3>
<hr>
<ul>
<li>하나의 원소가 하나의 단어를 표상한다 원핫인코딩</li>
<li>문제) 행렬의 크기가 너무 커진다</li>
</ul>
<br> 


<h3 id="2-distributed-representation">2. Distributed Representation</h3>
<hr>
<ul>
<li>여러개의 원소가 하나의 단어를 표상한다.</li>
<li>구조 주의(의미는 다른 다른 단어와의 관계로 결정된다)</li>
<li>인공신경방으로 구현하기 적합하다! → 오차역전파를 통해 학습가능하다!</li>
</ul>
<br> 


<h2 id="nlpm">NLPM</h2>
<hr>
<ul>
<li>Neural Probablistic Language Model (Y. Bengio, 2023)<ul>
<li>FFNN을 통해서 Distributed Representation 구현</li>
<li>(n-1)개의 단어 문맥으로 n번째 단어를 예측하는 n-gram 모델</li>
</ul>
</li>
</ul>
<p><img src="https://velog.velcdn.com/images/fragrance_0/post/e4915a53-c2f6-4255-b09d-9d4bf97c0fad/image.png" alt=""></p>
<ul>
<li>문제점: 사전에 정한 개수의 단어 맥락만 고려할 수 있다.<br> 


</li>
</ul>
<h2 id="rnnlm">RNNLM</h2>
<hr>
<ul>
<li>RNN-based Language Model<ul>
<li>simple RNN 을 통해서 distributed Representation 구현</li>
<li>모든 단어 맥락을 모두 고려할 수 있다.</li>
</ul>
</li>
</ul>
<p><img src="https://velog.velcdn.com/images/fragrance_0/post/cd48daf3-928f-43ba-b593-0c0aa4d9a266/image.png" alt=""></p>
<blockquote>
<p>여전한 문제점! 파리미터 수가 많다!</p>
</blockquote>
<br> 


<h2 id="📍-방법론">📍 방법론</h2>
<h3 id="word2vec">Word2Vec</h3>
<hr>
<ul>
<li><p>NNLM(NPLM, RNNLM)에 기반한 임베딩 기법들 -&gt; Parameter수가 너무 많다!</p>
</li>
<li><p>Word2Vec: 좀 더 효율적으로 임베딩을 해보자!</p>
<ul>
<li>CBOW</li>
<li>Skip-gram</li>
</ul>
</li>
</ul>
<br> 

<h3 id="cbow">CBOW</h3>
<hr>
<ul>
<li>continuous bag of words</li>
<li>문맥을 기반으로 현재 단어를 예측한다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/fragrance_0/post/7f7517d6-7898-4f84-a049-9a7c113baed6/image.png" alt=""></p>
<ul>
<li>shallow neural network<ul>
<li>히든 레이어가 두개 이상이면 딥러닝</li>
<li>근데 하나밖에서 없어서 shallow라고 한다.<br></li>
</ul>
</li>
<li>projection layer 존재</li>
</ul>
<p><img src="https://velog.velcdn.com/images/fragrance_0/post/28354ada-efe3-4d77-a563-9afd38c5c786/image.png" alt=""></p>
<br> 


<h3 id="skip-gram">Skip-gram</h3>
<hr>
<ul>
<li>현재 단어를 중심으로 주변 단어를 예측</li>
<li>SBOW의 뒤집어진 버전</li>
</ul>
<p><img src="https://velog.velcdn.com/images/fragrance_0/post/2e964f05-ca9e-40a3-ad09-eae55203dfda/image.png" alt=""></p>
<br> 

<blockquote>
<p>Q. SBOW VS <strong>Skip-gram</strong> 에서 스킵그램이 성능이 더 좋음
    → 스킵그램은 인풋이 하나여서 학습이 어렵지만, 
    학습이 되어서 나왔을때 output으로 여러개가 나와서 더 성능이 좋음</p>
</blockquote>
<br> 

<h3 id="nnlm-vs-word2vec">NNLM vs Word2Vec</h3>
<hr>
<p><img src="https://velog.velcdn.com/images/fragrance_0/post/43abad8f-ee33-43bc-a8ea-3c8fef0777a0/image.png" alt=""></p>
<p>→ 과적합 가능성 더 낮음</p>
<br> 

<h2 id="📍-결론">📍 결론</h2>
<ul>
<li>기존 임베딩 기법(NNLM)들은 파라미터 수가 너무 많았다.</li>
<li>Word2Vec은 CBOW, Skip-gram이라는 단순한 임베딩 기법을 제시함<ul>
<li>두 기법 모두 NNLM보다 파라미터 수는 적지만, 성능은 더 좋다!</li>
<li>특히, CBOW는 의미적 임베딩에서, Skip-gram은 형식적 임베딩에서 더 강점을 보여주었다.</li>
</ul>
</li>
</ul>
<blockquote>
<ul>
<li>의미적 관계) 대체될만하다 - syntactic</li>
<li>형식적 관계) 겹치는 범주가 있는 것 - semantic</li>
</ul>
</blockquote>
<br> 

<h3 id="cbow-skip-gram-용도">CBOW, Skip-gram 용도</h3>
<ul>
<li><p>여러가지 output → skip-gram → 형식적 임베딩에 장점</p>
</li>
<li><p>한가지 output → CBOW → 의미적 임베딩에 장점</p>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[AI Dict] Knowledge Distillation, LLM | Multimodal 개념어]]></title>
            <link>https://velog.io/@fragrance_0/AI-Dict-6-1.-Multimodal-%EA%B0%9C%EB%85%90%EC%96%B4</link>
            <guid>https://velog.io/@fragrance_0/AI-Dict-6-1.-Multimodal-%EA%B0%9C%EB%85%90%EC%96%B4</guid>
            <pubDate>Wed, 03 Jan 2024 18:29:54 GMT</pubDate>
            <description><![CDATA[<h2 id="📌-knowledge-distillation">📌 Knowledge Distillation</h2>
<ul>
<li><p>지식 증류(Knowledge Distillation)는 크고 복잡한 모델의 성능을 작고 콤팩트한 모델에 옮기는 딥러닝 기법이다. </p>
</li>
<li><p>지식 증류를 통해 더 연산적으로 효율적인 모델에서 큰 모델의 성능을 구현할 수 있다. </p>
</li>
</ul>
<ul>
<li>큰 모델은 “선생님 모델(Teacher Model)”, 작은 모델은 “학생 모델(Student Model)”이라고 지칭한다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/fragrance_0/post/e55b8616-585d-4e7c-8422-2868d8c3da36/image.png" alt=""></p>
<p><a href="https://pub.towardsai.net/a-gentle-introduction-to-knowledge-distillation-6240bf8eb8ea">출처 : A Gentle Introduction to Hint Learning &amp; Knowledge Distillation | by LA Tran | Towards AI</a></p>
<br>

<h3 id="📎-선생님-모델">📎 선생님 모델</h3>
<ul>
<li>선생님 모델은 사전 학습된 모델이며 일반적으로 <strong>높은 수준의 정확도와 일반화 정도를 가진 더 큰 모델</strong>이다. </li>
<li>일반적으로 이미지 분류 또는 자연어 처리와 같은 특정 작업을 수행하기 위해 대규모 Dataset에 대해 학습된 깊은 모델들이 있다. </li>
<li>지식 증류는 교사 모델이 가지는 뛰어난 성능과 데이터에 대한 지식을 학생 모델에 잘 전달하는 것을 목표로 한다.</li>
</ul>
<br>

<h3 id="📎-학생-모델">📎 학생 모델</h3>
<ul>
<li>학생 모델은 교사 모델의 동작을 모방하도록 학습된 <strong>더 작고 가벼운 모델</strong>이다. </li>
<li>교사 모델과 유사한 구조를 갖도록 설계되었지만 파라미터가 더 적고 모델 복잡도가 낮다. </li>
<li>학생 모델은 교사 모델에 인코딩된 지식을 포착하고, 주어진 과제에서 유사한 성과를 달성하면서 <strong>메모리와 추론 시간 측면에서 더 효율적인 것</strong>을 목표로 한다.</li>
</ul>
<blockquote>
<p>증류 과정에는 일반적인 학습 과정에서 쓰이는 <code>하드 레이블(Hard Label)</code> 뿐 아니라 선생님 모델이 내뱉는 대답을 이용해 <code>소프트 레이블(Soft Label)</code>을 설정한다. 그리고 두 가지 손실 함수를 활용한다.</p>
</blockquote>
<br>

<h3 id="📎-소프트-레이블soft-target">📎 <strong>소프트 레이블(Soft Target)</strong></h3>
<ul>
<li>교사 모델은 일련의 소프트 타겟(Soft Target) 또는 소프트 레이블(Soft Label)을 생성한다. </li>
<li>소프트 타겟은 한 번에 인코딩된 레이블이 아닌 <strong>출력 클래스에 대한 확률 분포</strong>이다. </li>
<li>이러한 소프트 타겟은 예측에 대한 선생님 모델의 <strong>신뢰도와 불확실성을 반영</strong>하며 <strong>하드 레이블보다 더 복잡한 정보를 제공</strong>한다.</li>
<li>학생 모델은 이 소프트 레이블을 손실 함수에 활용하여 학습한다.</li>
</ul>
<br>

<h3 id="📎-손실-함수">📎 <strong>손실 함수</strong></h3>
<ul>
<li><p>학생 모델은 교차 엔트로피 손실과 같은 표준 손실 함수를 이용하여 <strong>하드 레이블과의 차이를 최소화하는 것을 학습</strong>하면서, 동시에 <strong>교사 모델이 생성한 소프트 타겟과의 차이를 좁히도록</strong> 학습한다. </p>
</li>
<li><p>이러한 지식 손실은 학생 모델이 하드 레이블뿐만 아니라 소프트 레이블에 포함된 풍부한 정보를 학습하도록 하여 <strong>선생님 모델이 가진 지식을 잘 포착</strong>할 수 있도록 한다. </p>
</li>
<li><p>이로써 학생 모델은 <strong>선생님 모델의 전문성, 일반화 능력 및 견고함(Robustness)</strong>을 활용하면서 더 작은 크기와 빠른 추론 속도를 유지할 수 있다.</p>
</li>
</ul>
<blockquote>
<p><strong>지식 증류</strong>는 리소스가 제한된 환경에서도 대규모 모델에 필적하는 높은 성능과 정확도를 유지하면서 효율적인 모델을 사용할 수 있도록 하였다. 따라서 모델 압축, 전이 학습, 앙상블 학습과 같은 다양한 시나리오에 널리 적용되었다.</p>
</blockquote>
</br>

<hr>
<h2 id="📌-llm">📌 LLM</h2>
<p><strong>LLM(Large Language Model)</strong>이란 인간의 언어를 이해하고 생성하도록 설계된 일종의 인공지능 모델을 말한다. 이러한 모델은 일반적으로 방대한 양의 텍스트 데이터로 학습되어 언어의 패턴, 구문, 문법 및 의미를 학습할 수 있다. 대규모 언어 모델은 학습에 필요한 매개변수와 계산 리소스 측면에서 그 크기가 매우 크다는 특징이 있다.</p>
<br>

<p>어느 정도 크기의 모델부터 LLM이라고 부르는지 정의된 바는 없지만, 일반적으로 모델 파라미터 수가 10B 이상, 거대한 데이터셋으로 학습, 복잡한 태스크(일반적인)에 전체적으로 우수한 성능을 보이면 LLM이라고 부른다. </p>
<br>

<p>GPT-1, BERT도 처음에는 Super large로 취급받았지만 지금 모델들에 비하면 크기가 작은 편이다. 아래는 현재까지 공개된 LLM들을 시간순으로 정리한 이미지이다. </p>
<p><img src="https://velog.velcdn.com/images/fragrance_0/post/9737da46-6976-4104-a958-4b5b05bce7fe/image.png" alt="">
(LLM의 기준과 이미지 출처 : A Survey of Large Language Models, Zhou et al, 2023)</p>
<br>

<p>OpenAI의 <strong>GPT(Generative Pre-trained Transformer)</strong>시리즈와 같은 대규모 언어 모델은 트랜스포머 아키텍처를 기반으로 구축된다. 트랜스포머는 텍스트와 같은 순차적 데이터를 처리하는 데 탁월한 심층 신경망 모델이다. 셀프 어텐션 메커니즘을 사용하여 문장이나 문서 내에서 단어 또는 토큰 간의 장거리 종속성과 관계를 포착한다.</p>
<br>

<p>LLM을 학습하려면 책, 기사, 웹사이트 등 다양한 소스의 방대한 양의 텍스트로 모델을 학습시켜야 한다. GPT나 BERT 같은 모델은 라벨 없이 텍스트의 빈칸이나 다음 단어를 유추하게 하는 방식으로 학습하는데, 이를 비지도 학습이라고 한다. </p>
<br>

<p>학습이 완료된 LLM은 특정한 태스크에 맞게 추가 학습되지 않더라도 다양한 자연어처리 과제를 수행할 수 있다. 일관되고 문맥에 맞는 텍스트를 생성하고, 문장이나 단락을 완성하고, 질문에 답하고, 요약을 제공하고, 언어 간 번역을 하고, 심지어 대화에 참여할 수도 있다. </p>
<br>

<p>대규모 언어 모델의 출현은 고객 서비스, 콘텐츠 생성, 언어 번역, 가상 비서 등 다양한 분야에 큰 영향을 미쳤다. 대규모 언어 모델은 일상적인 언어 기반 작업을 자동화하고, 정보 검색을 개선하며, 여러 애플리케이션에서 사용자 경험을 향상시킬 수 있는 잠재력을 가지고 있다.</p>
<br>

<p>일반 연구실, 회사도 돌리기 힘들 정도의 크기에 모델의 가중치들도 공개가 되지 않아서 연구를 진행하기 힘들다는 의견이 많았지만 최근에 Llama, Vicuna 등 경량화된 모델과 학습에 필요한 데이터셋들이 공개가 되고 있다.</p>
<br>
대규모 언어 모델은 학습과 추론에 상당한 컴퓨팅 리소스와 에너지 소비가 필요하므로 환경 영향과 에너지 효율성에 대한 우려가 제기된다. 편견, 개인정보 보호, 책임감 있는 사용과 관련된 윤리적 고려 사항도 중요해지고 있다.


<br>
---

<p>[출처 | 딥다이브 Code.zip 매거진]</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[AI Dict] PPO (Proximal Policy Optimization) | 강화학습 ]]></title>
            <link>https://velog.io/@fragrance_0/AI-Dict-5-2.-Natural-Language-Processing-%EB%AA%A8%EB%8D%B8</link>
            <guid>https://velog.io/@fragrance_0/AI-Dict-5-2.-Natural-Language-Processing-%EB%AA%A8%EB%8D%B8</guid>
            <pubDate>Wed, 03 Jan 2024 18:20:21 GMT</pubDate>
            <description><![CDATA[<h2 id="💡-ppo">💡 PPO</h2>
<ul>
<li><p>PPO(Proximal Policy Optimization)는 2017년에 소개된 강화학습 알고리즘의 일종이다.</p>
</li>
<li><p>강화학습은 기본적으로 아무것도 모르는 상태에서 직접 다 수행해보고 방황하며 지식을 얻고 최적의 결정을 내려나가는 학습을 의미한다.</p>
</li>
</ul>
<p><img src="https://velog.velcdn.com/images/fragrance_0/post/59f0afd0-2698-4e25-8729-787aca105afd/image.png" alt=""></p>
<p>출처 | <a href="https://velog.io/@uonmf97/HUFS-RL-%EA%B0%95%ED%99%94%ED%95%99%EC%8A%B5-Reinforcement-Learning-PPO-Proximal-PolicyOptimization">[HUFS RL] 강화학습 : Reinforcement Learning: PPO (Proximal Policy Optimization)</a></p>
<br>

<h3 id="📍-기본적인-용어">📍 기본적인 용어</h3>
<p>아타리 게임을 통해서 강화학습을 처음 구현해보는 경우가 많기 때문에 아래에 위의 게임의 상황을 가정하고 예시를 함께 들었다.</p>
<ul>
<li>Agent : 학습하는 대상으로 환경속에서 행동하는 주체를 의미한다. 
→ 아래 네모박스를 움직이는 주체</li>
<li>State : 현재 Agent가 판단을 내리기 위해 반영되는 상태
→ 박스가 n개 깨져있고, 공은 네모박스와 얼마정도 떨어진 상태</li>
<li>Environment : Agent가 속해있는 환경으로 Agent의 행동에 따라 변화하기도 한다. 
→ 벽돌깨기 아타리 게임</li>
<li>Action : Agent가 Environment속에서 현재 State일 때 취하는 행동을 의미한다. 
→ 오른쪽으로 5번 움직이기</li>
<li>Reward : Agent가 현재 취하는 행동에 따라 주어지는 보상을 의미한다. 결국 에이전트가 학습하는 목적은 이 보상을 최대화하기 위함이다. 다만 꼭 한번 행동을 했을 때 한번 주어지는게 아니거나 미래에 여러 행동의 결과가 한꺼번에 반영되어 주어지는 경우가 있다. 이것이 근본적으로 강화학습을 어렵게 만드는 요인이다. 
→ 게임의 점수</li>
</ul>
<blockquote>
<p>PPO는 여러 강화학습 중에서도 Model-free, Policy Optimization, On-Policy 방법에 속한다. 여기서 Policy는 현재 State에 따른 Action의 확률분포를 나타내는 것이다. 즉 최적의 Policy(= 현재 상황에서 해야하는 가장 좋은 행동을 아는 것)를 찾는 것이 목적이다.</p>
</blockquote>
<br>

<h3 id="📚--model-free-vs-model-based">📚  Model-free vs Model-based</h3>
<p>Model-based는 Environment의 다음 State와 Reward가 어떨지에 대해서 Agent가 어느정도 알고 Action을 선택하는 것을 의미한다. Model-free는 현재 Model에 대한 정보가 전혀 없는 상태에서 Onteraction을 통해서 하나씩 학습해나가는 것을 의미한다.
<br></p>
<h3 id="📚-policy-optimization-vs-q-learining">📚 Policy optimization vs Q-learining</h3>
<p>Policy Optimization은 말그대로 Policy 함수( $\pi(a|s)$ )를 모델링하고 학습과정에서 이를 최적화 시키는 것을 의미한다. Q-learning은 Q함수(Q(s,a) = 현재 State s에서 Action a를 한 뒤 끝까지 진행했을 때 얻는 리워드)를 직접 모델링하고, 이를 최적화 시킨다. 둘 모두 현재 State s에서 어떤 Action을 해야할지 판단하는 최적의 정책을 얻고자 한다는 점에서는 동일하다.
<br></p>
<h3 id="📚-on-policy-off-policy">📚 On-Policy, Off-Policy</h3>
<p>On-Policy는 실제로 행동을 하고 있는 가장 최신 버전의 Policy로 수집된 데이터만 Policy 업데이트에 사용하는 방식이다. Off-Policy는 이전 정책으로 탐색한 결과까지 학습 데이터로 사용하는 방식이다.</p>
<p>하지만 강화학습은 그 특성상 명확하게 위와 같은 태그를 분리하기가 쉽지 않다. PPO도 On-Policy로 설명하지만 실제 학습시에는 Off-Policy와 같이 업데이트 된다. PPO는 TRPO라는 이전의 강화학습 알고리즘을 계산하기 쉽고 학습 안정성을 높이는 방향으로 개선시킨 알고리즘이다. </p>
<p>요약하자면 기존에 TRPO는 믿을 만한 구역 안에서만 Policy가 업데이트 되도록 Constraint를 거는데, 이것이 TRPO가 상당히 복잡한 계산식을 갖도록 했다. 하지만 PPO는 이를 Clipped Surrogate Objective를 사용하여 더 간단한 형태로 풀어내어 학습해 최적의 성능을 내었다.</p>
<br>

<p>[출처 | 딥다이브 Code.zip 매거진]</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[AI Dict] Prophet 시계열데이터 예측]]></title>
            <link>https://velog.io/@fragrance_0/AI-Dict-3-2.-Machine-Learning-%EB%AA%A8%EB%8D%B8</link>
            <guid>https://velog.io/@fragrance_0/AI-Dict-3-2.-Machine-Learning-%EB%AA%A8%EB%8D%B8</guid>
            <pubDate>Wed, 03 Jan 2024 18:13:06 GMT</pubDate>
            <description><![CDATA[<h2 id="💡-prophet">💡 Prophet</h2>
<p><img src="https://velog.velcdn.com/images/fragrance_0/post/e9b95f9e-0e1e-42bf-af63-c19a2a86276e/image.png" alt=""></p>
<ul>
<li><p>Prophet은 비선형 추세를 연간, 주간 및 일일 <strong>계절성</strong> 및 <strong>휴일 효과</strong>와 결합하여 시계열 데이터를 예측하는 Procedure이다.</p>
</li>
<li><p>Prophet은 강한 계절성 효과를 가진 시계열 데이터와 여러 시즌의 과거 데이터를 가장 잘 처리한다.</p>
</li>
<li><p>Prophet은 데이터의 누락 및 추세의 이동에 강건(Robust)하며, 일반적으로 이상치를 잘 처리한다.</p>
</li>
</ul>
<br>

<h2 id="📌-prophet의-주요-특징">📌 Prophet의 주요 특징</h2>
<p><strong>1. 정확하고 빠름</strong></p>
<p>페이스북에서 다양한 응용 분야에서 신뢰할 수 있는 예측을 생성하여 계획 및 목표 설정에 사용된다. 우리는 대부분의 경우에 다른 접근 방식보다 Prophet이 더 우수한 성능을 보여주었다. 모델은 Stan을 사용하여 적합시키므로 몇 초 안에 예측 결과를 얻을 수 있다.
<br></p>
<p><strong>2. 완전 자동화</strong></p>
<p>불규칙한 데이터에서도 별도의 처리 없이 합리적인 예측을 제공한다. Prophet은 이상치, 누락된 데이터 및 시계열의 급격한 변화에도 강건하게 작동한다.</p>
<br>

<p><strong>3. 사용자 튜닝 기능</strong></p>
<p>Prophet은 사용자가 예측을 조정하고 수정할 수 있는 다양한 기능이 있다. 도메인 지식을 추가하여 사용자가 이해할 수 있는 매개변수를 사용하여 예측을 개선할 수 있다.</p>
<br>

<p><strong>4. R 또는 Python에서 사용 가능</strong></p>
<p>Prophet 절차는 R과 Python에서 구현되고, <a href="http://mc-stan.org/">Stan</a> 코드를 제공한다. 편한 언어를 사용하여 예측을 수행할 수 있다.</p>
<br>

<hr>
<h2 id="📌-애플의-주가-데이터로-실습해보기">📌 애플의 주가 데이터로 실습해보기</h2>
<h3 id="1-데이터-불러오기"><strong>(1) 데이터 불러오기</strong></h3>
<pre><code class="language-python">df = pd.read_csv(&#39;/Users/lwh/Desktop/prophet/AAPL.csv&#39;)
df.head()</code></pre>
<p><img src="https://velog.velcdn.com/images/fragrance_0/post/6c97ecdd-6547-41b1-b879-28fbcd9a8301/image.png" alt=""></p>
<p>데이터 출처: <a href="https://www.kaggle.com/datasets/varpit94/apple-stock-data-updated-till-22jun2021?resource=download">https://www.kaggle.com/datasets/varpit94/apple-stock-data-updated-till-22jun2021?resource=download</a></p>
<br>


<h3 id="2-prophet에-넣을-수-있게-데이터-전처리">(2) Prophet에 넣을 수 있게 데이터 전처리</h3>
<pre><code class="language-python">df = df.reset_index()
df[&#39;ds&#39;] = df[&#39;Date&#39;]
df[&#39;y&#39;] = df[&#39;Close&#39;]
data = df[[&#39;ds&#39;,&#39;y&#39;]]
data = data[-1000:]

data.head()</code></pre>
<p><img src="https://velog.velcdn.com/images/fragrance_0/post/f62a407c-023d-4cb6-85c0-a921f5533cae/image.png" alt=""></p>
<br>


<h3 id="3-prophet-모델-피팅">(3) Prophet 모델 피팅</h3>
<pre><code class="language-python">prophet_m = Prophet().fit(data)</code></pre>
<br>


<h3 id="4-미래-데이터-예측">(4) 미래 데이터 예측</h3>
<pre><code class="language-python">future = prophet_m.make_future_dataframe(periods=365) # period에 할당된 날짜만큼 미래 날짜 만들기

# 미래 가격 예측하기
forecast = prophet_m.predict(future)
forecast[[&#39;ds&#39;, &#39;yhat&#39;, &#39;yhat_lower&#39;, &#39;yhat_upper&#39;]].tail()
future.tail()</code></pre>
<p><img src="https://velog.velcdn.com/images/fragrance_0/post/4e191a6d-68ed-4c04-a41d-3e54446d08ce/image.png" alt=""></p>
<br>


<h3 id="5-시각화">(5) 시각화</h3>
<pre><code class="language-python">prophet_m.plot(forecast)</code></pre>
<p><img src="https://velog.velcdn.com/images/fragrance_0/post/980a6789-7eb1-47fc-91aa-6f484b46b674/image.png" alt=""></p>
<p>→ Prophet은 이전 데이터를 기반으로 애플의 주가가 상승할 것으로 에측하였다.</p>
<br>

<p>참고문헌 | <a href="https://facebook.github.io/prophet/">Prophet</a></p>
<p>[출처 | 딥다이브 Code.zip 매거진]</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[AI Dict] AutoML(LazyPredict예제) , DownSampling | UpSampling]]></title>
            <link>https://velog.io/@fragrance_0/AI-Dict-3-1.-Machine-Learning-%EA%B0%9C%EB%85%90%EC%96%B4</link>
            <guid>https://velog.io/@fragrance_0/AI-Dict-3-1.-Machine-Learning-%EA%B0%9C%EB%85%90%EC%96%B4</guid>
            <pubDate>Wed, 03 Jan 2024 18:03:53 GMT</pubDate>
            <description><![CDATA[<h2 id="1️⃣-automl">1️⃣ AutoML</h2>
<ul>
<li><p>AutoML은 &quot;Automated Machine Learning&quot;의 약자로, 기계 학습 작업을 자동화하는 방법을 말한다.</p>
</li>
<li><p>기계 학습은 데이터를 분석하여 패턴을 식별하고 예측 모델을 구축하는 작업이다. 이 작업은 보통 데이터 전처리, 특징 선택, 알고리즘 선택, 하이퍼파라미터 튜닝 등 다양한 단계와 결정 사항을 포함한다. </p>
</li>
<li><p>AutoML은 이러한 기계 학습 작업의 여러 단계를 자동화하여 기계 학습 프로세스를 단순화하고 가속화한다. AutoML은 일반적으로 머신 러닝 모델의 성능을 향상시키기 위해 여러 가지 기술과 접근 방식을 사용한다.</p>
</li>
<li><p>예를 들어, AutoML은 데이터 전처리 단계에서 결측치 처리, 이상치 탐지, 특징 스케일링 등과 같은 일반적인 전처리 작업을 자동으로 수행할 수 있다. 또한 특징 선택 및 추출 방법, 알고리즘 선택 및 구성, 하이퍼파라미터 튜닝 등과 같은 다양한 모델 구성 요소를 자동으로 최적화할 수 있다.</p>
</li>
<li><p>AutoML은 전문적인 기계 학습 지식이 없는 사람들에게도 기계 학습 모델을 구축하고 활용할 수 있는 기회를 제공한다. 이를 통해 비전문가들도 기계 학습을 사용하여 데이터를 분석하고 예측 모델을 구축할 수 있게 된다. </p>
</li>
</ul>
<br>

<h3 id="📍-사용-예시-lazypredict">📍 사용 예시 (<a href="https://github.com/shankarpandala/lazypredict">LazyPredict</a>)</h3>
<h4 id="1-데이터-불러오기"><strong>(1) 데이터 불러오기</strong></h4>
<p><a href="https://s3-us-west-2.amazonaws.com/secure.notion-static.com/0b40fe73-63a4-4c65-be85-e83ffbe10e02/winequality-red.csv">winequality-red.csv</a></p>
<p>출처: <a href="https://archive.ics.uci.edu/ml/datasets/wine+quality">UCI Machine Learning Repository: Wine Quality Data Set</a></p>
<ul>
<li>와인 품질 분류 데이터이다.</li>
<li>사이트에서 제공되는 Dataset 중 레드와인 데이터만 사용하였다. </li>
<li>총 12개의 컬럼과 1599개의 행으로 이루어져 있다. </li>
<li>Target은 quality 컬럼으로 0~10 사이의 점수로 매겨져 있다.</li>
</ul>
<pre><code class="language-python">import pandas as pd

# 다른건 몰라도 sep = &#39;,&#39;이건 꼭 넣어야함!! 안넣으면 모든 데이터가 하나의 열로 출력됨
wine = pd.read_csv(&quot;winequality-red.csv&quot;, header = 0, encoding = &quot;UTF-8&quot;, sep = &#39;,&#39;)</code></pre>
<br>

<p><strong>(2) 패키지 설치하기</strong></p>
<pre><code class="language-python">!pip install scikit-learn==0.23.1
!pip install -q lazypredict</code></pre>
<ul>
<li>Colab 기준으로는 위 설치가 끝나면 런타임을 다시 시작해줘야 한다.</li>
</ul>
<br>

<p><strong>(3) 데이터 준비하기(train/test 쪼개기)</strong></p>
<pre><code class="language-python">y_data = wine.pop(&#39;quality&#39;)
x_data = wine

print(x_data.shape)
print(y_data.shape)

from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(
    x_data,
    y_data,
    test_size=0.2,
    random_state=20230215,
    stratify=y_data) # 클래스 비율을 동일하게 분할

print(X_train.shape, y_train.shape)
print(X_test.shape, y_test.shape)</code></pre>
<br>

<p><strong>(4) LazyPredict 돌려서 회귀모델 성능 비교하기</strong></p>
<pre><code class="language-python">from lazypredict.Supervised import LazyRegressor

reg = LazyRegressor(verbose=0, predictions=True)
models, predictions = reg.fit(X_train, X_test, y_train, y_test)

models</code></pre>
<ul>
<li>위 코드를 돌리면 자동으로 몇 초 만에 아래의 결과 값이 나온다. </li>
<li>무거운 데이터셋을 넣으면 시간이 엄청 오래 걸리고 심지어 코랩에서는 램이 터져버리니 주의하자.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/fragrance_0/post/f9f6780a-b2f6-470a-8a0e-3cd49cbbaa7a/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/fragrance_0/post/02bb59ed-4283-4d3f-9e96-c4f11b9f7424/image.png" alt=""></p>
<p>딱 여기까지가 LazyPredict으로 얻을 수 있는 결과이다. 제일 좋은 결과를 낸 모델은 RMSE값이 제일 낮게 나온 &#39;ExtraTreesRegressor&#39;인 것을 알 수 있다.</p>
</br>

<hr>
<h2 id="2️⃣-downsampling--upsampling">2️⃣ DownSampling | UpSampling</h2>
<h3 id="👩🏻💻-downsampling">👩🏻‍💻 DownSampling</h3>
<ul>
<li>DownSampling은 이름에서도 알 수 있듯이 Sample의 개수를 줄이는 것이다. </li>
<li>딥러닝에서 인코딩을 진행할 때에 데이터의 수를 줄이는 과정이기도 하다. </li>
<li>DownSampling은 다음과 같은 방법으로 진행할 수 있다. </li>
</ul>
<p><strong>📌 Pooling</strong></p>
<ul>
<li><strong>Pooling</strong>은 일정한 규칙에 의하여 <strong>Kernel</strong> 내에서 값을 계산하는 방법이다. </li>
<li>일정한 규칙이라 함은 일종의 $d$ 함수를 말하는데, 구체적인 예시를 통해 살펴보자. </li>
</ul>
<p><img src="https://velog.velcdn.com/images/fragrance_0/post/98d8c9da-fb5c-4480-bae3-7f21f278452d/image.png" alt=""></p>
<ul>
<li><p>위의 그림은 Max Pooling을 그림으로 나타낸 것이다. </p>
</li>
<li><p>위 이미지와 같인 해당 Kernel 내에서 최대 값을 추출하여 요약된 데이터를 만들어내는 것이 Max Pooling이다. </p>
</li>
<li><p>이외에 평균 값을 계산하는 Average Pooling도 있다.</p>
</li>
<li><p>Pooling이 DownSampling의 일반적인 방법이라고 볼 수 있다. </p>
</li>
<li><p>대게 Average Pooling에 비해 Max Pooling을 자주 활용한다.</p>
<br>

</li>
</ul>
<p><strong>📌 Dilated Convolution</strong></p>
<ul>
<li>Convolution은 위의 Pooling과 달리 학습의 과정을 거치기 때문에, 더욱 효과적인 DownSampling이 가능하다. </li>
<li>그러나 Receptive Field를 크게 만들기 어렵다는 문제가 발생한다. Receptive Field가 커지면, 학습 파라미터의 수가 무수히 늘어나기 때문이다. </li>
<li>이와 같은 단점을 보완하기 위해 등장한 것이 Dilated Convolution이다.</li>
</ul>
<blockquote>
<p>🤔 <strong>Receptive Field</strong>
: 출력 Layer의 뉴런에 영향을 미치는 입력 뉴런들의 공간 크기이다. 쉽게 말해, 필터가 한 번에 보는 영역을 의미한다.</p>
</blockquote>
<br>

<ul>
<li>Dilated Convolution의 Filter는 일반적인 Convolution Filter 사이에 빈 공간을 넣어 구멍이 뚫려 있는 듯한 구조를 가지게 된다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/fragrance_0/post/6a6d0648-2297-4f3f-aa52-531cbe9ffe74/image.png" alt=""></p>
<p>Dilated Convolution을 수행하면 기존 Convolution과 동일한 양의 Parameter와 계산량을 유지하면서도, Receptive Field는 커진다. Dilated Convolution을 시행할 때는 확장비율(Dilation Rate)를 지정하여 Filter 사이에 빈 공간을 얼마나 둘지를 결정한다.</p>
<p><img src="https://velog.velcdn.com/images/fragrance_0/post/d92a5d4e-bfe6-444b-91a4-d5a3355e558d/image.png" alt=""></p>
<br>

<hr>
<h3 id="👩🏻💻-upsampling">👩🏻‍💻 UpSampling</h3>
<p>UpSampling은 Downsampling의 반대로, 디코딩을 할 때에 데이터의 크기를 늘리는 과정이다. Upsampling의 방법 중 대표적인 방법을 살펴보자.</p>
<p><strong>📌 Unpooling</strong></p>
<p>Unpooling은 Max pooling을 거꾸로 재현하여 주변 픽셀들을 동일한 값으로 채우거나(Nearest Neighbor Unpooling), 0으로 채워주는 방식(Bed of NailsUnpooling)이다.</p>
<p><strong>📌 Max Unpooling</strong></p>
<p>Unpooling 방식에는 한 가지 문제가 있다. 위의 그림처럼 2 × 2 크기의 행렬로 Max Pooling된 데이터가 있다고 하자. 이를 원래 사이즈인 4 × 4 크기의 행렬로 Unpooling 하게 되면 원래 Max Pooled된 <strong>값의 위치를 알 수 없다</strong>. 이를 개선하기 위해 Max Unpooling이라는 방법을 사용하게 된다.</p>
<p><img src="https://velog.velcdn.com/images/fragrance_0/post/78ded51e-3b4f-4ca1-8488-ae47f8208e11/image.png" alt=""></p>
<p>위 그림과 같이 Max Pooling할 때의 선택된 값들의 위치를 기억해 원래 자료의 동일한 위치에 최대값을 위치시켜 Unpooling하는 것이다.</p>
</br>

<hr>
<p><em>[출처 | 딥다이브 Code.zip 매거진]</em></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[AI Dict] Multimodal 모델( Diffusion, Word2Vec, YAKE)]]></title>
            <link>https://velog.io/@fragrance_0/AI-Dict-6-2.-Multimodal-%EB%AA%A8%EB%8D%B8</link>
            <guid>https://velog.io/@fragrance_0/AI-Dict-6-2.-Multimodal-%EB%AA%A8%EB%8D%B8</guid>
            <pubDate>Wed, 03 Jan 2024 17:14:20 GMT</pubDate>
            <description><![CDATA[<h2 id="1️⃣-diffusion">1️⃣ Diffusion</h2>
<h3 id="💡-디퓨전의-원리">💡 디퓨전의 원리</h3>
<p>*<em>디퓨전(Diffusion)은 생성 모델의 일종으로, 그 이름과 같은 ‘확산’ 프로세스를 반복적으로 적용하여 데이터 분포를 모델링한다. *</em></p>
<ul>
<li>디퓨전은 고해상도 이미지를 생성하고, 복잡한 데이터 분포를 포착해 내며, 생성 프로세스를 세밀하게 제어할 수 있다는 점에서 딥러닝 계의 주목을 받고 있다.</li>
<li>GAN과 같은 다른 생성 모델과도 차이가 있다.</li>
<li>병렬 샘플링, 불연속 데이터를 처리할 수 있는 기능, 안정적인 훈련 역학 등의 장점을 제공한다. <br>

</li>
</ul>
<h4 id="디퓨전은-가우시안-노이즈를-첨가하고-제거하는-방식으로-학습함">디퓨전은 가우시안 노이즈를 첨가하고 제거하는 방식으로 학습함</h4>
<p><img src="https://velog.velcdn.com/images/fragrance_0/post/f3336dcf-c2a7-4a9e-b64f-8c554b1c5adf/image.png" alt=""></p>
<p>출처 : <strong><a href="https://pitas.tistory.com/9">Stable Diffusion이 대체 무엇일까?(Latent Diffusion의 작동 원리)</a></strong></p>
<blockquote>
<p>디퓨전이 모델의 분포를 학습하는 방식은 <strong>노이즈를 단계적으로 첨가</strong>하고, 또 <strong>단계적으로 제거</strong>하면서 <strong>원래의 데이터 샘플과 유사하도록 변환</strong>하는 것이다. </p>
</blockquote>
<ul>
<li>디퓨전 모델은 고정된 수의 단계에 대해 확산 작업을 반복적으로 적용함으로써 대상 데이터 분포에서 고품질 샘플을 생성할 수 있다.</li>
<li>여러 차원에 걸쳐 정보를 확산하고 샘플을 점진적으로 정제함으로써 데이터의 복잡한 종속성과 구조를 포착하는 방법을 학습한다.</li>
</ul>
<br>

<h3 id="💡-디퓨전은-추론-과-샘플링-과정으로-나눌-수-있다">💡 디퓨전은 ‘추론’ 과 ‘샘플링’ 과정으로 나눌 수 있다.</h3>
<p>*<em>1. 추론: *</em></p>
<ul>
<li>추론 단계에서는 데이터의 특징을 포착하는 잠재 변수(Latent Variable)를 추정하는 것을 목표로 한다. </li>
<li>이때 주어진 데이터 샘플에서 가우시안 노이즈를 더하는 Forward Process와, 노이즈를 제거해 가는 Reverse Process를 거치며 주어진 이미지, 텍스트, 그래프 샘플들의 공통된 분포를 학습한다.<br>

</li>
</ul>
<p>*<em>2. 샘플링: *</em></p>
<ul>
<li>추론 단계가 끝나면 디퓨전 모델은 학습된 조건부 분포를 기반으로 현재 샘플에 <strong>랜덤한 섭동(Perturbation)을 적용</strong>하여 새로운 상태를 샘플링한다. </li>
<li>이 섭동은 현재 샘플에 노이즈를 주입하여 점차적으로 목표 데이터 분포의 샘플로 변환한다. </li>
<li>변환된 샘플이 <strong>목표 분포의 고밀도 영역에 유지되도록</strong> 목표하며 샘플링하게 된다.</li>
</ul>
<br>

<h3 id="💡-활용-예시">💡 활용 예시</h3>
<p>디퓨전 모델은 뛰어난 생성 능력과 유연성을 가지고 있기 때문에, 복잡한 데이터 분포를 캡처하거나 새로운 데이터 샘플을 생성해야 하는 광범위한 작업에 적합하다.
<br>
<strong>⭐️ 1. 이미지 합성</strong> </p>
<p>실제 이미지 Dataset에 대해 디퓨전 모델을 훈련하면 Train Dataset과 유사한 새로운 이미지를 생성할 수 있다. 디퓨전 프로세스를 통해 노이즈 벡터를 <strong>점진적으로 사실적인 이미지로 변환</strong>하여 복잡한 디테일과 텍스처를 포착할 수 있다.
<br>
<strong>⭐️ 2. 이미지 노이즈 제거</strong></p>
<p>입력 이미지에 노이즈가 있으면 확산 모델은 확산 프로세스를 통해 점진적으로 노이즈를 제거하여 <strong>노이즈가 제거된 이미지를 생성</strong>할 수 있다. 학습을 통해 이미지의 기본 구조를 포착해 내고, 노이즈를 콘텐츠에서 분리해 낸다.
<br>
<strong>⭐️ 3. 이미지 인페인팅</strong></p>
<p>이미지에서 <strong>누락되거나 손상된 부분을 채우는</strong> 이미지 인페인팅 작업에도 사용될 수 있다. 이미지의 구조를 학습하여 누락된 영역을 채울 수 있는 그럴듯한 콘텐츠를 생성하여 시각적으로 일관된 이미지 페인팅을 만든다.
<br>
<strong>⭐️ 4. 텍스트 생성</strong></p>
<p>말뭉치에서 <strong>단어 또는 문자 간의 종속성을 모델링</strong>하여 학습 데이터와 유사하며 현실적이고 일관된 텍스트를 생성한다.
<br>
<strong>⭐️ 5. 비디오 생성</strong></p>
<p>디퓨전 기술은 동영상과 같은 <strong>순차적 데이터를 처리</strong>할 수 있도록 확장되었다. 여러 프레임에 걸쳐 디퓨전 프로세스를 적용하며, 시간적 일관성을 보이는 새로운 비디오 시퀀스를 생성하고 학습 데이터의 동적 특성을 포착할 수 있다.
<br>
<strong>⭐️ 6. 이상 감지</strong></p>
<p>이미지, 텍스트, 시계열 등 다양한 유형의 데이터에서 <strong>이상 징후를 탐지</strong>하는 데 사용되어 왔다. 확산 모델을 정상 데이터 샘플에 대해 훈련함으로써 유사한 인스턴스를 재구성하고 생성하는 방법을 학습할 수 있다. 비정상적인 데이터를 제시하면 재구성 오류가 더 높아지는 경향이 있어 이상 징후를 식별할 수 있다.</p>
</br>

<hr>
<h2 id="2️⃣-word2vec">2️⃣ Word2Vec</h2>
<h3 id="💡-word2vec">💡 Word2Vec</h3>
<p>Word2Vec은 자연어 처리(NLP) 작업에서 단어를 연속적인 벡터로 표현하는 딥러닝 기법이다. 
단어를 고차원 벡터 공간에 매핑하여 단어 간의 의미론적, 구문론적 관계를 의미 있는 방식으로 포착하는 것을 목표로 한다.</p>
<p><img src="https://velog.velcdn.com/images/fragrance_0/post/5c6ef212-0ae2-4797-9c1e-7ef3939a0e78/image.png" alt=""></p>
<p><a href="https://velog.io/@oneofakindscene/word2vec-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0">출처 : word2vec 이해하기</a></p>
<br>

<h4 id="word2vec의-핵심-아이디어">Word2Vec의 핵심 아이디어</h4>
<ul>
<li><strong>단어 간의 의미적 유사성을 인코딩하는</strong> <strong>워드 임베딩을 학습</strong>하는 것이다. </li>
<li>워드 임베딩은 단어 간의 의미 관계를 포착한다. 비슷한 의미를 가지거나 비슷한 문맥에 등장하는 단어는 비슷한 벡터 표현을 갖는 경향이 있다. </li>
<li>예를 들어, &#39;왕&#39;과 &#39;여왕&#39;과 같은 단어는 의미적 유사성을 반영하여 벡터 공간에서 가까운 벡터를 갖게 된다.</li>
</ul>
<blockquote>
<p>이러한 워드 임베딩은 컴퓨터가 처리할 수 있는 벡터 형태로 나타나며, 레이블이 없는 대량의 텍스트 데이터를 활용하여 학습된다. Word2Vec의 핵심 가정은 <strong>비슷한 문맥에 등장하는 단어는 비슷한 의미를 갖는 경향이 있다는 것</strong>이다.</p>
</blockquote>
<br>

<h3 id="💡-아키텍처">💡 아키텍처</h3>
<p>CBOW와 Skip-gram 모델은 모두 신경망을 사용하여 학습되며, 일반적으로 단일 계층으로 구성된다. 학습을 통해 목표 단어 또는 문맥 단어를 정확하게 예측하는 모델의 능력을 최적화한다. </p>
<br>

<p><strong>⭐️ CBOW(Continuous Bag of Words)</strong></p>
<p>CBOW 아키텍처에서는 <strong>문맥 단어를 기반으로 타겟 단어</strong>를 예측한다. 문맥 단어란 주어진 창 크기 안에 있는 타겟 단어 주변 단어를 의미한다. 예를 들어 “The cat sits on the mat.&quot; 라는 문장이 주어지면 CBOW 모델은 &quot;the&quot;, &quot;sits&quot;, &quot;on&quot; 및 &quot;mat&quot;를 입력으로 받아 목표 단어 &quot;cat&quot;을 예측할 수 있다. 
<br></p>
<p><strong>⭐️ Skip-gram</strong></p>
<p>Skip-gram 아키텍처에서는 CBOW와 반대로, 문맥이 주어졌을 때 목표 단어를 예측하는 대신 <strong>타겟 단어를 기반으로 문맥 단어를 예측</strong>한다. 동일한 예제 문장을 사용하여 Skip-gram 모델은 대상 단어 &quot;cat&quot;를 가지고 문맥 단어 &quot;the&quot;, &quot;sits&quot;, &quot;on&quot;, &quot;mat&quot;을 예측할 수 있다. </p>
<blockquote>
<p>Word2Vec으로 생성된 이러한 워드 임베딩은 자연어 처리 작업에서 다양하게 활용된다. 텍스트 분류, 정보 검색, 감성 분석, 기계 번역 등 다양한 자연어 처리 모델의 성능을 향상시키는 데 사용할 수 있다. 또한 단어를 연속 벡터로 표현함으로써 모델이 단어 임베딩에서 포착한 풍부한 의미 정보를 활용하여 보다 언어를 보다 효과적으로 이해하고 활용할 수 있게 된다.</p>
</blockquote>
</br>

<hr>
<h2 id="3️⃣-yake">3️⃣ YAKE</h2>
<blockquote>
<p><strong>keyword extraction from single documents using multiple local features
 -</strong> unsupervised learning, lightweight statistical method</p>
</blockquote>
<p>이 장에서는 단어의 중요도를 계산하는 부분 위주로 설명할 예정이다. 
<br></p>
<h3 id="📍-yake-정의">📍 YAKE 정의</h3>
<ul>
<li>Keyword Extraction은  $m$개의 단어가 있는 문서를 받아 문서를 포괄적으로 나타낼 수 있는 명사구를 찾는 것이다. </li>
<li>머신러닝을 사용한 다른 모델은 학습 데이터랑 다른 언어에는 사용할 수 없는데, </li>
<li>YAKE!는 다양한 언어에 사용할 수 있으며 긴 학습시간과 레이블 데이터 없이도 쉽게 사용할 수 있다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/fragrance_0/post/3e14efb2-a992-435f-86dc-cebbfb318963/image.png" alt=""></p>
<ul>
<li>이러한 각 구문(Phrases)은 문서에서 연속된 단어로 구성되므로 문서에 나타난 모든 후보 구문(Candidate Phrases)에 대한 일반적인 순위를 매기는 문제로 볼 수 있다.</li>
<li>따라서 일반적인 키워드 추출 파이프라인은 대상 문서 $d$에 대한 후보구문(Candidate Phrases) Pd를 구성하고, $d$의 모든 개별 단어에 대한 중요도 중요도 점수(Importance Scores)를 계산하는 것으로 구현된다.<br>

</li>
</ul>
<p>즉, 개별 단어 단위의 점수를 구하는 것이 중요한데, <code>Statistical Method</code>와 <code>Graph-Based Method</code> 두 가지 방법론으로 나눌 수 있다.</p>
<p><img src="https://velog.velcdn.com/images/fragrance_0/post/15e78e26-5892-4f2d-9bad-84c9c666c327/image.png" alt=""></p>
<p>출처 : 논문 <a href="https://arxiv.org/pdf/2104.08028.pdf">Back to the Basics: A Quantitative Analysis of Statistical and
Graph-Based Term Weighting Schemes for Keyword Extraction</a></p>
<br>

<blockquote>
<p>YAKE!는 <strong>개별 문서에서 중요한 키워드를 식별하기 위해 단어의 동시 등장 정도(Co-Occurrence) 나 빈도(Term Frequencies)와 같은 지역적인 텍스트 특징와 통계 정보에 의존한다</strong>. 대표적으로는 TF-IDF부터 KP-Miner, RAKE 등이 있다. 저자는 YAKE!의 장점을 다음과 같이 말한다.</p>
</blockquote>
<h4 id="⭐️-yake의-장점">⭐️ YAKE!의 장점</h4>
<ul>
<li>문서에 대응되는 키워드 데이터(정답데이터)가 필요없다(↔ 지도학습)</li>
<li>하나의 문서에만 의존하기 때문에 다양한 상황에서 빠르게 사용할 수 있다.</li>
<li>한번만 등장해도 중요하다고 판단할 수 있고, 여러 번 등장해도 중요하지 않다고 판단할 수 있다.</li>
<li>언어나 학습 데이터에 영향받지 않는다.(↔ 비지도 graph-based methods)</li>
<li>다양한 언어나 분야에 쓰일 수 있다.<br>


</li>
</ul>
<h3 id="📍-알고리즘">📍 알고리즘</h3>
<p><strong>⭐️ Text Pre-Processing and Candidate Term Identification</strong></p>
<ul>
<li><p><a href="https://pypi.org/project/segtok/">segtok rule-based sentence segmeter</a>를 이용해 <strong>문서를 문장 단위</strong>로 나눈다.</p>
</li>
<li><p>그리고 segtok segmenter의 web_tokenizer을 이용해 이 문장을 다시 띄어쓰기 단위로 쪼갠 후 토큰으로 쪼갠다. </p>
</li>
<li><p>각 토큰들은 다음과 같은 기준으로 분류되어 구획문자 테그가 첨부된다.</p>
</li>
<li><p>그 다음, 입력받는 언어에 대해 Static List로 정의된 Stopwords(불용어)를 사용해 잠재적으로 의미 없는 토큰들을 탐지한다. </p>
</li>
<li><p>이 전처리 단계의 결과는 문장의 리스트이며, 각 문장은 테그가 달린 부분들로 나뉜다.</p>
</li>
</ul>
</br>

<hr>
<p><em>[출처 | 딥다이브 Code.zip 매거진]</em></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[AI Dict] BERT, GAN 모델]]></title>
            <link>https://velog.io/@fragrance_0/AI-Dict-2-2.-Computer-Vision-%EB%AA%A8%EB%8D%B8-step-1</link>
            <guid>https://velog.io/@fragrance_0/AI-Dict-2-2.-Computer-Vision-%EB%AA%A8%EB%8D%B8-step-1</guid>
            <pubDate>Wed, 03 Jan 2024 16:06:12 GMT</pubDate>
            <description><![CDATA[<h2 id="1️⃣-bert">1️⃣ BERT</h2>
<p>BERT(Bidirectional Encoder Representations from Transformers)는 2018년 구글에서 제안한 ‘사전 훈련 언어 모델’로 11개 이상의 다양한 태스크에서 좋은 성능을 내는 범용 언어 모델이다. 즉, 특정 태스크를 위한 전이 학습 이전 단계인 <strong>임베딩</strong> 단계에 집중한 모델이다. </p>
<ul>
<li><p>훈련에는 위키피디아에서 얻은 25억 개 단어 규모의 데이터와 Book Corpus에서 얻은 8억 개 단어 규모의 데이터가 활용되었다. </p>
</li>
<li><p>활성화 함수로는 ReLu가 아닌 <strong>GELU</strong>, 옵티마이저로는 <strong>Adam을</strong> 사용하였다. </p>
</li>
<li><p>BERT를 통한 NLP는 Unsupervised 방식으로 대용량 Corpus를 통해 임베딩을 학습하는 Pre-train단계와 특정 태스크에 대해 Fine-tuning하는 2단계로 이뤄진다.</p>
<br>

</li>
</ul>
<h3 id="💡-bert의-구조">💡 BERT의 구조</h3>
<p>BERT다음과 같은 3가지 요소로 Input을 임베딩한다.</p>
<p><img src="https://velog.velcdn.com/images/fragrance_0/post/52b11a78-ee88-4d0d-b2f5-b61e1348a967/image.png" alt=""></p>
<p>출처 : <a href="https://happy-obok.tistory.com/23">https://happy-obok.tistory.com/23</a>
<br></p>
<p><strong>⭐️ Token Embedding</strong></p>
<p>Token Embedding은 자주 등장하면서 가장 긴 길이의 Sub-Word인 Word Piece 단위로 이뤄진다. 즉 ‘감사합니다’라는 한 구절은 ‘감사-’와 ‘-합니다’라는 Word Piece로 나뉘어 임베딩된다. 이를 통해 자주 등장하지 않는 단어를 전부 Out-of-Vocabulary(OOV)로 처리했던 문제를 해결할 수 있다.</p>
<br>

<p><strong>⭐️ Segmentation Embedding</strong></p>
<p>Segmentation Embedding은 토큰으로 나누었던 단어들을 다시 합치고, 첫번째 [SEP](Seperation, 즉 문장의 끝) Token까지는 0, 이후 Token까지는 1로 마스킹하여 각 문장들을 구분하기 위한 임베딩이다.</p>
<br>


<p><strong>⭐️ Position Embedding</strong></p>
<p>Position Embedding은 모델에게 토큰의 순서를 알려주기 위해 쓰인다. BERT는 Self Attention을 사용하는 Transformer의 인코더를 도입했기 때문에, 순서를 고려하기 위해서는 추가적인 임베딩이 필요하다. </p>
<br>

<h3 id="💡-bert의-사전-훈련">💡 BERT의 사전 훈련</h3>
<p><strong>⭐️ Masked Language Model</strong> </p>
<p>BERT의 사전 훈련 방법 중 Masked Langague Model(MLM)은 신경망에 입력되는 텍스트의 15%를 임의로 정해 Masking한 후, 이를 예측하는 방식으로 이뤄진다. 가령, ‘나는 [MASK]에 가서 사과와 [MASK]를 샀다’라는 문장에서 Masking된 ‘슈퍼’와 ‘바나나’를 맞추게 하는 것이다. </p>
<p>Fine Tuning 단계에서는 [MASK] 토큰이 사용되지 않아 사전 훈련과 Fine Tuning 단계의 태스크에 차이가 나타난다는 점을 보완하기 위해, 임의로 선택된 15%의 토큰 중 80%만 실제로 [MASK]로 변경하고, 나머지 10%는 임의의 단어로 변경, 남은 10%는 동일하게 둔다. </p>
<p><strong>⭐️ Next Sentence Prediction</strong></p>
<p>BERT는 QA(Question Answering)나 NLI(Natural Language Inference)와 같이 두 문장 간의 관계를 파악해야 하는 태스크를 위해 Next Sentence Prediction이라는 사전 훈련 방법을 사용한다. [SEP] 토큰으로 구분된 두 개의 문장을 준 후, 두 문장이 이어지는 문장인지를 맞추도록 학습시킨다. </p>
<br>


<h3 id="💡-bert의-fine-tuning">💡 BERT의 Fine-tuning</h3>
<p><strong>⭐️ Single Text Classification</strong></p>
<p>BERT는 문서 유형 분류 태스크를 위해 <a href="Classification">CLS</a>라는 토큰을 사용한다. 이 토큰 위치의 Output에 Dense Layer를 추가하여 분류 예측을 하도록 한다.
<br></p>
<p><strong>⭐️ Tagging</strong></p>
<p>각 단어의 품사 Tagging과 같은 태스크의 Fine Tuning은 각 단어의 Output 위치에 개별 Dense Layer를 추가하여 분류 예측을 하도록 하는 것으로 이뤄진다.
<br></p>
<p><strong>⭐️ Question Answering</strong></p>
<p>질문과 본문이라는 2개의 텍스트 쌍을 입력받아, 본문의 일부를 추출해서 주어진 질문에 대한 답을 출력하게 한다. 이 태스크를 위한 대표적인 데이터셋으로는 SQuAD가 있다.</p>
</br>

<hr>
<h2 id="2️⃣-gan">2️⃣ GAN</h2>
<h3 id="generative-adversarial-networks">Generative Adversarial Networks</h3>
<ul>
<li>GAN(생성적 적대 신경망)은 머신 러닝 분야에서 학문적으로 매우 중요한 의미를 지닌다. </li>
<li>2014년 Ian Goodfellow와 그의 동료들에 의해 소개된 이래로 많은 연구자들의 관심을 받았고, 다양한 세부 분야로 퍼져 발전, 적용되는 주요 기술이 되었다. </li>
<li>GAN은 주어진 학습 Dataset과 매우 유사한 새로운 데이터를 생성하기 위한 강력한 프레임워크를 제공하는 생성 모델이다. </li>
</ul>
<blockquote>
<p>GAN을 통해서 사실적이고 다양한 샘플을 생성할 수 있고, 이는 이미지 합성, 텍스트 생성, 심지어 신약 개발 등 다양한 적용 분야에서 활용된다.</p>
</blockquote>
<br>

<h3 id="💡-판별자-생성자">💡 판별자, 생성자</h3>
<ul>
<li>GAN의 두 가지 주요 구성 요소는 판별자(Discriminator)와 생성자(Generator)이다. </li>
<li>판별자와 생성자는 신경망이며, 서로 경쟁 관계에 있다. </li>
<li>판별자는 <strong>실제 데이터와 생성된 데이터를 구분하는 이진 분류기이</strong>다. </li>
<li>생성자는 <strong>판별자를 속일 수 있는 합성 데이터를 생성하는 역할</strong>을 한다. </li>
<li>판별자는 실제 데이터 샘플과 생성자에서 생성된 샘플을 학습하여 정확하게 분류하는 것을 목표로 한다. </li>
<li>동시에 생성자는 실제 데이터와 구별할 수 없는 샘플을 생성하도록 훈련받는다. </li>
</ul>
<h4 id="이러한-판별자와-생성자-간의-적대적-관계가-gan의-학습-과정을-주도한다">이러한 판별자와 생성자 간의 적대적 관계가 GAN의 학습 과정을 주도한다.</h4>
<br>

<h3 id="💡-손실-함수">💡 손실 함수</h3>
<p>생성자와 판별자 두 모델은 각자의 손실 함수를 가지고 있다.</p>
<p>$$
\min_G\max_DV(D,G) = E_{x<del>p_{data}(x)}[logD(x)] + E_{x</del>p_{z}(x)}[log(1-D(G(z)))]
$$</p>
<p>판별자 손실은 판별자가 실제 샘플과 생성된 샘플을 얼마나 잘 구별할 수 있는지를 측정한다. 일반적으로 <strong>이진 교차 엔트로피 손실</strong>로, 이 손실 함수로 학습하여 판별자가 데이터를 정확하게 분류하도록 한다. 반면 생성자 손실 함수는 생성자가 판별자를 얼마나 잘 속일 수 있는지를 정량화한다. 생성자는 판별자가 실제 데이터와 구분할 수 없는 샘플을 생성하기 때문에 이 손실을 최소화하는 것을 목표로 한다.</p>
<blockquote>
<p>각각의 손실 함수에 따라 판별자와 생성자의 가중치를 반복적으로 업데이트함으로써 GAN은 생성자가 실제 샘플을 생성하는 능력을 향상시키고 판별자는 이를 더 잘 구별할 수 있는 동적 균형을 이룬다.</p>
</blockquote>
<br>


<h3 id="💡-활용-분야">💡 활용 분야</h3>
<p>GAN은 다양한 영역에서 활용되고 있으며, 그 다양성과 영향력을 입증하고 있다.</p>
<p><img src="https://velog.velcdn.com/images/fragrance_0/post/db48394c-fa64-4229-a887-fa1f1ebcccab/image.png" alt=""></p>
<br>

<p><strong>⭐️ 이미지 합성</strong> </p>
<p>얼굴, 풍경, 사물과 같은 사실적인 이미지를 생성하는 데 사용되어 왔다. 실제 이미지의 Dataset로 생성기를 학습시킴으로써 GAN은 유사한 특성과 시각적 일관성을 나타내는 새로운 이미지를 생성할 수 있다.
<br></p>
<p><strong>⭐️ 데이터 증강</strong> </p>
<p>새로운 샘플을 생성하여 훈련 데이터를 보강할 수 있다. 이는 사용 가능한 Dataset가 제한되어 있을 때 특히 유용하며, GAN은 모델의 일반화 및 성능을 향상시킬 수 있는 추가 데이터 포인트를 생성할 수 있다.
<br></p>
<p><strong>⭐️ Style Transfer</strong> </p>
<p>한 이미지의 스타일을 다른 이미지로 전송하는 데 사용할 수 있다. 학습된 GAN을 사용하면 한 이미지의 콘텐츠는 유지하면서 다른 이미지의 예술적 스타일을 채택한 이미지를 생성할 수 있다.
<br></p>
<p><strong>⭐️ 텍스트-이미지 합성</strong></p>
<p>텍스트 입력에 따라 생성기를 조절하여 주어진 텍스트 입력에 해당하는 시각적 표현을 생성할 수 있다.
<br></p>
<p><strong>⭐️ 이상 감지</strong></p>
<p>데이터의 이상 징후를 감지하는 데 활용할 수 있다. 정상 데이터 샘플에 대해 GAN을 훈련시킴으로써 유사한 인스턴스를 재구성하고 생성하는 방법을 학습하고, 비정상적인 데이터가 제시되면 이상 징후를 탐지할 수 있다.</p>
<p>사실적인 특성을 가진 새로운 데이터를 생성하는 능력과 창의적이고 생성적인 작업의 한계를 뛰어넘을 수 있는 잠재력으로 인해 GAN은 머신러닝 분야에서 활발하고 흥미로운 연구 분야로 존재하고 있다.</p>
</br>

<hr>
<p>[출처 | 딥다이브 Code.zip 매거진]</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[AI Dict] 역전파, 임베딩, Framework, Inductive Bias]]></title>
            <link>https://velog.io/@fragrance_0/AI-Dict-2-1.-Computer-Vision-%EA%B0%9C%EB%85%90%EC%96%B4</link>
            <guid>https://velog.io/@fragrance_0/AI-Dict-2-1.-Computer-Vision-%EA%B0%9C%EB%85%90%EC%96%B4</guid>
            <pubDate>Wed, 03 Jan 2024 12:50:33 GMT</pubDate>
            <description><![CDATA[<h2 id="1️⃣-backpropagation">1️⃣ Backpropagation</h2>
<ul>
<li>역전파(Backpropagation)는 신경망에서 학습 알고리즘으로 사용되는 방법으로, 입력 데이터를 기반으로 모델의 출력과 실제 값 사이의 오차를 최소화하기 위해 가중치와 편향을 조정하는 과정을 의미한다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/fragrance_0/post/f91aa0b8-2b10-47d1-9bc8-13a5dc2a7f7c/image.png" alt=""></p>
<ul>
<li><p>학습은 크게 순전파와 역전파라는 두 단계로 이루어지는데, 순전파 단계에서는 입력 데이터가 모델을 통과하면서 예측값을 계산한다. 각 뉴런은 입력과 가중치를 곱한 후 활성화 함수를 통과하여 출력을 생성한다. 이러한 과정은 입력층에서부터 출력층까지 차례로 진행된다.</p>
</li>
<li><p>순전파가 완료되면 역전파 단계에서는 오차를 계산하고, 이 오차를 사용하여 가중치와 편향을 조정한다. 오차는 실제 값과 예측 값 사이의 차이로 계산된다. 역전파는 출력층에서부터 입력층까지 역방향으로 진행된다.</p>
</li>
</ul>
<blockquote>
<p>역전파의 핵심 아이디어는 오차를 거슬러 올라가며 각 층의 가중치에 대한 기여도를 계산하는 것이다. 이를 위해 미분 연쇄 법칙(Chain Rule)을 사용하여 각 노드의 입력에 대한 손실 함수의 미분 값을 계산한다. 이 미분 값은 가중치와 편향을 업데이트하는 데 사용된다. 역전파는 경사 하강법과 같은 최적화 알고리즘과 결합되어 신경망의 가중치를 조정하여 예측 성능을 향상시킨다.</p>
</blockquote>
<p>. 역전파는 국소적 미분을 전달하고 있고, 화살표 아래 값이 미분값이다. 현재 1 → 1.1 → 2.2 순으로 미분 값이 전달되었으므로 사과 가격에 대한 지불 금액의 미분값은 2.2라고 할 수 있다. 사과가 1원 오르면 최종 금액은 2.2배 증가하게 되는 것이다. 이러한 방식으로 여러 변수들에 대한 미분값을 효과적으로 구할 수 있는 것이 역전파이다.</p>
</br>

<hr>
<h2 id="2️⃣-embedding">2️⃣ Embedding</h2>
<ul>
<li><p>사진, 언어와 같은 인간의 표현 방식은 기계가 이해할 수 있는 수치 형태로 변환해주어야 한다. </p>
</li>
<li><p>이를 벡터화라고 말하며, 고차원의 벡터를 <strong>필요한 정보를 보존하면서 저차원으로 Mapping</strong>하는 것이 <strong>임베딩</strong>이다.</p>
</li>
<li><p>NLP에서는 One-hot 인코딩, Sparse Matrix로 표현된 각 단어를 저차원의 Dense Matrix로 임베딩하게 된다. </p>
</li>
<li><p><strong>단순히 텍스트를 ‘구분’하는 것이 아니라 의미적으로 ‘정의’할 수 있도록, 유사한 의미의 단어는 임베딩 공간에서 가까이 놓이도록 수행된다.</strong></p>
</li>
</ul>
<blockquote>
<p>NLP 분야에서의 대표적인 임베딩 방법으로는 <code>CountVectorizer</code>, <code>TfidfVectorizer</code>, <code>Word2Vec</code>이 있다.</p>
</blockquote>
<br>

<h3 id="⭐️-countvectorizer">⭐️ <strong>CountVectorizer</strong></h3>
<p>단순히 각 텍스트의 등장 횟수를 기준으로 특징을 추출하는 것이다. 가령 ‘하늘에 구름이 둥실둥실 떠있다’라는 문장을 벡터화할 때, 단어 사전을 등장 횟수에 따라 [’하늘에’, ‘구름이’, ‘둥실’, ‘떠있다’]를 [1, 1, 2, 1]로 정의하는 것이다. 하지만 이 방법은 큰 의미가 없는 조사가 높은 값을 가진다는 단점이 있다.</p>
<br>

<h3 id="⭐️-tfidfvectorizer">⭐️ <strong>TfidfVectorizer</strong></h3>
<ul>
<li>CountVectorizer의 단점을 해결하기 위해 나온 방법으로, TF-IDF를 특징으로 추출한다. </li>
<li>TF는 Term Frequency로, 특정 단어가 하나의 문서 내에서 나오는 횟수를 뜻하고</li>
<li>IDF는 Inverse Document Frequency로 특정 단어가 몇 개의 문서에서 등장하는지에 대한 지표의 반대이다. </li>
<li>TF-IDF는 이 두 값을 곱한 값으로, 특정 문서에서만 자주 등장하는 단어에 높은 값을 부여하게 된다. - - 모든 문서에서 자주 등장하는 <strong>조사는 낮은 IDF 값을 가져 앞서 언급했던 CountVectorizer의 문제를 보완할 수 있다.</strong></li>
</ul>
<br>

<h3 id="⭐️-word2vec">⭐️ <strong>Word2Vec</strong></h3>
<ul>
<li><p>위 두 방법이 단어의 등장 빈도를 기준으로 한 임베딩 방법이었다면, Word2Vec은 학습을 통해 단어 간의 유사도를 특징으로 추출한다. </p>
</li>
<li><p>*<em>이 때 ‘비슷한 위치에 등장하는 단어는 비슷한 의미를 갖는다’는 분포 가설을 활용한다. *</em></p>
</li>
<li><p>Word2Vec에는 <code>CBOW</code>와 <code>Skip-gram</code>이 있다. </p>
</li>
<li><p>CBOW는 어떤 단어를 문맥 안의 주변 단어들을 통해 예측하는 방법</p>
</li>
<li><p>Skip-gram은 어떤 단어를 가지고 주변 단어들을 예측하는 방식이다. </p>
</li>
</ul>
<blockquote>
<p>예를 들어 CBOW는 ‘나는 오늘 아침에 __를 먹었다’라는 문장의 빈칸에 들어갈 단어를 예측하는 방식으로 &gt; 이뤄진다. 이를 위해 주변 단어를 One-hot 인코딩으로 나타내어 Input 벡터로 사용하고, 여기에 가중치 행렬을 곱해 n차원 벡터를 만든다. 이 n차원 벡터들을 평균낸 다음 다시 가중치 행렬을 곱해 One-hot 인코딩 차원과 같은 벡터로 만든다. 이 벡터를 정답 Label의 One-hot 인코딩 벡터와 비교하여 가중치를 업데이트한다. 이렇게 학습을 수행한 다음, 가중치 행렬의 각 행을 임베딩 벡터로 활용한다. </p>
</blockquote>
</br>

<hr>
<h2 id="3️⃣-framework">3️⃣ Framework</h2>
<p>프레임워크(Framework)는 서비스 분야, 딥러닝, 웹 개발 등 맥락에 따라 사용하는 용도가 다양하다. 추상적인 의미로서, <strong>작업을 효율적으로 할 수 있도록 짜놓은 틀</strong>로 이해할 수 있다. 개발 분야에 한정하여 말하자면, 보통 특정 작업을 도와줄 수 있는 라이브러리나 함수를 모아둔 집합체를 의미한다.
<br></p>
<h3 id="💡-딥러닝-프레임워크">💡 딥러닝 프레임워크</h3>
<p>딥러닝 프레임워크는 딥러닝 학습을 도와줄 수 있도록 데이터 로드, 데이터 학습, 평가 등을 도와줄 수 있는 모듈과 함수를 제공한다. 딥러닝 프레임워크가 지원하는 사항(데이터 로드, 모델 구축, 손실함수, 평가, 자동 미분)들은 대체로 비슷하지만 계산 / 구현하는 방식에 차이가 있다. 딥러닝 프레임워크는 보통 Python 언어를 기반으로 하며 대표적인 프레임워크로는 PyTorch, Tensorlfow, Keras가 있다. 각 프레임워크마다 장단점이 있지만, 최근 <strong>딥러닝 분야에서는 PyTorch의 사용 비중이 점차 높아지고 있는 추세다.</strong></p>
<br>

<h3 id="💡-웹-프레임워크">💡 웹 프레임워크</h3>
<ul>
<li>사용자가 웹 애플리케이션을 구축하고 싶고, Python 언어를 주로 사용한다면 Django와 같은 웹 프레임워크를 활용할 수 있다. </li>
<li>이때 프레임워크는 웹을 구성할 수 있는 일종의 규칙을 제공해준다. </li>
<li>사용자는 정해진 규칙에 따라 코드를 채워넣기만 하면 원하는 기능을 구현할 수 있는 것이다. </li>
<li>프레임워크가 기존에 정해놓은 규칙은 사용자가 바꿀 수가 없으며, 필요할 때마다 불러쓰는 라이브러리와는 차이가 있다. </li>
<li>실행의 주체는 Django이고, 규칙을 따라가기만 하면 보안을 비롯한 여러 기능들을 제공받을 수 있는 것이다.</li>
</ul>
<br>

<h3 id="💡-flask">💡 Flask</h3>
<ul>
<li>플라스크는 마이크로 웹 프레임워크이다. </li>
<li>이는 프레임워크를 간결하게 유지하고 확장할 수 있다는 의미이다. Django와 같은 프레임워크에 비해 초기 기능이 적지만, 확장 모듈을 활용해 필요한 기능을 개발해나갈 수 있다. </li>
<li>또한 규칙이 복잡한 대부분의 프레임워크와 달리 플라스크는 최소한의 규칙만 존재하기 때문에 비교적 다른 프레임워크에 비해 자유도가 높다. </li>
<li>간단한 프레임워크가 필요하다면, 플라스크를 사용하는 것이 좋다.</li>
</ul>
</br>

<hr>
<h2 id="4️⃣-inductive-bias">4️⃣ Inductive Bias</h2>
<h3 id="💡-inductive-bias란">💡 Inductive Bias란?</h3>
<p><img src="https://velog.velcdn.com/images/fragrance_0/post/378f4bd4-3b91-4764-885a-037252096ffb/image.png" alt=""></p>
<ul>
<li>Inductive Bias를 직역하면 귀납적 편향이다. </li>
<li>네트워크의 편향(Bias)을 귀납적으로 추론한다는 뜻이다. </li>
<li>우리가 어떤 데이터나 네트워크를 다루는 과정에서 다루려는 데이터가 특정 값에 치우쳐 있거나 공통적 특성을 가질 때 이를 편향되었다고 한다. </li>
<li>대부분의 머신러닝, 딥러닝 네트워크는 특정한 상황을 가정하고 개발되며, 상황은 네트워크의 구조, Dataset의 특성 등이 있을 수 있다. </li>
<li>상황에 맞는 일반적인 가정을 네트워크 설계 과정에 반영한다면 더 높은 성능을 얻을 수 있을 것이며, 여기서 말하는 가정은 다루려는 상황에 대한 특성이 된다. </li>
<li>즉, 상황에 대한 가정을 추론하여 발생한 편향을 Inductive Bias라고 하며 이는 네트워크의 성능을 향상시키는데 큰 영향을 미친다.</li>
</ul>
<h3 id="💡-locality">💡 <strong>Locality</strong></h3>
<p>Locality는 유사한 요소들이 가까운 위치에 있다는 특성이다. 위 그림에서 CNN의 계산 과정을 보면, 모든 입력이 모든 출력에 영향을 미치는 FCN과 다르게 가까운 위치의 픽셀들 사이의 가중합만이 출력에 영향을 미친다. 이는 가까운 위치에 유사한 요소들이 있다는 가정에서 비롯된 연산이다. </p>
<h3 id="💡-translation-invariance">💡 <strong>Translation Invariance</strong></h3>
<p>Translation Invariance는 특정 패턴의 위치가 옮겨져도 같은 특성을 가진다는 것이다. 강아지가 있는 그림에서 강아지의 위치가 왼쪽 아래에서 오른쪽 위로 이동하더라도 강아지라는 대상의 속성은 변하지 않는다. 이러한 특성을 반영하기 위해 커널을 한 부분에만 적용하지 않고 이동시키며 이미지 전체에 대해 연산을 수행하는 것 역시 CNN의 Inductive Bias를 반영한 연산이다. </p>
<blockquote>
<p>CNN에 이미지의 공간적 특성에 따른 Inductive Bias가 적용되었다면 , RNN에는 시간에 따른 Inductive Bias가 적용된다. RNN은 주로 시간에 따라 변화하는 음성이나 실시간 데이터를 처리하는데 사용되기 때문이다. </p>
</blockquote>
<blockquote>
<p>RNN은 Sequential과 Temporal Invariance라는 Inductive Bias를 가진다. Sequential은 입력이 순차적인 특성을 가진다고 가정하는 것이며, Temporal Invariance는 시간에 따라 네트워크의 출력이 변하지 않는다는 가정이다. Sequential을 반영하기 위해 네트워크의 입력을 순차적으로 넣게 되며 Temporal Invariance 특징에 따라 시간에 따른 출력을 얻게 된다.</p>
</blockquote>
</br>







<p>[출처 | 딥다이브 Code.zip 매거진]</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[AI Dict] 자기회귀 모델 ARIMA 예시, CNN, RNN]]></title>
            <link>https://velog.io/@fragrance_0/AI-Dict-1-2.-Audio-%EB%AA%A8%EB%8D%B8</link>
            <guid>https://velog.io/@fragrance_0/AI-Dict-1-2.-Audio-%EB%AA%A8%EB%8D%B8</guid>
            <pubDate>Wed, 03 Jan 2024 12:37:59 GMT</pubDate>
            <description><![CDATA[<h2 id="1️⃣-자기회귀-모델-autoregressive-model">1️⃣ 자기회귀 모델 (Autoregressive Model)</h2>
<h3 id="📎-자기회귀-통계적-의미">📎 자기회귀 통계적 의미</h3>
<ul>
<li>통계학에서 자기회귀(Autoregressiveness)란 이후 값이 이전 값에 선형 의존 (Linearly Dependent)한다는 의미임</li>
</ul>
<p>$$
X_t = \sum^p_{i=1}\rho_iX_{t-i}+\epsilon_t
$$</p>
<ul>
<li>현재 시점의 데이터 $X_t$는 $i$시점 이전의 데이터 $X_{t-i}$들의 선형결합과 $\epsilon_t$라는 White Noise으로 이루어져 있음.</li>
<li>여기서 $\rho_i$는 $i$시점 이전의 데이터에 곱해지는 가중치로, 자기회귀 모델에서 학습가능한 파라미터임</li>
</ul>
<br/>

<hr>
<h3 id="📎-자기회귀-활용분야">📎 자기회귀 활용분야</h3>
<ul>
<li>1) 시계열 분석에서의 ARIMA(Autoregressive Integrated Moving Average)</li>
<li>2) 딥러닝의 <strong>RNN(Recurrent Neural Network)</strong></li>
<li>3) 자연어처리 분야의 N-gram</li>
<li>4) 오디오 처리 분야에서의 <strong>Wavenet</strong></li>
</ul>
<blockquote>
<h4 id="🤔-arima-모델은-모델의-특정-파라미터ar-차수-차분의-차수-ma-차수로-결정">🤔 ARIMA 모델은 모델의 특정 파라미터(AR 차수, 차분의 차수, MA 차수)로 결정</h4>
</blockquote>
<ul>
<li>자동회귀(AR: AutoRegressive)</li>
<li>누적이동평균(I: Integrated): 데이터의 차분값(differencing)
  (현재값과 이전값간의 차이)</li>
<li>이동평균(MA: Moving Average): 시간에 따른 평균값의 변화를 나타내는 모델입니다. 이동평균은 일정 기간 동안의 관측값들의 평균을 계산하여 경향을 파악합니다.</li>
</ul>
<br/>

<hr>
<h3 id="📎-자기회귀-동향">📎 자기회귀 동향</h3>
<ul>
<li><p>최근 자기회귀를 기반으로 한 모델들의 인기가 떨어진 것은 병렬 연산이 불가능하다는 점 때문이다. </p>
</li>
<li><p>GPU 등의 현대 연산 유닛은 병렬 연산에 최적화된 구조를 가지고 있는데 자기회귀 기반 모델들은 특정 시점의 데이터가 이전 시점의 데이터에 의존하기 때문에 직렬적인 연산을 수행하고, 이에 GPU나 TPU 등의 이점을 십분 활용하지 못한다. </p>
</li>
</ul>
<blockquote>
<p><strong>최근, Transformer 등 Attention을 기반으로 한 병렬 연산 모델들이 주목을 받고 있음</strong></p>
</blockquote>
<br/>

<hr>
<h3 id="📑-autoregressive-model--arima-모델-예시">📑 <strong>Autoregressive Model | ARIMA 모델 예시</strong></h3>
<br>

<h4 id="📌-라이브러리-임포트-및-예제-데이터-생성">📌 라이브러리 임포트 및 예제 데이터 생성</h4>
<pre><code class="language-python">import numpy as np
import matplotlib.pyplot as plt
import statsmodels #통계학 패키지

# 예제 데이터 생성
np.random.seed(0)
temperature = []
for i in range(30):
    temperature.append(10 + i / 2 + np.random.randint(-3,1))  # 랜덤한 변동 포함</code></pre>
<br>

<h4 id="📌-자기회귀-모델-구축-및-학습">📌 자기회귀 모델 구축 및 학습</h4>
<pre><code class="language-python"># 입력 특성과 타깃 변수 준비
X_train = []
y_train = []

for i in range(3, len(temperature)):
    X_train.append(temperature[i-3:i])
    y_train.append(temperature[i])

# 자기회귀 모델 구축 및 학습
model = statsmodels.tsa.ar_model.AutoReg(y_train, lags=3) 
result = model.fit()  # 최대 3개의 이전 시점 값을 사용

# 다음 날의 온도 예측
next_day = temperature[-3:]
next_temperature = result.predict(start=len(y_train), end=len(y_train) + 2)</code></pre>
<br>


<h4 id="📌-시각화">📌 시각화</h4>
<pre><code class="language-python"># 온도 그래프 플로팅
plt.plot(range(len(temperature)), temperature, label=&#39;Actual Temperature&#39;)
plt.plot(range(len(temperature), len(temperature) + len(next_temperature)), next_temperature, &#39;ro&#39;, label=&#39;Predicted Temperature&#39;)
plt.xlabel(&#39;Day&#39;)
plt.ylabel(&#39;Temperature&#39;)
plt.title(&#39;Temperature Changes&#39;)
plt.legend()
plt.savefig(&#39;AR.png&#39;)
plt.show()</code></pre>
<ul>
<li>lags = 3으로 설정한 것은 이 페이지 상단에 소개했던 수식 속의 $p$ = 3이라는 것을 의미함</li>
<li>즉 이 모델은 이전 3개의 시점의 데이터를 바탕으로 다음 시점의 데이터를 예측하는 것</li>
<li>AutoReg 모델이 $\rho_1, \rho_2, \rho_3$ 가중치 파라미터를 학습해 시각화 그림 속 빨간 점들을 예측함</li>
</ul>
</br>

<hr>
<h2 id="2️⃣-cnn">2️⃣ CNN</h2>
<h3 id="📎--합성곱-신경망convolutional-neural-networks--cnn">📎  합성곱 신경망(Convolutional Neural Networks , CNN)</h3>
<ul>
<li>기존 Fully Connected Neural Network의 입력 데이터는 1차원 배열 형태로 한정됨</li>
<li>따라서 이미지 데이터로 신경망을 학습시켜야 할 경우, 3차원 이미지데이터(RGB)를  1차원으로 평면화(Flatten) 시킨 후 모델에 입력해야했음</li>
</ul>
<ul>
<li>이 과정에서 이미지의 공간적 정보가 손실되어, 모델의 특징 추출 및 학습이 비효율적이고 정확도의 한계가 발생함.</li>
<li><strong>따라서 이미지를 그대로 입력 받음으로써 공간적/지역적 정보를 그대로 유지한 상태로 학습을 가능하도록 한 모델 <code>CNN</code>이 제안됨</strong></li>
</ul>
<br>

<p><strong>⚑ 구조 ⚑</strong></p>
<p><img src="https://velog.velcdn.com/images/fragrance_0/post/63ec9748-6cfe-40b6-9689-b61485e13893/image.png" alt=""></p>
<ul>
<li>CNN 은 위 이미지와 같이 <strong>이미지의 특징을 추출하는 부분</strong>과 <strong>클래스를 분류하는 부분</strong>으로 나눌 수 있음</li>
<li>특징 추출(Feature Extraction) 영역은 Convolution Layer, Pooling Payer를 여러 겹 쌓는 형태로 구성됨</li>
<li>CNN의 마지막 부분에는 이미지분류(Classification)를 위한 Fully Connected Layer를 적용한 후 softmax를 적용해주면 클래스 별로 분류되는 확률이 최종 출력값으로 나오게 됨</li>
</ul>
<br>


<p><strong>⚑ Convolutional Layer(합성곱 계층) ⚑</strong></p>
<p><img src="https://velog.velcdn.com/images/fragrance_0/post/88a52b71-c404-49f1-9fa7-ab7fb0c03f67/image.png" alt=""></p>
<ul>
<li>이 계층에서는 이미지에 필터를 적용하여 Feature Map을 얻음</li>
<li>위 그림에서는  3 ✕ 32 ✕ 32 크기의 이미지에 3 ✕ 5 ✕ 5 크기의 필터를 적용하여 1 ✕ 28 ✕ 28 크기의 Activation Map을 생성함</li>
<li>여기서 3은 채널 수(Channel 혹은 Depth)이며, 이미지가 RGB 이기 때문에 3이고, 흑백인 경우 1이 된다. </li>
</ul>
<blockquote>
<p>쉽게 말해서, 필터를 이미지의 맨 왼쪽 위에 가져다 댄 후 내적하면 숫자 하나가 나오고 그 값이 Activation Map 의 맨 왼쪽 위의 값으로 들어가게 된다.  그래서 결과로 나오는 Activation Map 의 크기가 32 - 5 + 1 = 28 이 되는 것이다.</p>
</blockquote>
<p>이러한 결과 값을 Feature Map 또는 Activation Map 이라고 부른다. 이 때, 특징을 여러 개 뽑기 위해서 여러 개의 필터를 사용하고, 여러개의 Activation Map 이 생성된다.</p>
<br>

<h3 id="✜-stride">✜ Stride</h3>
<p><img src="https://velog.velcdn.com/images/fragrance_0/post/8fea0f15-6865-4f30-873a-c4485b6bfe66/image.png" alt=""></p>
<ul>
<li><p>보통은 필터가 이미지 기준으로 한 칸씩 이동하며 계산을 하지만 여러 칸씩 이동이 가능하다.</p>
</li>
<li><p>그 이동의 보폭을 Stride라고 하며 위 그림에서는 두 칸씩 이동하면서 연산하도록 파라미터를 통해 조절했으므로 Stride는 2가 된다. </p>
</li>
</ul>
<br>

<h3 id="✜-padding">✜ Padding</h3>
<p><img src="https://velog.velcdn.com/images/fragrance_0/post/04cf72ca-e897-4aaf-9d6e-017330d12835/image.png" alt=""></p>
<p>입력 이미지의 가장자리에 측정 값으로 설정된 픽셀들을 추가함으로써 입력 이미지와 출력 이미지의 크기를 같거나 비슷하게 만드는 역할을 수행한다. 0의 값을 갖는 픽셀을 추가하는 것을 Zero-Padding 이라고 하며, CNN 에서는 주로 Zero-Padding 이 사용된다.</p>
<br>

<p><strong>Pooling Layer</strong></p>
<p><img src="https://velog.velcdn.com/images/fragrance_0/post/2acb8123-d48c-4e91-a7e1-9e1694fb785b/image.png" alt=""></p>
<ul>
<li><p>Pooling 계층에서는 이전 합성곱 과정을 통해 생성한 결과(Feature Map)에서 비교적 상관관계가 낮은 부분은 삭제함으로써 차원을 줄이는 과정을 수행한다. </p>
</li>
<li><p>Pooling 에는 대표적으로 <code>Max Pooling</code> 과 <code>Average Pooling</code>이 있다.</p>
</li>
<li><p>위 이미지와 같이 선택 영역의 크기가 2 ✕ 2인 경우,</p>
<ul>
<li>Max Pooling은 해당 크기의 행렬에서 가장 큰 값(Max)을, </li>
<li>Average Pooling은 평균값(Avaerage)을 취해서 Feature Map의 크기를 반으로 줄인다. </li>
</ul>
</li>
</ul>
<blockquote>
<p>선택 영역의 내부에서는 객체의 이동이나 회전에 의해 픽셀의 위치가 변경되더라도 출력값이 동일하기 때문에 객체가 이동이나 회전하더라도 같은 객체로 인식할 수 있다. 또한 모델이 처리해야 하는 이미지의 크기가 줄어들기 때문에 모델 파라미터 수가 줄어들어 학습시간을 크게 절약할 수 있다.</p>
</blockquote>
<br>

<h3 id="✜-fully-connected-layer전결합층">✜ Fully Connected Layer(전결합층)</h3>
<p>Fully Connected 계층에서는 앞에서 얻은 다차원 벡터의 행렬을 1차원 배열로 만들고 softmax 함수를 통해 이미지를 이미 정의된 분류 라벨 중에 하나로 분류한다.</p>
<blockquote>
<p>💡 따라서 요약하자면, CNN은 합성곱과 Pooling 을 반복적으로 사용하면서 특징을 찾고, 그 특징을 입력데이터로 Fully Connected Layer 에 보내서 카테고리 중에 하나로 분류하는 작업을 한다.</p>
</blockquote>
<br>

<hr>
<h2 id="3️⃣-rnn">3️⃣ RNN</h2>
<blockquote>
<p>💡 메모리셀(RNN 셀) : 은닉층에서 활성화 함수를 통해 결과를 내보내는 역할을 하는 노드, 이전의 값을 기억하려고 하는 일종의 메모리 역할을 수행한다.</p>
</blockquote>
<blockquote>
<p>은닉상태(hidden state) : 메모리 셀이 출력층 방향 또는 다음 시점의 메모리셀에 보내는 값을 의미한다.</p>
</blockquote>
<h3 id="📎-순환-신경망-recurrent-neural-network-rnn">📎 순환 신경망 (Recurrent Neural Network, RNN)</h3>
<ul>
<li><p>RNN은 자연어 처리 분야에서 많이 쓰이는 딥러닝의 가장 기본적인 시퀀스 모델임</p>
</li>
<li><p>예를 들어 자연어 처리 모델을 통해 한국어-영어 번역을 한다고 하자. 입력으로 주어지는 한국어 문장도 단어의 시퀀스이고 출력으로 나와야 하는 번역된 영어 문장도 시퀀스라고 할 수 있다. 이러한 시퀀스들을 처리하기 위해 고안된 모델을 시퀀스 모델이라고 한다.</p>
</li>
</ul>
<br>

<p><strong>RNN 구조</strong></p>
<p><img src="https://velog.velcdn.com/images/fragrance_0/post/62200cb8-830e-44cf-8266-3d7b36c4f590/image.png" alt=""></p>
<ul>
<li>RNN은 일반적으로 위 그림의 좌측처럼 화살표로 사이클을 그려서 재귀 형태로 표현하기도 하고,</li>
<li>우측처럼 여러 시점으로 펼져서 표현하기도 한다.  </li>
<li>우측을 자세히 보면 이전 시점의 은닉 상태값이 다음 시점의 메모리셀에 입력값으로 사용된다.</li>
</ul>
<br>

<p><strong>RNN 수식</strong></p>
<p>은닉층 : $h_t = tanh(W_xx_t + W_hh_{t-1}+b)$</p>
<p>출력층 : $y_t = f(W_yh_t + b)$</p>
<p>현재 시점의 은닉상태 값은 $h_t$ 라고 할때, 이 값은 이전 시점 $t-1$ 에서의 은닉상태 값, 그리고 현재 시점의 입력층 에서 $x_t$ 을 받아서 갱신된다. 
이전 시점의 은닉상태와 현재 시점의 입력값은 각각 $W_{hh} , W_{xh}$ 를 학습을 위한 가중치로 가진다. 각 가중치와 입력값을 곱하고 편향 $b_h$ 를 더한 뒤 활성함수 Tanh 에 넣으면 현재 시점의 은닉상태 값 $h_t$을 구할 수 있다.</p>
<p><strong>RNN 활용</strong></p>
<p><img src="https://velog.velcdn.com/images/fragrance_0/post/dc937378-a1f1-4dd8-b0f2-83bbf87573a7/image.png" alt=""></p>
<p>RNN은 입력과 출력의 길이가 고정되어 있지 않아서 설계에 따라 다앙한 용도로 사용할 수 있다.</p>
<ul>
<li><p><strong>일대다 모델 (one-to-many)</strong>
하나의 입력에 대해 여러개의 출력을 하는 모델로, 하나의 이미지 입력에 대해 사진의 제목을 출력하는 이미지 캡셔닝에 사용 가능하다. 사진의 제목은 단어들의 나열이므로 시퀀스라고 할 수 있다.</p>
</li>
<li><p><strong>다대일 모델(many-to-one)</strong> 
단어 시퀀스에 대해 하나의 출력을 하는 모델로, 입력 문서가 긍정적인지 부정적인지를 판별하는 감성분류 , 메일이 정상메일인지 스팸메일인지 분류하는 스팸 메일 분류 등에 사용할 수 있다.</p>
</li>
<li><p><strong>다대다 모델(many-to-many)</strong>
사용자가 문장을 입력하면 대답문장을 출력하는 챗봇과 입력문장으로부터 번역된 문장을 출력하는 번역기, 또는 품사 태깅 같은 작업이 속한다.</p>
</li>
</ul>
</br>





<p><em>[출처 | 딥다이브 Code.zip 매거진]</em></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[2-3] 클래스&메소드 심화3]]></title>
            <link>https://velog.io/@fragrance_0/2-3-%ED%81%B4%EB%9E%98%EC%8A%A4%EB%A9%94%EC%86%8C%EB%93%9C-%EC%8B%AC%ED%99%94</link>
            <guid>https://velog.io/@fragrance_0/2-3-%ED%81%B4%EB%9E%98%EC%8A%A4%EB%A9%94%EC%86%8C%EB%93%9C-%EC%8B%AC%ED%99%94</guid>
            <pubDate>Mon, 01 Jan 2024 15:14:33 GMT</pubDate>
            <description><![CDATA[<h2 id="💡-chapter-2-3-파이썬-클래스-심화">💡 Chapter 2-3. 파이썬 클래스 심화</h2>
<h3 id="■-클래스-기반-메소드-심화">■ 클래스 기반 메소드 심화</h3>
<p>• Class Method
• Instance Method
• Static Method
• 3가지 메소드 활용 실습</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[2-2] 클래스&메소드 심화2]]></title>
            <link>https://velog.io/@fragrance_0/%ED%81%B4%EB%9E%98%EC%8A%A4%EB%A9%94%EC%86%8C%EB%93%9C-%EC%8B%AC%ED%99%942</link>
            <guid>https://velog.io/@fragrance_0/%ED%81%B4%EB%9E%98%EC%8A%A4%EB%A9%94%EC%86%8C%EB%93%9C-%EC%8B%AC%ED%99%942</guid>
            <pubDate>Mon, 01 Jan 2024 11:12:03 GMT</pubDate>
            <description><![CDATA[<h2 id="💡-chapter-2-2-파이썬-클래스-심화">💡 Chapter 2-2. 파이썬 클래스 심화</h2>
<p>■ 클래스 상세 설명
• 클래스 변수 vs 인스턴스 변수
• 클래스 메소드 실습
• 네임스페이스 이해</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[2-1] 클래스&메소드 심화1]]></title>
            <link>https://velog.io/@fragrance_0/1.-%ED%8C%8C%EC%9D%B4%EC%8D%AC-%ED%81%B4%EB%9E%98%EC%8A%A4-%EC%8B%AC%ED%99%94</link>
            <guid>https://velog.io/@fragrance_0/1.-%ED%8C%8C%EC%9D%B4%EC%8D%AC-%ED%81%B4%EB%9E%98%EC%8A%A4-%EC%8B%AC%ED%99%94</guid>
            <pubDate>Mon, 01 Jan 2024 11:00:38 GMT</pubDate>
            <description><![CDATA[<h2 id="💡-chapter-2-1-파이썬-클래스-심화">💡 Chapter 2-1. 파이썬 클래스 심화</h2>
<h3 id="■-클래스-기반-개발-설명">■ 클래스 기반 개발 설명</h3>
<p>• 절차 지향 vs 객체 지향
• 객체 지향 프로그래밍 장점
• 클래스 기반 코딩 실습</p>
<hr>
<h3 id="리스트-구조">리스트 구조</h3>
<ul>
<li>관리하기 불편</li>
<li>인덱스 접근 시 실수 가능성 증가, 삭제 불편<br>
### 딕셔너리 구조</li>
<li>코드 반복 지속, 중첩 문제, 키 조회 예외 처리 등<br>
### ⭐️ 클래스 구조</li>
<li>구조 설계 후 재사용성 증가</li>
<li>코드 반복 최소화, 메소드 활용</li>
<li>복잡한 구조에서의 코딩은 무조건 클래스로 수행</li>
<li>매직 메소드</li>
</ul>
<p><img src="https://velog.velcdn.com/images/fragrance_0/post/3306be86-b42b-4137-80ff-511cfa0bc463/image.png" alt=""></p>
<ul>
<li>format함수로 처음 self에는 컴페니 정보를 넣고, 두번째는 self에 details라고 해놓고 실행</li>
<li>알맹이에 뭐가 들었는지 확인 효율적으로 가능</li>
</ul>
<h4 id="representation-method">representation method</h4>
<ul>
<li>repr라는 메소드로 활용</li>
<li>객체이고, 자료형의 타입에 따른 객체를 그대로 표시해줄 때, representaion선언</li>
</ul>
<br>

<h3 id="추가-리스트-선언">(추가) 리스트 선언</h3>
<pre><code class="language-python"># 리스트 선언
car_list = []

car_list.append(car1)
car_list.append(car2)
car_list.append(car3)

print()

print(car_list)

print()
print()

# 반복(__str__)
for x in car_list:
    print(repr(x))
    print(x)
</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[[1] 파이썬 중급 소개 & 커리큘럼]]></title>
            <link>https://velog.io/@fragrance_0/0.-%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EC%A4%91%EA%B8%89-%EC%86%8C%EA%B0%9C-%EC%BB%A4%EB%A6%AC%ED%81%98%EB%9F%BC</link>
            <guid>https://velog.io/@fragrance_0/0.-%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EC%A4%91%EA%B8%89-%EC%86%8C%EA%B0%9C-%EC%BB%A4%EB%A6%AC%ED%81%98%EB%9F%BC</guid>
            <pubDate>Mon, 01 Jan 2024 09:24:23 GMT</pubDate>
            <description><![CDATA[<h2 id="💡-chapter-1-1-파이썬-중급-소개">💡 Chapter 1-1. 파이썬 중급 소개</h2>
<p>■ 중급 과정 레퍼런스
• 기초 과정 vs 중급 과정
• 언어의 심화 학습 필요성(중급 테크닉)
• 중요 파트 : Generator, Iterator, venv, Object, lambda, Coroutine…</p>
<p>-&gt; 오픈소스를 사용함에 있어서 전반적인 이해도를 높이고자함</p>
</br>

<h2 id="💡-chapter-1-2-기본-환경-설정">💡 Chapter 1-2. 기본 환경 설정</h2>
<p>■ 개발 환경 설정 과정
• 파이썬 설치
• 에디터 설치(Pycharm, Atom, VSCode…)
• 가상 환경 설정(Venv)
• 에디터 플러그인 설치(test, auto, script)
• 테스트 패키지 설치(Pendulum, pytest)
• 테스트 코드 작성 및 실행</p>
<p><img src="https://velog.velcdn.com/images/fragrance_0/post/3a218630-e494-4ca6-86e1-b38babffce29/image.png" alt=""></p>
<h3 id="📂-vsc-가상환경-설정하기">📂 VSC 가상환경 설정하기</h3>
<ul>
<li>cmd창에서 code라고 치면, VSC가 나오도록 설정</li>
<li>터미널 창에서 코드 입력</li>
</ul>
<pre><code class="language-python"># 가상환경 설정
python3 -m venv python_ex

# cd: 들어가기
cd python_ex

# ls: 내가 어디
ls

# bin으로 가기
bin

# 가상환경 활성화
./activate
</code></pre>
<ul>
<li>VSC에서 view로 들어가면 &gt; command palette 들어가기</li>
<li>python: Select interpreter 누르기</li>
<li>내가 만든 가상환경으로 들어가기</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[7. DALLE2로 인스타 포스팅 생성 및 업로드 프로그램 만들기]]></title>
            <link>https://velog.io/@fragrance_0/7.-DALLE2%EB%A1%9C-%EC%9D%B8%EC%8A%A4%ED%83%80-%ED%8F%AC%EC%8A%A4%ED%8C%85-%EC%83%9D%EC%84%B1-%EB%B0%8F-%EC%97%85%EB%A1%9C%EB%93%9C-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8-%EB%A7%8C%EB%93%A4%EA%B8%B0</link>
            <guid>https://velog.io/@fragrance_0/7.-DALLE2%EB%A1%9C-%EC%9D%B8%EC%8A%A4%ED%83%80-%ED%8F%AC%EC%8A%A4%ED%8C%85-%EC%83%9D%EC%84%B1-%EB%B0%8F-%EC%97%85%EB%A1%9C%EB%93%9C-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8-%EB%A7%8C%EB%93%A4%EA%B8%B0</guid>
            <pubDate>Mon, 11 Dec 2023 15:04:16 GMT</pubDate>
            <description><![CDATA[<h2 id="📂-인스타-포스팅-생성-및-업로드-프로그램-개요">📂 인스타 포스팅 생성 및 업로드 프로그램 개요</h2>
<h3 id="📎-프로그램-화면">📎 프로그램 화면</h3>
<p><img src="https://velog.velcdn.com/images/fragrance_0/post/05f6c349-9036-479f-8e8c-3a418c30d2d7/image.png" alt="">
<br/></p>
<h3 id="📎-프로그램-개요">📎 프로그램 개요</h3>
<p><img src="https://velog.velcdn.com/images/fragrance_0/post/10267c38-6584-4fad-a3a1-c34c29537936/image.png" alt=""></p>
<ul>
<li>포스팅 요청 → 글 생성 &amp; 그림 생성을 위한 번역 프롬프트 생성</li>
<li>인스타그램api → 인스타 자동 업로드</li>
<li>DALLE2 그림생성</li>
</ul>
<br/>

<hr>
<h2 id="📂-dalle2">📂 DALLE2</h2>
<blockquote>
<p><a href="https://openai.com/dall-e-2">DALLE2 오픈AI 사이트</a></p>
</blockquote>
<p><img src="https://velog.velcdn.com/images/fragrance_0/post/a4715750-008d-4444-b783-8dc298ba33a2/image.png" alt=""></p>
<ul>
<li><p>터미널창에 관련 패키지 설치 및 임포트</p>
</li>
<li><p>api키 작성</p>
</li>
</ul>
<pre><code class="language-python">import openai
import urllib
</code></pre>
<br/>

<hr>
<h2 id="📂-파이썬을-활용한-인스타그램-업로드-방법-익히기">📂 파이썬을 활용한 인스타그램 업로드 방법 익히기</h2>
<h3 id="📎-instagrapi-오픈소스">📎 instagrapi 오픈소스</h3>
<ul>
<li><p>파이썬 기반의 오픈소스 사이트 접속</p>
<blockquote>
<p><a href="https://github.com/subzeroid/instagrapi">github | instagrapi</a></p>
</blockquote>
</li>
<li><p>파이썬 환경에서 인스타 업로드 바로 가능하도록 함</p>
</li>
<li><p>스토리 업로드 혹은 장소 지정 등 인스타그램의 다양한 기능을 오픈소스로 구현 가능</p>
</li>
</ul>
<p><img src="https://velog.velcdn.com/images/fragrance_0/post/a8abdfe3-f46d-4e3e-b348-815479f9b6d3/image.png" alt=""></p>
<h3 id="📎-코드-작성">📎 코드 작성</h3>
<h4 id="1-이미지-사이즈-변환">1. 이미지 사이즈 변환</h4>
<ul>
<li>1080x1080 정사각형 사이즈로 업로드해야함 -&gt; 사이즈 재정의</li>
<li>클라이언트 클래스를 활용해서 CL 이라는 인스턴스 생성</li>
<li>Newpic: 정사각형으로 이미지를 재정의한 경로</li>
</ul>
<pre><code class="language-python"># 이미지 사이즈 변환
image = Image.open(&quot;instaimg.jpg&quot;)
image = image.convert(&quot;RGB&quot;)
new_image = image.resize((1080, 1080))
new_image.save(&quot;new_picture.jpg&quot;)
</code></pre>
<h4 id="2-인스타그램-로그인">2. 인스타그램 로그인</h4>
<ul>
<li>CL.login을 활용해 인스타그램 로그인</li>
</ul>
<pre><code class="language-python">#인스타그램 로그인
cl = Client()
cl.login(USER_ID, USER_PASSWORD)
</code></pre>
<h4 id="3-사진-가져오기">3. 사진 가져오기</h4>
<ul>
<li>Newpic 이미지 경로를 PhotoPath 변수에 저장</li>
</ul>
<pre><code class="language-python">#사진 가져오기
phot_path = &quot;new_picture.jpg&quot;
phot_path  = Path(phot_path)
print(phot_path)
</code></pre>
<h4 id="4-업로드하기">4. 업로드하기</h4>
<ul>
<li>CL.photoUpload 안에 업로드하고자 하는 사진의 경로 + 작성 텍스트 넣기 </li>
</ul>
<pre><code class="language-python">
#업로드하기
cl.photo_upload(phot_path , &quot;hello this is a test from instagrapi&quot;)
</code></pre>
<br/>

<hr>
<h2 id="📂-메인코드-작성-streamlit-구현-코드">📂 메인코드 작성, streamlit 구현 코드</h2>
<p><img src="https://velog.velcdn.com/images/fragrance_0/post/98bde8b7-c58b-4cb3-bfaa-cd9c2bb316ca/image.png" alt=""></p>
<ol>
<li>사용자의 한글 입력을 영어로 번역하기 위해 google Translator 활용</li>
</ol>
<ol start="2">
<li>이미지 사이즈 수정된 이미지 + 유저 문구를 포함한 인스타 게시물 업로드 </li>
</ol>
<ol start="3">
<li>ChatGPT를 이용한 해시태그 생성</li>
</ol>
<ol start="4">
<li>DALLE.2에게 유저 문구를 이용한 그림 URL 받기</li>
</ol>
<ol start="5">
<li>Streamlit 과 연동하는 메인함수 형성</li>
</ol>
<br/>

<p><em>[인프런]초보자를 위한 ChatGPT API 활용법 - API 기본 문법부터 12가지 프로그램 제작 배포까지</em></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[1. ChatGPT API 사용법 익히기]]></title>
            <link>https://velog.io/@fragrance_0/1.-ChatGPT-API-%EC%82%AC%EC%9A%A9%EB%B2%95-%EC%9D%B5%ED%9E%88%EA%B8%B0</link>
            <guid>https://velog.io/@fragrance_0/1.-ChatGPT-API-%EC%82%AC%EC%9A%A9%EB%B2%95-%EC%9D%B5%ED%9E%88%EA%B8%B0</guid>
            <pubDate>Mon, 11 Dec 2023 13:15:21 GMT</pubDate>
            <description><![CDATA[<h2 id="📂-openai_api-사이트">📂 OpenAI_API 사이트</h2>
<p><a href="https://platform.openai.com/">OpenAI_API 사이트</a></p>
<br/>

<hr>
<h2 id="📂-api-키-발급">📂 API 키 발급</h2>
<ul>
<li>api 키 사용량 확인 &gt; usage 들어가면 확인 가능</li>
</ul>
<p><img src="https://velog.velcdn.com/images/fragrance_0/post/1dfec46e-1db2-48cd-aafd-97c53c81ec9f/image.png" alt=""></p>
<blockquote>
<p>*오류 관련
<a href="https://velog.io/@toezilla/ChatGPT-openai.error.RateLimitError-You-exceeded-your-current-quota-please-check-your-plan-and-billing-details">[ChatGPT] openai.error.RateLimitError: You exceeded your current quota, please check your plan and billing details.</a></p>
</blockquote>
<br/>

<hr>
<h2 id="📂-vscode-안에서-가상환경-생성">📂 VSCode 안에서 가상환경 생성</h2>
<p><a href="https://velog.io/@hyangki0119/Python-%EA%B0%80%EC%83%81%ED%99%98%EA%B2%BD-%EB%A7%8C%EB%93%A4%EA%B8%B0-Mac">[Python] 가상환경 만들기 on Mac (venv, virtualenv)</a></p>
<h3 id="⏺-가상환경-생성-코드">⏺ 가상환경 생성 코드</h3>
<pre><code class="language-python">python -m venv ch03_env</code></pre>
<ul>
<li>작업하고 있는 환경에서의 python 파일이나 주피터 노트북파일은 모두 우리가 지금 생성한 가상환경으로 자동연결이 된다.</li>
</ul>
<h4 id="가상환경-활성화-코드">가상환경 활성화 코드</h4>
<pre><code class="language-python">source ch03_env/bin/activate</code></pre>
<br/>

<hr>
<h2 id="📂-openai_api-사용방법">📂 OpenAI_API 사용방법</h2>
<h3 id="⏺-질문-요소">⏺ 질문 요소</h3>
<p><strong>1. Model</strong>
<img src="https://velog.velcdn.com/images/fragrance_0/post/a38b571f-4fd4-4c34-819d-366782f01e4d/image.png" alt=""></p>
<p><strong>2. Message</strong>
<img src="https://velog.velcdn.com/images/fragrance_0/post/c0bf92d4-879f-419b-8432-477641ad9844/image.png" alt=""></p>
<p><strong>3. Temperature</strong>
<img src="https://velog.velcdn.com/images/fragrance_0/post/4548b2ac-f7f7-4b6d-a319-de386562ecce/image.png" alt=""></p>
<p>→ 2로 갈수록 온도가 높게됨,  좀 더 감성적인 답변 발급가능, 2,3순위 답변도 발급</p>
<p>→ 0으로 하면, 가장 확률이 높은 답변 생성, 이성적, 데이터 기반, 같은질문을 하면 같은 답변 발급</p>
<p><strong>4. Top_p</strong>
<img src="https://velog.velcdn.com/images/fragrance_0/post/f36155ce-736f-4779-8e1b-59003f1f3c55/image.png" alt=""></p>
<p>→ Top_p를 높일수록, 랜덤성이 늘어남</p>
<p><strong>5. Frequency_penalty &amp; Presence_penalty</strong>
<img src="https://velog.velcdn.com/images/fragrance_0/post/10be0aee-6765-49c8-ac60-aa6ec6197592/image.png" alt=""></p>
<p>→ Presence_penalty 높일수록 모델이 새로운 주제로 이야기할 가능성 높임</p>
<p><strong>6. n: 답변 개수 설정 &amp; Max_tokens : 완료시 생성할 토큰의 최대 개수</strong></p>
<p><img src="https://velog.velcdn.com/images/fragrance_0/post/82a2e73e-69b6-4df1-bd8e-8c10168c2396/image.png" alt=""></p>
<p>→ 최대 토큰 수 제한, 답변의 길이 조정</p>
<h3 id="⏺-질문-방법">⏺ 질문 방법</h3>
<p><img src="https://velog.velcdn.com/images/fragrance_0/post/89fd6b52-fa47-46f8-9549-ea807b21249a/image.png" alt=""></p>
<p><em>[인프런]초보자를 위한 ChatGPT API 활용법 - API 기본 문법부터 12가지 프로그램 제작 배포까지</em></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[5. ChatGPT vs Bard 답변 비교 프로그램]]></title>
            <link>https://velog.io/@fragrance_0/5.-ChatGPT-vs-Bard-%EB%8B%B5%EB%B3%80-%EB%B9%84%EA%B5%90-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8</link>
            <guid>https://velog.io/@fragrance_0/5.-ChatGPT-vs-Bard-%EB%8B%B5%EB%B3%80-%EB%B9%84%EA%B5%90-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8</guid>
            <pubDate>Mon, 11 Dec 2023 09:28:17 GMT</pubDate>
            <description><![CDATA[<h2 id="📂-chatgpt-vs-bard-답변-비교-프로그램-개요">📂 ChatGPT vs Bard 답변 비교 프로그램 개요</h2>
<h3 id="🔗-bard">🔗 Bard</h3>
<p><img src="https://velog.velcdn.com/images/fragrance_0/post/2d569d03-2867-4892-92d9-71431ccdae01/image.png" alt=""></p>
<ul>
<li>챗지비티와 비슷한 구글 서비스임</li>
</ul>
<br/>

<h3 id="🔗-개요">🔗 개요</h3>
<p><img src="https://velog.velcdn.com/images/fragrance_0/post/433ef63a-7a4e-4027-b614-b54790ed9bba/image.png" alt=""></p>
<ul>
<li>바드와 챗 지피티에 프롬프트를 입력해 질문을 함</li>
<li>응답결과 두개 다 띄우는 프로그램을 제작</li>
</ul>
<p><img src="https://velog.velcdn.com/images/fragrance_0/post/48fd7bd9-11ad-4d53-9070-a8590de55563/image.png" alt=""></p>
<ul>
<li>챗 지피티와 바드의 답변 결과가 양쪽에 함께 나타나는 화면 방식</li>
</ul>
<br/>

<hr>
<h2 id="📂-bard-api-사용방법-익히기">📂 Bard API 사용방법 익히기</h2>
<p><img src="blob:https://velog.io/f7d558a2-a9c4-4c2f-ab57-17269a351d03" alt="업로드중.."></p>
<ul>
<li>바드에서 f12키를 누른 후 키 발급</li>
<li>정식 api를 제공하고 있지 않아서, 오픈바드를 이용해서 사용</li>
</ul>
<pre><code class="language-python">from bardapi import Bard</code></pre>
<br/>

<hr>
<h2 id="📂-streamlit의-session_state-이해하기">📂 Streamlit의 Session_state 이해하기</h2>
<h4 id="👩🏻💻--문제가-발생하는-경우">👩🏻‍💻  문제가 발생하는 경우</h4>
<p><img src="blob:https://velog.io/05585fe9-52fc-49e8-bf71-8f8f2d2ebfad" alt="업로드중.."></p>
<blockquote>
<p>스트림릿은 어떠한 이벤트가 발생하면, 코드가 처음부터 다시 실행되기때문에 모든 변수들이 초기화되는 문제가 발생함</p>
</blockquote>
<h4 id="👩🏻💻-문제-해결">👩🏻‍💻 문제 해결</h4>
<p><img src="blob:https://velog.io/ddc398ec-6cc7-4de7-a240-e7ee50dbc3c3" alt="업로드중.."></p>
<blockquote>
<p>☀️ 이러한 문제를 해결하기 위해 스트림릿의 <code>SessionState</code>를 활용함</p>
</blockquote>
<br/>

<hr>
<h2 id="📂-메인코드">📂 메인코드</h2>
<p><img src="blob:https://velog.io/d6d5ade0-31d5-43e7-9688-e2f272938776" alt="업로드중.."></p>
<p><strong>→ 다음과 같이 3가지 파트로 구성</strong></p>
<h3 id="🔗-1기본-정보-입력">🔗 1.기본 정보 입력</h3>
<pre><code class="language-python"></code></pre>
<h3 id="🔗-2-기능구현함수-정리">🔗 2. 기능구현함수 정리</h3>
<pre><code class="language-python"></code></pre>
<h3 id="🔗-3-메인-함수">🔗 3. 메인 함수</h3>
<pre><code class="language-python"></code></pre>
<pre><code class="language-python"></code></pre>
<p><em>[인프런]초보자를 위한 ChatGPT API 활용법 - API 기본 문법부터 12가지 프로그램 제작 배포까지</em></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[4. 광고 문구 생성 프로그램 만들기]]></title>
            <link>https://velog.io/@fragrance_0/4.-%EA%B4%91%EA%B3%A0-%EB%AC%B8%EA%B5%AC-%EC%83%9D%EC%84%B1-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8-%EB%A7%8C%EB%93%A4%EA%B8%B0</link>
            <guid>https://velog.io/@fragrance_0/4.-%EA%B4%91%EA%B3%A0-%EB%AC%B8%EA%B5%AC-%EC%83%9D%EC%84%B1-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8-%EB%A7%8C%EB%93%A4%EA%B8%B0</guid>
            <pubDate>Mon, 11 Dec 2023 08:05:11 GMT</pubDate>
            <description><![CDATA[<h2 id="📂-광고-문구-생성-프로그램-개요">📂 광고 문구 생성 프로그램 개요</h2>
<h3 id="☁️-화면">☁️ 화면</h3>
<p><img src="https://velog.velcdn.com/images/fragrance_0/post/59d52d91-5dc4-48d6-8eb5-eff14aabc9a1/image.png" alt=""></p>
<blockquote>
<p><code>input keyword</code> : 제품명, 브랜드명, 제품특징, 톤앤매너, 필수 포함 키워드, 브랜드 핵심가치 등</p>
</blockquote>
<h3 id="☁️-개요">☁️ 개요</h3>
<p><img src="https://velog.velcdn.com/images/fragrance_0/post/fbcf4001-fe6b-473a-aa38-5b3d6a990fa5/image.png" alt=""></p>
<br/>

<hr>
<h2 id="📂메인-코드-작성">📂메인 코드 작성</h2>
<h4 id="1-패키지-불러오기--기능-구현-함수-정의">1. 패키지 불러오기 &amp; 기능 구현 함수 정의</h4>
<pre><code class="language-python"># Streamlit 패키지 추가
import streamlit as st
# OpenAI 패키기 추가
import openai
</code></pre>
<h4 id="2-메인함수">2. 메인함수</h4>
<pre><code class="language-python">def main():
    st.set_page_config(page_title=&quot;광고 문구 생성 프로그램&quot;)</code></pre>
<h4 id="2-1-session-state-초기화">2-1. session state 초기화</h4>
<pre><code class="language-python"># session state 초기화
    if &quot;OPENAI_API&quot; not in st.session_state:
        st.session_state[&quot;OPENAI_API&quot;] = &quot;&quot;</code></pre>
<h4 id="2-2-사이드바">2-2. 사이드바</h4>
<ul>
<li>텍스트 인풋 엘레멘트를 활용해서 OpenAI의 API키를 입력받음</li>
<li>타입을 패스워드로 지정하여 ⏺⏺⏺⏺ 이렇게 나올 수 있도록 만듦<pre><code class="language-python"></code></pre>
</li>
</ul>
<h1 id="사이드바">사이드바</h1>
<p>with st.sidebar:</p>
<h1 id="open-ai-api-키-입력받기">Open AI API 키 입력받기</h1>
<pre><code>open_apikey = st.text_input(label=&#39;OPENAI API 키&#39;, placeholder=&#39;Enter Your API Key&#39;, value=&#39;&#39;,type=&#39;password&#39;)</code></pre><pre><code>
#### 2-3. 메인공간
```python
#메인공간
st.header(&quot;🎸광고 문구 생성 프로그램&quot;)
st.markdown(&#39;---&#39;)
</code></pre><ul>
<li>컬럼을 두개로 나눠서 input을 받기위해 st.columns(2) 사용</li>
<li>3개씩 총 6가지의 정보를 입력받음</li>
</ul>
<pre><code class="language-python">col1, col2 =  st.columns(2)</code></pre>
<ul>
<li>메인함수 실행<pre><code class="language-python">if __name__==&#39;__main__&#39;:
  main()</code></pre>
</li>
</ul>
<p>_
[인프런]초보자를 위한 ChatGPT API 활용법 - API 기본 문법부터 12가지 프로그램 제작 배포까지_</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[6. 구글/파파고/ DeepL 번역 플랫폼 비교 프로그램 만들기]]></title>
            <link>https://velog.io/@fragrance_0/6.-%EA%B5%AC%EA%B8%80%ED%8C%8C%ED%8C%8C%EA%B3%A0-DeepL-%EB%B2%88%EC%97%AD-%ED%94%8C%EB%9E%AB%ED%8F%BC-%EB%B9%84%EA%B5%90-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8-%EB%A7%8C%EB%93%A4%EA%B8%B0</link>
            <guid>https://velog.io/@fragrance_0/6.-%EA%B5%AC%EA%B8%80%ED%8C%8C%ED%8C%8C%EA%B3%A0-DeepL-%EB%B2%88%EC%97%AD-%ED%94%8C%EB%9E%AB%ED%8F%BC-%EB%B9%84%EA%B5%90-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8-%EB%A7%8C%EB%93%A4%EA%B8%B0</guid>
            <pubDate>Mon, 11 Dec 2023 07:32:29 GMT</pubDate>
            <description><![CDATA[<h2 id="📂-번역플랫폼-비교-프로그램-개요">📂 번역플랫폼 비교 프로그램 개요</h2>
<p align="center"><img src= "https://velog.velcdn.com/images/fragrance_0/post/6e392d2f-e469-4cc1-a5a2-0378153ab391/image.png" width="60%" height="n%"></p>

<ul>
<li>하나의 영어입력에 4개의 번역결과를 가져와서 비교하는 프로그램</li>
</ul>
<p align="center"><img src= "https://velog.velcdn.com/images/fragrance_0/post/1673211d-9696-4472-9202-f04d7b5666ac/image.png" width="60%" height="n%"></p>

<br/>

<hr>
<h2 id="📂-구글-번역기-api-사용방법-익히기">📂 구글 번역기 API 사용방법 익히기</h2>
<h3 id="📎-파이썬을-이용해-구글-번역기-사용">📎 파이썬을 이용해 구글 번역기 사용</h3>
<p align="center"><img src= "https://velog.velcdn.com/images/fragrance_0/post/c58ee63c-d8d9-4a2a-8fc4-52c006c11098/image.png" width="80%" height="n%"></p>


<pre><code class="language-python">from google_trans import Translator

# 함수형태로 번역기 형태 만들기
def google_trans(messages):
    google = Translator()
    result = google.translate(messages, dest=&quot;ko&quot;)

    return result.text

text = &quot;I Love YOUU~~&quot;

result = google_trans(text)
print(result)</code></pre>
<ul>
<li>함수 형태로 변역기 형태 만들기</li>
<li>api 발급 필요가 없음</li>
</ul>
<br/>

<hr>
<h2 id="📂-파파고-번역기-api-사용방법-익히기">📂 파파고 번역기 API 사용방법 익히기</h2>
<h4 id="네이버-developers-사이트-접속">네이버 Developers 사이트 접속</h4>
<p align="center"><img src= "https://velog.velcdn.com/images/fragrance_0/post/fc9857da-ae4a-4786-bc95-f40d5ee450e6/image.png" width="80%" height="80%"></p>


<ul>
<li>파파고 api발급필요</li>
<li>api 이용신청 </li>
<li>클라이언트 ID, password발급</li>
<li>만글자가 넘어가면 비용지불해야함</li>
</ul>
<pre><code class="language-python">def papago_translate(text):

    data = {&#39;text&#39; : text,
            &#39;source&#39; : &#39;en&#39;,
            &#39;target&#39;: &#39;ko&#39;}

    # requests와 response
    response = requests.post(url, headers=header, data=data)
    rescode = response.status_code


# 결과 출력    
result = papago_translate(text)
print(result)</code></pre>
<br/>

<hr>
<h2 id="📂-deepl-번역기-api-사용방법-익히기">📂 DeepL 번역기 API 사용방법 익히기</h2>
<h4 id="deepl-사이트-접속">DeepL 사이트 접속</h4>
<p align="center"><img src= "https://velog.velcdn.com/images/fragrance_0/post/df57a3e9-6c86-4e68-b752-978160f34fbd/image.png" width="80%" height="80%"></p>


<ul>
<li><p>무료로 제공되는 양이 넉넉함</p>
</li>
<li><p>신용카드 등록 필요</p>
</li>
<li><p>파이썬 오픈소스 설치 필요</p>
<pre><code class="language-python">import deepl
</code></pre>
</li>
</ul>
<p>auth_key = &quot;API Key&quot;  # Replace with your key
translator = deepl.Translator(auth_key)</p>
<p>result = translator.translate_text(text, target_lang=&quot;KO&quot;)
print(result.text)</p>
<pre><code>
&lt;br/&gt;

---
## 📂 모든 번역기들을 포함한 비교 프로그램 만들기
#### 1. 기본 패키지 불러오기
```python
# Streamlit 패키지 추가
import streamlit as st

# OpenAI 패키지 추가
import openai

# 구글 번역 패키지 추가
from googletrans import Translator

# Deepl 번역 패키지 추가
import deepl

# 파파고 API요청을 위한 Requests 패키지 추가 
import requests
</code></pre><h4 id="2-기능-구현함수">2. 기능 구현함수</h4>
<h4 id="3-메인함수">3. 메인함수</h4>
<pre><code class="language-python"># 메인함수
def main():
    # 기본 설정
    st.set_page_config(
        page_title=&quot;번역 플랫폼 모음&quot;,
        layout=&quot;wide&quot;)

    # session state 초기화
    if &quot;OPENAI_API&quot; not in st.session_state:
        st.session_state[&quot;OPENAI_API&quot;] = &quot;&quot;

    if &quot;PAPAGO_ID&quot; not in st.session_state:
        st.session_state[&quot;PAPAGO_ID&quot;] = &quot;&quot;

    if &quot;PAPAGO_PW&quot; not in st.session_state:
        st.session_state[&quot;PAPAGO_PW&quot;] = &quot;&quot;

    if &quot;DeeplAPI&quot; not in st.session_state:
        st.session_state[&quot;DeeplAPI&quot;] = &quot;&quot;
</code></pre>
<br/>

<p><em>[인프런]초보자를 위한 ChatGPT API 활용법 - API 기본 문법부터 12가지 프로그램 제작 배포까지</em></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[10. TTS로 나만의 음성비서 만들기]]></title>
            <link>https://velog.io/@fragrance_0/10.-TTS%EB%A1%9C-%EB%82%98%EB%A7%8C%EC%9D%98-%EC%9D%8C%EC%84%B1%EB%B9%84%EC%84%9C-%EB%A7%8C%EB%93%A4%EA%B8%B0</link>
            <guid>https://velog.io/@fragrance_0/10.-TTS%EB%A1%9C-%EB%82%98%EB%A7%8C%EC%9D%98-%EC%9D%8C%EC%84%B1%EB%B9%84%EC%84%9C-%EB%A7%8C%EB%93%A4%EA%B8%B0</guid>
            <pubDate>Mon, 11 Dec 2023 06:18:48 GMT</pubDate>
            <description><![CDATA[<h2 id="🗞️-나만의-음성비서-프로그램-개요">🗞️ 나만의 음성비서 프로그램 개요</h2>
<p><img src="https://velog.velcdn.com/images/fragrance_0/post/9210c6de-2ccb-456c-bd8b-3deab591f0c5/image.png" alt=""></p>
<ul>
<li>이전 대화 내용을 기억하고 말함</li>
<li>대화를 처음부터 시작하려면 초기화 누르기</li>
</ul>
<p><img src="https://velog.velcdn.com/images/fragrance_0/post/e843f791-be2d-4fe8-9a05-a7b4f22a10d9/image.png" alt=""></p>
<ul>
<li>whisper를 이용해 텍스트를 음성파일로 변환예정</li>
</ul>
<br/>

<hr>
<h2 id="🗞️-구글-tts-알아보기--text-to-speech">🗞️ 구글 TTS 알아보기 | Text-to-Speech</h2>
<h3 id="📎-gtts-사용">📎 gtts 사용</h3>
<ul>
<li><p>구글 클라우드에서 진행하는 유료와 다른 무료임</p>
</li>
<li><p>패키지만 설치하면 무료로 가능</p>
<p>  pip install gTTS</p>
</li>
</ul>
<br/>

<hr>
<h2 id="🗞️-openai-whisper-sttspeech-to-text">🗞️ OpenAI Whisper STT(Speech-to-Text)</h2>
<ul>
<li>홈페이지 들어가면 자세한 모델확인 가능</li>
<li>openai api 키 사용 → 요금부과</li>
</ul>
<p><img src="https://velog.velcdn.com/images/fragrance_0/post/da45ec8c-5bdd-46c5-9683-9252bd394edb/image.png" alt=""></p>
<br/>

<hr>
<h2 id="🗞️-나만의-음성비서-코드-작성">🗞️ 나만의 음성비서 코드 작성</h2>
<h3 id="📎-기본-정보-입력">📎 기본 정보 입력</h3>
<ul>
<li>스트림릿, 오디오 리코더 패키지 가져옴</li>
<li>어느 유저가 오픈소스로 스트림릿 안에서 마이크로 오디오를 인풋받는 패키지를 만들어둠</li>
</ul>
<h3 id="📎-기능-구현함수">📎 기능 구현함수</h3>
<p><strong>1. STT 함수</strong></p>
<ul>
<li>음원파일을 인풋으로 받음</li>
<li>최종적으로 그 음원파일에 사용자의 질문을 텍스트로 추출을 해서 리턴해주는 함수</li>
<li>input.mp3 파일생성</li>
</ul>
<pre><code class="language-python">def STT(audio,apikey):
    # 파일 저장
    filename=&#39;input.mp3&#39;
    audio.export(filename, format=&quot;mp3&quot;)

    # 음원 파일 열기
    audio_file = open(filename, &quot;rb&quot;)

    #Whisper 모델을 활용해 텍스트 얻기
    client = openai.OpenAI(api_key = apikey)
    respons = client.audio.transcriptions.create(model = &quot;whisper-1&quot;, file = audio_file)
    transcript = respons.text
    audio_file.close()
</code></pre>
<p>*<em>2. ask-gpt 함수 *</em></p>
<ul>
<li>ChatGPT에게 질문을 하고 최종적으로 답변을 리턴하는 함수</li>
<li>프롬프트, ChatGPT에서 사용할 언어모델을 인풋으로 받음</li>
</ul>
<pre><code class="language-python">def ask_gpt(prompt, model, apikey):
    client = openai.OpenAI(api_key = apikey)
    response = client.chat.completions.create(
    model=model,
    messages=prompt)
    gptResponse = response.choices[0].message.content
    return gptResponse</code></pre>
<p>*<em>3. TTS함수 *</em></p>
<ul>
<li>text-to-speech</li>
<li>ChatsGPT의 답변 텍스트를 인풋받음</li>
<li>output.mp3 파일생성</li>
</ul>
<pre><code class="language-python">def TTS(response):
    # gTTS 를 활용하여 음성 파일 생성
    filename = &quot;output.mp3&quot;
    tts = gTTS(text=response,lang=&quot;ko&quot;)
    tts.save(filename)</code></pre>
<hr>
<h3 id="📎-메인함수">📎 메인함수</h3>
<ol>
<li><p>프로그램 타이틀 설정</p>
<pre><code class="language-python">def main():
 # 기본 설정
 st.set_page_config(
     page_title=&quot;음성 비서 프로그램&quot;,
     layout=&quot;wide&quot;)</code></pre>
</li>
<li><p>총 3개의 SessionSTate 초기화</p>
</li>
</ol>
<ul>
<li>사용자와 음성비서의 대화내용을 저장하는 SessionSTate</li>
<li>프로그램 내에서 채팅창 표시</li>
<li>제목, 구분선 등등</li>
<li>기능 구현 공간 설정<br/>


</li>
</ul>
<hr>
<h3 id="📎-github-streamlit-클라우드로-배포">📎 Github, Streamlit 클라우드로 배포</h3>
<ul>
<li>웹에 배포</li>
<li>언제 어디서든 해당 프로그램을 사용할 수 있도록 구현</li>
</ul>
<blockquote>
<p><a href="https://wonyoungseo.medium.com/kr-streamlit-%EC%95%B1-%EC%A0%95%EB%A7%90-%EC%89%BD%EA%B2%8C-%EB%B0%B0%ED%8F%AC%ED%95%98%EA%B8%B0-ft-streamlit-sharing-1b87e43afcc9">Streamlit 앱 쉽게 배포하기</a></p>
</blockquote>
<p><em>[인프런]초보자를 위한 ChatGPT API 활용법 - API 기본 문법부터 12가지 프로그램 제작 배포까지</em></p>
]]></description>
        </item>
    </channel>
</rss>