KoSBERT를 선택한 이유는?

구현하고자 한 기능

구현하려고 했던 기능은 사용자가 알고 싶은 복지의 특징을 입력한 챗을 보내면 해당 복지의 특징과 가장 유사한 복지를 추천해 주는 것입니다. 이는 IR(Information Retrieval) 과제와 비슷합니다.

딥러닝 방식을 선택하기까지

사용 대상자는 복지가 필요한 소외계층으로 그분들의 불편함을 고려해야 했습니다. 처음에는 사용자가 입력한 메시지와 복지 사이에 공통적인 단어 개수, 즉 TF-IDF 기반의 방법을 이용하려 했습니다. 하지만 ‘노인분들이 자판을 정확하게 치실까?’라는 생각을 하게 되었고 조부모님께 인터뷰를 하였습니다. 결과는 스마트폰 타자에 익숙하지 않아 오타가 많이 나오는 것이었습니다. 그래서 오타에도 강건하고 문장을 이해할 수 있어 성능이 기대되는 딥러닝으로 기술을 변경했습니다.

KoSBERT를 선택하기까지

카카오, SKT 등의 기업에서 IR에 Sentence Embedding을 시도한 사례들을 확인했고 Sentence Embedding을 적용하기로 했습니다. 또한, 이는 질의도 문장이고 비교 대상인 복지 제목과 복지 내용을 합친 데이터도 문장이기 때문에 문장 단위에 적합하다고 생각했습니다. 특히, 중앙 복지 관련 추천을 제공해 주기 때문에 변경이 적어 미리 Embedding을 만들어 놓으면 빠르게 추천 결과를 사용자에게 제공할 수 있었습니다. 성능 역시 보장되어 있었고 한국어 기반 BERT model(custom BERT model)과 한국어로 정제된 데이터를 사용 가능한 라이브러리를 제공했습니다.

SentenceBERT란?

논문을 기반으로 하기 때문에 해당 글에서 언급하는 SOTA는 논문 발표 기준임을 명확히 인지해주세요.

SentenceBERT란?

Siamese Network 또는 Triplet Network을 활용해 Sentence Embedding을 수행하는 BERT Model의 변형으로 문장 간 유사도 분석에 적합합니다.

기존 BERT 모델들의 문제점

BERT와 RoBERTa와 같은 언어모델은 sentence-pair regression 태스크에서 SOTA를 달성했지만, 치명적인 단점으로 비교할 두 개의 문장이 모두 네트워크에 입력되어야 해서 엄청난 컴퓨팅 overhead를 발생시킨다는 것이었습니다. 만약 BERT를 통해 10,000개의 문장 쌍을 비교한다면 약 50 million 컴퓨팅 연산 (약 ~65시간 소요)이 필요하게 됩니다.

BERT Embedding이라 알려진 BERT의 output layer를 평균 내거나 [CLS] 토큰을 사용하는 방법이 있는데 이는 GloVE 임베딩을 평균 내는 것보다 더 성능이 나쁘다고 알려져 있습니다.

Model

Pooling Operation

BERT 또는 RoBERTa의 output에 pooling operation을 더해 고정된 사이즈의 문장 임베딩을 얻었습니다. SBERT는 default로 MEAN 전략을 취했습니다.