PACRR-DRMM에 이어서 관련데이터 기준 2019년 이후 현제 가장 성능이 좋은 모델입니다. 모델의 구조는 이전 방식들을 그대로 사용하지만 단어 표현을 word2vec, Glove에서 ELMo, BERT를 적용하였습니다. 랭킹 모델에 대한 관련지식은 이전글을 참고해주세요.
CEDR : Contextualized Embeddings for Document Ranking
NLP Task에서 성능을 높히는 가장 일반적인 방법중 하나는 단어의 표현 벡터를 더 잘 구하는 것입니다. 이전의 PACRR, DRMM에서는 Word2Vec, Glove를 사용하였습니다. 논문은 ELMo, BERT와 같이 Contextual을 고려하는 방법을 사용하면 성능 향상을 이루어 낼수 있다고 가설을 세운다음 여러가지 방법을 적용하여 성능향상을 실험적으로 규명하였습니다.
Contextualized similarity tensors
논문에서 강조하는 contextualized representation를 제시하는 파트 입니다. 일반적으로Contextualized language model은 multiple stacked layers를 포함합니다. 직관적으로 layer가 깊을수록 더 많은 컨텍스트가 통합되므로 이를 랭킹모델에 학습시키기 위하여 각 레이어당 유사도를 계산하여 3차원 유사도 표현을 만듭니다.
여기서 𝑞∈𝑄,𝑑∈𝐷 는 각 검색어와 검색결과의 단어들입니다.PACRR과 같은 n-gram based model은 multiple input으로, DRMM과 같은 counting based model은 각 채널에서 갯수를 새어 통합합니다.
Joint BERT approach
논문에서는 BERT의 [CLS] 토큰은 중요성을 강조합니다 .미세조정 과정에서 [CLS] 토큰은 두번째문장을 예측하는 정보를 가지고 있으므로 중요한 feature가 될 수 있다고 보고 이 정보를 활용하기 위하여 검색어 term에 [CLS] 토큰을 포함하여 유사도를 계산해야 한다고 제안했습니다.
Experiment
논문에서의 결과 입니다. ELMo와 BERT의 임베딩표현만을 사용한경우에는 성능 향상이 조금 이루어 졌지만 미세조정을 거친 BERT와 [CLS]토큰을 포함한 방법은 상당한 성능 향상을 가져왔습니다.
제가 직접 joint BERT 방법을 실험해보고 이전 결과와 비교해 보겟습니다.
먼저 BERT모델링을 한후 pretrain과 fine tunning을 직접해보려 하였으나 구현후 pretrain 하는순간 멍청한 생각이란걸 알았습니다… 어떻게 GPU도 없는 노트북에서 BERT를 훈련시킬 생각을 한걸까요? 오히려 pretrain을 한다는거 자체가 멍청이였습니다. 충분한 데이터도 없으면서!!! 따라서 구글에서 제공하는 pretrained bert의 weight를 받아서 미세조정을 하기로 하였습니다. 미세조정은 colab의 GPU를 활용해서 실시 하였습니다. 갓갓 구글👍
미세 조정은 이전에 했던 검색결과 만족도 판별로 하였습니다. 여기서 한가지 문제가 또 발생하는데, 역시나 imbalance data… 또 저를 괴롭힙니다. imbalance bert로 검색해보니 kappa loss, focal loss, eda, weighted cross entropy정도등의 해결책이 있었습니다. Cost-Sensitive BERT for Generalisable Sentence Classification with Imbalanced Data라는 논문을 참고하여 weighted cross entropy로 훈련시킨 결과 kappa score 0.65점 이상으로 만족할만한 성능이 나왔습니다. 추가로 이전 만족도 판별모델의 결과에 미세조정 결과를 라면스프 마냥 뿌려줬더니(soft voting) 기존점수의 5% 향상이 일어났습니다… 갓갓 bert👍
미세 조정을 마친 후 [CLS]토큰을 포함한 유사도 행렬을 구한후 DRMM, PACRR, DRMM-PACRR에 적용시켜보았습니다.
DRMM
먼저 DRMM입니다. 훈련은 안정되게 진행되었습니다. 또한 mAP값이 이전의 모델보다 좋은 결과를 보여줍니다. 그러나 이전에 말했듯이 수치로 보는것보다 예시가 직관적입니다. 이전과 같이 nike shoes로 비교해보겠습니다.
결과에 색상을 추가하니 확실히 눈에 잘들어 옵니다. 일부분 낮은점수가 상위에 있고, 높은 점수가 하위에 있지만 전체적으로 봤을때 학습이 이루어졌습니다.
PACRR
CEDR을 적용하기 전과 같이 DRMM보다 좋은 수치를 보여줍니다.하지만 DRMM과 다르게 연산량이 많아짐에 따라 학습속도가 느립니다. 그렇지만 짧은 epoch만에 좋은 결과를 발휘합니다.
전체적으로 만족스러운 결과를 보여줍니다. 전체적으로 관련성이 높은 순서대로 잘 나열되었으며 상위 결과에는 대부분 4점이 분포해 있습니다.
PACRR-DRMM
마지막 PACRR-DRMM입니다. 역시 CEDR을 적용한 모델이 훈련과정도 안정적이면서 평가 점수또한 높습니다. 하지만 아쉽게도 nike shoes에서는 PACRR보다 약간 떨어지는 성능입니다. 하지만 그래프에서 볼수 있듯이 아마 다른 예시라면 더 좋은 모습을 보여줬을 것입니다🤷♂…
Discussion
검색어-검색결과 예측 모델을 만들다 보니 자연스럽게 추천 모델과 검색 구조에 대하여 공부하게 되었습니다. 현제 추천시스템의 추세는 크게 유저의 행동 데이터, 제품의 카테고리 정보, 랭킹 정보 3가지를 하나로 모아 모델링을 합니다. 구현한 논문들은 아마존, 이베이의 검색 시스템 관련한 랭킹 시스템 논문의 인용자료중 하나로 DNN을 기반으로한 랭킹모델에 대한 정의와 요구 조건을 자세히 정리되어 있습니다. 그중 제품의 관련성(Semantic Matching part)에 대하여 잘 설명되어 있는 DRMM 부터 같은 데이터로 최근 SOTA인 CEDR까지 주어진 검색 결과 데이터를 기반으로 랭킹 모델을 구현하였습니다. crowdflower data로 모델을 적용해본 결과 아키텍쳐간 성능 차이는 적지만 bert를 활용한 방법은 성능 향상이 눈에 보입니다. 최근 트렌드와 같이 제품의 상세 정보 카테고리(브랜드, 색상, 용도 등등)를 함께 활용한다면 더 좋은 성능을 얻을수 있을것으로 기대 됩니다.
아쉬운점이 있다면 전체 파이프라인이 매끄럽지 못합니다. 구현한 flow는 데이터를 bert에 통과시켜 Contextualized similarity tensors를 구해 저장하고 다시 로드하여 ranking model을 통과한 데이터를 관련성 기준으로 다시 sorting을 하는 방식입니다. embedding-relevance score calculation-sorting 이 3단계 흐름을 한번에 처리하는 파이프라인을 구축한다면 더욱 깔끔해질것으로 보입니다.