Natural Language Processing

사람이 쓰는 말과 글을 컴퓨터가 다루게 만드는 분야다. 번역, 요약, 질의응답, 감성 분석, 개체명 인식처럼 겉보기에 다른 작업들이 모두 여기 들어간다.

말이 어려운 이유는 같은 표현이 문맥에 따라 다른 뜻이 되고(중의성), 뜻은 같은데 표현이 여럿이며, 규칙에서 벗어나는 사례가 규칙만큼 많기 때문이다. 그래서 규칙을 손으로 적는 방식에서 데이터로 배우는 방식으로 넘어왔다.

표현을 어떻게 만들었나

세는 방식 — 문서를 단어 빈도 벡터로 두는 bag-of-words, 흔한 단어의 무게를 낮추는 TF-IDF 가 오래 쓰였다. 단어를 각각 독립된 칸으로 취급하므로 “영화” 와 “필름” 이 아무 관계도 없는 것으로 다뤄진다.

분산 표현Word2Vec 계열은 “비슷한 문맥에 나오는 단어는 비슷한 뜻” 이라는 가정으로 단어를 조밀한 벡터에 올린다. 단어 사이의 유사도가 벡터 거리로 표현되지만, 단어 하나에 벡터 하나라서 문맥에 따라 뜻이 달라지는 경우를 담지 못한다.

문맥 표현transformer 기반 모델은 같은 단어라도 주변 토큰에 따라 다른 벡터를 준다. 지금의 사전학습 언어모델이 모두 여기 속한다.

사전학습과 미세조정

지금 표준적인 흐름은 transfer learning 이다. 라벨 없는 대량의 텍스트로 언어의 일반적인 구조를 먼저 학습시킨 뒤(masked language modeling, 다음 토큰 예측 등), 실제로 풀려는 작업에는 적은 양의 라벨로 미세조정한다.

작업마다 처음부터 학습시키던 때에 비해 필요한 라벨 데이터가 크게 줄었고, 이것이 지금 대형 언어모델까지 이어지는 흐름의 출발점이다.

다른 분야와의 연결

NLP 에서 쓰던 기법이 다른 도메인으로 옮겨가는 일이 잦다. 추천 시스템에서 아이템 시퀀스를 문장처럼 두고 Word2Vec 을 적용하거나, 인기 편향을 다루는 데 NLP 의 빈도 보정 기법을 가져오는 식이다. 사용자 행동 로그가 “순서가 있는 이산 토큰의 나열” 이라는 점에서 언어와 형태가 같기 때문이다.