brunch

You can make anything
by writing

C.S.Lewis

by 무명 Jun 03. 2020

[추천 서비스] BERT를 이용해 물리현상 추천하기

AWS, Elasticsearch, BERT를 이용한 추천 시스템 설계

[개발 배경 : 전문적인 물리현상을 알고 싶어요~]

- 회사의 검색 서비스는 유저가 풀고자 하는 문제를(자연어 쿼리) 자연이 가지고 있는 아이디어(텍스트, 이미지, 논문, 기타 문서 등등)로 찾아주는 서비스임. 

- 자연모방, 생태모방으로 문제를 해결하는 데 있어서는 다른 전문분야의 지식도 필요한데, 재미있게도 한 분야에 전문성을 지닌 사람들일수록 검색할 때 바이어스에 빠지기 쉽고, 다른 분야의 정보를 받아들이는데, 검색-학습을 하며 정보를 탐색하는데 생각보다 어려워했음. (사용성 테스트, 심층 인터뷰로 관찰한 결과)

- 여러 유즈 케이스 중 하나로, 유저가 찾고자 하는, 혹은 구현하고자 하는 무언가에 적용되는 물리적인 현상을 알려줄 필요가 있었음. 그것으로부터 기능을 연상하거나, 기능으로부터 지금까지 정의된 물리적인 현상을 인식하는 생각의 전환이 필요했음. 


[BERT모델 학습 데이터]

 - 위키, 책 등으로 학습된 모델을 사용


[Elasticsearch 인덱스 설계]

- 벡터 값 생성에 반영한 텍스트는, 위키 정의, 옥스퍼드 사전 정의, 관련 어휘(자체적으로 만든 단어 사전)

- 필드 타입은 dense_vector, dims은 768


[시스템 구성]

AWS와 Elasticsearch로 구현한 BERT 검색엔진 구조

- 대략 이러함. 

- lambda에서 Bert Serving Server와 Elastic Cloud를 핸들링함.


[추천 결과]

- 인상적이었던 것 하나만 공유하자면,

"water hydro pressure increase"라고 개떡같이 입력했을 때 추천된 상위 10개가 아래와 같음

Capillary Pressure

Thermo-capillary Convection

Venturi Effect

Hydrodynamic Cavitation

Capillary Evaporation

Leidenfrost Effect

Mechanocaloric Effect

Viscous Heating

Conic Capillary Effect

Superheating

신기해!!


[퍼포먼스]

- 일단 최저가로 빨리 만들어보자(mvp)라고 접근해서 서빙 서버가 ec2 t2.medium 임..(cpu)

- 그래도 es 검색시간은 50ms 후반대, 임베딩 시간은 300ms.. 가 나옴 

- 서빙 서버 스펙을 올리면 임베딩 시간은 눈에 띄게 개선될 거라고 봄.

- 서비스 프론트에서 api로 호출하면 400~500ms 정도로 나옴


[다음 스텝은?]

- 속도 문제가 있을 때 : 서빙 서버 스펙 올려보기, 임베딩 로직 점검

- 추천 결과가 불만족스러울 때 : 자체 어휘사전, 문서 등을 바탕으로 물리현상 BERT 모델을 따로 만들어본다. sciBERT를 사용하거나 튜닝해본다. 









매거진의 이전글 [교육/강의] 대학 강의 후기
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari