brunch

라이킷 댓글 공유 204 브런치 글을 SNS에 공유해보세요
By 최규민 . Feb 16. 2017

Word2Vec 그리고
추천 시스템의 Item2Vec

마이크로소프웨어 AI특집 복간호 기고글


개발자들의 마소(마이크로 소프트웨어 잡지)가 다시 발간되었다. 우연히 기회가 되어 재 발간되는 마소에 나의 글을 기고할 수 있게 된 것은 가문의 영광이다. 이 번호 테마는 개발자의 인공지능(AI)이다. 

글 쓸 때마다 느끼지만, 가장 좋은 학습 방법은 공개적으로 글을 쓰거나 가르쳐 보는 것이다. 

Word2Vec 기술을 정리하면서, 디테일하게 Word2Vec을 배우게 되고, 

Word2Vec의 활용사례를 정리하면서, 이제는 많은 곳에서 Word2Vec을 사용하는구나 하고 알게 되었다.

유려한 챠트와 깔끔한 편집 그리고 조금 더 상세한 내용을 보시려면 마소 매거진으로 보세요. 



우선 Word2Vec기술에 대하여 알아 보고 

추천 시스템에서의 item2vec에 대하여 알아보자 


1. Word2Vec에 대하여?

Word2Vec은 2013년 구글에서 'Efficient Estimation of Word Representations in Vector Space(벡터 공간에서 단어 표현의 효율적인 추청)'을 제안한 논문으로 종래의 NNLM(Neural Net Language Model)을 기반으로 대량의 문서 코퍼스를 엄청난 학습 속도와 성능을 개선한 state-of-the-art 수준의 혁신적인 자연어 처리 기술이다. 

이 논문에서 언급한 Word2Vec의 주요 목적을 보면 

  1.1) 뉴럴 네트워크를 기반으로 

  1.2) 대량의 문서 데이터 셋을 벡터 공간에 

  1.3)고 수준의 의미 벡터를 가지도록 

  1.4) 효율적으로 Word의 벡터 값을 추청 하는 기계 학습 모델이다. 

이 목표의 세부 항목에 각각 대하여 알아보자 


1.1) 뉴럴 네트워크 언어 모델(NNLM)

2003년 bengio에 의해 소개된 Neural Net Language Model은 연속적인 단어가 주어 졌을 때 이전 단어로 현재 타깃 단어를 예측하는 Predictive based model 방식의 벡터화 방법이다. 예를 들어 같은 문장에  ‘NNLM', ‘Word2Vec’, ‘CBOW’ 단어가 인접하여 자주 출현하면 두 단어의 벡터 값이 유사하도록 학습하는 것이 목적입니다. 이 방식은 단어를 의미 있는 벡터로 Embedding 하는 데는 성공적이었지만 학습 셋의 단어 수에 비례하여 학습 성능이 매우 느리다는 단점을 가지고 있었다. 

[그림1] NNLM Architecture

2) 대량의 문서 데이터셋을 학습

Word2Vec이 기존의 NNLM 또는 LSA(MF 기반) 알고리즘과 다른 가장 큰 장점은 대량의 학습 데이터셋을 아주 빠르게 단어의 벡터값을 학습할 수 있다는 점이다. 특히 학습 성능에 가장 큰 영향을 미치는 Unique 단어수가 많아 지더라도 아주 빠른 학습 속도를 유지 한다. 참고로 10억 개의 단어 시퀀스(1백만 개의 Unique 단어)의 데이터셋을 학습하는데 하루가 걸리지가 않는다. 이런 특징은 대량의 컨텐츠 이용 데이터가 발생하는 추천 시스템에서 활용하기에 아주 적합한 방식이다. 

그리고 Word2Vec은 학습할 데이터량에 따라 성능이 많이 차이가 많이 난다. [그림 2]를 보면 많은 량은 아니지만 암살, 베테랑 영화 리뷰의 학습량(1,600/6,400/25,600/38,870건)에 따라 주요 단어들의 벡터 값이 어떻게 변화하는지 알 수 있다. 인명 단어 위주로 결과를 본다면 처음에는 랜덤 한 벡터 값부터 시작하여 영화 별로 군집 화가 이루어지다가 단어 자체가 가지는 의미 (주연, 조연, 감독, 제목 등)가 적절히 해석되면서 성능이 좋은 벡터 값이 형성됨을 볼 수 있다. 

[그림2] ‘암살,베테랑’ 리뷰 데이터 량에 따른 Word2Vec 학습 결과

이렇게 그림을 그려놓고 보니 역시 Word2Vec은 Vector 공간을 어떻게 해석해야 하는지가 주요 챌린지 인듯하다.


3) 고수준의 의미를 가지는 단어 벡터화

영화 ‘암살’과 ‘베테랑’의 영화 38,879건의 리뷰 문장을 Word2Vec으로 2차원 벡터로 학습해 보았다. 

특이하게 핵심 배우들은 밀도가 낮은 쪽에 펼쳐져 있고, 중요도가 낮은 배우들은 밀도가 높게 옹기종기 모여 있었다. 그리고 배우 각각의 의미대로 Word2Vec이 잘 해석하여 벡터 값으로 표현되어 보인다. 

[그림3] Word2Vec으로 암살,베타랑 영화리뷰를 학습한 결과


여기서 빨간색 박스 부분을 자세히 보면 ‘벡터_1'과 ‘벡터_2'가 거의 유사한데, 이를 벡터의 연산으로 표현하면 아래와 같다. 

Vec[류승완] - Vec[베테랑] ≒ Vec[최동훈] - Vec[암살] 

 word2vec에서 가장 큰 감명을 받았던 man-woman+king = queen의 벡터 연산이, 여기에서도 유사하게 나타 난다. 류승완-베테랑+암살 = 최동훈이라는 추론이다. 류승완-베테랑 = 벡터_1 인 벡터 값은 영화의 감독을 찾아 주는 문맥적 의미 벡터가 된다 그래서 암살을 감독을 찾기 위해서는 암살+벡터_1만 해주면 된다. 이러한 문맥적 의미 벡터를 Word2Vec에서의 활용한 예를 보면 서울-한국+일본=도쿄, 남자-여자+사랑=슬픔(한국어 위키백과/나무 위키로 학습된 http://www.elnn.kr/ 참고)등을 벡터의 연산을 통해 추론한 결과물을 확인해 볼 수 있다. 학습할 데이터셋의 량과 벡터를 100~1000차원으로 학습할 경우 성능이 훨씬 좋을 것으로 예상된다. 

[그림4] 그림3번의 확대 부분

4) 효율적으로 벡터 값을 추청

Word2Vec은 CBOW(Continuous Bag Of Words), Skip-gram이라는 두 가지 방식의 학습 모델로 개선되었다. NNLM과 대비하여 CBOW 방식의 학습 모델을 대략적으로 비교해보면

Continuous 한 단어 학습을 위해 Target 단어의 이전 단어, 이후 단어 모두 사용하고,   

Hidden Layer 없이 바로 Sum(또는 Mean)으로 Projection Layer만을 구성하고   

가장 학습에 시간이 많이 소요되는 Output Layer의 Softmax 구간 V를 Hierarchical Softmax 또는 Negative Sampling으로 기존 시간 복잡도를 ‘H x V’ → ‘H x log(V)’로 학습 성능을 엄청나게 개선하였다.  

추가로 발생 빈도가 높은 단어 일수록 높은 확률을 skip 하는 subsampling을 통해 성능과 정확도를 개선하였다. 

[그림5] NNLM과 CBOW  학습 모델 비교


Word2Vec 학습 성능을 비교한 결과를 보면 Skip-gram방식이 NNLM에 비해 x 2배의 

Semantic Accuracy 그리고 학습(Training) 성능은 x7배 이상으로 성능이 개선되었다. 

실제 학습 성능은 벡터의 차원 수도 100D(NNLM) → 1000D(Skip-gram) 차이가 있기 때문에 훨씬 더 큰 성능 차이 있다고 할 수 있다. 

[표1] NNLM, CBOW, Skip-gram성능 비교표 (논문 참조)


지금까지 알아본 Word2Vec은 주로 Word Similarity, Machine-Translate, Question & Answering , NER(Named Entity Recognition)등 자연어 처리 분야의 활용 목적이었다. 그러나 최근에는 추천 시스템(Recommender System)에서도 종종 활용되고 있는데, 이런 사례에 대하여 알아보자 


2. 추천 시스템에서의 Item2Vec 

추천 시스템에서는 주로 Word2Vec을 상품을 vector화 시킬 때 사용한다. 이렇게 Vector화 시킨 결과는 유사한 상품 추천, 마이크로 카테고라이징, 의미 벡터로써 활용한다. 


그래서 활용 사례를 찾아봤다. 꽤 된다. 

live2vec : 아프리카 TV에서 Live 방송을 벡터화,

song2vec : Sportify(음원 스트리밍)에서 플레이리스트로 노래를 벡터화, 

meta-pro2vec  : Criteo(개인화 광고)에서 상품을 벡터화

diet2vec

LDA와 Word2vec의 결합한 lda2vec

찾아보면 더 나올 듯하다. 많다!! 


 추천 시스템은 기존에도 MF(matrix factorization)으로  아이템의 벡터화하여 많이 사용했었으니, word2vec을 적용하는 것이 그리 어렵지 않았을 것이다.

아니 MF보다 훨씬 빠른 학습 성능을 가지고 있으니 훨씬 쉬었을듯하다. 


아프리카TV에서의 Live2Vec

아프리카TV는 개인들이 누구나 인터넷 방송을 진행하고 시청할 수 있는 인터넷 개인 방송 플랫폼이다. 인터넷 방송 플랫폼이니 만큼 Live 한 방송이 이용자들에게 추천할 콘텐츠가 된다. 

그래서 이번에는 Live 방송을 벡터로 만드는 Live2Vec과 이를 이용한 클러스터링 결과에 대하여 알아보자 

Word2Vec은 [그림 10] 상단의 내용과 같이 주위의 단어에 의해 Target단어가 ‘햄버거’로 추정되도록 학습이 된다. 그렇다면 개별문장=시청자별이력단어=Live방송 으로 대치시켜 Word2Vec으로 학습하면 [그림9]를 보는 바와 같이 프로게이머의 스타크래프트 방송을 시청한 이용자의 Target Live 방송은 프로게이머의 Live 방송이 잘 추정되도록 학습이 된다. 

[그림10] 문장과 Live 방송의 추론의 예시


이렇게 대치된 Live2Vec의 학습할 데이터 셋은 아래와 같이 이용자별 시청한 방송 list의 형태를 갖게 된다.                     

[[방송번호1, 방송번호2, 방송번호3], [방송번호1, 방송번호12, 방송번호23], [방송번호21, 방송번호223, 방송번호123], … [방송번호31, 방송번호22, 방송번호233]]

위의 형식과 같은 70K 시청 데이터(Unique 13k Live 방송)는 1대의 머신 (x8 Core, 64GB Mem)에서 30분 이내에 학습(Training)이 완료된다. 매우 빠르다. 

이렇게 학습된 결과를 기존의 Memory Based 유사도 측정 로직과 Live2Vec을 비교를 해보면 [그림11] 결과 화면에서 보는 바와 같이 “스타크래프트” 방송과 연관성이 낮은 방송수가 기준 유사도 연산 방식은 6개, Live2Vec은 2개로 Live2Vec의 성능이 더 좋아 보인다. 참고로 Memory Based 유사도(Nearest neighbor) 연산은 인기 방송이 많은 방송들과 연관성이 높게 나오는 경향성이 있다. 

[그림11] 유사도 측정 비교(Nearest neighbor vs Live2Vec)


이렇게 학습된 Live 방송을 K-Means 알고리즘으로 군집화시켜 결과를 보자. [그림11]의 군집화 결과를 보면 같은 시사 방송이라도 시청자 성향이 다름에 따라 “공중파 위주의 시사 방송”과 “인터넷 채널 위주의 방송”으로 구분하여 카테고리화 됨을 볼 수 있으며, 사주/타로, 그림 등과  같은 다양한 카테고리도 발굴이 가능하다. 

[그림12] Live방송을 500개의 카테고리로 군집화 시킨 결과


다양한 분야에서의 Word2Vec활용사례

아프리카TV의 live2vec와 동일한 컨셉으로 많이 사용되는듯하다. 


스트리밍 음원 제공 서비스

문장 = Playlist , 단어 = Song

이용자의 Playlist로 노래를 벡터화시키는 Song2 Vec으로 구현하여 음원 추천 시스템 적용


음식점 리뷰와 예약 서비스 

리뷰 데이터로 학습

학습된 결과 단어들을 비슷한 벡터를 동의어(Synonym)로 묶어서 서비스에 사용함


디스 플레이 광고의 리 타깃팅 서비스 제공 

문장 = shopping Session, 단어 = product 

추천할 상품을 벡터화시킨 Prod2Vec, Product간의 Meta정보로 개선된 Meta-Prod2Vec의 메서드로 다양한 추천 메서드로 사용함


Personal Style(옷 등) 배달 서비스(요즘 아주 핫한 듯하다!!!)

고객 리뷰 데이터

Word2Vec으로 문장 내의 Locality 한 특성을 찾아내고, LDA를 통해 Global 한 특성(스타일)까지 벡터화하는Lda2Vec으로 개선되어 사용함


뉴스 디스커버리 서비스 

뉴스 기사의 Html 데이터 

Paragraph2vec로 뉴스 기사를 벡터화하고 분류기를 이용하여 뉴스의 카테고리를 분류하여 사용함


마치며

위의 내용과 같이 Word2Vec은 다양한 분야에서 적용될 수 있는 사례로써 많이 발표되고 공유되고 있지만, 아쉽게도 혁신적인 비즈니스 성공 사례는 없다(발표를 하지 않았을 수도 있지만). 이는 MF(Matrix Factorization)와 같은 종래의 벡터화 방식으로도 적절한 성능을 내고 있기에 추천 시스템으로써 혁신적인 성과까지는 없는 듯하다. 하지만 추천 시스템은 개인과 아이템(상품)의 다양성을 충족시키기 위해 다양한 알고리즘을 조합하는 앙상블 모델을 필요로 한다는 점에서 필자는 Word2Vec을 추천 시스템에 적극 사용함을 권장할만하다고 생각된다.  

끝.

keyword
최규민(오픈윙스)의 데이터 세상
댓글

    매거진 선택

    키워드 선택 0 / 3 0
    브런치는 최신 브라우저에서 최적화 되어있습니다. IE chrome safari