단어 임베딩(Word embedding)
낱말 하나하나를 수백 차원의 벡터(vector)로 나타내, 비슷한 문맥에서 쓰이는 낱말끼리 가까이 놓이게 하는 방법. 가까움은 흔히 코사인 유사도(cosine similarity)로 재고, 벡터의 뺄셈과 덧셈이 '왕 − 남자 + 여자 ≈ 여왕' 같은 유추를 흉내 내기도 한다.
컴퓨터에게 '고양이'와 '개'는 그냥 서로 다른 기호입니다. 둘이 '고양이'와 '바나나'보다 가깝다는 것을 알려 주려면 낱말을 벡터로, 곧 수의 목록으로 바꿔야 합니다. 실마리는 분포 가설입니다. 1950년대 언어학자 젤리그 해리스와 존 퍼스가 내세운 생각으로, 비슷한 문맥에서 쓰이는 낱말은 뜻도 비슷하다는 것입니다. '고양이'와 '개'는 둘 다 '밥을 주다', '키우다', '짖다·울다' 근처에 나오고, '바나나'는 '껍질', '노랗다' 근처에 나옵니다. 그러니 낱말마다 주변에 어떤 낱말이 얼마나 나오는지를 세어 벡터로 만들면, 뜻이 비슷한 낱말의 벡터는 비슷해집니다.
아래 그림은 이 생각을 보여 주는 손으로 만든 장난감입니다. 낱말 스무 개에 '사람', '동물', '왕족', '수도' 같은 이름 붙은 특징과, 이름 없는 무작위 특징 네 개를 주어 23차원 벡터를 만들고, 알아보기 좋게 고른 평면에 정사영(orthogonal projection)해 그렸습니다. 실제 임베딩(embedding)은 수백 차원이고 차원마다 이름도 없습니다. 보기:
가까움을 유클리드 거리(Euclidean distance)가 아니라 코사인 유사도로 재는 까닭은, 자주 나오는 낱말일수록 세어 얻은 벡터가 길어지기 때문입니다. 길이를 무시하고 방향만 비교하면 빈도의 차이가 걸러집니다. 코사인은 두 벡터의 내적(dot product)을 길이로 나눈 것이라, 수십만 낱말 가운데 가까운 이웃을 찾는 일도 결국 큰 행렬(matrix) 곱셈과 최근접 이웃(nearest neighbor) 검색입니다. 그림은 23차원을 2차원에 눌러 그린 것이라 그림 속 거리와 실제 코사인 순위가 어긋날 수 있습니다. 차원이 높을수록 이런 어긋남은 피할 수 없고(차원의 저주, curse of dimensionality), 실제 임베딩을 볼 때도 주성분 분석(principal component analysis) 같은 방법으로 차원을 줄여 그림을 그립니다.
유추가 되는 이유는 '남자 → 여자'의 차이와 '왕 → 여왕'의 차이가 거의 같은 벡터라서, 네 낱말이 평행사변형을 이루기 때문입니다. 2013년 체코 출신 컴퓨터 과학자 토마시 미콜로프 등 구글 연구진이 발표한 word2vec은 주변 낱말을 맞히는 작은 신경망(neural network)을 학습시켜 이런 벡터를 얻었고, 이 유추 실험으로 널리 알려졌습니다. 다만 주의할 점이 있습니다. A − B + C에서 가장 가까운 낱말은 흔히 A나 C 자신이라, 보통은 입력한 세 낱말을 빼고 답을 고릅니다. 또 '호랑이 − 고양이 + 개'처럼 사전에 알맞은 낱말(늑대)이 없으면, 모델은 그저 가장 가까운 낱말을 내놓을 뿐입니다.
임베딩은 사람이 쓴 글에서 배우므로 글에 담긴 편견도 함께 배웁니다. 2016년 톨가 볼루크바시 등은 뉴스 기사로 학습한 임베딩에서 '남자 : 프로그래머 = 여자 : ?'의 답으로 '주부'가 나오는 등, 직업 낱말들이 성별 방향으로 치우쳐 있음을 보고했습니다. 그림의 '성별' 특징처럼 편향도 하나의 방향이므로, 그 방향 성분을 빼는 보정 방법이 제안되었지만 편향을 완전히 없애기는 어렵다는 반론도 있습니다. 임베딩으로 사람을 평가하거나 거르는 시스템에서는 특히 조심해야 합니다.
이어지는 곳. 잠재 의미 분석(1990년 무렵)은 word2vec보다 먼저 나온 같은 계열의 방법입니다. 낱말마다 각 문서에 몇 번 나오는지를 적은 낱말–문서 행렬을 만들고, 특잇값 분해(행렬을 '회전(rotation), 축마다 늘이기, 회전'의 곱으로 쪼개어 늘이는 정도가 큰 방향부터 늘어놓는 분해)로 가장 크게 늘어나는 방향 수백 개만 남겨 낱말 벡터를 얻습니다. 벡터가 생기면 거리로 무리를 나눌 수 있어서, 임베딩 공간에서 k-평균 군집(k-means clustering)을 돌리면 뜻이 비슷한 낱말 무리가 나옵니다. 앞 낱말 몇 개로 다음 낱말을 맞히는 n-그램(n-gram) 모델은 본 적 없는 낱말 묶음이 끝없이 나오는 희소성 문제를 겪는데, 비슷한 낱말끼리 통계(statistics)를 나누어 쓰게 하는 임베딩이 이를 누그러뜨렸습니다. 오늘날의 언어 모델(language model)은 어텐션(attention)으로 앞뒤 낱말의 벡터를 섞어 문맥에 따라 벡터가 바뀌는 임베딩을 만들어, 과일 '배'와 타는 '배'에 다른 벡터를 줍니다. 문장이나 문서 전체를 이런 벡터 하나로 바꿔 두고, 질문과 가까운 글을 찾아 언어 모델의 문맥에 넣어 주는 방법이 검색 증강 생성(retrieval-augmented generation)입니다. 낱말 빈도가 지프의 법칙(Zipf's law)처럼 치우쳐 있으므로, 흔한 낱말이 너무 많이 학습되지 않도록 흔한 낱말을 덜 뽑기도 합니다.
이 개념이 나오는 긴 글
이 개념 위에 세워진 것
이 개념을 언급하는 페이지
- 주성분 분석
… 거리⟧입니다. 단어마다 수백 개의 수로 된 벡터를 붙여 뜻이 비슷한 단어끼리 가깝게 놓은 것을단어 임베딩이라 합니다. 이런 수백 차원의 점들을 평면에 그려 볼 때 흔히 주성분 두 개를 가로축과 세로축으로 …
- 코사인 유사도
… 방향이 같은 두 키 가운데서는 더 긴 쪽이 더 큰 가중치를 받습니다. 단어를 수백 차원의 벡터로 나타내는단어 임베딩에서 두 단어가 얼마나 비슷한지는 대개 이 코사인으로 잽니다. 질문과 문서를 같은 공간의 벡터로 바꾼 뒤 …
- 지프의 법칙
… 낱말에 짧은 부호를 주는 허프만 부호 같은 방법으로 글을 압축할 수 있습니다. 낱말을 벡터로 바꾸는단어 임베딩을 학습할 때는 the, a 같은 너무 흔한 낱말이 학습을 독차지하지 않도록 일부러 덜 뽑기도 합니다. …
- n-그램 언어 모델
… 낱말은 품사에서 확률적으로 나온다고 보면 은닉 마르코프 모델이 됩니다. 신경망 언어 모델은 낱말을단어 임베딩벡터로 바꿔 비슷한 낱말끼리 통계를 나누어 쓰며 희소성 문제를 누그러뜨렸습니다. 오늘날의 ⟦대형 언어 …
- 신경망
… 다른 방법들을 큰 차이로 이기면서 딥러닝이 기계 학습의 중심이 되었습니다. 낱말을 수의 벡터로 바꾸는단어 임베딩은 작은 신경망이 배운 가중치이고, 앞 낱말들로 다음 낱말의 확률을 매기는 n-그램 언어 모델을 …
- 상호 정보량
… 자주 함께 나오는지를 재는 점별 상호 정보량 \log_2 \frac{p(x,y)}{p(x)p(y)} 은단어 임베딩의 바탕 가운데 하나입니다. 의료 영상에서는 서로 다른 장비로 찍은 두 사진을, 밝기 사이의 상호 정보량이 …
- 기계 학습
… 자료가 가장 넓게 퍼진 방향을 찾는 주성분 분석, 함께 나오는 낱말들로 낱말의 뜻을 벡터로 적는단어 임베딩, 입력을 좁은 병목으로 압축했다가 되살리는 오토인코더가 그 예입니다. 마지막으로 강화 학습 은 정답 …
- 소프트맥스와 교차 엔트로피
… 전문가별 점수를 소프트맥스로 비율로 바꾸고, 그 가운데 상위 몇 개만 계산합니다. 단어를 벡터로 배우는단어 임베딩의 원래 형태도 어휘 전체에 대한 소프트맥스였는데, 어휘가 커서 계산이 비싸기 때문에 이를 어림하는 기법이 …
- 특잇값 분해
… ΔW를 얼마나 가깝게 흉내 낼 수 있는지의 한계는 에카르트–영 정리가 정해 줍니다. 낱말을 벡터로 나타내는단어 임베딩도 이 분해와 가깝습니다. 그 조상 격인 잠재 의미 분석(LSA, 1990)은 낱말×문서 빈도 표에서 앞의 …
- 인공지능
… 내다보는 게임 트리 탐색. 언어. 낱말 묶음의 빈도를 세는 n-그램과 낱말을 수의 목록으로 바꾸는단어 임베딩에서 출발해, 글을 조각내는 토큰화, 문장 속 어디를 볼지 정하는 어텐션, 그것으로 쌓은 …
- 순환 신경망과 LSTM
… 모으는 계산은 역방향 자동 미분을 펼친 망에 쓴 것입니다. 입력 x_t 로 들어가는 낱말 벡터는단어 임베딩이고, 다음 낱말의 확률을 내는 모델 전체는 언어 모델입니다. 확률로 상태를 따라가는 형제는 ⟦마르코프 …
- 오토인코더와 잠재 공간
… 그림을 만드는 방법은 확산 모델에서 볼 수 있습니다. 예측하는 과제로 얻은 또 하나의 잠재 공간은단어 임베딩이고, 깊은 오토인코더를 되살린 사람 가운데 하나가 힌턴입니다.
- 토큰화와 BPE
… 낱말을 나누지 않고 처리합니다. 이어지는 곳. 토큰 번호 하나는 모델 안에서 임베딩 행렬의 한 행, 곧단어 임베딩같은 벡터로 바뀌어 트랜스포머에 들어갑니다. 언어 모델이 배우는 것은 이 토큰 열의 확률이라서, …
- 어텐션
… 셀프 어텐션. 쿼리, 키, 값이 모두 같은 문장에서 나오는 경우입니다. 토큰마다 벡터 x가 있고(임베딩), 학습되는 행렬 세 개로 q = W_Q x,\ k = W_K x,\ v = W_V x 를 만듭니다. …
- 언어 모델과 다음 토큰 예측
… 비슷한 낱말끼리 통계를 나눠 쓰게 한 신경망 언어 모델(2003년 요슈아 벤지오 등)과단어 임베딩이 이 희소성 문제를 누그러뜨렸습니다. 예측은 곧 압축입니다. 다음 토큰에 확률 q를 주는 모델이 있으면 …
- 검색 증강 생성
… '가깝다'를 어떻게 재느냐입니다. 임베딩은 뜻이 비슷한 글이 비슷한 방향을 가리키도록 학습된 벡터이고(단어 임베딩과 같은 생각입니다), 방향이 얼마나 비슷한지는 코사인 유사도로 잽니다. \cos(q, d) = …