시작
시작하기 전에
글을 마무리하고 처음으로 돌아와보니 처음 계획보다 매우 긴 글이 됐습니다. 그래서 몇 편으로 나누어서 올려보려고 합니다.
ChatGPT를 시작으로 Generative AI, Large Language Model(LLM)에 대한 열기가 엄청납니다. 수개월 전까지만해도 Generative, Language Model 같은 표현은 AI 계에 몸담고 있는 사람들만이 쓰는 것 같았는데 말이죠. 이제는 주위에서 이런 표현을 듣는 일이 어렵지만은 않습니다.
더 놀라운 사실은 이런 표현들이 말에서 그치지 않고 일상 생활에서 직접 쓰는 단계가 시작됐다는 점입니다. 몇달 전만 해도 개인 컴퓨터에서 Image-to-Text 모델을 돌려본다거나, LLaMA 같은 Language Model을 직접 돌려본다는 것은 흔치 않은 일이었습니다.
그래서인지 Large Language Model이라는 기술을 설명하는 좋은 컨텐츠도 많이 생겨났습니다. 사실 이 글이 또 필요할까 싶을 정도입니다. 하지만 조금이나마 Large Language Model 이라는 기술을 이해하는데 도움이 될까하는 마음으로 글을 시작해봅니다.
이 글은 수식이나 코드같은 너무 기술적인 내용은 다루지 않습니다. 대신 Large Language Model이라는 기술의 과거와 현재, 그리고 이 기술이 어디로 가고 있는지를 다루어보려고 합니다. 아주 자세하지는 않지만 약간의 기술 설명도 곁들이려고 합니다.
Foundation Model
LLM이야기를 하려면 Foundation Model에 대해서 먼저 이야기를 해야합니다. Foundation은 기반이라는 뜻이죠. 즉, Foundation Model은 기반 모델이라는 의미입니다. 기반 모델은 무슨 뜻일까요? Foundation Model 개념을 가장 잘 이해하는 방법은 Foundation Model이 생기기전에는 어땠는지를 살펴보는 것입니다.
Foundation Model 전의 세상
어떤 제품의 리뷰가 긍정적인 의견인지 부정적인 의견인지 판단하는 기능을 만들고 싶다고 가정해보겠습니다. 이런 기능은 보통 아래와 같은 단계를 거쳐서 만듭니다.
- 인터넷에서 리뷰글을 많이 많이 모읍니다. 많을수록 좋습니다. 모은 양이 부족하면 사람이 직접 리뷰를 만들 수도 있습니다.
- 모은 리뷰를 읽으면서 긍정적인 글인지, 부정적인 글인지 표시합니다. 이 과정을 Annotation 또는 Tagging이라고 부릅니다.
- Machine Learning 기법 (요즘은 보통 Deep Learning 기법)을 고르고, 앞에서 만든 데이터를 이용해 훈련을 시킵니다.
- 훈련 결과(모델)를 평가해보고 만족할 때까지 아래 단계들을 반복합니다.
- 데이터 양이 부족하다면 데이터를 더 모으고 태깅합니다.
- 태깅 품질이 좋지 않다면 (긍정인데 부정으로 했다거나) 태깅을 고칩니다.
- 선택한 Machine Learning 기법이 좋지 않다면 또다른 Machine Learning 기법을 시도해봅니다.
- 선택한 Machine Learning을 이리저리 튜닝해보기도 합니다.
다른 예로 문장에서 사람이름, 장소 등을 찾는 기능을 만든다고 가정해보겠습니다. 이것도 위와 비슷한 과정을 거칩니다. 가장 큰 차이점이라면 데이터를 만들 때 긍정, 부정을 표시하는 대신에 문장에 사람이름, 장소를 표시한다는 점입니다.
요약하자면, 각 태스크에 맞는 데이터를 모으고, 각 태스크에 맞게 모델을 훈련시킵니다. 너무나 당연한 이야기인가요?
그런데 이 때 철수가 의문을 제기합니다.
- 철수: 이거 매번 데이터 모으고 태깅하고 너무 힘든데. 데이터 양이 조금도 아니고 말이야. 게다가 Machine Learning 기법이 좋아질 수록 데이터도 더 많이 필요해.
- 길동: 그게 AI 개발자의 삶이야. 다 그렇게 해왔고, 지금도 다 그렇게 하고 있어.
- 철수: 그런데 가만히 생각해보면 어차피 다 언어를 다루는 건데 공통 부분이 있지 않을까?
- 길동: 태스크마다 특성이 다르잖아. 긍정, 부정 분류하는 거랑 문장에서 사람이름 찾는 건 다른 일인데.
- 철수: 그렇기는한데. 나는 공돌이지만, 내 남동생은 문과생이거든. 그래서 전공 분야 이야기는 서로 전혀 안 통하지만, 일반적인 대화 할 때는 아무 문제가 없어.
- 길동: 전공 지식은 각자 배웠지만 한국어야 둘 다 배웠으니까.
- 철수: 그래. 자연어처리도 기본적인 언어 지식은 한번 가르쳐두고, 거기 위에다가 필요한 전문분야만 쌓으면 안 되나? 나랑 내 동생이랑 둘 다 한국어를 하지만 난 공돌이 말 하고 동생은 문과생 말 하는 것처럼?
- 길동: 그거랑 그냥 태스크마다 하나씩 만드는거랑 뭐가 달라. 어차피 힘든 것은 마찬가지.
- 철수: 내가 지금 너랑 이야기할 때는 공돌이 마인드지만 여자친구 만날 때는 또 다르거든. 나는 하나지만 공돌이 대화도 가능하고, 여자친구 대화도 가능하지.
Foundation Model
철수의 생각이 바로 Foundation Model 입니다.
기존 개발 방식을 따르자면
- 공돌이 철수
- 남자친구 철수
는 완전히 다른 두 사람입니다. 태어날 때부터 다르게 태어나서 계속 다른 경험을 하고 다른 사람이 되는 거죠.
하지만 앞의 대화에서 철수는 Foundation Model 철수입니다. 철수는 한 사람이지만 어떤 일(공돌이, 남자친구)을 해야하느냐에 따라서 공돌이 모드가 됐다가 남자친구 모드가 됐다가 하는거죠.
NLP Foundation Model이 있다고 가정해보겠습니다.
리뷰를 긍정, 부정으로 분류하는 시스템을 만들고 싶다면 이 NLP Foundation Model에 긍정, 부정 데이터를 살짝 더해줍니다. 그럼 처음부터 다 만들필요 없이 원하는 시스템을 가질 수 있습니다. 언어 능력의 대부분은 NLP Foundation Model에 이미 들어있고, 저는 전문 분야인 긍정, 부정 쪽만 가르치면 됩니다.
글에서 사람이름을 찾는 일도 마찬가지입니다. 이번에도 같은 NLP Foundation Model을 가져오고 그 위에 사람이름을 찾는 데이터만 살짝 더해줍니다.
일단 Foundation Model이 있다면 태스크 특화 개발은 한층 더 쉬워질 겁니다. Foundation Model이라는 이름답게 살짝 튜닝만 해주면 Foundation Model 하나로 여러 태스크를 수행할 수 있습니다.
Foundation Model이 기존 방식 대비 의미가 있으려면 아래 조건을 만족해야합니다.
- 기존 방식보다 데이터를 조금만 써도 되거나,
- 같은 양의 데이터를 쓰면 성능이 더 좋거나.
그렇지 않으면 굳이 수고롭게 Foundation Model을 만들 필요가 없겠죠.
Foundation Model이라는 아이디어는 너무나도 매력적이고 성공한다면 실용적이기 때문에 수많은 연구자들이 이 문제를 해결하기 위해 뛰어듭니다. 그리고 현재 가장 좋은 NLP Foundation Model로 인정받는 것이 바로 Large Language Model입니다.
Large Language Model
LLM이 Foundation Model, 특히 NLP를 위한 Foundation Model이라는 사실을 알았습니다. 그럼 LLM의 실체는 무엇일까요? LLM을 이해하기 위한 가장 좋은 방법은 Language Model(LM)이 무엇인지 알아보는 것입니다.
Language Model
개인적으로 Language Model은 참 모호한 표현이라고 생각합니다. 단어를 보면 뭔가 느낌이 올 듯 말 듯 한데 잘 오지 않고, 학술적인(기술적인) 정의가 직관과 좀 다르기 때문입니다.
Language Model이라고 하면 어떤 느낌이 드시나요? 뭔가 언어를 표현한, 알 수는 없지만, 그런 느낌적인 느낌을 가진 모델? 데이터?
NLP에서 정의하는 Language Model은 간단히 말하면 "주어진 텍스트 바로 뒤에 올 단어를 예측"하는 모델입니다.
"길가에 꽃이 흐드러지게" -> 다음에 이어질 가장 가능성 높은 단어는 무엇일까요? 아마도 "피었다." 정도일것입니다. "때렸다.", "껐다."는 아니겠지요. 제대로 만든 Language Model이라면 "피었다."라고 예측할 것입니다.
그렇다면 Language Model은 어떻게 "때렸다."가 아닌 "피었다."가 자연스럽다는 것을 알까요? 훈련 데이터에 "길가에 꽃이 흐드러지게 피었다."와 비슷한 문장은 많지만 "길가에 꽃이 흐드러지게 때렸다."같은 문장은 많지 않기 때문입니다. Language Model은 훈련 데이터의 문장들을 보고 가장 자연스러운(흔한) 단어 순서를 배웁니다.
중요한 점은 훈련 데이터 내의 문장을 그대로 외우는 것이 아니라는 것이 아니라, 문장들을 참고해서 패턴을 배운다는 것입니다 (Generalization).
Language Model이 있으면 두가지 일을 할 수 있습니다.
- 앞에서 설명한 주어진 텍스트 다음에 이어질 단어를 예측하는 일입니다.
- 또 다른 하나는 어떤 문장이 얼마나 자연스러운지 판단하는 일입니다. 예를 들어 Language Model은 "길가에 꽃이 흐드러지게 피었다."는 자연스러운 문장(높은 점수)이지만 "길가에 꽃이 흐드러지게 때렸다."는 부자연스러운 문장(낮은 점수)이라는 것을 알 수 있습니다.
Foundation Model로써 가능성
Language Model이 하는 일은 다음 단어를 예측하는 것 뿐이지만 이 단순해 보이는 일은 생각보다 복잡한 능력을 요구합니다. 기본적으로 어휘를 많이 알아야하고, 문법에 맞는 어휘를 고르기 위해서는 문법도 알아야하고, 문맥에 맞는 어휘를 고르기 위해서는 앞선 문장의 의미도 알아야합니다. 이런 것들을 다 안다면 언어를 어느 정도는 이해한다고 할 수 있지 않을까요?
즉, 우리는 다음 단어를 예측하는 모델을 만들었을 뿐인데 결과물은 언어를 이해하는, 언어를 표현하는 모델이 나왔습니다.
그럼 이제 남은 일은 무엇일까요? 바로 Language Model이 더 똑똑해지도록 아주 아주 크게 만들어 보는 것입니다. Machine Learning의 믿음 중 하나가 클 수록 똑똑하다!이니까요.
'Deep Learning' 카테고리의 다른 글
LLM : In-Context Learning, 남은 이야기들 (12) | 2023.04.12 |
---|---|
LLM : LLM을 가능케한 삼박자 (7) | 2023.04.12 |
머신 러닝 + 자연어 처리 (1) | 2022.03.26 |
Transformer로 한국어 품사 태거 만들기 (0) | 2021.06.13 |
Pytorch로 훈련 이어서하기 (checkpoint) (0) | 2021.06.09 |