귀퉁이 서재

NLP - 10. 워드 임베딩 (Word Embedding) 본문

자연어 처리 (NLP)

NLP - 10. 워드 임베딩 (Word Embedding)

Baek Kyun Shin 2020. 6. 14. 17:55

단어를 밀집 행렬로 표현하는 것을 워드 임베딩(Word Embedding) 혹은 단어의 분산 표현(Distributed Representation)이라고 합니다. 밀집 행렬은 희소 행렬의 반대되는 개념으로, 대부분이 0이 아닌 값으로 채워진 행렬을 의미합니다. (밀집 행렬, 희소 행렬에 대한 자세한 사항은 NLP - 7. 희소 행렬 (Sparse Matrix) - COO 형식, CSR 형식을 참고해주시기 바랍니다.)

색을 예로 들어보겠습니다. 색을 표현할 때 우리는 흔히 RGB 형식을 사용합니다. (R, G, B) = (170, 33, 22)라면 빨강 계열의 색임을 알 수 있습니다. 이를 A색이라고 합시다. 또한 B색의 RGB는 (180, 20, 30)이고, C색의 RGB는 (20, 180, 30)이라고 합시다.

여기서 우리는 A색, B색, C색이라는 문자를 RGB에 해당하는 숫자로 표현했습니다. 표현한 RGB 벡터 역시 밀집 벡터입니다.

다른 예를 들어 무지개의 7개 색(빨주노초파남보)을 벡터화 해보겠습니다. 

우선 원-핫 인코딩을 해보겠습니다. 원-핫 인코딩의 결과는 희소 행렬입니다.

빨 = (1, 0, 0, 0, 0, 0, 0)
주 = (0, 1, 0, 0, 0, 0, 0)
노 = (0, 0, 1, 0, 0, 0, 0)
초 = (0, 0, 0, 1, 0, 0, 0)
파 = (0, 0, 0, 0, 1, 0, 0)
남 = (0, 0, 0, 0, 0, 1, 0)
보 = (0, 0, 0, 0, 0, 0, 1)

7개의 색을 표현하기 위해 7개의 열이 필요합니다. 색이 더 많아지면 열의 길이는 더 길어질테고 희소 행렬의 정도가 더 심해질 것입니다. 이는 메모리 낭비를 초래합니다. 이런 희소 행렬은 다음과 같이 RGB로 표현해 개선할 수 있습니다.

빨 = (255, 0, 0)
주 = (255, 50, 0)
노 = (255, 255, 0)
초 = (0, 255, 0)
파 = (0, 0, 255)
남 = (0, 5, 255)
보 = (100, 0, 255)

이렇게 RGB를 이용해 색깔을 표현한다면 색깔이 더 늘어나도 열의 갯수는 여전히 3개면 족합니다.

이와 유사하게 문자를 밀집 벡터로 나타내는 것을 워드 임베딩이라고 합니다. 대표적인 워드 임베딩 방법으로는 Word2Vec, GloVe, Elmo가 있습니다.

Comments