정밀한 개인 맞춤 식품을 찾아가는 기술자의 도구들
EDITOR'S NOTE
기술의 사전적 의미는 '어떤 원리나 지식을 자연적 대상에 적용하여 인간 생활에 유용하도록 만드는 구체적이고 실제적인 수단'이라는 뜻을 담고 있는데요.
디이프는 인간에게 내재되어 있는 유전자 정보들을 기반으로 개인의 유전자 타입에 맞는 대사체 및 식품을 추천하는 기술을 개발하고 있어요!
오늘은 디이프의 심재영 실장님이 정밀한 개인 맞춤 식품을 찾아가는 디이프의 기술자의 도구들에 대해 알려드릴게요~!
디이프는 ‘데이터 식품’ 선도기업입니다. 식품 시장과 헬스케어 업계에서 무엇이 맞춤 서비스인지? 어떻게 이 서비스를 개발하고 제공해야 하는지에 대한 고민을 10년 전부터 해오던 사람들이 모인 회사입니다. 그동안 연구 개발한 맞춤 식품 추천 기술을 다양한 형태로 고객들에게 제공하고 있습니다.
디이프의 기술 개발 조직은 크게 데이터 분석팀과 서비스 개발팀으로 구성되어 있습니다. 데이터 분석팀은 디이프의 핵심 콘텐츠와 추천 알고리즘을 고도화하는 일을 하고, 서비스 개발팀은 추천 알고리즘을 안정적이고 효율적으로 공급하는 일과 고객들이 좀 더 친숙하게 이용할 수 있는 서비스를 만드는 일을 하고 있습니다. 오늘은 데이터 분석팀에서 주로 사용하는 기술 스택에 대해 이야기해 보고자 합니다.
디이프에서 가장 기본이 되는 개발 언어는 Python인데요,
Python은 생물정보학 분야에서 R, Perl과 함께 가장 널리 활용되는 언어입니다.
Python은 데이터 분석뿐만 아니라 웹 애플리케이션 개발에도 널리 활용되기 때문에 데이터 분석팀과 서비스 개발팀이 같은 언어를 사용할 수 있게 되었습니다.
같은 언어의 사용은 두 팀이 소통하고 협업하는 데 큰 도움이 됩니다.
상대적으로 코딩 스킬과 컴퓨터 백그라운드가 부족한 데이터 분석팀의 이슈들을 개발팀에서 해결해 주기도 하고, 데이터에 대한 이해와 효과적인 정보 전달을 고민하는 개발팀에게 데이터 분석팀이 다양한 인사이트를 제공해 주기도 합니다.
서로가 부재 시 간단한 업무는 서로 지원도 가능하다는 점 등, 같은 개발 언어를 쓴다는 점은 많은 장점이 있는 것 같습니다.
데이터 분석팀은 맞춤 식품 추천을 위한 데이터베이스와 추천 알고리즘을 개발합니다.
먼저 디이프 기술의 가장 핵심이 되는 식품-바이오 복잡계 데이터베이스는 미국국립보건원(NIH) 산하 미국 국립의학도서관(NLM)에서 공개한 바이오 의학 및 생명 공학 분야의 논문 초록 데이터베이스(PubMed)에서 추출합니다. 언뜻 생각하기에 논문의 전체 본문에서 데이터를 추출하면 더 정확하고 많은 데이터를 얻을 수 있을 것으로 생각하지만, 본문에는 도입부(introduction)나 토의(discussion) 부분에 아직 정설로 받아들여지지 않는 문장들도 많으므로 본문을 활용하기보다는 해당 논문의 가장 핵심만 정리된 초록(abstract)을 활용하여 구축합니다.
그뿐만 아니라 USDA, FooDB, 농촌진흥청, 식품의약품안전처 등에 공개된 다양한 식품 데이터를 수집하는데 이때 많은 데이터가 엑셀이나 csv 파일로 제공되기도 하지만 오픈 API로 공개되기 때문에 오픈 API 문서를 잘 읽고 필요한 데이터를 수집할 수 있는 능력이 요구됩니다. 때에 따라 BeautifulSoup이나 Selenium 같은 라이브러리를 활용하여 크롤링하기도 하는데 이때 상대측 서비스 서버에 부하가 가지 않도록, 그리고 과도한 트래픽 사용으로 블록 당하지 않도록 수집 절차를 구현해야 합니다.
수집된 원본 데이터는 양도 많지만, 데이터마다 구조가 다른 비정형 데이터이기 때문에 필요한 데이터를 저장하고 추출하는 일을 효율적으로 하는 방법에 대해 많은 고민이 있었습니다. 비정형 데이터를 잘 분석해서 RDB로 구성할 수도 있고, 그 형상 그대로 NoSQL DB에 넣고 활용하는 것도 가능하며, 파일 단위로 저장하고 각각의 전용 파싱 스크립트를 만드는 것도 가능했지만, 저희는 이 문제를 해결하기 위해 Elasticsearch 엔진을 도입하고 있습니다. Elasticsearch를 활용하면 비정형 데이터의 저장과 검색이 손쉽게 해결되고 함께 제공되는 데이터 시각화 도구인 kibana나 데이터 수집을 위한 logstash 등의 도구들도 손쉽게 적용과 활용이 가능하므로 최근에 도입하여 활용하고 있습니다.
이렇게 수집된 다양한 종류의 식품, 바이오, 의학, 케미컬 등의 데이터는 NLP 기술을 이용하는데, Biomedical 분야에 특화된 BioBERT라는 모델로 각각의 단위 데이터와 연결 정보를 추출한 후 iF Core DB로 구축됩니다.
하지만, 모든 데이터가 NLP로 추출되지는 않습니다. 아직 많은 부분은 AI나 머신러닝으로 처리하기 힘들어 어쩔 수 없이 휴먼러닝으로 구축되는 데이터도 있습니다. 이렇게 추출된 데이터는, 어떤 식품에 들어 있는 영양물질이 어떤 질병 또는 건강 목표에 영향을 주는지, 그리고 그 질병과 관련된 유전자가 무엇이 있는지와 같은 복잡계 데이터가 네트워크 형태로 구성되기 때문에 Neo4j라는 GraphDB를 활용합니다.
Neo4j는 Cypher Query라는 문법을 사용하여 데이터를 핸들링하며, graph 구조 이론의 node, relation, property와 같은 개념에 대한 이해가 필요합니다.
DB에서 추출된 데이터의 통계 분석과 가시화를 위에 Pandas, numpy, matplotlib, scipy, Scikit-learn 등을 주로 활용하며, 기본적인 통계 도구들에 대한 방법뿐만 아니라 새로운 형태의 데이터 분석 결과를 표현하는 방법들을 찾아 적용하기도 합니다. 한 번에 메모리에 올려 처리하기 힘든 데이터의 경우 dask를 활용하여 처리합니다. NLP 모델을 생성하거나 추천 알고리즘을 개발할 때는 TensorFlow, PyTorch를 활용합니다. 한창 채굴 붐이 일어나던 시기에 RTX 2080ti 2개 탑재된 GPU 머신을 운 좋게 장만하여 로컬에서 부담 없이 여러 모델을 생성하고 테스트하기도 합니다.
저희 디이프는 이처럼 핵심 기술을 개발하고 필요한 요소와 기술들을 찾아 살을 덧붙여 나가고 있으며, 식품 헬스케어 분야를 ‘데이터 식품’이라는 기술 브랜드로 이끌어 나가고 있습니다.