추천 시스템에서 임베딩(Embedding)이란?

daewoo kim
6 min readSep 4, 2022

--

DLRM에서는 categorical feature를 dense 표현으로 매핑하기 위해 임베딩을 활용한다.

추천 시스템에서 임베딩을 사용하는 이유는 NLP에서 워드 임베딩을 사용하는 이유와 동일하다. NLP에서 각 단어가 가지는 의미를 표현하기 위해선 해당 단어의 주변 단어들과 그 단어의 의미를 파악해야 한다.

추천 시스템 또한 사용자들의 선호 정보를 one-hot 벡터로 표현한다면 아무런 의미를 갖지 못한다. 이러한 사용자 정보를 dense 표현으로 임베딩할 필요가 있다.

그럼 뉴럴네트워크에서 sparse 표현 대신 dense 표현인 임베딩을 사용하는 이유는 무엇일까?

  1. Categorical 값의 차원을 줄이고 추상 공간에 categorical 값을 표현한다.
  2. 임베딩 사이간 거리를 보다 의미있는 방식으로 측정 가능하다.
  3. 임베딩 벡터는 n 차원의 item 공간을 d 차원의 임베딩 벡터로 투영한다. (n >> d)

용어 정리

Item (or document)

시스템이 추천하는 엔티티(Entities)이다. e.g. Google Play 스토어의 경우: 설치할 앱, Youtube의 경우: 비디오

Query (or context)

시스템이 추천을 생성할 때 사용되는 정보로 Query는 다음과 같은 정보를 이용하여 조합될 수 있다.

  • case 1) 사용자 정보: 사용자의 id, 사용자가 이전에 상호작용 했던 items
  • case 2) 추가 컨텍스트: 하루 중 시간(time of day), 사용자 디바이스

Categorical data(범주형 데이터)

수치로 표현할 수 없어 각 속성을 matrix의 하나의 고유한 column으로 부여하는 데이터이다.

예를들어 사용자가 본 영화를 matrix로 표현한다면 각 영화명을 각 column으로 표현하고, 각 사용자는 row로 표현할 수 있다.

이때 사용자가 해당 영화를 봤을 때 ‘1’로 해당 영화를 보지 않았을 때 ‘0’으로 표현할 수 있다.(one-hot encoding 방식) Categorical data는 수치로 표현될 수 없고 주로 sparse matrix 형태로 표현된다.

Numerical data(수치형 데이터)

다양한 속성을 하나의 column에 수치값(Numerical value)로 표현 가능하다.

예를들어 사용자의 나이를 matrix로 표현한다면, 각 사용자별로 몇 살인지 수치로 표현할 수 있다.

https://medium.com/@karthikmahanth.ece/introduction-to-statistics-for-data-science-i-5d1d02556969

임베딩의 이해

추천에서 임베딩은 categorical 데이터를 연속된 숫자(e.g. 1, 3.14 등)의 벡터 공간으로 매핑하는 것이다.

임베딩을 이해하기 위해 텍스트를 숫자로 표현하는 방법을 먼저 이해하기로 하자. 인간의 언어(자연어)는 수치화되지 않는 데이터이기 때문에 ML에서 바로 사용할 수 없다. 따라서 자연어 처리에서 “feature extraction”을 통해 수치화를 해야 한다. 이를 위해 언어의 벡터화가 필요한데 이를 Word Embedding라고 한다. 언어의 벡터화는 3가지 전략이 있다.

1st idea: one-hot 인코딩

Vocabulary (어휘. 특정 범위 내에서 사용되는 단어의 총 집합)중에 문장의 단어를 ‘1’로 인코딩하는 것이다. 예를들어 1만개의 단어의 index를 만든 후 해당 단어와 매핑관계를 벡터로 표현한 것이다. “The cat sat on the mat” 문장은 다음과 같이 one-hot 인코딩으로 표현가능하다.

https://www.tensorflow.org/text/guide/word_embeddings

one-hot 인코딩의 문제점은 대부분의 index가 ‘0’인 sparse한 특징때문에 너무 비효율적이다는 것이다. 위의 “The cat sat on the mat”와 5개의 단어를 포함한 1 문장을 표현하는데 (10000, 5) matrix가 필요하다.

2nd idea: 각 단어를 고유번호로 인코딩

“The cat sit on the mat”를 단어별 고유번호를 이용하여 [5,1,4,3,5,2]와 같이 코딩할 수 있다. one-hot 인코딩이 sparse인 단점을 dense하게 표현하여 해결하였다 . 하지만 이 방법도 단어간의 유사성(단어간의 관계)을 반영할 수 없는 단점이 있다.

3rd idea: Word(단어) 임베딩

Word 임베딩은 유사한 단어가 유사한 인코딩을 갖는 효율적이고 dense한 표현을 제공한다. 이 때 임베딩은 floating point 값의 dense 벡터로 표현된다. 벡터의 길이인 차원(dimension)은 사용자가 지정하는 파라미터이며 dimension의 크기는 8 (min) ~ 1024 (max)이 일반적이다. 더 높은 dim.의 임베딩은 단어간의 세부 관계를 캡처할 수 있지만 학습에 더 많은 데이터가 필요하다.

임베딩 값은 수동으로 지정하는 것이 아니라 뉴럴네트워크의 weights를 학습하는 것과 같이 임베딩도 학습이 필요하다.

https://www.tensorflow.org/text/guide/word_embeddings

위는 “The cat sat on the mat” 문장을 word 임베딩으로 표현한 그림이다. 예를들어 단어 “cat”는 float point 값의 4 dim. 벡터([1.2, -0.1, 4.3, 3.2])로 표시된다.

레퍼런스

[1] Google Recommendation 고급과정

[2] Tensorflow — word embedding

[3] Deep Learning Recommendation Models(DLRM): A Deep Dive

--

--

daewoo kim
daewoo kim

Written by daewoo kim

AI developer & Author | Working@semiconductor-industry. I write and share about what I learn.

No responses yet