https://huggingface.co/datasets/g0ster/TinyStories-Korean

tinystories 한국어 번역 데이타셋을 갖고 llama.c 저장소에 있는 코드를 이용해서 학습해봄.

https://github.com/karpathy/llama2.c


15M 버전으로 일단 만들어보고 (학습 소요 시간 4090*2 로 약 3시간) 110M 버전으로도 만들어봄 (약 20시간)


llama2.c 에 있는 데이타셋 읽는 코드와 허깅페이스에 올라간 한국어 데이타셋의 형식이 약간 달라서 그 부분 고쳐주고 실행함


먼저 sentencepiece 를 이용해서 vocab 를 뽑아주는데 사전 사이즈를 4096 으로 잡으니까 넉넉하게 토큰화됨

토큰화를 하고 나면 생기는 tok4096.vocab 파일 내용


vocab 을 뽑았으면 데이타셋에 있는 텍스트 (약 1100만줄의 한국어 텍스트들이 50개의 json 파일로 나뉘어져 있음) 을 미리 토큰화시킴


토큰화가 끝났으면 학습스크립트를 이용해서 돌리면 된다


아래는 110M 버전의 결과








번역하면서 문장의 퀄리티가 좀 저하되서 그런지, 아니면 학습 스텝수가 부족해서 그런지 (스크립트에 기본으로 지정된 100000 스텝까지만 진행) 논리적으로 약간씩 이상한 부분이 보이지만 그냥저냥 문장은 뽑아줌. 위의 tok/s 는 gpu 를 사용하지 않고 순수 cpu 로만 뽑은거라 그렇게 빠르진 않음.


성능상에서 한계는 분명하지만, 일단 LLM pretrain의 helloworld 에 해당하는 것 하나는 해봤다는 것에 의의를 둘 수 있겠음.


여기서 더 연구해볼 부분이 몇가지 있을거 같은데

 - 위의 동화이야기들은 한국어이지만 사람 이름이 맥스, 톰, 릴리 같은 이름만 되어있음. 철수나 영희 같은 이름도 추가되어야 함. 

 - 한국어와 동시에 원래 영어 데이타까지 합쳐서 같이 학습하게 해서 다국어버전을 만들어 돌려보는 것도 시도해볼만 함

 - 유치원 수준 산수에 대한 내용을 데이타셋에 추가시켜보면 어떨까 싶음. 그냥 순수하게 숫자 연산하는 것 and 이야기 내에 사과를 먹고 또 먹었다 몇개를 먹었을까? 하고 선생님이 물어보면 두 어린이가 세개에요! 두개에요! 하는 식으로 논리적 추론을 하는 내용

 - 역시 유아용 동화책에 나오는 그림들을 붙여서 vlm 으로 만들어보기. 영어 원문 동화를 잘 설명할 수 있는 그림을 한장씩 생성하고, clip 같은 이미지 인코더를 이용해서 혼합 트레이닝

 - instruct 에 해당하는 질문 답변을 추가하기. Q: 이 이야기의 교훈은 무엇일까요? A: 욕심을 부리면 안된다. 같은 추상적 내용이던가, 정답이 있는 사실관계에 대한 내용 (위의 이야기에서 강아지의 이름은 무엇인가요? 같은..)