11주차는 미니프로젝트 6차를 마저 끝내고, 에이블데이 1차로 길고 긴 STEP 1 과정을 마무리하는 한 주였다.
6️⃣ 미니프로젝트 6차
🗯️ LLM을 활용한 간단한 QA 챗봇 구현
미니프로젝트 4 ~ 6일차는 RAG 기술을 이용해 간단한 QA 챗봇을 구현하는 프로젝트를 진행하였다.
본격적인 프로젝트 전에 LLM에 대한 설명을 간단히 해주셨는데, Attention, Transformer를 비롯해 BERT가 어떤 모델인지에 대한 설명과 함께 다양한 LLM 리더보드를 소개해주셨다.
이론만 듣고, '아니... 이것만 듣고 챗봇 만들라고?' 생각했는데, 역시나 구체적인 가이드가 있는 노트북을 보고 안심이 되었다. 실제 코드로 구현하는 과정 중에 '이렇게 되는게 맞나...?' 싶은 부분이 많아서 조원들끼리 많은 이야기가 오고 갔다.
QLoRA 이론 중에 4 bit 양자화로 pre-trained parameter를 로딩하는 부분에서 분명 양자화 로딩했는데도 자꾸 메모리가 터져서 다사다난했던 프로젝트였다.
🎭 Gemma-2b-it를 활용한 감성분류
Fine-tuning 시의 가중치 변화량만 별도로 학습하는 LoRA 기법으로 모델에 영화리뷰 데이터를 학습시켜 fine-tuning 실습을 해보았다. 모델은 Google의 Gemama-2b를 Hugging Face에서 끌어와 사용했고, 학습된 모델은 gemma chat으로 영화리뷰를 새로 주면 그에 대한 감성분류를 하게 만들었다.
코드를 여러 번 돌려보며 느꼈던 어려운 점은 LLM이 너무 크다보니 잘못 돌리면 GPU가 터져서 커널을 언제 재시작해야 하는지를 구분하는 게 좀 어려웠다는 점이다...
LLM이다 보니, sarcasm도 잘 이해할까 싶어 아래와 같은 리뷰를 fine-tuning하기 전과 후에 줘봤는데, 신기하게도 파인 튜닝 전에는 '긍정'이라고 판별했던 모델이 파인 튜닝 후에는 '부정'이라고 판별한 모습을 확인할 수 있었다.
📜 문서 검색 (RAG (Retrieval-Augmented Generation))
LLM이 훈련된 데이터가 최신정보가 아니기 때문에 우리가 따로 문서를 제공해서 모델이 더 정확하게 답할 수 있도록 문서 검색 기능을 구현해보았다.
실습에서는 Query가 들어왔을 때 답변에 필요한 문서를 검색하기 위해 BM25와 Sentence Transformer 방법을 사용했다. BM25는 TF-IDF의 score를 보완하기 위한 파라미터를 추가한 score로, 글자 단위로 chunk를 비교하여 글자들이 얼마나 비슷한지를 기반으로 문서를 검색하는 방법이었고, Sentence Transformer는 텍스트를 임베딩하여, 임베딩된 벡터의 코사인 유사도를 기반으로 질문과 비슷한 문서를 검색하는 방법이었다.
코드 실행 후 느낀 문서 검색 성능은 BM25 < Sentence Transformer 였다. 검색어를 다르게 해서 정확한 비교는 어려웠지만, Sentence Transformer는 모델을 사용해 임베딩을 하는 거다 보니 글자 기반으로 문서를 검색하는 BM25보다 확실히 질문의 의미를 더 잘 이해하고 문서를 찾아주는 느낌?
🤖 RAG(Retrieval-Augmented Generation) based QA Chatbot
위의 두 가지 방법을 이용해 이번에는 직접 수집한 문서 덤프 데이터를 이용해 문서 검색을 하고 검색 결과를 챗봇에 Query와 함께 넘겨주는 실습을 진행했다. 우리 조는 Hugging Face의 한국어 나무위키 데이터 덤프를 사용했는데, 나무위키다 보니 쓸모 없고 정보성이 약한 문서들이 너무 많았고, 다수의 불특정 작성자들이 주석에 사담을 담아놓아서 그런가 질문을 하면 모델이 제대로 말도 못하는 결과가 나왔다.
심지어 모델 크기를 줄이고자 SLLM을 불러서 사용했는데도 메모리가 자꾸 터지는 문제가 발생했다...
Gemma 7 bit와 56만 개의 문서 수를 사용했을 때 GPU RAM이 자꾸 터져서 문서가 너무 많아 그런가 싶어 모델에 주는 문서 수를 10개까지 줄여봤는데 여전히 GPU RAM이 터지는 현상이 발생했다.
그래서 메모리 사용량을 줄여보려고, Gemma 2bit로 모델을 바꿨는데도 GPU가 계속 터졌다..
결국 코랩 프로 (유료) 서비스를 사용하고 있는 조원들 대부분이 리소스가 다 소비되는 사태까지 갔다. 솔직히 다른 조들도 이런 줄 알았는데, 나중에 전체 발표 때 보니 다들 잘 하셨더라... 뭐지...?
여러 원인이 있었겠지만 지금 와서 생각해보면 나무위키 문서가 워낙 크기가 큰 것도 있지만, 그 안에 지엽적이고 쓸모 없는 내용이 많았었던 걸 생각해보면 전형적인 GIGO(Garbage In, Garbage Out) 현상이었던 것 같다.
(나중에 데이터를 크롤링한 뉴스 데이터로 바꿨더니 모델이 멀쩡하게 잘 답변하는 모습을 보여줬다.)
어쨋든 이렇게 결과가 별로 좋지 않았음에도 불구하고 조장님께서 또 전체발표시간에 발표에 자원하셔서 강사님께 왜 이런 현상이 일어났는지 여쭤봐주셨다. 강사님께서 청크가 너무 길어서 그런 걸 수도 있다는 답변을 해주셨다.
발표할 결과물이 많이 없어서 발표가 힘드실 법도 한데, 실패를 기회로 만드는 조장님 리스펙...
다른 조 발표에서는 LangChain과 Streamlit을 사용해 챗봇 웹페이지까지 만든 모습을 볼 수 있었다. 대단해요.
마지막날은 교육장에 모여서 프로젝트를 진행했는데 옆 조 조원 분이 직접 구운 쿠키를 나누어 주셔서 조원들끼리 나눠먹었다. 감사합니다!
✅ 이벤트
👨💻 2차 코딩마스터스 (05.07 ~ 05.31)
다음 주부터 2차 코딩 마스터스를 시행한다고 한다. 이번에는 기초문제가 없고, 초급 문제부터 시작된다.
흑흑...
'Bootcamp > 2024 KT Aivle School' 카테고리의 다른 글
[KT AIVLE School 모집] KT 에이블 스쿨 6기 모집 (0) | 2024.06.22 |
---|---|
[KT AIVLE School 5기] AIVLE Day 1차 (0) | 2024.06.16 |
[KT AIVLE School 5기] AI 개발자 트랙 10주차 후기 (0) | 2024.06.16 |
[KT AIVLE School 5기] AI 개발자 트랙 9주차 후기 (0) | 2024.06.11 |
[KT AIVLE School 5기] AI 개발자 트랙 8주차 후기 (0) | 2024.06.08 |