[플레이데이터 SK네트웍스 Family AI 캠프 6기] 14주차 회고

Yunazz·2024년 12월 30일
0

🗓️기간

24.12.23 - 24.12.27

👍 Liked

이번 주에는 LLM과 관련한 프로젝트를 진행했다. 챗봇을 만드는 실습으로, 우리 조는 세법 관련 데이터를 학습한 챗봇을 만들기로 했다. 프로젝트를 진행하며 전처리 과정에 따라 결과가 크게 달라지는 것을 직접 확인할 수 있었고, 이러한 경험이 매우 흥미로웠다. 특히, 프롬프트 템플릿 메시지 작성 방식에 따라 결과가 극명하게 변화하는 점이 인상 깊었다. 작은 차이들이 결과에 미치는 영향을 체감하며 프로젝트를 더욱 재미있게 느낄 수 있어서 좋았다.

📚 Learned

이번 주에는 CNN(합성곱 신경망)과 관련된 여러 중요한 개념과 기술을 배웠다.

CNN (Convolutional Neural Network)

  • CNN은 이미지 데이터에서 특징을 추출하고 패턴을 학습하는 데 탁월한 신경망이다.
  • 합성곱 레이어와 풀링 레이어를 통해 이미지를 효율적으로 처리하며, 특히 이미지 분류, 물체 검출 등에서 강력한 성능을 발휘한다.

torchvision의 transforms와 Image Augmentation

  • 이미지 데이터를 증강(Augmentation)하여 학습 데이터를 확장하는 방법도 배웠다.
  • torchvision.transforms를 사용하면 회전, 크기 조정, 플립 등 다양한 변환을 쉽게 적용할 수 있다.
  • 이를 통해 모델이 더 다양한 데이터에서 학습할 수 있도록 도와 과적합을 방지하고 일반화 성능을 높일 수 있다.

Pretrained Models

  • Pytorch에서 제공하는 사전 학습된 모델(Pretrained Model)에 대해 배웠다.
  • 이러한 모델은 대규모 데이터셋에서 이미 학습된 가중치를 포함하고 있어, 초기화 없이 바로 사용하거나, 파인튜닝(fine-tuning)으로 특정 작업에 맞게 조정할 수 있다.

주요 CNN 모델

  • VGGNet

    • 비교적 간단한 구조로 구성되었으며, 깊고 규칙적인 합성곱 레이어로 이루어져 있다.
    • 뛰어난 성능을 보이는 동시에, 파라미터 수가 많아 계산량이 큰 점이 특징이다.
  • ResNet

    • "Residual Block"을 도입하여 더 깊은 네트워크를 효과적으로 학습할 수 있도록 설계되었다.
    • 네트워크가 깊어질수록 발생하는 학습 문제를 해결한 대표적인 모델이다.
  • MobileNet

    • 경량화된 CNN 모델로, 모바일과 임베디드 환경에서 사용하기에 적합하다.
    • 계산량이 적으면서도 효율적인 성능을 제공한다.

이러한 내용들을 배우며 CNN의 강력함과 다양한 활용 방법에 대해 깊이 이해할 수 있었고 특히, Image Augmentation과 Pretrained Model을 실제로 활용하며 실무에 적용 가능한 기술을 익힐 수 있었다.

프로젝트

  • 깃헙 주소: https://github.com/SKNETWORKS-FAMILY-AICAMP/SKN06-3rd-4Team

  • 데이터 전처리

    • 불필요 텍스트 제거
    # 머리말, 꼬리말 제거
    regex1 = rf'법제처\s*\d+\s*국가법령정보센터\n{file_name.replace("_", " ")}\n' 
    text = re.sub(regex1, '', text, flags=re.MULTILINE)
    
    # [ ]로 감싸진 텍스트 제거
    text = re.sub(r'\[[\s\S]*?\]', '', text)
    
    # < >로 감싸진 텍스트 제거
    text = re.sub(r'<[\s\S]*?>', '', text)
    
    # 페이지 번호 패턴 제거
    text = re.sub(r'^- \d{1,3} -', '', text)
    
    # - 머리말 및 사이드바 제거
      regex2 = (r"2\n0\n2\n5\n\s*달\n라\n지\n는\n\s*세\n금\n제\n도|"  
       r"\n2\n0\n2\n4\n\s*세\n목\n별\n\s*핵\n심\n\s*개\n정\n세\n법|"
       r"\n2\n0\n2\n4\n\s*개\n정\n세\n법\n\s*종\n전\n-\n개\n정\n사\n항\n\s*비\n교\n|"
       r"\s*3\s*❚국민・기업\s*납세자용\s*|"
       r"\s*2\s*0\s*2\s*4\s|"
       r"\s한국세무사회\s|" 
       r"\n7\n❚국민・기업 납세자용|"
       r"\n71\n❚상세본|")
      re.sub(regex2, "", text)        
      
    # 문장이 다음줄로 넘어가면서 생기는 \n 제거 
    re.sub(r"([\uAC00-\uD7A3])\n+([\uAC00-\uD7A3])", r"\1\2" , text) #앞뒤글자 합치기
      
    # NaN 제거
    re.sub(r"\bNaN\b", r"\1\2" , text) 
      
    # 하나 이상의 공백문자를 한 개의 공백문자로 바꾸기
    re.sub(r"\s+", " ", text)

🚧 Lacked

단위 프로젝트 후 항상 보는 시험이 있는데, 이번 시험 주제는

  • 자연어 데이터 준비
  • 자연어 딥러닝
  • LLM
  • 프롬프트 엔지니어링
  • 파인튜닝
  • 자연어-이미지 멀티모달

이었는데, 알면서도 틀린 문제도 있었지만 2~3문제는 아예 몰라서 찍었던 것 같다... 시험 끝나고 그 개념을 다시 찾아봐야했고 나의 부족함을 한참 느끼며 진도는 끝났지만 전체적으로 내용을 다시 공부하며 복습해야겠다!

🎯 Longed For

프로젝트를 하며 3일간(크리스마스 포함) 불태운 탓에 체력적으로나 멘탈적으로나 조금 지친 것 같다. 하지만 다음 주부터 시작하는 WEB! 너무 반가운 주제라 기대가 큰만큼, 열심히 수업을 듣고자 충분히 재충전하고 와야겠다 :)

profile
웹개발(프론트엔드,백엔드)

0개의 댓글