Sitemap

[Python] 문자의 벡터화와 유사성

3 min readAug 3, 2018

--

본 포스팅은 edwith BoostCourse에서 ‘머신러닝을 위한 파이썬’ 강의를 듣고 한 포스팅입니다.

사실, 컴퓨터는 문자를 그대로 이해하지 못한다. 그래서 문자를 컴퓨터에게 알맞은 방식으로 알려줘야한다. 보통은 컴퓨터에게 문자를 숫자로 바꿔서 알려주게된다. 그 숫자를 컴퓨터에게 알려주는 방법은 많다. 그렇다면 컴퓨터에게 ‘유사하다’라는 표현을 어떻게 숫자로 알려줄 수 있을까?

‘유사하다’라는 것은 좌표평면 상에서 봤을 때 ‘가깝다’고 말할 수 있다.

위 그림에서 보았을 때, (1,2)에 있는 점은 거리 상으로 (2,1)에 있는 점과 거리상으로 가장 가깝다. 그러므로 컴퓨터는 위의 점들을 인식 했을 때, (1,2)와 가장 유사한 점은 (2,1)일 것이라고 생각할 것이다.

‘가깝다’라고 말하기 위해서는 숫자를 좌표평면에 올려놨듯이, 숫자를 벡터화를 시켜주어야 가까운지 안가까운지를 알 수 있다. 사실 위에서도 (1,2)라는 벡터와 (2,1)이라는 두 2차원 벡터상에서 계산하여 두 점이 가깝다고 이야기 한 것이다.

  1. 문자를 Vector로 바꾸기 — One hot Encoding

일반적으로 많이 쓰는 방법은 One hot Encoding이다. 하나의 단어를 Vector의 인덱스로 인식하고 단어가 존재하면 1, 없으면 0으로 넣는 방식이다.

각 문서마다 글자가 얼마나 있는지 벡터 표현을 만들어 주는 것이다.

2. 문자를 Vector로 바꾸기 — Bag of words

Bag of words는 단어별로 인덱스를 부여해서, 한 문장(또는 문서)의 단어의 개수를 vector로 표현하는 것이다.

위 사진에서 are, cat, dog, is… 등등을 우리는 corpus라고 부른다. corpus는 문서에서 나오는 모든 단어들을 갖고 있고, 이 단어들의 인덱스들도 가지고 있다. 위 사진에서는 0 : are, 1: cat, 2: dog와 같은 dict형식으로 가지고 있게 된다. 그러므로 Bag of words 방식에서는 하나의 문장이나 문서에 대해서 단어들이 얼마나 출현했는지를 알 수 있다.

3. 유사성 측정

유사성을 재는 방법도 여러가지가 있다. 위에서도 언급했듯이 컴퓨터에게 ‘유사하다’라는 것은 ‘가깝다’라는 뜻이기 때문에 여러 element 사이의 거리를 재는 방법이 곧 유사성을 측정하는 방법이 될 것이다.

1)Euclidian distance

가장 대표적인 것으로 우리가 중학교 때부터 배웠던 두 점사이의 직선이 거리를 재는 피타고라스의 정리가 있다. 사실 이거는 말 안해도 대부분 아는 내용일 것이다.

2)Cosine distance

유클라디안 거리가 두 점사이의 거리를 구하는 것이었다면, 코사인 거리는 두 점 사이의 ‘각도’를 재는 것이다. 두 점사이의 각도를 구해서 각도가 얼마나 벌어졌는지를 cos으로 구해서 얼마나 가까운지 구하는 것이다.

--

--

No responses yet