[부스트캠프] Day 57 회고

Gamchan Kang·2024년 11월 5일
0

10:00 ~ 13:00

어제 쉬면서도 어떻게 라벨링을 바로 잡을 지 고민했다. 나는 부스트캠프 일과가 끝나면 적어도 8시까지는 마무리하고 쉰다. 밤 늦게까지하면 마라톤 같은 커리큘럼을 버티지 못 할 거라 생각했기 때문이다. 하지만 어제는 라벨링 고민으로 쉬면서도 따로 찾아봤다. 그렇게 고민했지만 역시 깨달은 건 별로 없었다.

다른 팀원이 gemma2 프롬프팅이 잘 먹힌다는 사실을 알아냈다! 그 동안 LLM 출력 문자열 컨트롤이 너무 힘들었다. 그래서 버린 테스크도 많았다. gemma2 27b 모델을 받아서 라벨 클러스터링을 시도했다. 군집이 141개가 나왔지만, 라벨링이 전부 한 단어로 잘 묶여서 만족스러웠다. 희망이 보인다!

13:00 ~ 16:00

서버 활용이 활발하다보니 의존성 관리가 힘들었다. pipreqs를 활용해서 최소 의존성 관리 자동화 스크립트를 짰다. 특히 주피터 노트북으로 작업을 많이하다보니 스크립트 파일이 필수였다. .ipynb를 .py로 변환하여 정적으로 import 문을 스캔하고 변환한 .py 파일을 지우는 스크립트였다. 중간에 rm -rf *.py 명령이 있어서 간담이 서늘해졌었다. 주피터 노트북 파일 이름을 저장하는 방식으로 스크립트를 수정했다. 항상 삭제는 조심히. 백업은 자주!

코드 리뷰가 얼추 끝나서 PR 병합을 했다. 문득 내가 다른 팀원들 코드 리뷰를 너무 안 한다는 사실을 깨달았다. 내 할 일도 일이지만 다른 팀원들이 뭘하는지 파악하는 건 코드 리뷰가 가장 정확한데 말이다. 내가 자주 하자고 해놓고 까먹고 있다...

클러스터링 된 141개 라벨 텍스트를 다시 BERT로 임베딩하여 7개로 압축하려고 했다. 하지만 압축된 7개의 라벨 분포가 관측치보다 너무 달랐다. 막막했다...

16:00 ~ 19:00

팀장 친구가 이렇게 말했다. "올바르게 분류하는 모델을 학습시키기 위한 올바른 데이터를 만들기 위해서 올바르게 분류하는 모델을 만든다" 사실 아직도 Data-centric이 뭔지 모르겠다. 라벨이 잘 못된 데이터를 클러스터링하는데, 이게 올바르게 동작하면 굳이 모델로 넘어가야 되나 싶다.

7개로 라벨 압축을 직접하려고 시도했다! 하지만, 141개 클러스터 중에는 기준이 모호한 라벨이 한 두개가 아니였다. 예를 들어 '국제 정치'는 '국제'로 라벨링을 해야하는지, '정치'로 라벨링을 해야하는지 판단하기 힘들었다. 결국 하드 코딩으로 라벨링하는 계획은 파기했다.

이후 일과가 끝날때까지 실험 고안 - 파기의 연속이었다. 처음에는 아예 SBERT로 원본 데이터를 다시 임베딩해볼까도 생각했는데, 말이 안 되는 생각이었다. 문장 유사도 기반 클러스터링은 유사한 문맥적 의미를 가져야 하는데, 뉴스 기사는 정반대되는 의미도 같은 카테고리로 묶일 수 있기 때문이였다.
이후 gemma2로 클러스터링한 141개 데이터를 BERT 임베딩 후 클러스터링하는 걸 생각했지만, 앞서 말한 대로 데이터 별로 라벨링 판단이 너무 어려워 클러스터링된 라벨 단어만으로 압축한다는 건 너무 오차가 클 것 같았다.(회고 쓰는 순간에는 해볼까도 싶었다.)

그 중 가장 고민이 많았던 것은 어떻게 라벨 정보를 모르는 상태에서 라벨 분류를 할지였는데, LLM agent를 활용해야겠다고 생각했다. 전체 데이터를 7개 카테고리로 분류한 다음, 데이터 하나 하나를 다시 카테고리 집합에 추가하여 클러스터를 구성하는 방식이다. LLM agent와 Message History 등 공부해야 할 것이 많아졌다.

10시가 넘어서 정답을 찾았다! 드디어 내가 생각했던 대로 코드가 동작했다. 중간에 운동 30분 깔짝하는 것 외에는 노트북 앞에 계속 앉아있었는데, 시간이 너무 빨리 갔다. 백그라운드로 ollama와 코드를 실행시켜 놓고 이제 쉬러 가야겠다. 속이 다 후련하다!

profile
Someday, the dream will come true

0개의 댓글

Powered by GraphCDN, the GraphQL CDN