NAVER GLACE AI 개발팀은 어떤 일을 해?

yunsang ju
네이버 플레이스 개발 블로그
18 min readFeb 2, 2023

--

안녕하세요 Naver의 CIC(Company-In-Company) 중 하나인 GLACE(Global Place) CIC의 AI 개발팀을 맡고 있는 주윤상입니다. 서비스 조직의 AI 개발팀은 어떤 미션을 가지고 있으며 AI 기술을 실제 서비스에 어떻게 적용하고 있는지 소개하겠습니다.

아래 목차로 설명 드리도록 하겠습니다.

  • Naver GLACE CIC에서 제공하고 있는 서비스에 대한 소개
  • Naver GLACE CIC AI 개발팀이 갖고 있는 미션과 개발/운영 하고 있는 AI Product에 대한 소개
  • 서비스 AI Product 운영 시 중요하게 생각하는 부분

Naver GLACE CIC에서 제공하고 있는 서비스

“Glace”는 ‘Global’과 ‘Place’가 조합된 단어입니다. 네이버는 식당, 펜션, 헤어숍과 같은 오프라인 서비스를 온라인과 연결시키는 것을 ‘플레이스’라고 하는데요, 여기에 ‘글로벌’을 붙인 이유는 저희가 한국 뿐만 아니라 일본이나 다른 여러 나라로 진출하고자 하는 포부를 가지고 도전 중인 조직입니다. 아래 이미지는 NAVER GLACE CIC에서 추구하는 방향이며 해당 방향에 맞는 여러 O2O 서비스를 한국과 일본에서 운영하고 있습니다.

한국

한국에서는 네이버 플레이스, 예약, 마이플레이스 등 다양한 O2O 서비스를 제공하고 있습니다. 네이버 플레이스에서는 상세한 장소 정보와 해당 플레이스를 방문한 유저가 작성한 리뷰들을 확인할 수 있습니다. 현재까지 네이버 플레이스에는 3.5억 건 이상의 리뷰가 쌓여있으며, 계속해서 성장하고 있습니다.

추가로 Business Owner에게 자신의 플레이스를 손쉽게 관리할 수 있는 SmartPlace 도구를 제공합니다. Business Owner들은 SmartPlace를 통해 네이버 플레이스 상세 페이지를 관리할 수 있으며, 사업에 도움이 되는 다양한 통계 정보를 제공 받습니다.

일본

일본에서는 한국과 비슷한 성격의 O2O 서비스인 LINE PLACE를 운영하고 있으며, 일본인의 취향에 맞는 다양한 기능들이 서비스에 적용되어 있습니다. 이 중 하나는 메뉴별 리뷰이며, 메뉴 별 상세한 리뷰를 볼 수 있어 좋은 평가를 받고 있습니다.

Naver GLACE CIC AI 개발팀의 미션과 Product 소개

NAVER GLACE CIC AI 개발팀은 NAVER GLACE에 쌓인 데이터 기반으로 AI를 이용해서 서비스에 도움이 되고, 검색에 활용할 수 있는 TAG를 추출하는 미션을 갖고 있습니다.

저희는 Computer Vision(이하 CV), Natural Language Process(이하 NLP) 2개의 Domain에서 한국,일본 15개 이상의 AI 모델을 GLACE의 서비스에 적용하여 서비스 품질을 올리고 있습니다. 저희가 개발/운영하는 모델들을 간략하게 설명하겠습니다. NLP 과제부터 설명드리겠습니다.

OCR Place Matching

OCR Place Matching은 OCR parsing된 text를 query로 하여 GLACE에 등록된 수백만개의 Place 중 사용자가 방문한 Place를 정확하게 찾아주는 Embedding Based Text Retrieval 모델입니다. NAVER GLACE에서 운영하는 서비스 중 하나인 영수증 인증 기능은, 플레이스 방문 후 받은 종이영수증을 촬영하여 업로드하면, 영수증 이미지를 방문에 대한 최소한의 인증으로 판단하고 리뷰를 남길 수 있는 기능입니다. 이 기능을 제공하기 위해서는 여러 ML 모델들이 동원되는데, 우선 사용자가 영수증 이미지를 업로드하면 NAVER CLOVA OCR을 통해 text를 추출합니다. 추출된 text 기반으로 정확한 방문 플레이스를 검색해줘야 적절한 Place에 리뷰가 남을 수 있는데, 이를 위해 OCR Place Matching 모델을 개발했습니다.

위 이미지는 사용자가 업로드한 영수증 이미지에서 방문 장소를 찾기 위한 세부 흐름을 보여줍니다. 사용자가 빛이 많이 들어가거나 뒤틀려서 촬영된 영수증 이미지를 업로드하면 OCR 인식이 어려울 수 있으며, OCR 모델에서 오인식을 하여 추출한 텍스트에 오타가 들어갈 수 있습니다. 또한, NAVER CLOVA OCR에는 추출된 텍스트에서 필요한 필드들을 Named Entity Recognition(NER) 작업 방식으로 후처리하는 Parsing 모델이 있습니다. 그러나 Parsing 모델에서도 오작동으로 인해 그림과 같이 주소의 순서가 달라질 수 있습니다. 이렇게 추출된 최종 텍스트를 기반으로 정확한 장소를 찾기 위해서는 각 구간마다 여러 노이즈가 들어갈 수 있어 일반적인 검색 엔진으로는 정확한 장소를 찾기 어렵습니다. 따라서 오타에 견고한 모델을 개발했고, 90% 이상의 높은 정확도로 장소 검색 결과를 제공하고 있습니다.

Embedding 기반 Retrieval 기술을 다른 과제에도 적용하고 있는데요. 다음에 설명드릴 과제는 오타에 Robust한 Menu 검색 모델입니다.

Menu Matching

LINE Place의 핵심 기능 중 하나인 메뉴 별 리뷰를 잘 모으려면, 저희가 갖고 있는 플레이스 별 메뉴 데이터베이스가 잘 정제되어 있어야 합니다. 플레이스의 메뉴를 수집하기 위해 영수증에 있는 메뉴 정보를 활용하려 했지만 OCR 파싱된 메뉴명은 공유드린 대로 noisy합니다. 이러한 noisy한 메뉴 텍스트를 잘 정제하여 DB에 신규 메뉴를 추가하고, DB에 있는 메뉴는 정확하게 검색하기 위해 해당 모델을 개발했습니다. 또한, Retreival Model 이외에 추가로 Menu Matching 정확도를 올리기 위해, Menu Raw Text를 SIZE, PRICE, TEMPERATURE 등 9가지 옵션으로 분리하는 Sequence Labeling Model도 개발하였고, 이를 통해 옵션 부분만 다른 메뉴까지도 정확하게 검색할 수 있습니다.

NLP 과제는 여기까지 설명드리고 다음으로는 CV 과제들을 설명드리겠습니다.

영수증 판별기

저희 서비스에서는 영수증 인증 과정에서 광고나 포인트 적립 등의 목적으로 정상적인 영수증이 아닌 다른 이미지를 올리는 사용자들이 있습니다. 이러한 비정상적인 영수증을 실시간으로 차단하기 위해 영수증 판별 모델을 개발하여 서비스에 적용하고 있습니다. 이렇게 하여 정상적인 사용자들의 경험과 서비스의 안정성을 향상시키고자 노력하고 있습니다.

음식인식기

저희는 사용자 리뷰 이미지에서 음식 이미지만을 정확하게 분류할 수 있는 모델을 개발했습니다. 이 모델은 한국과 일본의 각각 300개 이상의 다양한 음식을 식별할 수 있어서 서비스에서 다양한 방면으로 활용이 가능합니다.

이미지 점수 측정기

GLACE 서비스에 올라오는 많은 리뷰 이미지의 품질을 점수화하여, 발견 탭에서 좋은 퀄리티의 리뷰 이미지를 우선적으로 노출시키기위해 리뷰 이미지를 0~4점 사이의 점수로 측정하는 모델을 개발했습니다. 테스트셋 기준으로 3점과 4점을 정확하게 예측하는 정확도가 99%를 넘는 우수한 성능을 보여주었습니다. 이를 통해 사용자들은 발견 탭에서 좋은 퀄리티의 리뷰 이미지를 더 쉽게 찾을 수 있고, 이로 인해 사용자들의 만족도와 서비스 체류 시간이 증가할 것으로 기대하고 있습니다.

고품질 리뷰 이미지

저품질 리뷰 이미지

Object Detection

네이버 플레이스는 음식점 뿐만 아니라 병원, 미용실 등 다양한 종류의 플레이스에서 남겨진 리뷰들이 많이 쌓여있습니다. 그러나 초상권 이슈나 부적절한 리뷰 이미지가 public한 리뷰탭에 노출되는 경우 서비스 운영에 문제가 발생할 수 있습니다. 이러한 문제를 해결하기 위해 우리는 Object Detection 모델을 개발하여 부적절한 리뷰 이미지를 필터링하는 기능을 서비스에 적용했습니다.

분위기 분류기

같은 음식이라도 가게의 분위기에 따라서 더 맛있게 느껴진 경험이 있으실 것입니다. 각 가게마다의 분위기는 매우 다양하며, 사용자의 리뷰 이미지에는 해당 가게의 분위기가 담겨있습니다. 이러한 리뷰 이미지를 분석하여 가게의 분위기를 먼저 파악한다면 사용자가 원하는 분위기를 가진 가게를 찾아주는 데 큰 도움이 될 것입니다. 그래서 저희는 리뷰 이미지에서 50개 이상의 분위기 특징을 찾아낼 수 있는 모델을 개발하고 운영하고 있습니다.

PlaceLM

최근에 집중하고 있는 과제인 PlaceLM(GLACE 전용 LLMs)에 대해 설명드리겠습니다. 아래와 같은 이유로 저희는 GLACE 전용의 LLMs를 개발하고 있습니다.

  • 현재 추출하는 TAG별로 특화된 Vision,NLP 모델을 개발하고 있으며, 운영 하는 모델이 한국,일본 15개가 넘어가는 상황입니다. 모델의 수가 증가함에 따라 운영 비용도 증가합니다.
  • TAG별로 특화된 모델을 사용하면 복잡한 semantic TAG를 추출하는 데 어려움이 있습니다.
  • 단일 모델로 기존 TAG 추출 작업 뿐만 아니라 더 풍부한 semantic TAG를 추출할 수 있다면 TAG의 품질도 좋아지고 운영 비용도 감소할 것입니다.

실 서비스에 사용하기 위해서는 저렴한 Inference 비용과, 변경되는 데이터를 빠르게 모델이 학습하는게 중요합니다. GLACE에서 운영하는 서비스는 많은양의 Traffic이 들어오며, 하루에 변경되는 플레이스의 수도 많아서 신규 플레이스를 자주 학습하고 많은양의 Traffic을 처리하려면 적절한 model parameter를 정하는건 중요합니다.

상대적으로 작은 모델을 사용하여 최신 플레이스 정보를 자주 학습하고, 적은 운영비용으로 서비스 트래픽을 받을 수 있으며, Place 도메인에 한정해서는 좋은 성능을 내는 모델 개발을 하기위해 GLACE LLMs는 ChatGPT나 HyperCLOVA X 보다 작은 12.8B로 결정했습니다. GLACE 전용 LLMs는 PlaceLM으로 명명했습니다.

보통 LLMs를 개발하는 단계를 보면 아래 3가지 단계를 거치는데요. 요리를 하는것에 빗대어 각 단계를 표현해봤습니다.

Pretrained Language Model

  • 좋은 육수로 음식을 만들면 기본 이상의 맛이 나오듯, 대량의 corpus로 general한 지식을 학습하는 단계입니다.

Supervised Fine-Tuning

  • 선별된 유기농 재료로 음식을 만들면 고급스런 음식이 됩니다, PLM 단계보다는 적은양의 선별된 corpus를 사용하여 모델이 생성하는 text에 대한 가이드를 주는 단계입니다.

Preference Optimization

  • 마지막으로 조미료를 넣어 감칠맛까지 완성하듯, Human Preference를 모델에 반영하여 이상한 text를 생성하지 않게 하는 마지막 단계입니다.

Evaluation Task 선정

모델 학습이 잘 되었는지 확인을 하기위해 아래 Task들을 선정했습니다.

Public Task

  • 저희 팀에서 운영하는 모델들은 Multiclass Classification, Sequence Labeling, Summarization Task 이므로 아래 2개의 task에서 성능이 좋게 나오는게 중요하다고 판단했습니다.
  • NSMC(네이버 영화 리뷰 긍정, 부정 판별)
  • KorQuAD(한국어 QA Benchmark)

GPT4 기반 Evaluation

  • 모델의 General한 생성능력을 판단하기 위해 아래 Evaluation을 추가했습니다.
  • G-EVAL: NLG Evaluation using GPT-4 with Better Human Alignment (Liu, Yang, et al. 2023) 방식을 활용하여 GPT-4에게 모델 생성 성능을 전반적으로 평가

내부 Task Evaluation

  • GLACE 서비스에서 PlaceLM으로 해결하려는 여러 Task들이 있습니다, 해당 문제를 GPT4와 유사한 수준으로 생성 성능이 나오는지 비교하기 위해 해당 Evaluation Task를 추가했습니다.
  • 내부 Task들을 Prompt로 만든 후, GPT4와 PlaceLM의 생성 결과가 유사한지 rouge score로 비교

Pretrained Language Model

Dataset

NAVER 내부 데이터 위주로 학습을 진행하였으며, 학습데이터 정보입니다.

  • 총 토큰 수 : 71.23B
  • 학습데이터 상세 비율

Train

A100/V100 GPU 100장으로 학습 진행했으며, 1 epoch에 14일 소요되었습니다.

총 2 epoch 학습 진행했습니다.

Supervised Fine-tuning

Dataset

플레이스에서 해결하기 원하는 Task들을 Instruction으로 구성하여 High Quality 학습데이터를 구축했습니다.

  • 총 문서 수 : 622,426
  • 학습데이터 상세 비율

Train

Parameter Efficient Fine-Tuning 방식 중 하나인 LoRA와 QLoRA를 활용하여 학습을 진행했습니다.

A100 8장으로 학습했으며, 학습 완료까지 2일이 소요되었습니다.

Preference Optimization

Preference Optimization 학습은 현재 진행 중이며, 학습데이터 구축까지 완료하였습니다.

Dataset

풀고자 하는 instruction을 내부 모델의 답변을 여러개 생성한 후, chosen과 rejected로 분리하여 구성했습니다.

NAVER 내부 데이터 위주로 학습을 진행하였으며, 학습데이터 정보입니다.

  • 총 문서 수 : 31,523
  • 학습데이터 상세 비율

Evaluation

Public Task Evaluation

PlaceLM PLM은 공개된 한국어 LLMs 중 최고 성능, 일부 SFT 모델들 보다도 좋은 성능을 달성했고, SFT 모델은 비교군 모델 중 최고 성능을 달성했습니다.

GPT-4 기반 Evaluation

한국에 공개된 LLMs 중에는 Kullm 성능이 해당 benchmark에서 가장 좋은 성능을 내고 있습니다, 다만 해당 Evaluation의 테스트 지시문은 PlaceLM 학습데이터에 없는 general한 내용이 대부분임에도 불구하고 성능이 Kullm과 비슷합니다. 결론적으로는 Kullm과 비교하여 nsmc, korquad와 같은 public task에서는 저희 모델의 성능이 매우 높고, GPT-4 기반의 Evaluation에서는 비슷한 성능을 보여주고 있습니다.

내부 Task Evaluation

상세한 Task를 공유드리긴 어렵지만, 내부 Task들중 가장 높은 Rouge-L score는 0.823이며, 높은 비율로 PlaceLM은 GPT-4와 비슷한 답변을 생성합니다.

다음 계획

저희는 PlaceLM에 일본어 데이터를 추가하여 한국과 일본의 다양한 문제를 해결할 계획입니다. 또한, PlaceLM을 Language Encoder로 활용하여 Vision Language Model로 확장시키기 위해 노력하고 있습니다. 이 모델을 활용하여 저희 팀에서 운영하고 있는 NLP 및 CV 모델들을 대체하거나 더 풍부한 TAG를 추출하는데 활용할 예정입니다.

서비스 AI Product 운영 시 중요하게 생각하는 부분

학습 데이터 버전 관리

모델의 수가 증가함에 따라 모델별 학습데이터의 버전 관리가 어려워졌습니다. 이러한 문제로 학습데이터의 재사용성과 이력관리가 중요해져, DVC(Data Version Control)를 도입하여 학습데이터 버전 관리 시스템을 구축했습니다. DVC는 실제 바이너리 데이터를 별도의 스토리지에 저장하고, 버전 관리는 Git을 활용하여 합니다. DVC를 활용하면 데이터와 모델의 관리가 더욱 편리해지며, 데이터의 변화에 따라 모델의 성능 변화를 추적하고 관리할 수 있습니다. 또한, 여러 모델이나 팀원들과의 협업이 원활해지고, 학습데이터의 버전 이력을 쉽게 복원할 수 있습니다. 이를 통해 프로젝트의 효율성과 안정성을 향상시키고, 모델 개발과 관리 과정에서 생산성을 극대화할 수 있습니다.

학습과 서빙 사이를 연결

서비스에서 VOC(Voice of the Customer)가 들어오면, 때로는 배포된 모델의 학습 output artifact까지 확인해야 대응이 가능한 경우가 있습니다. MLFlow tracking과 model registry를 사용하면 모델의 버전 관리와 실험 데이터를 효율적으로 추적할 수 있으며, 이를 통해 문제 발생 시 빠르게 대응할 수 있습니다. 또한, 모델의 학습과정을 정확하게 재현하고 결과를 확인할 수 있어 모델의 성능 향상과 개선에 도움이 됩니다.

Model degrade

서비스는 사용자의 패턴이 실시간으로 변하는 살아있는 생물과도 같습니다. 학습된 모델의 성능은 시간이 지남에 따라 저하될 수 있습니다. 이를 방지하기 위해 저희는 유저보다 먼저 모델 성능의 저하를 파악하기 위해 모델 결과를 통계화하고, 매일 모델을 모니터링하고 있습니다. 모델 결과 분포가 일정 threshold 이상으로 변화하면, 최신 데이터를 사용하여 모델을 재학습한 후 배포를 진행하고 있습니다.

아래는 OCR Place Matching 모델 분포 그래프 예시입니다.

한정된 GPU 자원

저희는 고비용의 GPU 자원 idle time을 최소화 하기 위해 학습, 서빙 환경 각각에서 효율적으로 운영하기 위해 여러 장치를 두고 있습니다.

학습

학습 환경에서는 GPU 자원들을 RAY를 이용하여 학습 cluster를 구축했습니다.

특정 인원이 GPU 자원을 점유하지 못하고, 학습이 수행될때만 GPU 자원이 활용되게 함으로써 idle time을 최소화하고 있습니다.

서빙

GPU가 아닌 CPU에서 모델 서빙을 진행하기 위해 다양한 작업을 진행합니다.

  • 개발된 모델을 Quantization, Knowledge Distillation을 통해 성능은 비슷하게 유지하면서 경량화 진행
  • cpu에서 neural network inference를 최적화 하기 위한 여러가지 튜닝 진행

개발된 모델은 위와 같은 과정을 적용하고 production에 배포를 진행하며, 저희 팀에서 운영되는 모델의 50% 이상은 CPU로 서빙하고 있습니다. CPU 서빙이 어려운 모델은 HPA를 적용하여 최소한의 replica만 유지하고 있습니다.

모델 성능 기반 테스트 강화 및 무중단 배포

저희 팀에서는 성능 유지를 위해 매일 학습하여 배포하는 모델도 있습니다. 이러한 배포 과정에서 발생하는 장애가 서비스 전체에 영향을 미치는 것을 방지하기 위해 안정적인 무중단 자동 배포를 구축하였습니다. 이를 위해 Argo Rollouts의 PrePromotionAnalysis를 활용하여 배포가 진행되기 전에 테스트가 통과되어야만 배포가 진행되도록 설정하였습니다. 이로써 문제가 없는 상태에서만 배포를 진행하여 서비스 장애를 최소화할 수 있습니다. 또한, 배포가 완료되면 PostPromotionAnalysis를 활용하여 배포된 모델의 성능을 측정하고, 이를 메신저로 보내도록 설정하였습니다. 이로 인해 메신저를 통해 배포가 성공적으로 이루어졌는지와 성능의 변경사항을 쉽게 파악할 수 있습니다. 이를 통해 배포 관련 정보를 빠르게 확인하고 문제 발생 시 신속하게 대응할 수 있습니다.

지금까지 NAVER GLACE AI 개발 팀에 대해 간략하게 소개드렸습니다.

AI 분야는 다른 도메인과 비슷하게 빠르게 변화하는 트렌드를 보여주고 있습니다. 저희 팀은 이러한 빠른 트렌드에 맞춰서 연구 방향을 잡아가며, 서비스에 도움이 되는 AI Product를 개발하고 있습니다.

글로벌 O2O 서비스에 도움이 되는 AI Product를 만들고 싶어하는 분들을 기다리고 있습니다. 많은 연락과 관심 바랍니다! 😃

참고자료

https://arxiv.org/abs/2204.14198

https://huggingface.co/blog/rlhf

https://arxiv.org/abs/2202.13959

https://arxiv.org/abs/2303.16634

--

--