CLIP: Contrastive learning Image Encoder with sentences for Pre-training [쇼핑 카테고리 매칭]

Daehyeon Kong
네이버 쇼핑 개발 블로그
13 min readNov 15, 2021

안녕하세요. 2021년 8월~11월까지 12주간 Forest CIC - 쇼핑 Aggregation -쇼핑 AI 팀에서 인턴십을 진행한 공대현입니다.
저는 인턴기간동안 multi-modal model인 ‘CLIP’ 논문에 대해 조사하고, 이 방법을 쇼핑 AI task 중 하나인 ‘카테고리 매칭’에 적용시켜 보는 업무를 하였는데요, 이번 포스트에서 CLIP에 대한 설명과 이 논문에서 제안한 방법을 ‘카테고리 매칭'에 어떻게 적용시킬 수 있는지에 대해 공유드리도록 하겠습니다.

1. 기존 Image 분류 모델의 문제점

보통의 Image classification dataset은 Image와 그에 대응하는 Label로 구성되어있습니다. 예를들어, 대표적인 ImageNet datset은 130만개-1000개의
Image - Label pair로 구성이 되어있습니다.

일반적인 Image-Label pair 예시 (CIFAR 10 dataset)

이런 일반적인 image dataset 구성의 문제점은 두 가지가 있는데요,

첫번째로 dataset scaling이 힘든 것입니다. 일반적으로 사람이 직접 labeling을 해야하기 때문에, dataset의 규모를 키울 때 드는 시간과 비용이 크다는 문제점이 있습니다.

두번째로 마지막 layer에서 softmax로 확률값을 구할 때, label의 의미에 대한 이해없이(‘cat’ : 3, ‘truck’ : 9처럼 몇 번째 class인지만 인식) 학습이 되기 때문에 text로 된 label의 정보가 누락되는 문제점이 있습니다.

2. CLIP 의 특징과 이점

CLIP pre-training

특징

  1. Sentence label 사용
    CLIP에서는 위 그림처럼 기존의 방식과는 다르게 그림에 대한 image와 더불어 description이 있는 sentence가 추가적인 input으로 들어갑니다. 그리고 label을 사용하지 않기 때문에 label space가 정해져 있지 않습니다.
  2. Contrastive learning
    위 그림처럼 N개의 Image-Sentence pair들이 Image Encoder, Text Encoder 를 통과한 후의 embedding feature들의 similarity를 구한 후(N²개), 대응되는 pair (N개)끼리의 similarity가 높아지고 나머지(N²-N개)는 낮아지도록 학습시킵니다.

이점

  1. Labeling 작업없이 Image-Sentence pair를 인터넷에서 크롤링을 하여 큰 데이터셋(WIT[WebImageText]:4억개의 pair)을 만들 수 있습니다.
  2. Text embedding feature와 Image embedding feature를 하나의 공통된 잠재 공간(representation space)에서 학습시키기 때문에, Image encoder가 image의 visual concept를 단순히 순서를 나타내는 label로부터가 아닌, text representation로부터 학습할 수 있게 됩니다.

3. CLIP의 작동방식

CLIP 논문에서 제안한 방식은 위처럼 contrastive learning으로 pre-training을 함으로써, image encoder로 하여금 visual concept-text representation 관계를 충분히 학습하게 한 후, zero-shot classification을 합니다. (zero-shot 이란 그 데이터셋에 대한 학습없이 prediction 하는 것을 의미합니다.)

CIFAR10에 대해 zero-shot classification을 한다고 예시로 들었을 때, object = {plane,car,dog,….,bird} 로 총 10개의 class가 있는데, 이들을 전부 “a photo of a {object}” 문장으로 바꿔주고, 모든 class 문장(총 10개)을 pre-trained된 text encoder에 통과시켜서 text embedding을 구한 후, Image Encoder를 통과한 image embedding과 similarity가 가장 높은 class 문장의 text embedding을 선택하여 classification을 하는 방식입니다. 이렇게 class를 문장으로 바꿔서 inference하기 때문에 , dataset이 바뀌어서 target label들이 달라져도, 네트워크를 변경할 필요가 없게 됩니다.

CLIP 논문에서 이 방식으로 다양한 image dataset에 zero-shot 실험을 해보았는데, 그 데이터셋에 대해 직접 학습을 한 model(ImageNet에 pretrained 된, 일반적인 ResNet50 model)보다 성능이 더 잘 나오는 경우가 많다는 결과를 도출하였습니다.

27개의 Image datset 중에서 16개가 CLIP zeroshot 성능이 더 좋음

심지어 ImageNet dataset에 대해서도 Zero-Shot CLIP이 더 좋은 성능을 보여주는데 이는 명사 중심 label(ImageNet)보다 동사를 포함한 sentence(WIT dataset)가 visual concept를 학습하는데 더 적절하기 때문이라고 저자는 설명합니다.

여기서, CLIP방식으로 학습된 모델을 각 image dataset에 다시 한번 학습(fine-tuning)시키면 결과는 어떻게 될까요?

Fine-tuning까지 했을시엔 27개중 21개가 더 뛰어난 성능을 보여줌

일부 데이터셋에 대해서는 성능이 더 떨어지는 모습을 보여주지만, 대부분이 성능이 더 올라갔습니다. 따라서 성능적으로 더 좋아지려면 fine-tuning을 해야하는 것을 확인할 수 있었습니다.

이 CLIP fine-tuning을 Vision-and-language task에 적용하여 실험한 후속 논문이 있는데 이를 밑에서 설명드리도록 하겠습니다.

4. CLIP 후속논문

논문 제목: How Much Can CLIP Benefit Vision-and-Language Tasks?

V&L(Vision-and-Language) task 종류

Image와 Text를 동시에 사용하는 V&L task의 종류에는 Captioning, Foil, RER, VQA 등이 있습니다.
이 논문에서 제안한 방식은 CLIP pre-training(WIT dataset)을 먼저하고, 각 task에서 사용하는 dataset (MS COCO Captions+Visual Genome Captions+VQA+GQA+VG-QA)을 통합하여 V&L dataset(약 1천만개의 image-text pair)을 만들어서 이에 대해 한번 더 pre-training을 진행한 후, V&L task 중 하나에 fine-tuning하는 것입니다.

VQA task에 대한 실험 (No Pre-train:no V&L pre-training, Pre-train : V&L pre-training)

위의 표처럼 제안한 방식을 사용했을 때(V&L dataset에 대해 pre-train했을 때)가 더 뛰어난 성능을 보여주는 것을 확인할 수 있었습니다.

요약하자면, CLIP pre-training을 한 후 fine-tuning 하기전에 비슷한 데이터셋을 합쳐서 pre-training을 한 번 더 하면 성능이 올라간다는 것에 대한 내용이었습니다.

5. 쇼핑-카테고리 매칭에 적용

이제 위에서 본 CLIP 논문과 후속논문 방식을 사용하여 ‘카테고리 매칭’에 적용시키는 방법에 대해 설명드리기 전에 쇼핑- ‘카테고리 매칭'에 CLIP을 사용해야 하는 이유를 짚고 넘어가겠습니다.

CLIP을 사용해야 하는 이유

‘Banana’ 의 distribution shift에 대한 강건함 비교 (ImageNet pre-trained vs CLIP pre-trained)

앞서 설명드렸듯이, CLIP은 명사 label이 아닌 동사를 포함한 문장을 사용하기 때문에 text representation을 이용하여 그 물체의 visual concept를 더 잘 학습합니다. 따라서 위의 ‘Banana’ 예시처럼 물체의 의미는 같지만 생김새는 다르게 표현된 ‘distribution shift’에 대해서 훨씬 강건한 성능을 보입니다.

한 카테고리 안의 수많은 제품들의 예

현재 쇼핑에서 사용하는 기존의 ‘카테고리 매칭'에서는 Image encoder가 ‘순서’만을 의미하는 label을 사용하는데, 쇼핑 데이터 셋의 한 카테고리 안에서만 수 천가지 이상의 생김새가 다른 제품들이 있기 때문에, 그것만으로는 그 제품의 representation을 충분히 학습하기 어렵습니다. 그러므로 CLIP의 방식으로 text-representation을 학습해야 이러한 distribution shift에 강건한 성능을 보일 수 있을 것입니다.

Dataset 구성

2천만개의 image-text pair, 4259 개의 class (full_cat_nm)

기존 방식

각 encoder를 따로 학습시킨 후 앙상블하는 방식

현재 쇼핑AI에서 사용하는 카테고리 매칭 모델은 Text encoder로는 Text-CNN과 Image encoder로는 RexNet2.0을 사용하여 각각의 prediction을 구한 후 앙상블하는 방식인데요, 성능은 88.5%[(Text encoder,85.4%)+(Image encoder,72%)] 입니다.

CLIP 방식 적용

1.CLIP-Contrastive learning 방식으로 shopping dataset에 pre-training
2. 각 Encoder를 Fine-tuning 시킨 후, 기존 방식과 같이 앙상블
  1. WIT dataset에 pre-trained 된 Image encoder[ResNet-D]와 shopping-electra로 shopping dataset에 대해 contrastive learning으로 pre-training을 시키고,
  2. 다시 기존 방식처럼 각 encoder를 따로 fine-tuning 시키는 방식으로 CLIP방식을 적용하였습니다.

여기서 WIT dataset에 pre-trained된 image encoder와 달리 text encoder를 자체 모델(shopping electra PLM)로 쓴 이유는 WIT dataset의 text data가 영어이기 때문에, pre-train의 효과를 받기 힘들다고 생각했기 때문이고, 학습시에 성능,속도 면에서 더 좋은 결과를 보여주었기 때문입니다.

이렇게 앙상블했을 때의 성능은 86.5%[(Text encoder,83.7%)+(Image encoder,71.6%)]입니다.

shopping electra PLM과 기존의 PLM 성능 비교표

참고) shopping electra는 기존의 general dataset으로 이루어진 corpus가 아닌, 쇼핑 데이터셋[상품명+회원 리뷰]으로 이루어진 corpus에 대해 학습된 PLM이고, domain specific하기 때문에, general electra에 비해 ‘카테고리 매칭'에 fine-tuning하였을 때 성능이 더 좋습니다.

성능의 향상은 없었으나, 눈여겨 봐야 할 점

첫 줄 : 성능 차이 줄어듬 / 둘째 줄: 성능 향상

첫 줄을 비교해보면, 원래 RexNet2.0과 ResNet50-D의 성능차보다 CLIP 방식을 사용했을때의 성능차이가 2.3% → 0.4%로 줄어들었습니다.

두번째 줄을 보면, shopping dataset에 대해 한 번 더 pre-training 한 후 fine-tuning 했을 때 1% 가량 성능이 향상되는 것을 볼 수 있습니다.

결론적으로, 카테고리 매칭을 CLIP 방식으로 학습함으로써 Image encoder가 제품명의 text representation을 학습하는 것의 효과를 얻는 것을 보여주었으나, 기존의 방식보다 성능을 더 올리려면 최적화(language 모델 교체, 전처리 수정, dataset 추가 등)가 좀 더 필요하다고 할 수 있겠습니다.

앞으로의 제안

  1. shopping판 V&L dataset을 만들어서 pre-training

현재 CLIP에 적용할 때, pre-training과 fine-tuning 모두 같은 shopping dataset에 대해 학습하였는데, CLIP 후속 논문에서 제안한 것처럼, shopping dataset과 유사한 dataset;제품 리뷰 블로그의 [제품 이미지-리뷰 글 pair], 중고나라 사이트의 [판매제품 이미지-판매글 pair] 등을 통합하여 더 큰 규모의 dataset에 대해 pre-training을 한 후, shopping dataset에 대해 fine-tuning을 한다면 더 좋은 성능이 나올 것을 기대해 볼 수 있을 것 같습니다.

2. KoCLIP / Kobert의 사용

현재 사용한 CLIP-pretrained model 은 한국어가 아닌 영어모델이어서 pre-trained의 효과를 절반밖에 보지 못했으나, 한국어 WIT(8만 pair로 규모가 매우 작지만..)에 학습된 KoCLIP 이용한다면 더 좋은 성능을 기대해 볼 수 있다고 생각합니다. (KoCLIP은 WIT(English)-pre-training model로 학습을 시작하였음)

Kobert는 shopping PLM은 아니지만, 좋은 성능의 한국어 bert 모델이고, 위에처럼 통합 dataset을 만든다면, shopping dataset이 아닌 genenral한 데이터 셋이기 때문에, 오히려 shopping PLM이 아닌 kobert를 사용하는 것이 성능이 더 좋을 수 있다고 생각합니다.

3. 카탈로그 클러스터링 task에 적용

‘카테고리 매칭’으로 fine-tuning 할 때 CLIP-pre-training과 학습 방식에 차이가 있는 것과 다르게, ‘카탈로그 클러스터링’은 CLIP과 같은 Contrastive learning 방식을 사용해서 fine-tuning이 더 성능적으로 유리하게 작용할 것이라는 기대를 가져 볼 수 있을 것 같습니다.

끝으로 인턴 기간동안 도움을 주신 팀원분들께 감사의 인사를 드립니다! :)
긴 글 읽어주셔서 감사합니다.

--

--