Tech Review of Pinterest #5
컨텐츠를 이해하는 것은 좋은 추천 시스템을 만드는 데 있어 핵심적인 일이다. 각 Pin이 무엇에 관한 것인지 알게 된다면, Pinterest는 Pinner들에게 그들의 관심사와 잘 연결되는 관련도가 높고, 영감을 줄 수 있는 컨텐츠를 연결시켜줄 수 있다.
Interest Taxonomy는 Pinterest에 등장하는 대부분의 컨셉을 포함하고, 계층 구조로 이루어져 있다. 고도화된 taxonomy tree는 10 level로 이루어져 있으며, "woman fashion"이나 "DIY crafts"와 같은 24개의 최상위 개념과 수만 가지의 interest들을 포함하고 있다. Taxonomy tree의 구조와 단어는 지속적으로 확대하고 성장할 것이다. 우리가 보유한 interest의 종류에 대한 느낌을 보여주기 위해, "Home Decor"에 대한 예시를 살펴보면 아래와 같다.
Interest Taxonomy는 Pin, board, Pinner, 검색 쿼리를 포함하여 컨텐츠를 분류하는 중앙 집중형 방법이다.
우리는 Pin2Interest(P2I)를 개발하여, 2000억 개 이상의 Pin들을 동적 분류법을 통해, 우리의 corpus를 적용하였다. P2I는 우리의 풍부한 taxonomy of interests를 참고하여, 높은 품질의 사람이 이해할 수 있는 label들은 Pin에 제공한다.
위의 Pin에 대하여, P2I의 결과는 아래와 같다. (taxonomy_level, label, score)
(3, dogs, 0.83)
(2, mammals, 0.7)
(1, animals, 0.82)
(3, skiing, 0.83)
(3, snowboarding, 0.79)
(2, winter sports, 0.75)
(3, ski trips, 0.76)
(2, travel ideas, 0.65)
(1, travel, 0.71)
Taxonomy로 보면, mammals는 animals의 자식이며, dogs는 mammals의 자식이고, skiing과 snowboarding은 winter sports의 자식이다.
P2I는 Pinterest의 다양한 시스템에서 광범위하게 사용된다. P2I의 결과는 안전하지 않은 컨텐츠를 식별하고 제거하며, 개인화된 추천을 하고, machine learning model에 사용되는 ranking feature를 만드는 데 사용될 수 있다. P2I의 결과는 직접 Pinner들에게 노출될 수도 있다. 그 예시들은 아래와 같다.
User to Interest(U2I)
Query to Interest(Q2I)
Home feed ranking
Search ranking & retrieval
Ads interest targeting & retrieval
P2I는 다른 X2I 시스템을 만드는데 기본이 된다. P2I의 결과는 user, queries, boards, pins 사이에서 발생하는 관계를 분류할 수 있도록 공간을 구성한 것이다.
우리는 검색 쿼리와 pin의 interest 간의 유사성으로부터 검색 시스템에 필요한 ranking feature를 만들고, home feed에서 user와 pin에 대해서도 유사한 행위를 할 수 있다. 실제로, Interest taxonomy structure를 이용하고, 광범위하고 더 세분화된 interest와 매칭 시킬 수 있는 더 많은 레벨의 taxonomy를 위하여 다양한 feature들을 만든다. (그 예시는 원문에서 보실 수 있습니다.)
Interest targeting은 광고주가 Interest Taxonomy로부터 카테고리를 선택하여, 그들이 대상으로 하고 싶은 고객들을 선택할 수 있게 해주는 광고 프로그램이다.
아래의 query Pin에 대하여 :
우리는 Pin과 유사한 관련된 결과를 보여준다.
"Promoted By"가 붙은, 광고 Pin은 광고주들에 의해 광고되는 Pin이며, 우리는 이것으로부터 수익을 창출한다. 우리의 interest targeting 제품을 활용하여, 각 Promoted Pin은 Travel이나 Outdoor Sports와 같은 광고주가 선택한 interest를 지니게 된다. P2I는 query Pin과 동일한 interest를 가진 것을 targeting 함으로써, Interest Targeting이 가능하도록 한다. 위의 예시에서, 두 Promoted Pin들이 query Pin과 동일하게 Travel이라는 Interest를 공유하고 있다.
P2I는 machine learning 시스템으로 두 개의 모듈로 구성되어 있다 : candidate generation, ranking. 전체 과정은 Scalding(Scala + MapReduce)로 구성되어 있으며, 매일 Pin들을 우리가 가진 corpus로 분류한다.
Candidate generation에서는, 각 Pin에 대해 관련도 높은 interest를 얻기 위해, 높은 recall을 보이는 cost가 적은 방법을 사용한다. 각 단계에서 우리는 최대 200개의 후보들을 생성한다.
Lexical Expansion
우리는 텍스트의 어휘적 확장(Lexical Expansion)을 통해, 모델을 확장하고 더욱 정밀하게 만든다. 텍스트의 어휘적 확장은 edit distance, 순서 변경 등을 포함 한다. 그 예시는 아래와 같다.
Pin/Board co-occurrence
매우 정밀한 어휘적 일치를 사용하여, 우리는 Pin들에 함께 등장하는 단어와 Board들에 함께 등장하는 Pin들을 모아서 더 큰 network로 변경하였다. 그 결과는 {pin : [list of interest candidates]}로 추출되며, ranking의 입력으로 사용된다.
Candidate generation 단계로부터 추출된 각 (Pin, Interest) pair의 점수를 매기고, 높은 연관도 점수를 가지고 있는 것을 마지막 분류의 결과로 유지하였다. 우리는 각 후보 pair로부터 feature들을 추출하고, binary classifier를 이용하여 순위를 매겼다. 현재는 gradient-boosting decision tee(GBDT)를 우리 모델로 사용하고 있다.
아래는 포함된 feature들의 예시이다. (자세한 설명은 원문에서 보실 수 있습니다.)
Embedding similarity features
Tf-idf feature from Pin annotations
Taxonomy features
Pin engagement features
Context features
새롭게 생성되는 Pin들에는 "Instant Interests"라 불리는 대체 과정을 통해 interest를 예측하여, 붙여준다. 이 과정은 일단위의 batch 과정을 통해 이루어지는 다양한 logic이 적용되어 있으며, 새로운 Pin에 정보가 부족한 상황을 극복하게 한다. Pin을 생성하는 동안, 사용할 수 있는 feature들만 사용하여 model이 동작한다. 이렇게 만들어진 prediction은 매일 batch 작업이 수행되기 전에 사용할 수 있으며, 새로운 Pin을 활성화하고 배포하는 데 있어 매우 중요하다.
이 시스템은 계속 증가하는 taxonomy를 수용할 수 있도록 설계되었다. 새로운 Interest가 추가되면, P2I는 다른 engineering 작업 없이 다시 수행될 수 있다. 기존에 존재하는 pipeline을 통해 각각의 새로운 interest에 대하여 feature들이 추출될 수 있기 때문에, 새로운 모델이 재학습 될 필요는 없다. 이러한 flexibility는 product 팀으로부터 오는 요청들을 빠르게 수행하고, 다양한 버전의 taxonomy들에 대해 동일한 시스템을 재사용할 수 있게 한다.
우리가 마주한 다른 어려운 점은 수천억 개의 Pin에 대해 이 시스템이 효율적으로 동작하도록 하는 것이다. 우리는 각 구성요소를 병렬적으로 개선할 수 있고, 디버깅하기 쉽고, 개선하기 쉽도록 modualr system으로 구성하였다. Bottleneck은 쉽게 정의되고 파악될 수 있다. 엔지니어들은 Pin당 0.01% 리소스만 더 사용한다고 하여도 2000억 개의 Pin에 대해서는 필요한 resource가 엄청나다는 것을 인지하고 있기 때문에, 각 단계에서 효율성을 염두하여 개발을 하는 것을 배웠다.
원문에서는 다양한 이야기를 하고 있지만, 결국 시스템과 모델 관점에서 살펴보면, 언어가 바뀌는 것은 큰 의미가 없습니다. Lexical Expansion을 통해 번역을 해주고, 동의어 처리만 해줄 수 있다면, 시스템적으로 컴퓨터가 받아들이는 데 있어서는 동일하다고 할 수 있습니다. Pinterest는 세계적인 기업입니다. 그렇기 때문에 Pinterest는 Lexical Expansion을 통해, 언어를 확장하고 전 세계로 더 유의미한 서비스를 만들어내는 노력을 하고 있다고 할 수 있습니다.
Pin2Interest는 Pin을 다이나믹하고, 선별된 taxonomy로 연결해준다. 시스템은 유연하며, interest taxonomy 변경이나 international expansion과 같은 다양한 요구 사항을 받아들일 수 있다. 그 결과는 Pinterest 전반에 걸쳐 사용되며, 수천억개의 contents를 분류하는 robust 한 signal로 사용된다.
사실 이번 리뷰는 많이 두루뭉술한 리뷰 입니다. 특별하게 어떤 모델을 사용하였는지 명시하지 않았고, 이 시스템에 대해서도 구체적으로 설명하지도 않았습니다. 하지만 이 글을 리뷰의 대상으로 선정한 것은 실제 서비스에 있어 꼭 필요한 것을 수행하고 있기 때문입니다.
Data Science에 있어 가장 중요한 것중 하나는 좋은 feature를 추출해내는 것이라는 생각이 듭니다. 그 과정에 있어 P2I는 다양한 X2I의 기반 기술로 사용될 수 있습니다.
또한 Data Science에서 모델을 생성하는데 있어, 기반 Dictionary는 매우 중요합니다. 그 Dictionary가 없으면, 사람의 언어로 설명하기 힘들고, 정성적인 평가를 하기 힘들기 때문입니다. 이러한 측면에서 Pinterest는 사전에 자신들이 각 Domain에 맞는 Taxonomy를 생성함으로써 사람이 이해할 수 있는 언어로 체계쩍으로 모델을 정성평가를 할 수 있또록 하였습니다. 이렇게 사람의 언어로 생성된 Dictionary를 모델에 넣어줌으로써, P2I의 결과 역시 사람의 언어로 나오게 하여, 이해하기 쉬운 모델을 만들었다고 할 수 있습니다.
마지막으로, P2I는 굉장히 Flexible하며 다양한 요구사항을 쉽게 받아들일 수 있도록 설계되어 있다는 점입니다. 실제 서비스에 있어 모델을 각 Domain에 맞도록 heuristic하게 튜닝을 해야할 수도 있습니다. 그런 점에 있어, P2I는 설계가 잘 되어 있다는 생각이 듭니다.
이 글은 아래의 원문을 번역/의역 및 요약하였습니다. 중간중간 파란색으로 표시된 글씨는 번역자의 견해입니다.
지난 리뷰 보기
https://brunch.co.kr/@andrewhwan/60
https://brunch.co.kr/@sonjoosik/11