<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>소처럼 코딩하기</title>
    <link>https://so-coding.tistory.com/</link>
    <description>데이터 분석 블로그</description>
    <language>ko</language>
    <pubDate>Thu, 18 Jun 2026 16:12:42 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>이삼오</managingEditor>
    <image>
      <title>소처럼 코딩하기</title>
      <url>https://tistory1.daumcdn.net/tistory/6955349/attach/8b0f9b5a48e545408d9bebee9ad92548</url>
      <link>https://so-coding.tistory.com</link>
    </image>
    <item>
      <title>IITP 4기 최종 프로젝트 결과 및 회고 : 대상 수상!</title>
      <link>https://so-coding.tistory.com/57</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한 달 동안 진행한 최종 프로젝트 결과 대상을 수상했다. 무려 국회의원상! 처음으로 팀 리더를 맡았는데 상까지 받아서 아주 의미있었다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;슬프게도 이번에도 주제를 한 번 바꿨다. 처음 설정한 주제는 양식 김의 성장 분석 및 모델 개발이었는데 프로젝트를 진행할 수록 데이터가 참 이상했다. 어떻게든 기워봤지만 이진분류 모델에서 정확도가 0.5 이상을 넘지 않는 대참사가 발생했다. 학습 횟수를 늘리면 과적합이 발생하고, 시계열 데이터여서 증강도 못하는 진퇴양난에 빠졌다. 결국 프로젝트 마감이 2주 남은 시점에 빠르게 주제를 바꾸고 이미지 데이터 라벨링부터 시작했다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2252&quot; data-origin-height=&quot;1147&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cWLVh7/btsIlRUa72V/skzJcT3aBKEZkfNQSbzWC0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cWLVh7/btsIlRUa72V/skzJcT3aBKEZkfNQSbzWC0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cWLVh7/btsIlRUa72V/skzJcT3aBKEZkfNQSbzWC0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcWLVh7%2FbtsIlRUa72V%2FskzJcT3aBKEZkfNQSbzWC0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2252&quot; height=&quot;1147&quot; data-origin-width=&quot;2252&quot; data-origin-height=&quot;1147&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.aihub.or.kr/aihubdata/data/view.do?currMenu=115&amp;amp;topMenu=100&amp;amp;aihubDataSe=realm&amp;amp;dataSetSn=651&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.aihub.or.kr/aihubdata/data/view.do?currMenu=115&amp;amp;topMenu=100&amp;amp;aihubDataSe=realm&amp;amp;dataSetSn=651&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;바꾼 주제도 AI허브 데이터와 함께했다. AI허브는 다양한 분야의 데이터를 제공하지만 한 가지 이해할 수 없는 점이 있다. 이미지 데이터와 라벨링 데이터가 함께 있는데 그 라벨이 yolo 형식이 아니라 폴리곤 형식이라는 것이다. 그런데 또 활용 모델에는 yolo가 있다. yolo label은 호락호락하게 넘겨주지 않겠다 이런 의미인 걸까?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LabelImg로 4명이 8천장씩 하루만에 3만장의 이미지를 라벨링했다. 분류 class를 4개로 한정해 해당되지 않는 이미지는 바로바로 삭제했고, 한 이미지 안에 한 class만 있어서 빠르게 끝낼 수 있었다. 특히 class를 미리 확정지었던 것이 큰 도움이 되었다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일단 모델을 돌리면서 아웃풋과 주제를 디벨롭 시켰다. 팀원과 서로 아이디어를 제시하고 까고 제시하고 까면서 좋은 결과가 나왔다. 화물차 운전자 행동 탐지를 위한 IoT 카메라와 맞춤형 알림 전송을 위한 모바일 어플이 최종적으로 설정한 아웃풋이고, 이번 프로젝트에서는 핵심인 yolo 모델을 개발했다. yolo 모델을 시험해볼 수 있는 웹앱을 스트림릿으로 구현했고 어플리케이션 작동 예시를 설명하기 위해 간단한 데모 영상을 제작했다. 데이터 검증을 위해 딥러닝 모델로 이미지 피처를 추출하고 머신러닝 모델로 분류하는 과정도 거쳤다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;팀 리더로 프로젝트에서 많은 역할을 담당했다. 노션 정리부터 프로젝트 스토리라인 정리, ppt 제작까지 내가 코드를 짜지 않은 모델을 제외하고 모든 파트에 참여했다. 어떤 일을 할 때 다른 모든 걸 내려놓고 그 일에만 집중하는 편이라 힘들지는 않았다. 오히려 팀에 많은 것을 기여하고 결과물을 낼 수 있어서 뿌듯했다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로젝트 과정에서 고민했던 점은 전체적인 스토리가 내 머리에만 있다는 것이다. 이 분석을 하는 이유, 일반 차량이 아닌 화물차에 포커스를 둔 이유, 이 모델을 선정한 이유 등에 대해 당연히 다른 팀원들도 나와 같은 생각일 줄 알았는데 전혀 다른 생각을 하고 있고, 팀 외부로는 더욱 전달되지 않는 문제가 있었다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;리허설 발표에서 전체적인 흐름이 이해되지 않는다는 피드백을 받았다. PT를 어디서부터 고쳐야할지 고민하다가 기획자인 나, 발표자인 팀원, 발표를 듣는 강사님 사이 어디에서 lack이 발생했는지 생각해봤다. 기획자와 발표자 사이 이야기가 다른 것을 파악했고 내가 생각한 스토리를 전부 쓰고 발표 대본으로 정리해서 팀원들에게 전달했다. 서론 파트의 PT는 한 장도 수정하지 않고 최종 발표를 했고 1등이라는 성과를 얻었다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;조금 신기한 경험이긴 하다. 지금은 대면으로 프로젝트를 하고 멋사 AIS에서는 비대면으로 줌과 디스코드를 활용하며 프로젝트를 했다. 팀원 사이의 소통은 비대면일 때 더 원활하게 진행되었다. 모두가 프로젝트에 대해 잘 이해하고 같은 방향으로 일을 진행했다. 문서화의 중요성이 아닐까?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아쉬운 점은 이번 교육에서 결국 한 달짜리 프로젝트를 못 해봤다는 것이다. 처음 프로젝트 기간이 한 달이라고 들었을 때 그렇게 긴 프로젝트의 아웃풋은 대체 어떨까? 라는 궁금증이 들었는데 아직 해소되지 않았다. 데이터를 더 많이 학습시키거나, 모델 실험을 다양하게 해보거나, 앱 개발을 시작하는 등 할 수 있는 일들이 많은데 중간 프로젝트에도 이번에도 주제를 변경하는 바람에 한 달을 완전히 쏟지 못한 게 가장 아쉽다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아직 readme 파일을 작성하는 중이지만 발표 자료나 포스터, 코드는 깃허브에서 확인할 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/seonseono/Abnormal_Driver_Detection&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/seonseono/Abnormal_Driver_Detection&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1720019824860&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - seonseono/Abnormal_Driver_Detection: SW전문인재양성과정 4기 최종 프로젝트&quot; data-og-description=&quot;SW전문인재양성과정 4기 최종 프로젝트. Contribute to seonseono/Abnormal_Driver_Detection development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/seonseono/Abnormal_Driver_Detection&quot; data-og-url=&quot;https://github.com/seonseono/Abnormal_Driver_Detection&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/fmuKJ/hyWvIAX6bF/ve5N6LZU1LWQc1kkk0Rkx1/img.png?width=1200&amp;amp;height=600&amp;amp;face=991_120_1056_191&quot;&gt;&lt;a href=&quot;https://github.com/seonseono/Abnormal_Driver_Detection&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/seonseono/Abnormal_Driver_Detection&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/fmuKJ/hyWvIAX6bF/ve5N6LZU1LWQc1kkk0Rkx1/img.png?width=1200&amp;amp;height=600&amp;amp;face=991_120_1056_191');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;GitHub - seonseono/Abnormal_Driver_Detection: SW전문인재양성과정 4기 최종 프로젝트&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;SW전문인재양성과정 4기 최종 프로젝트. Contribute to seonseono/Abnormal_Driver_Detection development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>프로젝트</category>
      <category>everything up-to-date</category>
      <category>There isn&amp;rsquo;t anything to compare</category>
      <category>깃커밋</category>
      <category>깃허브</category>
      <category>커밋에러</category>
      <author>이삼오</author>
      <guid isPermaLink="true">https://so-coding.tistory.com/57</guid>
      <comments>https://so-coding.tistory.com/57#entry57comment</comments>
      <pubDate>Thu, 4 Jul 2024 00:17:31 +0900</pubDate>
    </item>
    <item>
      <title>로컬 프로젝트 폴더 GitHub 업로드 / There isn&amp;rsquo;t anything to compare / everything up-to-date 에러 해결</title>
      <link>https://so-coding.tistory.com/56</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1812&quot; data-origin-height=&quot;905&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b1iciH/btsIjwaPLJD/w2pcL2IT6FXvXOtwMOukV1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b1iciH/btsIjwaPLJD/w2pcL2IT6FXvXOtwMOukV1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b1iciH/btsIjwaPLJD/w2pcL2IT6FXvXOtwMOukV1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb1iciH%2FbtsIjwaPLJD%2Fw2pcL2IT6FXvXOtwMOukV1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1812&quot; height=&quot;905&quot; data-origin-width=&quot;1812&quot; data-origin-height=&quot;905&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로젝트에서 streamlit 웹앱 개발을 맡았다. &lt;span style=&quot;background-color: #ffffff; color: #4d5156; text-align: left;&quot;&gt;장고를 배웠음에도 &lt;/span&gt;스트림릿을 선택한 이유는 깃허브로 쉽게 배포할 수 있기 때문이다. 좀 더 도전할 생각이었다면 다른 프레임워크를 사용했겠지만 이번 프로젝트에서 웹은 주요 파트가 아니었고 yolo 모델이 이렇게 작동한다는 정도만 보여주면 충분하므로 스트림릿을 골랐다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스트림릿은 나 혼자 진행하는 파트여서, 로컬에서 작업을 끝내고 깃허브에 폴더를 통채로 커밋하여 배포한 다음 이미지와 동영상 링크를 수정했다. 저번 프로젝트 때는 push 단계에서 뭔가 꼬여서 깃허브 웹페이지에서 파일을 하나하나 업로드했는데 이번엔 다행히 해결했다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;깃허브 웹에서 레파지토리를 만들고 Git Bash Here로 로컬의 한 폴더를 지정한 다음 아래 명령어를 한 줄씩 입력하면 쉽게 커밋할 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1718873202142&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;git init  // 선택한 폴더에 로컬 저장소 생성

git status // 해당 폴더의 파일 확인

// 둘 중 하나 선택
git add . // 로컬 저장소의 전체 파일 업로드
git add 파일명/폴더명 // 로컬 저장소의 특정 파일 혹은 폴더 업로드

git commit -m &quot;푸쉬 메시지&quot; // push 메시지 등록 및 commit
git remote add origin 깃허브 레포지토리 주소
git remote -v // 로컬 저장소와 원격 저장소 연결
git push origin main // 커밋한 파일을 깃허브에 업로드&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 중 git push origin mater 에서 에러가 발생했다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;git bash 창에서는 push가 완료된 것처럼 보이는데, 깃허브 페이지에는 There isn&amp;rsquo;t anything to compare 문구가 뜨면서 push가 되지 않았다.&amp;nbsp;default branch의 문제였고 master branch를 checkout 하고 main에 덮어써서 해결했다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1718873599879&quot; class=&quot;python&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;git&amp;nbsp;checkout&amp;nbsp;master

git branch main master -f

git&amp;nbsp;checkout&amp;nbsp;main

git&amp;nbsp;push&amp;nbsp;origin&amp;nbsp;main&amp;nbsp;-f&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #e9ecef; color: #212529; text-align: start;&quot;&gt;everything up-to-date&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 에러는 첫 번째 코드 중 git push를 했을 때 발생했다. 레파지토리를 main으로 바꾼 다음 git push origin master를 실행해서 발생한 오류였다. git push origin main을 입력하자 제대로 push가 진행되며 해결되었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저번에도 master와 main에서 꼬였는데 다행히 이번엔 해결책을 찾았다. 깃허브 스터디가 절실하다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>프로젝트</category>
      <category>everything up-to-date</category>
      <category>There isn&amp;rsquo;t anything to compare</category>
      <category>깃커밋</category>
      <category>깃허브</category>
      <category>커밋에러</category>
      <author>이삼오</author>
      <guid isPermaLink="true">https://so-coding.tistory.com/56</guid>
      <comments>https://so-coding.tistory.com/56#entry56comment</comments>
      <pubDate>Mon, 1 Jul 2024 15:38:54 +0900</pubDate>
    </item>
    <item>
      <title>최종 프로젝트 2주차 TIL : 한글 데이터 너무 무섭다...</title>
      <link>https://so-coding.tistory.com/55</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1930&quot; data-origin-height=&quot;657&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cY0mGI/btsHXEmgRTv/hLZFBrfIzfc2h2GT7Oyivk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cY0mGI/btsHXEmgRTv/hLZFBrfIzfc2h2GT7Oyivk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cY0mGI/btsHXEmgRTv/hLZFBrfIzfc2h2GT7Oyivk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcY0mGI%2FbtsHXEmgRTv%2FhLZFBrfIzfc2h2GT7Oyivk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1930&quot; height=&quot;657&quot; data-origin-width=&quot;1930&quot; data-origin-height=&quot;657&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;틀린 그림 찾기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;같은 문자열로 찾았는데 왜 있다가 없다가 할까?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;문제 상황&amp;gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AI허브에서 데이터를 받았는데 label 데이터와 image 데이터 수가 달랐다. (이건 시작에 불과했음을... 데이터가 볼수록 이상하다. 사기 당했다.) label이 있는 이미지만 사용할 수 있으니까 img_file_name 컬럼을 추출해서 txt 파일로 만들고, 이 파일과 매치되는 이름의 데이터만 새로운 폴더로 복사해 모델을 만들려고 했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 기존 데이터프레임의 컬럼으로 txt 파일 생성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. txt 파일과 매치되는 이름의 이미지만 새 폴더에 복사&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 새 폴더에서 파일명을 리스트로 받아오고 데이터프레임으로 변환&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 파일명 데이터프레임과 기존 데이터프레임을 join 해서 이미지가 있는 데이터만 남기기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 기깔나는 계획을 세웠는데 파일명 데이터프레임과 기존 데이터프레임이 도저히 연결이 안 되는 이슈가 발생했다. inner join하면 데이터프레임이 안 생기고, 파일명에 기존df를 left join 해봐도 파일명 컬럼 제외 전부 NaN값으로 채워지는 상황.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대체 왜 이런 건지 모르겠어서 1번부터 다시 세 번이나 반복했는데... txt 파일에서 파일명을 복사해보고 답을 찾았다. 한글 데이터가 깨져서 보기엔 같은 이름이지만 컴퓨터에서는 다른 이름이었던 거다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1429&quot; data-origin-height=&quot;797&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bFElih/btsHVUKTzip/UO9rISK29vcgm3CntSxELK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bFElih/btsHVUKTzip/UO9rISK29vcgm3CntSxELK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bFElih/btsHVUKTzip/UO9rISK29vcgm3CntSxELK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbFElih%2FbtsHVUKTzip%2FUO9rISK29vcgm3CntSxELK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1429&quot; height=&quot;797&quot; data-origin-width=&quot;1429&quot; data-origin-height=&quot;797&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;길이를 비교해보면 더 확실히 알 수 있다. 보기엔 똑같은 문자열이지만 길이가 다르다. 한글 데이터 진짜 이럴 거니.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;해결&amp;gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1718187723773&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# unicodedata.normalize(form, unistr)
# form : 'NFD' 자음 모음 분리 or 'NFC' 자음 모음 결합
# unistr : 적용할 string 데이터를 매개변수로 지정

# 개별 데이터에 적용
data1 = df['file_name'].iloc[6186]
data1_uni = unicodedata.normalize('NFC', data1)
print(len(data1_uni))
&amp;gt;&amp;gt;&amp;gt; 36

# 데이터프레임에 적용
df['img_file_name'] = df['file_name'].apply(lambda x: unicodedata.normalize('NFC', x))&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;검색을 통해&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot;&gt;unicodedata 모듈을 알게 되었다. 한글의 자음과 모음을 분리할 수도 있고 결합할 수도 있는 모듈이다. 나의 &lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot;&gt;경우 데이터 수가 적은 파일명 데이터프레임에 자음 모음 결합을 진행했다. &amp;nbsp;단일 데이터로 먼저 시험해보고 lambda, apply 함수를 사용했다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하루종일 삽질했는데 해결해서 시원하기도 하고 허무하기도 하고.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;업무에서는 속도가 중요하지만, 공부할 때는 직접 검색해서 찾아보고 삽질하는 시간도 필요하다고 생각해서 프로젝트에 gpt를 잘 사용하지 않고 있다. gpt4로 유료결제까지 했음에도! 이렇게 문제가 발생할 때면 내 생각이 맞다는 게 느껴진다. 평생 기억할 거야 한글 데이터 이슈...&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>프로젝트</category>
      <category>파이썬 데이터프레임 한글 깨짐</category>
      <category>한글 문자열 다르게 인식하는 이유</category>
      <author>이삼오</author>
      <guid isPermaLink="true">https://so-coding.tistory.com/55</guid>
      <comments>https://so-coding.tistory.com/55#entry55comment</comments>
      <pubDate>Wed, 12 Jun 2024 18:57:05 +0900</pubDate>
    </item>
    <item>
      <title>애증의 AI 허브 데이터</title>
      <link>https://so-coding.tistory.com/54</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;어떻게 마무리했는지 모르게 중간 프로젝트가 끝나고 바로 파이널 프로젝트가 시작되었다. 이번엔 AI 허브 데이터를 사용하는데 데이터 형식이 정말... 모든 정보가 때려넣어진 json 파일과 씨름하고 있다. 용량은 또 얼마나 큰지 json 파일로 12GB나 된다. 로컬에 다운로드 하느라 시간 쓰고 구글 드라이브 올리느라 시간 쓰고 이게 맞는지 모르겠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전처리를 한 번에 하려고 코드를 짰는데 용량이 너무 커서 한 시간 넘게 돌려보다가 포기했다. 욕심 부리지 말고 나눠서 하자. 샘플 데이터로 코드를 돌리는 중인데 데이터가 240개인데 고유값은 222개가 나와서 약간 막막해졌다. 데이터 설명서에도 고유값이라고 했는데. 혹시 내가 모르는 사이에 고유값의 뜻이 바뀌었나.&amp;nbsp;&lt;/p&gt;</description>
      <category>프로젝트</category>
      <author>이삼오</author>
      <guid isPermaLink="true">https://so-coding.tistory.com/54</guid>
      <comments>https://so-coding.tistory.com/54#entry54comment</comments>
      <pubDate>Wed, 5 Jun 2024 18:22:15 +0900</pubDate>
    </item>
    <item>
      <title>깃허브 파일 및 폴더 삭제</title>
      <link>https://so-coding.tistory.com/51</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;깃허브 브랜치 안에서 특정 파일이나 폴더(&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;directory&lt;/span&gt;)만 삭제하고 싶을 때가 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;깃클론한 상태에서 파일을 지우고 푸쉬할 수도 있지만 간단하게 깃허브 웹에서 지우는 방법을 알아보자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;깃허브 폴더 삭제 1.jpg&quot; data-origin-width=&quot;2379&quot; data-origin-height=&quot;1210&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ucm3k/btsHmcMblsw/fjVPqufzObjYJ8AWkuOOHK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ucm3k/btsHmcMblsw/fjVPqufzObjYJ8AWkuOOHK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ucm3k/btsHmcMblsw/fjVPqufzObjYJ8AWkuOOHK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fucm3k%2FbtsHmcMblsw%2FfjVPqufzObjYJ8AWkuOOHK%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2379&quot; height=&quot;1210&quot; data-filename=&quot;깃허브 폴더 삭제 1.jpg&quot; data-origin-width=&quot;2379&quot; data-origin-height=&quot;1210&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;리트코드 문제를 풀기 시작하면서 백준허브와 비슷한 기능의 LeetHub 라는 확장 프로그램을 설치했다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;백준허브와 달리 리트허브는 연결된 레파지토리 안에 바로 문제가 커밋된다. 게다가 &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;LeetHub&lt;span&gt; &lt;/span&gt;&lt;/span&gt;V3 기준 한 문제를 제출할 때마다 문제+readme file이 커밋되면서 커밋 기록이 2개씩 찍힌다. 이 문제는 리트허브를 커스텀해서 해결했고, 기존에 제출했던 디렉토리들은 삭제하려고 한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;삭제하려는 폴더가 있는 레파지토리에 들어가서 해당 폴더를 클릭한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;깃허브 폴더 삭제 2.jpg&quot; data-origin-width=&quot;2559&quot; data-origin-height=&quot;1210&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/M2sO0/btsHl2wrAtr/WA0NQfMPiTMsdtTC0Z7j6k/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/M2sO0/btsHl2wrAtr/WA0NQfMPiTMsdtTC0Z7j6k/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/M2sO0/btsHl2wrAtr/WA0NQfMPiTMsdtTC0Z7j6k/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FM2sO0%2FbtsHl2wrAtr%2FWA0NQfMPiTMsdtTC0Z7j6k%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2559&quot; height=&quot;1210&quot; data-filename=&quot;깃허브 폴더 삭제 2.jpg&quot; data-origin-width=&quot;2559&quot; data-origin-height=&quot;1210&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우측 상단 점 세 개를 누르면 Delete directory 라는 옵션을 찾을 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;3.jpg&quot; data-origin-width=&quot;2559&quot; data-origin-height=&quot;1069&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bJuHiQ/btsHmck6SQk/f0KzwpPN4srCW60YWgOSHK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bJuHiQ/btsHmck6SQk/f0KzwpPN4srCW60YWgOSHK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bJuHiQ/btsHmck6SQk/f0KzwpPN4srCW60YWgOSHK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbJuHiQ%2FbtsHmck6SQk%2Ff0KzwpPN4srCW60YWgOSHK%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2559&quot; height=&quot;1069&quot; data-filename=&quot;3.jpg&quot; data-origin-width=&quot;2559&quot; data-origin-height=&quot;1069&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;delete 버튼을 누르면 이렇게 디렉토리 내의 파일이 보이지 않는다. 여기까지만 하면 삭제된 내용이 저장되지 않는다. 깃클론한 로컬 폴더에서 파일을 지우고 커밋하지 않은 것과 같다. 웹에서도 commit 단계를 거쳐야 하는데, 우측 상단 초록색 버튼을 누르면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;4.jpg&quot; data-origin-width=&quot;1378&quot; data-origin-height=&quot;1059&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dGt8an/btsHnrVLMQD/sGXQqkuwqnXT8iCGubm491/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dGt8an/btsHnrVLMQD/sGXQqkuwqnXT8iCGubm491/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dGt8an/btsHnrVLMQD/sGXQqkuwqnXT8iCGubm491/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdGt8an%2FbtsHnrVLMQD%2FsGXQqkuwqnXT8iCGubm491%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1378&quot; height=&quot;1059&quot; data-filename=&quot;4.jpg&quot; data-origin-width=&quot;1378&quot; data-origin-height=&quot;1059&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;description을 써줘도 되고 쓰지 않아도 된다. commit changes 버튼을 누르면 해당 디렉토리 혹은 파일의 삭제가 완료된다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;5.jpg&quot; data-origin-width=&quot;2553&quot; data-origin-height=&quot;1177&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/AqfAo/btsHnUJ2FtJ/4uu7SN3jxTEdg7ugbayLP0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/AqfAo/btsHnUJ2FtJ/4uu7SN3jxTEdg7ugbayLP0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/AqfAo/btsHnUJ2FtJ/4uu7SN3jxTEdg7ugbayLP0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAqfAo%2FbtsHnUJ2FtJ%2F4uu7SN3jxTEdg7ugbayLP0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2553&quot; height=&quot;1177&quot; data-filename=&quot;5.jpg&quot; data-origin-width=&quot;2553&quot; data-origin-height=&quot;1177&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;레파지토리가 깔끔해졌다. 웹에서도 커밋이 필요하다는 사실을 잊지 말자.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>데이터분석 공부/DSBA 4기</category>
      <category>Leethub</category>
      <category>깃허브</category>
      <category>깃허브 디렉토리 삭제</category>
      <category>깃허브 파일 삭제</category>
      <category>깃허브 폴더 삭제</category>
      <category>리트허브</category>
      <category>리트허브 커스텀</category>
      <author>이삼오</author>
      <guid isPermaLink="true">https://so-coding.tistory.com/51</guid>
      <comments>https://so-coding.tistory.com/51#entry51comment</comments>
      <pubDate>Sun, 12 May 2024 15:16:23 +0900</pubDate>
    </item>
    <item>
      <title>Seq2seq 모델, Attention 모델의 메커니즘</title>
      <link>https://so-coding.tistory.com/50</link>
      <description>&lt;div id=&quot;cell-OXWCVfS3dt4J&quot;&gt;
&lt;div&gt;
&lt;div style=&quot;color: #000000;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;cell-QjwsZiNDaZ_B&quot; style=&quot;color: #212121; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;div style=&quot;color: #000000;&quot;&gt;
&lt;h2 style=&quot;color: #000000;&quot; data-ke-size=&quot;size26&quot;&gt;Sequence-to-Sequence&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;트랜스포머 : 기계 번역(machine translation) 등 시퀀스-투-시퀀스 과제를 수행하기 위한 모델&lt;/li&gt;
&lt;li&gt;시퀀스 : 단어(word)의 나열. 문장&lt;/li&gt;
&lt;li&gt;시퀀스-투-시퀀스 : 특정 속성을 지닌 시퀀스를 다른 속성의 시퀀스로 변환하는 작업. 예) 번역 모델&lt;/li&gt;
&lt;li&gt;소스 언어(바꿀 특성) -&amp;gt; 타깃 언어(반환되는 언어)&lt;/li&gt;
&lt;li&gt;시퀀스-투-시퀀스 태스크는 소스와 타깃의 길이가 달라도 해당 과제 수행에 문제가 없어야함&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;cell-dardy4Xjc0ym&quot; style=&quot;color: #212121; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div style=&quot;color: #000000;&quot;&gt;
&lt;div&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;인코더와 디코더&lt;/h3&gt;
&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;트랜스포머는 시퀀스-투-시퀀스 과제 수행에 특화된 모델&lt;/li&gt;
&lt;li&gt;임의의 시퀀스를 해당 시퀀스와 속성이 다른 시퀀스로 변환하는 작업이라면, 꼭 기계 번역이 아니어도 잘 동작함&lt;/li&gt;
&lt;li&gt;시퀀스-투-시퀀스 과제를 수행하는 모델은 대개 encoder, decoder 두 개 파트로 구성됨&lt;/li&gt;
&lt;li&gt;인코딩 : 인코더가 소스 시퀀스 정보를 압축하는 과정&lt;/li&gt;
&lt;li&gt;디코딩 : 디코더가 타겟 시퀀스를 생성하는 과정&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;Seq2seq 모델의 메커니즘&lt;/h3&gt;
&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://jalammar.github.io/visualizing-neural-machine-translation-mechanics-of-seq2seq-models-with-attention/&quot;&gt;https://jalammar.github.io/visualizing-neural-machine-translation-mechanics-of-seq2seq-models-with-attention/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Seq2seq은 기계 번역, 문서 요약, 이미지 캡셔닝 등의 문제에서 큰 성공을 거둔 딥러닝 모델&lt;/li&gt;
&lt;li&gt;글자, 단어, 이미지의 feature등을 시퀀스로 입력받아 모델에서 처리&lt;/li&gt;
&lt;li&gt;신경망 기계 번역 : 입력-일련의 단어로 이뤄진 시퀀스-&amp;gt; 맨 앞 단어부터 차례로 모델에서 처리-&amp;gt; 출력-비슷하지만 다른 형태의 문장&lt;/li&gt;
&lt;li&gt;seq2seq 모델은 하나의 encoder와 하나의 decoder로 이뤄져 있음&lt;/li&gt;
&lt;li&gt;신경망 기계 번역도 동일한 구조&lt;/li&gt;
&lt;li&gt;기계 번역의 경우 context가 하나의 벡터 형태로 전달됨&lt;/li&gt;
&lt;li&gt;대부분 encoder, decoder는 둘 다 RNN을 이용함&lt;/li&gt;
&lt;li&gt;context는 float로 이뤄진 하나의 벡터(더 높은 값을 가지는 소수를 더 밝게 표시)&lt;/li&gt;
&lt;li&gt;이 context 벡터의 크기는 모델을 처음 설정할 때 원하는 값으로 설정할 수 있지만, 보통 encoder RNN의 hidden unit 개수로 지정&lt;/li&gt;
&lt;li&gt;hidden unit에서 출력된 hidden state를 하나의 벡터 형태로 만들어서 사용하기 때문&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;cell-dm-TlTWMiqLK&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;cell-BwDkClzLirWp&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div style=&quot;color: #000000;&quot;&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;seq2seq 모델의 RNN은 한 타임 스텝마다 두 개의 입력을 받음&lt;/li&gt;
&lt;li&gt;하나는 sequence의 한 아이템, 다른 하나는 그 전 스텝에서 RNN의 hidden state&lt;/li&gt;
&lt;li&gt;RNN에 들어가기 전 vector 변환 필수&lt;/li&gt;
&lt;li&gt;인코더의 벡터 변환 - word embedding 알고리즘 이용&lt;/li&gt;
&lt;li&gt;pre-trained embeddings를 이용하거나 우리가 가진 데이터셋을 이용해 직접 학습시킬 수 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;cell-z4iGthd7jkGg&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div style=&quot;color: #000000;&quot;&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Seq2seq의 encoder, decoder = RNN&lt;/li&gt;
&lt;li&gt;RNN은 한 번 아이템을 처리할 때마다 새로 들어온 아이템을 이용해 hidden state를 업데이트함&lt;/li&gt;
&lt;li&gt;각 스텝마다 RNN에서 동작 -&amp;gt; 각 스텝마다 입력과 출력을 정확히 확인 가능&lt;/li&gt;
&lt;li&gt;마지막 단어의 hidden state가 우리가 decoder에게 넘겨주는 context&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;cell-Qzo6BKWfkJh9&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div style=&quot;color: #000000;&quot;&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;i&gt;&lt;/i&gt;
&lt;h2 style=&quot;color: #000000;&quot; data-ke-size=&quot;size26&quot;&gt;Attention 모델의 메커니즘&lt;/h2&gt;
&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;transformer 직전에 나온 모델&lt;/li&gt;
&lt;li&gt;Seq2seq 모델의 문제점 : 장기 의존성 문제&lt;/li&gt;
&lt;li&gt;context 벡터가 앞서 입력된 단어의 정보를 충분히 반영하지 못함&lt;/li&gt;
&lt;li&gt;Attention 모델은 두 가지 측면에서 기존의 Seq2seq 모델과 다름&lt;/li&gt;
&lt;/ul&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;인코더는 훨씬 더 많은 데이터를 디코더에 전달
&lt;ul style=&quot;list-style-type: disc; color: #000000;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;인코더는 인코딩 단계의 마지막 hidden state의 context vector만 전달하지 않고 모든 step의 hidden states를 디코더에 전달&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;decoder가 출력을 생성할 때 현재 스텝에서 관련있는 입력을 찾아내기 위한 과정이 추가됨
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;encoder에서 받은 전체 hidden states를 반영&lt;/li&gt;
&lt;li&gt;hidden state에 점수를 부여 -&amp;gt; decoder가 단어를 생성하는 매 스텝마다 반복&lt;/li&gt;
&lt;li&gt;hidden state에 소프트맥스 점수를 곱하여 점수가 높은 숨겨진 상태를 증폭하고 점수가 낮은 hidden state를 제거&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;cell-8wDM1KaUn6TS&quot;&gt;
&lt;div&gt;
&lt;div style=&quot;color: #000000;&quot;&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;attention을 이용하면 각 decoding 스텝에서 입력 문장의 어떤 부분에 집중하고 있는지 알 수 있음&lt;/li&gt;
&lt;li&gt;현재 모델이 아무 이유 없이 출력의 첫 번째 단어를 입력의 첫 번째 단어와 맞추는 align이 아님&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>데이터분석 공부/DSBA 4기</category>
      <category>attention 모델</category>
      <category>seq2seq 모델</category>
      <author>이삼오</author>
      <guid isPermaLink="true">https://so-coding.tistory.com/50</guid>
      <comments>https://so-coding.tistory.com/50#entry50comment</comments>
      <pubDate>Tue, 30 Apr 2024 16:15:58 +0900</pubDate>
    </item>
    <item>
      <title>딥러닝 언어 모델 (순방향/역방향 언어 모델, Masked Language Model, Skip-Gram Model)</title>
      <link>https://so-coding.tistory.com/49</link>
      <description>&lt;div id=&quot;cell-Ik2qPeEmTm1z&quot; style=&quot;color: #212121; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div style=&quot;color: #000000;&quot;&gt;
&lt;h2 style=&quot;color: #000000;&quot; data-ke-size=&quot;size26&quot;&gt;미리 학습된 언어 모델&lt;/h2&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://ratsgo.github.io/nlpbook/docs/lm&quot;&gt;https://ratsgo.github.io/nlpbook/docs/lm&lt;/a&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;BERT, GPT가 주목받는 이유 -&amp;gt; 이전에 있었던 모델보다 성능이 좋기 때문&lt;br /&gt;공통점 : 미리 학습된 언어 모델(pretrained language model) -&amp;gt; 전이학습&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div id=&quot;cell-eO3gAf3sU3pU&quot; style=&quot;color: #212121; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div style=&quot;color: #000000;&quot;&gt;
&lt;div&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;언어 모델&lt;/h3&gt;
&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;단어 시퀀스에 확률을 부여하는 모델&lt;/li&gt;
&lt;li&gt;단어 시퀀스를 입력받아 해당 시퀀스가 얼마나 그럴듯한지 확률을 출력하는 모델&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;cell-O_dbqMZYVVoI&quot; style=&quot;color: #212121; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;div style=&quot;color: #000000;&quot;&gt;
&lt;div&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;순방향 언어 모델&lt;/h3&gt;
&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;임의의 단어 시퀀스가 해당 언어에서 얼마나 자연스러운지 이해하고 있는 모델 구축&lt;/li&gt;
&lt;li&gt;조건부 확률에따라 언어 모델의 계산 로직을 이전 단어들(context)가 주어졌을 때 다음 단어 맞추기로 정해도 목표 달성 가능&lt;/li&gt;
&lt;li&gt;문장 앞부터 뒤로, 사람이 이해하는 순서대로 계산하는 모델&lt;/li&gt;
&lt;li&gt;GPT가 이같은 방식으로 pretrain 수행&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;GPT : 문장 생성 모델. 종료 시퀀스가 나올 때까지 다음 단어를 예측을 반복, 출력하는 모델. 잘못된 내용도 출력할 수 있음&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;cell-GNDjL5M7WTBp&quot; style=&quot;color: #212121; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div style=&quot;color: #000000;&quot;&gt;
&lt;div&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;역방향 언어 모델&lt;/h3&gt;
&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;문장 뒤부터 앞으로 계산&lt;/li&gt;
&lt;li&gt;ELMo&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;cell-VQuJP9o9WfTb&quot; style=&quot;color: #212121; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div style=&quot;color: #000000;&quot;&gt;
&lt;div&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;넓은 의미의 언어 모델&lt;/h3&gt;
&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;P(w|context)&lt;/li&gt;
&lt;li&gt;컨텍스트가 전제된 상태에서 특정 단어 w가 나타날 조건부 확률&lt;/li&gt;
&lt;li&gt;컨텍스트와 맞힐 언어를 어떻게 설정하느냐에 따라 다양하게 변형할 수 있다&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;cell-zBMjiBb_Wve0&quot; style=&quot;color: #212121; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div style=&quot;color: #000000;&quot;&gt;
&lt;div&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;마스크 언어 모델(Masked Language Model)&lt;/h3&gt;
&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;BERT가 대표적&lt;/li&gt;
&lt;li&gt;특정 단어를 맞출 때, 중간이 뚫린 단어를 맞출 때 잘 작동함&lt;/li&gt;
&lt;li&gt;뉴스 긍부정 분류 등 분류 모델에 효율적&lt;/li&gt;
&lt;li&gt;학습 과정 : 학습 대상 문장에 빈칸을 만들어놓고 해당 빈칸에 올 단어로 적절한 단어가 무엇일지 분류&lt;/li&gt;
&lt;li&gt;맞힐 대상에 MASK를 씌워두고 문장 전체 맥락을 참고해서 맞힘&lt;/li&gt;
&lt;li&gt;양방향(Bidirectional) 성질이 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;cell-NFI9-eenXcaM&quot; style=&quot;color: #212121; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div style=&quot;color: #000000;&quot;&gt;
&lt;div&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;스킵-그램 모델(Skip-Gram Model)&lt;/h3&gt;
&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;어떤 단어 앞뒤에 특정 범위를 정해두고 이 범위 내에 어떤 단어들이 올지 분류&lt;/li&gt;
&lt;li&gt;Conv1D가 학습하는 과정과 비슷&lt;/li&gt;
&lt;li&gt;context로 설정한 단어 주변에 어떤 단어들이 분포해있는지 학습&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;cell-JlRUOsmTX4mB&quot; style=&quot;color: #212121; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div style=&quot;color: #000000;&quot;&gt;
&lt;div&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;언어 모델이 주목받는 이유&lt;/h3&gt;
&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;데이터 제작비용 때문&lt;/li&gt;
&lt;li&gt;Transfer Learning&lt;/li&gt;
&lt;li&gt;대량의 말뭉치로 pretrain한 언어모델을 문서 분류, 개체명 인식 등 다운스트림 태스크에 적용하면 적은 양의 데이터로도 성능을 큰 폭으로 개선할 수 있다&lt;/li&gt;
&lt;li&gt;업스트림 태스크-pretrain model / 다운스트림 태스크-모델을 수정해 사용하는 부분&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>데이터분석 공부/DSBA 4기</category>
      <category>masked language model</category>
      <category>skip-gram model</category>
      <category>딥러닝 언어 모델</category>
      <category>순방향 언어 모델</category>
      <category>역방향 언어 모델</category>
      <author>이삼오</author>
      <guid isPermaLink="true">https://so-coding.tistory.com/49</guid>
      <comments>https://so-coding.tistory.com/49#entry49comment</comments>
      <pubDate>Tue, 30 Apr 2024 16:06:38 +0900</pubDate>
    </item>
    <item>
      <title>파이썬 pip install 에러 해결 : 윈도우 환경변수 PATH 설정</title>
      <link>https://so-coding.tistory.com/48</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f8f9fa; color: #212529; text-align: start;&quot;&gt;명령 프롬프트에서 pyqt를 install 하려는데 아래의 오류가 발생했다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f8f9fa; color: #212529; text-align: start;&quot;&gt;'pip'은(는) 내부 또는 외부 명령, 실행할 수 있는 프로그램, 또는 배치 파일이 아닙니다.&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #212529;&quot;&gt;&lt;span style=&quot;background-color: #f8f9fa;&quot;&gt;이전에도 프롬프트로 프로그램 설치한 적이 있어서 왜 갑자기 이런 오류가 생겼는지 의문이었다. 어떻게 설치했는지 생각해보니까 그동안 conda prompt를 사용했던 것 같다. 시스템 환경 변수를 확인해보니 콘다 경로는 잘 등록되어 있었다. 환경변수 등록은 생각보다 간단하다.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #212529;&quot;&gt;&lt;span style=&quot;background-color: #f8f9fa;&quot;&gt;1. 윈도우 환경변수 설정&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #212529;&quot;&gt;&lt;span style=&quot;background-color: #f8f9fa;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bzYsto/btsG1v4LNq4/SWh7EFybuIYFrJHkQaBnDK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bzYsto/btsG1v4LNq4/SWh7EFybuIYFrJHkQaBnDK/img.png&quot; data-origin-width=&quot;1154&quot; data-origin-height=&quot;1072&quot; data-is-animation=&quot;false&quot; data-filename=&quot;blob&quot; width=&quot;370&quot; height=&quot;344&quot; data-widthpercent=&quot;38.38&quot; style=&quot;width: 37.9293%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bzYsto/btsG1v4LNq4/SWh7EFybuIYFrJHkQaBnDK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbzYsto%2FbtsG1v4LNq4%2FSWh7EFybuIYFrJHkQaBnDK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1154&quot; height=&quot;1072&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bDonZM/btsGZW9Vn9e/0vGQpt25rCmRAJOhl3bomK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bDonZM/btsGZW9Vn9e/0vGQpt25rCmRAJOhl3bomK/img.png&quot; data-origin-width=&quot;567&quot; data-origin-height=&quot;328&quot; data-is-animation=&quot;false&quot; width=&quot;467&quot; height=&quot;270&quot; data-widthpercent=&quot;61.62&quot; style=&quot;width: 60.9079%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bDonZM/btsGZW9Vn9e/0vGQpt25rCmRAJOhl3bomK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbDonZM%2FbtsGZW9Vn9e%2F0vGQpt25rCmRAJOhl3bomK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;567&quot; height=&quot;328&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;윈도우 검색창에 &lt;b&gt;시스템 환경 변수 편집&lt;/b&gt;을 검색하거나 &lt;b&gt;window + R&lt;/b&gt; 키를 눌러 시스템 항목을 연다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dw6xnf/btsG1gfxo4f/tc2clZbu1OzlrHsThcESAk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dw6xnf/btsG1gfxo4f/tc2clZbu1OzlrHsThcESAk/img.png&quot; data-origin-width=&quot;682&quot; data-origin-height=&quot;873&quot; data-is-animation=&quot;false&quot; width=&quot;439&quot; height=&quot;562&quot; data-widthpercent=&quot;46.13&quot; style=&quot;width: 45.5939%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dw6xnf/btsG1gfxo4f/tc2clZbu1OzlrHsThcESAk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdw6xnf%2FbtsG1gfxo4f%2Ftc2clZbu1OzlrHsThcESAk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;682&quot; height=&quot;873&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/7d3MM/btsG1fOthEo/tc2DLHLpLhoqDJbFr9bIRk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/7d3MM/btsG1fOthEo/tc2DLHLpLhoqDJbFr9bIRk/img.png&quot; data-origin-width=&quot;884&quot; data-origin-height=&quot;969&quot; data-is-animation=&quot;false&quot; width=&quot;453&quot; height=&quot;497&quot; data-widthpercent=&quot;53.87&quot; data-filename=&quot;blob&quot; style=&quot;width: 53.2433%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/7d3MM/btsG1fOthEo/tc2DLHLpLhoqDJbFr9bIRk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F7d3MM%2FbtsG1fOthEo%2Ftc2DLHLpLhoqDJbFr9bIRk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;884&quot; height=&quot;969&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시스템 속성 상단에서 &lt;b&gt;고급&lt;/b&gt;을 선택하고 하단의 &lt;b&gt;환경 변수&lt;/b&gt;를 클릭한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;새로 열린 환경 변수 창에서 하단의 &lt;b&gt;Path&lt;/b&gt;를 선택하고 &lt;b&gt;편집&lt;/b&gt;을 눌러 편집 창으로 들어간다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;828&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vkKHM/btsG1vXZjI0/jTNuKp2EHWzaW7jXAzdnkk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vkKHM/btsG1vXZjI0/jTNuKp2EHWzaW7jXAzdnkk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vkKHM/btsG1vXZjI0/jTNuKp2EHWzaW7jXAzdnkk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvkKHM%2FbtsG1vXZjI0%2FjTNuKp2EHWzaW7jXAzdnkk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1200&quot; height=&quot;828&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;828&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위와 같은 새로운 환경 변수 편집 창이 열린다. 사진에는 이미 추가되어 있지만 pip install 에러가 발생했을 때는 Python 경로가 설정되어 있지 않았다. 파이썬을 설치할 때 경로에 별다른 옵션을 넣지 않았다면 C드라이브-User-사용자 이름-AppData-Local-Programs-Python으로 경로가 동일할 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;새로 만들기&lt;/b&gt;를 눌러 환경 변수를 추가한다. 입력 경로는 아래와 같다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt; C:\Users\(유저이름)\AppData\Local\Programs\Python\파이썬 버전&lt;/b&gt;&lt;br /&gt;&lt;b&gt;C:\Users\(유저이름)\AppData\Local\Programs\Python\파이썬 버전\Scripts&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내 경우 파이썬 3.10 버전이라 &lt;span style=&quot;letter-spacing: 0px;&quot;&gt;C:\Users\(유저이름)\AppData\Local\Programs\Python\Python310 &lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;을 입력했다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 파이썬 설치 버전이나 경로가 기억나지 않는다면 윈도우 검색창에 Python을 검색해서 경로를 찾을 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2. 파이썬 설치 경로 찾기&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/9k6Lx/btsGZztAIUY/xjFt6bQKtizfuRgBeNPIu0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/9k6Lx/btsGZztAIUY/xjFt6bQKtizfuRgBeNPIu0/img.png&quot; data-origin-width=&quot;1154&quot; data-origin-height=&quot;1067&quot; data-is-animation=&quot;false&quot; data-filename=&quot;blob&quot; width=&quot;395&quot; height=&quot;365&quot; data-widthpercent=&quot;40.48&quot; style=&quot;width: 40.0074%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/9k6Lx/btsGZztAIUY/xjFt6bQKtizfuRgBeNPIu0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F9k6Lx%2FbtsGZztAIUY%2FxjFt6bQKtizfuRgBeNPIu0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1154&quot; height=&quot;1067&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/drytft/btsG0V3GEgf/XlPAN5WKBbJtUg9jWlbYs1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/drytft/btsG0V3GEgf/XlPAN5WKBbJtUg9jWlbYs1/img.png&quot; data-origin-width=&quot;1883&quot; data-origin-height=&quot;1184&quot; data-is-animation=&quot;false&quot; data-filename=&quot;blob&quot; style=&quot;width: 58.8298%;&quot; data-widthpercent=&quot;59.52&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/drytft/btsG0V3GEgf/XlPAN5WKBbJtUg9jWlbYs1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdrytft%2FbtsG0V3GEgf%2FXlPAN5WKBbJtUg9jWlbYs1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1883&quot; height=&quot;1184&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;윈도우 검색창에 python을 검색하고 파일 위치 열기로 앱이 설치된 위치로 들어간다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;폴더 상단의 위치를 보면 Start Menu-Programs-Python 으로 되어있다. 시작 메뉴에서 위치를 열었기 때문이다. 이 폴더에서 다시 한 번 파일 위치 열기를 눌러 파이썬이 실제 설치된 곳으로 이동해야 한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1889&quot; data-origin-height=&quot;1187&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b98xVc/btsG131ktH9/5cS1rQK4l6FOAsVg5hhfvK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b98xVc/btsG131ktH9/5cS1rQK4l6FOAsVg5hhfvK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b98xVc/btsG131ktH9/5cS1rQK4l6FOAsVg5hhfvK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb98xVc%2FbtsG131ktH9%2F5cS1rQK4l6FOAsVg5hhfvK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1889&quot; height=&quot;1187&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1889&quot; data-origin-height=&quot;1187&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;경로로 복사&lt;/b&gt;를 눌러 메모장에 적어두고 다시 1번으로 돌아가 환경 변수를 편집한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코딩을 하면서 에러를 많이 보는데 그때그때 해결하는 재미가 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>데이터분석 공부/DSBA 4기</category>
      <category>Path</category>
      <category>파이썬 pip install</category>
      <category>파이썬 환경 변수</category>
      <category>환경 변수 설정</category>
      <category>환경 변수 편집</category>
      <author>이삼오</author>
      <guid isPermaLink="true">https://so-coding.tistory.com/48</guid>
      <comments>https://so-coding.tistory.com/48#entry48comment</comments>
      <pubDate>Sun, 28 Apr 2024 17:32:35 +0900</pubDate>
    </item>
    <item>
      <title>순환 신경망(Recurrent Neural Network, RNN)</title>
      <link>https://so-coding.tistory.com/47</link>
      <description>&lt;div id=&quot;cell-lOEX8zIGP1iX&quot; style=&quot;color: #212121; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div style=&quot;color: #000000;&quot;&gt;
&lt;h2 style=&quot;color: #000000;&quot; data-ke-size=&quot;size26&quot;&gt;Embedding&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Embedding 층은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;수많은 단어 또는 데이터를 벡터 형태로 표현&lt;/b&gt;할 수 있기 때문에 텍스트 분류를 위해 사용하는 가장 기본에 해당하는 츨
&lt;ul style=&quot;list-style-type: disc; color: #000000;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;사전 학습 모델을 불러와 사용할 수 있음&lt;/li&gt;
&lt;li&gt;토큰, 토큰화, 텍스트 분류에 해당하는 기본적 용어를 알고 사용해보자&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;토큰 (Token)&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;문법적으로 더 이상 나눌 수 없는 언어 요소&lt;/li&gt;
&lt;li&gt;이를 수행하는 작업을 토큰화(Tokenizer)라고 함&lt;/li&gt;
&lt;li&gt;텍스트 데이터를 신경망에 입력하기 위해서 일반적으로 토큰화 작업을 수행하고 정의된 토큰에 고유 인덱스를 부여한 뒤 인코딩을 통해 적절한 형태로 바꿔주는 전처리 작업 과정을 거치게 됨
&lt;ul style=&quot;list-style-type: disc; color: #000000;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;원핫 인코딩, 이진 인코딩&lt;/li&gt;
&lt;li&gt;워드 임베딩(Word Embedding)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;cell-7-zbQxrtmBxu&quot; style=&quot;color: #212121; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div style=&quot;color: #000000;&quot;&gt;
&lt;div&gt;&lt;i&gt;&lt;/i&gt;
&lt;h2 style=&quot;color: #000000;&quot; data-ke-size=&quot;size26&quot;&gt;토큰화 작업 수행하기&lt;/h2&gt;
&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;tensorflow.keras.preprocessing.text 모듈에서 이를 위한 함수를 제공&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #ffffff; color: #212121; text-align: start;&quot;&gt;
&lt;h2 style=&quot;color: #000000;&quot; data-ke-size=&quot;size26&quot;&gt;Tokenizer() 함수를 사용하여 토큰화 작업 수행&lt;/h2&gt;
&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #212121; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;사전을 손쉽게 만들어주는 함수&lt;/li&gt;
&lt;li&gt;사전의 규칙을 지정해줘야 함&lt;/li&gt;
&lt;li&gt;oov_token : 데이터에 나타나지 않은 단어를 전달된 단어로 교체. 잘 사용되지 않는 단어를 '기타'로 처리&lt;/li&gt;
&lt;li&gt;fit_on_texts() 함수를 통해 데이터에 적용하고 texts_to_sequence() 함수로 변환&lt;/li&gt;
&lt;li&gt;sequences_to_matrix 함수를 사용하면 이진 형태로 인코딩된 결과를 얻을 수 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;background-color: #ffffff; color: #212121; text-align: start;&quot;&gt;
&lt;h2 style=&quot;color: #000000;&quot; data-ke-size=&quot;size26&quot;&gt;희소 행렬(Sparse Matrix)&lt;/h2&gt;
&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #212121; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;존재하는 단어의 인덱스를 제외하고 전부 0으로 표현&lt;/li&gt;
&lt;li&gt;고차원이며 단어의 유사성(Similarity)를 표현할 수 없음&lt;/li&gt;
&lt;li&gt;행렬의 고차원으로 인해 불필요한 계산이 추가되며 차원의 저주를 야기한다&lt;/li&gt;
&lt;li&gt;원핫인코딩과 같다&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 style=&quot;background-color: #ffffff; color: #212121; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;밀집 행렬(Dense Matrix)&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #212121; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;각 단어의 관계를 실수로 표현. 저차원에 해당&lt;/li&gt;
&lt;li&gt;데이터를 기반으로 조정해 유사한 의미를 가지는 단어는 비슷한 공간에 표현(매핑)됨&lt;/li&gt;
&lt;li&gt;tfidf와 유사&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;background-color: #ffffff; color: #212121; text-align: start;&quot;&gt;
&lt;h2 style=&quot;color: #000000;&quot; data-ke-size=&quot;size26&quot;&gt;데이터를 동일한 길이로 맞추기&lt;/h2&gt;
&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #212121; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;데이터의 길이가 전부 동일하도록 조정&lt;/li&gt;
&lt;li&gt;pad_sequences() 함수를 사용&lt;/li&gt;
&lt;li&gt;지정해준 길이보다 짧은 경우 0으로 채워넣음 -&amp;gt; zero padding&lt;/li&gt;
&lt;li&gt;긴 경우는 잘라냄&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;background-color: #ffffff; color: #212121; text-align: start;&quot;&gt;
&lt;h2 style=&quot;color: #000000;&quot; data-ke-size=&quot;size26&quot;&gt;Embedding층을 사용해서 모델 구성&lt;/h2&gt;
&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #212121; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;모델의 첫 번째 층으로만 사용할 수 있으며 주로 순환 신경망과 연결하여 사용함&lt;/li&gt;
&lt;li&gt;input_dim 학습 데이터에서 사용한 단어의 개수&lt;/li&gt;
&lt;li&gt;output_dim 임베딩 벡터 크기&lt;/li&gt;
&lt;li&gt;input_length 인자는 순환 신경망과 연결할 경우엔 사용하지 않음&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;background-color: #ffffff; color: #212121; text-align: start;&quot;&gt;
&lt;h2 style=&quot;color: #000000;&quot; data-ke-size=&quot;size26&quot;&gt;모델 학습 및 평가하기&lt;/h2&gt;
&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #212121; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;validation_split 인자 사용&lt;/li&gt;
&lt;li&gt;학습 데이터의 끝에서 해당 비율만큼 떼어내 검증 데이터셋으로 활용&lt;/li&gt;
&lt;li&gt;무작위로 20% 비율만큼 뽑아오는 것이 아니라 단순하게 끝에서 떼어낸다는 점을 주의&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;background-color: #ffffff; color: #212121; text-align: start;&quot;&gt;
&lt;h2 style=&quot;color: #000000;&quot; data-ke-size=&quot;size26&quot;&gt;RNN (순환 신경망)&lt;/h2&gt;
&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #212121; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;임베딩 층은 데이터의 표현을 학습하여 데이터 사전을 구축하는 것으로 쉽게 이해할 수 있음&lt;/li&gt;
&lt;li&gt;유사 단어를 비슷한 공간에 매핑할 수 있지만&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;시퀀스 데이터의 중요한 특성인 순서와 맥락을 고려하지 않음&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;Dense vs Conv 차이를 떠올려보자&lt;/li&gt;
&lt;li&gt;순환 신경망은 완전연결층&amp;amp;컨볼루션 신경망의 반대되는 개념으로 설명할 수 있음&lt;/li&gt;
&lt;li&gt;완전연결층, 컨볼루션 신경망은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;피드 포워드 네트워크(feed-forward network)&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;출력값이 오직 마지막 층인 출력층을 향함&lt;/li&gt;
&lt;li&gt;순환 신경망은 출력값이 출력층을 향하면서도 동시에&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;현재층의 다음 값으로 사용&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;모든 뉴런이 현재 상태를 계산하기 위해서 이전 상태(이전에 들어온 값)을 활용함&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Recurrent_neural_network_unfold.svg.png&quot; data-origin-width=&quot;2560&quot; data-origin-height=&quot;854&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bJPZgx/btsGNGtFkn9/zjUxLY0vKQ6TQJkC4t3jnK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bJPZgx/btsGNGtFkn9/zjUxLY0vKQ6TQJkC4t3jnK/img.png&quot; data-alt=&quot;이미지 출처 :&amp;amp;nbsp;https://en.wikipedia.org/wiki/Recurrent_neural_network#/media/File:Recurrent_neural_network_unfold.svg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bJPZgx/btsGNGtFkn9/zjUxLY0vKQ6TQJkC4t3jnK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbJPZgx%2FbtsGNGtFkn9%2FzjUxLY0vKQ6TQJkC4t3jnK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2560&quot; height=&quot;854&quot; data-filename=&quot;Recurrent_neural_network_unfold.svg.png&quot; data-origin-width=&quot;2560&quot; data-origin-height=&quot;854&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;이미지 출처 :&amp;nbsp;https://en.wikipedia.org/wiki/Recurrent_neural_network#/media/File:Recurrent_neural_network_unfold.svg&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #212121; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;X는 입력, T는 현재 시점&lt;/li&gt;
&lt;li&gt;A의 결과는 다시 A로 들어가서 루프를 만들어 주게 되는데요. 때문에 현재의 상태(state)가 그 다음 상태(state)에 영향을 미치게 됩니다&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>데이터분석 공부/DSBA 4기</category>
      <category>Embedding</category>
      <category>rnn</category>
      <category>tokenizer</category>
      <category>밀집 행렬</category>
      <category>순환신경망</category>
      <category>임베딩</category>
      <category>토큰</category>
      <category>토큰화</category>
      <category>희소 행렬</category>
      <author>이삼오</author>
      <guid isPermaLink="true">https://so-coding.tistory.com/47</guid>
      <comments>https://so-coding.tistory.com/47#entry47comment</comments>
      <pubDate>Mon, 22 Apr 2024 17:41:10 +0900</pubDate>
    </item>
    <item>
      <title>분류 성능 평가 지표 : F1 Score, F-Beta Score, Macro-F1 정리</title>
      <link>https://so-coding.tistory.com/46</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. F1 score&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;791&quot; data-origin-height=&quot;75&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/R2iUD/btsGOIxwg6c/hmBnFrJ0BUjjCCDCbvrkGk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/R2iUD/btsGOIxwg6c/hmBnFrJ0BUjjCCDCbvrkGk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/R2iUD/btsGOIxwg6c/hmBnFrJ0BUjjCCDCbvrkGk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FR2iUD%2FbtsGOIxwg6c%2FhmBnFrJ0BUjjCCDCbvrkGk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;791&quot; height=&quot;75&quot; data-origin-width=&quot;791&quot; data-origin-height=&quot;75&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h6&gt;이미지 출처 : &lt;a href=&quot;https://en.wikipedia.org/wiki/F-score&quot;&gt;https://en.wikipedia.org/wiki/F-score&lt;/a&gt;&lt;/h6&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;분류 성능 평가 지표 중 F1 Score는 Precision과 Recall의 조화평균을 의미한다.&lt;/li&gt;
&lt;li&gt;F1 Score는 0.0~ 1.0 사이의 값을 가지고, 1에 가까울수록 좋은 모델이다.&lt;/li&gt;
&lt;li&gt;정밀도와 재현율을 균형 있게 반영하기 위해 산술평균이 아닌 조화평균을 사용한다.&lt;/li&gt;
&lt;li&gt;데이터 분류 클래스가 불균형할 때 모델의 성능을 정확하게 평가할 수 있다.&lt;/li&gt;
&lt;li&gt;F-Beta Score 관점에서 보면 Beta가 1인 경우가 F1 Score에 해당한다.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. F-Beta Score&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;429&quot; data-origin-height=&quot;77&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eq8TIj/btsGQ1wasXN/Vo38MWWxoHsBND9RbdkKM0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eq8TIj/btsGQ1wasXN/Vo38MWWxoHsBND9RbdkKM0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eq8TIj/btsGQ1wasXN/Vo38MWWxoHsBND9RbdkKM0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Feq8TIj%2FbtsGQ1wasXN%2FVo38MWWxoHsBND9RbdkKM0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;429&quot; height=&quot;77&quot; data-origin-width=&quot;429&quot; data-origin-height=&quot;77&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h6&gt;이미지 출처 : &lt;a href=&quot;https://en.wikipedia.org/wiki/F-score&quot;&gt;https://en.wikipedia.org/wiki/F-score&lt;/a&gt;&lt;/h6&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;F1 기반 평가산식 중 하나로 Beta를 매개변수로 사용해 Precision과 Recall 사이의 균형에 가중치를 부여하는 방법이다.&lt;/li&gt;
&lt;li&gt;Recall에 더 비중을 두려는 경우 F-Beta Score의 Beta 값을 1보다 큰 값으로 지정하면 된다.&lt;/li&gt;
&lt;li&gt;Beta 값이 1.0보다 크면 Recall에 비중을 두고 계산하고&lt;/li&gt;
&lt;li&gt;Beta 값이 1.0보다 작으면 Precision에 비중을 두고 계산하게 된다.&lt;/li&gt;
&lt;li&gt;만약 Recall 값과 Precision 값이 정확이 같다면 Beta에 관계없이 같은 결과가 나온다.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. Macro-F1 Score&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;960&quot; data-origin-height=&quot;123&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mxD2u/btsGNG1kkUF/PhLPgRT4JbZEFbckXyXaE1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mxD2u/btsGNG1kkUF/PhLPgRT4JbZEFbckXyXaE1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mxD2u/btsGNG1kkUF/PhLPgRT4JbZEFbckXyXaE1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmxD2u%2FbtsGNG1kkUF%2FPhLPgRT4JbZEFbckXyXaE1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;960&quot; height=&quot;123&quot; data-origin-width=&quot;960&quot; data-origin-height=&quot;123&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;둘 이상의 클래스가 있는 데이터 세트의 전체 F1 점수를 계산하기 위한 집계 방식 중 하나이다.&lt;/li&gt;
&lt;li&gt;클래스 별로 계산된 F1 점수의 비가중 평균으로, F1 점수에 대한 가장 간단한 집계이다.&lt;/li&gt;
&lt;li&gt;Macro-F1 Score 역시 0.0과 1.0 사이의 값을 가지며 1에 가까울수록 좋다.&lt;/li&gt;
&lt;li&gt;Macro-F1은 모든 클래스의 값에 동등한 중요성을 부여한다.&lt;/li&gt;
&lt;li&gt;클래스의 빈도에 관계없이 모든 클래스가 동등하게 기여하므로 불균형 데이터 세트에 대한 객관적인 결과를 반환할 수 있다.&lt;/li&gt;
&lt;li&gt;Macro-F1 Score와 반대로 클래스 빈도에 따라 가중치를 부여하는 Micro-F1 Score 방식도 있다. 그러나 이 방식은 데이터의 불균형을 더욱 증폭 시킨다는 단점이 있다&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;참고 자료&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/F-score&quot;&gt;https://en.wikipedia.org/wiki/F-score&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://sumniya.tistory.com/26&quot;&gt;https://sumniya.tistory.com/26&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://stephenallwright.com/micro-vs-macro-f1-score/&quot;&gt;https://stephenallwright.com/micro-vs-macro-f1-score/&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://blog.naver.com/wideeyed/221531998840&quot;&gt;https://blog.naver.com/wideeyed/221531998840&lt;/a&gt;&lt;/p&gt;</description>
      <category>데이터분석 공부/멋사 AIS 7기</category>
      <category>F-Beta Score</category>
      <category>F1 Score</category>
      <category>Macro-F1&amp;nbsp;Score</category>
      <category>분류 성능 평가 지표</category>
      <author>이삼오</author>
      <guid isPermaLink="true">https://so-coding.tistory.com/46</guid>
      <comments>https://so-coding.tistory.com/46#entry46comment</comments>
      <pubDate>Mon, 22 Apr 2024 15:19:09 +0900</pubDate>
    </item>
  </channel>
</rss>