분류 전체보기 56

LLM : LLM을 가능케한 삼박자

스포일러! 2편은 다른 편에 비해 다소 기술적인 내용이 많습니다.Large Language ModelLanguage Model이 커지면 뭘까요? 바로 Large Language Model입니다. 하지만 무작정 크게 만들 수는 없습니다. 아래 세가지 문제 때문입니다.훈련 데이터 : 엄청 많은 데이터가 필요합니다.알고리즘 : 기존보다 엄청 강력한 알고리즘이 필요합니다.컴퓨팅 파워 : 엄청 많은 그리고 좋은 컴퓨터가 필요합니다.우리가 LLM을 만들고 있다는 것은 이 문제들이 어느 정도 해결이 됐다는 뜻이겠지요?(이 세가지는 전통적인 Machine Learning에서 Deep Learning으로 넘어갈 수 있었던 요인이기도 합니다. 앞으로 더 강력한 Machine Learning 기법이 나오더라도 반복될것이고요..

Deep Learning 2023.04.12

LLM : Foundation Model

시작시작하기 전에글을 마무리하고 처음으로 돌아와보니 처음 계획보다 매우 긴 글이 됐습니다. 그래서 몇 편으로 나누어서 올려보려고 합니다.ChatGPT를 시작으로 Generative AI, Large Language Model(LLM)에 대한 열기가 엄청납니다. 수개월 전까지만해도 Generative, Language Model 같은 표현은 AI 계에 몸담고 있는 사람들만이 쓰는 것 같았는데 말이죠. 이제는 주위에서 이런 표현을 듣는 일이 어렵지만은 않습니다.더 놀라운 사실은 이런 표현들이 말에서 그치지 않고 일상 생활에서 직접 쓰는 단계가 시작됐다는 점입니다. 몇달 전만 해도 개인 컴퓨터에서 Image-to-Text 모델을 돌려본다거나, LLaMA 같은 Language Model을 직접 돌려본다는 것은 ..

Deep Learning 2023.04.12

itertools: iterator를 위한 도구 모음

iterator? iterable? itertools는 iterator를 잘 다루기 위한 기능들을 모아둔 모듈입니다. iterator에 대한 설명은 Iterator, Generator 라는 글을 참조하시면 좋습니다. 왜 iterator가 필요한지, 어떻게 쓰는지, generator와 관계는 무엇인지가 설명되어 있습니다. iterator를 언제 쓰는지 간단히 요약해 보면 다음과 같습니다. element 수가 너무 많아서 한 번에 메모리에 올릴 수 없다. 또는 element 수가 몇 개인지 미리 알 수 없다. element 하나하나를 만드는데 시간이 오래 걸리거나 리소스를 많이 쓴다. 그래서 필요할 때 만들어 쓰고 싶다. 특정 index의 element를 꺼내올 수 없거나 매우 어렵다. 하지만 다음 elem..

Python 2023.02.19

if __name__ == '__main__': 이 뭔가요?

파이썬 코드들을 보다보면 아래와 같은 코드를 종종 볼 수 있습니다. if __name__ == '__main__': # something here 이 코드가 하는 일은 무엇일까요? 오늘은 이 코드의 작동 원리와 언제 사용하는지 알아보겠습니다. __name__ 은 무엇일까요? 먼저 첫번째 퍼즐 조각인 __name__이 무엇인지부터 알아보겠습니다. Python에는 미리 정의된 특수한 함수나 변수들이 있습니다. 함수는 __do()__ 같은 형태이고, 변수는 __val__ 같은 형태입니다. 이런 특수한 함수와 변수는 보통 Python 내부적으로 사용하기 위한 것들이라서 코딩 때 직접 사용할 일은 그다지 많지 않습니다. 그런데 __name__은 아주 유용한 특성이 있어서 일반 코딩 때도 곧잘 사용되곤 합니다. 좋..

Python 2023.01.15

Python GIL(Global Interpreter Lock)이 무엇일까요?

오늘은 Python을 좋아하지 않는 분들이 자주 Python(정확히는 CPython)을 공격하는 이유 중 하나인 GIL에 대해서 이야기해보려고 합니다. GIL을 이해하기 위해서는 먼저 thread, process와 같은 병렬처리에 대한 기본적인 이해가 필요합니다. 이번 포스트에서는 thread와 process가 무엇인지는 알고 계신다고 가정하고 이야기를 진행해 보겠습니다. ※ GIL은 CPython 만이 가지는 특징입니다. Jython, IronPython, PyPy 같은 다른 Python 구현은 GIL을 사용하지 않습니다. GIL이 풀려고 하는 문제는 무엇일까? 먼저 GIL이 풀려고 하는 문제부터 살펴보겠습니다. GIL이 풀려고 하는 것은 Multi-thread 프로그래밍에서 아주 골치 아픈 문제인 r..

Python 2023.01.13

Python Callable

callable은 무엇이지? Python에서 callable은 함수를 호출하듯이 호출할 수 있는 객체를 의미합니다. 프로그래밍 언어 용어에 대한 설명답게 뭔가 미묘하면서 깔끔하지 않은 느낌이 드는 문장이죠? "함수를 호출하듯이 호출한다"는 부분이 눈에 걸리지 않을까 합니다. 일반적인 프로그래밍 언어에서는 호출할 수 있는 것은 함수(또는 메소드) 뿐이기 때문입니다. 변수 a를 호출하세요. 클래스 Cat을 호출하세요. 이상하죠? 그럼 Python에는 함수 외에도 호출할 수 있는 무언가가 있다는 뜻일까요? 짧은 답은 "그렇다"입니다. 긴 답은 아래에서 차근차근 이야기해보겠습니다. callable() 함수 먼저 Python이 built-in으로 제공하는 callable() 함수를 살펴보겠습니다. callable..

Python 2022.07.11

유니코드와 한글 인코딩

오늘은 한글을 데이터로 저장하는 방식, 즉 한글 인코딩에 대해서 이야기해보려고 합니다. 한글을 데이터로 저장한다는 것이 간단해 보이지만 자세히 들여다보면 재미있고 중요한 개념들이 많이 있습니다. 코드 문자, 예를 들어 “가”는 우리 머리 속에 존재하는 추상적인 개념일 뿐이고, 이를 데이터로 저장하기 위해서는 “가”를 숫자로 표현하는 방법이 필요합니다. 이렇게 우리가 약속한 문자에 해당하는 숫자를 코드라고 부릅니다. 예를 들어 ASCII 코드는 영어권의 128개의 문자와 그에 해당하는 숫자(코드)를 정한 규칙입니다. ‘A’는 65야. 반대로 65를 보면 ‘A’라고 생각해와 같은 방식입니다. 따라서 ’A’=65라는 것은 ASCII 코드를 사용할 때만 의미가 있습니다. 예를 들어, 과거에 ASCII와 더불어 ..

IT 이야기 2022.03.28

머신 러닝 + 자연어 처리

오늘은 특정한 기술이나 알리고즘이 아니라 머신 러닝을 사용해서 자연어처리 문제를 푸는 일반적인 과정에 대해서 이야기를 해보려고합니다. 다르게 말하면, 자연어처리 문제를 어떻게 일반적인 머신 러닝 문제 형태로 바꾸느냐에 대한 이야기입니다. 머신 러닝 문제 형태? 머신 러닝 문제 형태라는 것이 무엇일까요? 우리가 흔히 머신 러닝이라고 부르는 것은 실제로는 다양한 알고리즘의 집합니다. 대표적인 머신 러닝 알고리즘들은 아래와 같은 분류에 속합니다 (이 외에 다른 분류도 있습니다). Clustering Regression Classification Clustering은 비슷한 데이터들끼리 분류하고 모으는 작업입니다. 예를 들어 쇼핑몰의 고객 데이터를 주고, 고객들을 몇가지 부류로 나누는 작업이 있을 수 있습니다...

Deep Learning 2022.03.26

Python 메소드의 첫번째 인자인 `self`는 무엇인가?

먼저 아래 코드를 보겠습니다. class Dog: def __init__(self, name): self.name = name def make_sound(self, sound): print(f"{self.name}! {sound}!") if __name__ == "__main__": dog = Dog("Happy") dog.make_sound("Bow Wow") Happy! Bow Wow!오늘 이야기하고 싶은 것은 __init__()이나 make_sound()처럼 클래스의 메소드의 첫 번째 인자인 self는 무엇이고 왜 필요할까입니다. 써야한다고 배웠고 습관적으로 써왔지만 갑자기 그 녀석의(?) 정체가 궁금해집니다. self 넌 누구냐 class Dog: def __init__(self, name): s..

Python 2022.03.24

Transformer로 한국어 품사 태거 만들기

한국어 품사 태거를 만들어 봅시다 품사 태거(Part-of-Speech Tagger)는 NLP에서 기본이 되는 태스크이고, 그 때문에 NLP를 배울 때 많이 만들어보는 기능이기도 합니다. 품사 태거가 NLP에서 나름 인기있는 이유는 몇가지가 있을 겁니다. 다른 NLP Task의 입력 또는 전처리 역할을 합니다. 요즘은 트렌드가 언어학적인 요소를 많이 배제하는 추세지만 전통적으로 파싱, 번역 등의 NLP 파이프라인에 많이 쓰였습니다. 한국어에서 BPE와 같은 통계적인 Tokenizer를 대신하는 방법으로 쓰이기도 합니다. 한국어의 특성상 통계적인 Subword보다는 형태소 단위를 토근으로 쓸 때 성능이 더 좋긴 경우들이 있습니다. (참조: 한국어 토큰의 단위는 뭐가 좋을까?) 품사 태깅은 Sequentia..

Deep Learning 2021.06.13