Week 5 - 얘랑 나랑 얼마나 비슷해?

여러분은 어떤 사람과 얼마나 비슷한지 숫자로 표현할 수 있으신가요? "친구 A보다 B가 나와 좀 더 비슷한거 같아.." 라는 어찌어찌 할 수 있을거 같은데, 아무래도 절대적인 숫자를 생각해내기는 것은 조금 애매한거 같죠? 하지만 지난 2주 동안 배운 vector는 다릅니다! 명확하게 두 개의 vector 간의 거리를 계산하는 방법을 배워봅시다.

Week 5 - 얘랑 나랑 얼마나 비슷해?

여러분은 어떤 사람과 얼마나 비슷한지 숫자로 표현할 수 있으신가요? "친구 A보다 B가 나와 좀 더 비슷한거 같아.." 라는 어찌어찌 할 수 있을거 같은데, 아무래도 절대적인 숫자를 생각해내기는 것은 조금 애매한거 같죠?

하지만 지난 2주 동안 배운 vector는 다릅니다! 명확하게 두 개의 vector 간의 거리를 계산하는 방법을 배워봅시다. 그리고 지난 주 배운 word embedding을 예시로 왜 거리가 중요한지 알아보겠습니다.

NLP에서 Vector의 역할은?

Week 2에서 소개한 Bag-of-Word (BoW) vector 또는 tf-idf vector는 문장을 단어의 빈도수를 계산하여 N차원의 column vector로 표현한 것을 배웠습니다. 여기서 N은 전체 단어 (vocabulary)의 숫자라 단어가 많을수록 커진다고 했죠.

Week 4에서 나온 word embedding은 각 단어들을 GloVe나 skipgram 같은 알고리즘으로 각 단어들을 비교적 작은 100차원, 300차원 등의 vector로 줄여서 만들 수 있었죠.

핵심은 문장, 문서, 그리고 단어를 숫자들로 이루어진 vector로 만들어 N차원의 공간의 하나의 점으로 바꾸어 표현한다는 것 입니다.

2차원으로 줄여서 표현한 word embedding space. 출처:medium

두 개의 vector 사이의 거리를 재보자:  Eucliedian Distance

2차원에서 두 점 사이의 거리를 재는 것, 중학교 때 배우셨죠? 그걸 N차원으로 확대해봅시다. 수학은 같습니다, 그저 수식이 길어질뿐!

개념적으로 보았을 때에는 두 점 사이에 줄을 긋고, 그 줄의 길이를 계산하는 것 입니다.

2D에서 euclidean distance

두 개의 vector 사이의 각을 재보자:  Cosine Similarity

Cosine similarity는 두 개의 vector들 사이의 각도를 계산합니다. 그렇기 때문에 크기(magnitude)는 무시되고, 방향의 차이만 계산됩니다.

Vector A와 Vector B의 Cosine similarity를 계산하는 방법

위 수식을 풀어서 이해하면, 만약 vector A와 vector B가:

  • 같은 방향(0°)이라면 1,
  • 완전히 반대 방향 (180°)이라면 -1,
  • 서로 독립적(90°)이라면 0.

cosine distance는 cosine similarity랑 같은 걸 그냥 뒤집어서 생각한겁니다:

Cosine Distance =  1 - Cosine Similarity

만약 vector A와 vector B가:

  • 같은 방향(0°)이라면 0,
  • 완전히 반대 방향(180°)이라면 2,
  • 서로 독립적(90°)이라면 1

그래서 뭘 쓰라고요?

NLP 문제에서는 cosine similarity가 주로 쓰입니다. 왜냐면 vector를 단어의 빈도 수 (frequency)로 계산하는 경우가 많기 때문입니다. 어느 단어가 몇 번 등장하냐는 글 길이에 영향을 많이 받고, 데이터 안 모든 글이 같은 단어 수를 가지기는 힘듭니다.

예를 들어, 어느 긴 글에 "bank"라는 단어가 100번 등장 하고, 어느 짧은 글에는 20번 등장한다 했을 때, 이 두 글이 경제라는 비슷한 주제라는 것을 알아 내려면, 절대적 거리를 계산하는 euclidean distance보다는 각도를 계산하는 cosine similarity를 쓰는게 더 적합할 것 입니다.

(이게 항상 정답은 아니기 때문에 본인이 계산하려는 vector의 수학적인 성격을 잘 파악해서 결정하는 것이 중요합니다.)


A와 B의 euclidean distance와 cosine similarity 출처

그렇다면 cosine distance는 구체적으로 어떻게 쓰일 수 있는 것일까요? 우리가 이미 배운 word2vec의 예시를 통해 더 깊게 알아보겠습니다!

Word2vec 공간을 cosine distance로 explore 하기

가장 많이 쓰이는 word embedding인 word2vec을 3D로 표현하면 어떻게 될까요? Tensorflow에 포함된 embedding projector라는 tool을 통해 살펴봅시다.

happy라는 단어를 검색하면 이러한 결과를 보여줍니다.

위 결과를 보면 happy의 가장 가까운 단어들 (Nearest points in the original space)을 quiet, funny, you, love, remember 등 다른 비슷한 단어들이 나옵니다.

다른 단어도 해볼까요?

diamond와 가까운 단어로 diamonds, mineral, graphite, gem, stone, iron 등이 나옵니다. 주변 단어들을 통해 단어의 의미를 파악하는 skipgram 알고리즘의 원리를 기억하신다면 왜 이런 결과가 나오는지 감이 오실 겁니다!

embedding projector를 이용하여 이 단어 저 단어 검색 해보시길 바랍니다! visualization tool을 가지고 노는게 상당히 재밌기도 하고, word2vec과 cosine distance를 이해하기 참 좋은 방법입니다. 저는 embedding 관련 프로젝트를 할 때 꼭 이 tool을 이용하여 결과를 공유하곤 합니다.


이처럼 cosine distance는 vector들 간의 유사성을 계산하기 위해 쓰입니다. word2vec 뿐만 아니라 document embedding, item2vec 등 다양한 모델과 데이터에서 활용될 수 있습니다!

오늘 배운 cosine distance는 NLP/ML을 공부하실 때 아주 자주 나오는 중요한 콘셉트입니다. 질문이 있으시다면 코멘트로, 더 깊게 알고 싶으시면 아래 reference들을 참고해주시기 바랍니다.

Reference

Read more

AI 코딩 툴을 사용할 때의 나의 원칙

AI 코딩 툴을 사용할 때의 나의 원칙

지난 글에서는 어떤 AI 코딩 툴을 어떻게 쓰는지 공유했었습니다. 이번에는 툴을 계속 사용하면서 머리 속에 쌓인 원칙들을 적어보았습니다. 항상 이러한 생각들을 하며 툴을 사용해야 좀 더 체계적으로, 생산적인 방향으로 일이 진행되는 것 같습니다. 사분면 (Quadrants) 현재 하고 있는 일이 4개의 사분면 중 어디에 있는지 생각한다. * 사분면 1 - 높은 임팩트

By Park Ji Ho
AI 코딩 툴 어떤 거 쓰세요?

AI 코딩 툴 어떤 거 쓰세요?

구글 IO 2023은 제 커리어에서 정말 기억에 남는 순간이었습니다. 구글 CEO 순다 피차이가 무대에서 보여준 데모 코드의 일부는 제가 리뷰했던 코드였거든요. 당시 구글의 플래그쉽 모델이었던 PaLM이 버그를 고쳐줄 뿐만 아니라, 주석을 한국어로도 달아줄 수 있다는 데모였습니다. 당시 Bard(현 Gemini App)가 처음으로 지원하는 외국어로 한국어와 일본어로 발표되기도 했습니다. 이

By Park Ji Ho
미국으로 이사왔습니다!

미국으로 이사왔습니다!

제게 큰 영향을 준 책 중 하나는 나심 탈레브의 Antifragile입니다. 탈레브는 optionality에 대해 자주 이야기합니다. 제가 이 책에서 가장 인상 깊게 읽은 부분은 인생에서의 선택지란 내 삶을 무한한 업사이드(unlimited upside)와 제한된 다운사이드(limited downside)가 있는 상황에 있어야 된다라는 것입니다. 다운사이드, 즉 떨어질 수 있는 한계를 제한하는 일은

By Park Ji Ho