2편이 너무 늦은 점 죄송합니다. 한때 파워블로거가 꿈이었는데 이정도 업데이트 속도라면 빠르게 꿈을 접길 잘했네요. 2편에서는 Top 50 세미 파이널 진출 이후부터 Top 10 결과 발표까지의 이야기를 다룹니다. 솔루션 챌린지가 무슨 대회인지 궁금하신 분들은 아래 '더보기' 클릭 고고
🤨 잠깐, Solution Challenge가 무엇인가요?
솔루션 챌린지는 GDSC 소속 학생 한 명을 포함한 대학생 팀이 구글의 기술이나 플랫폼을 하나 이상 사용하여 지역 사회의 문제를 해결하는 솔루션을 만드는 대회다. GDSC의 가장 큰 연례 행사이며, 많은 GDSC에서 솔루션 챌린지 출품을 목표로 해커톤이나 아이디어톤, 디자인 데이 등의 다양한 행사를 기획한다. 올해의 주제는 작년과 동일하게 UN이 지정한 17가지 지속가능발전목표(SDGs) 중 하나 이상을 해결하는 것이었다.
2020년 가을부터 2021년 여름까지 활동했었던 GDSC Sookmyung 1기에서는 Top 50에 2팀이 진출하여 Top 50에 진출한 한국 팀 3팀 중 당당히 두 자리를 차지했으며, 21-22 GDSC Sookmyung 2기는 4팀이나 진출했다.
06. 구글러와의 멘토링
Top 50에 진출한 모든 팀들은 구글 엔지니어 혹은 구글이 인증한 외부 전문가에게 일정 횟수 멘토링을 받을 수 있다. 멘토링은 1회 1시간가량 진행하며 개선하고 싶은 부분에 따라 멘토링을 받을 멘토를 직접 선택할 수 있다. 정확히 기억은 나지 않지만 멘토의 전문 분야는 기술/기획과 운영/유저 경험 이렇게 나누어져 있었고, 각 분야별로 세부분야가 있었다. Android, Flutter, GCP, Firebase 등의 구글 기술을 담당하는 멘토는 기본이고, 머신러닝, 성능 최적화, 보안, 마케팅, UX/UI, 프로덕트 디자인, 브랜딩 등의 분야도 있었다. 피드백을 원하는 분야를 모두 선택하면 선택한 분야의 멘토가 리스트업되며, 리스트에 있는 멘토 중 선택해야 한다. 멘토의 이력과 링크드인이나 SNS 링크가 같이 제공되며, 우리의 고민을 잘 해결해주실만한 분께 멘토링을 요청하면 된다. (리드 지원서 냈던 그 사이트 맞다.) 대부분 외국인이며, 한국인 멘토는 가뭄에 콩 나듯 발견할 수 있다. 그 말은 곧 멘토링을 영어로 진행할 확률이 굉장히 높다는 것..
정말 감사하게도, 구글 코리아 측에서 배려해주신 덕분에 21-22 GDSC Korea 소속 Top 50 진출 팀은 한국인 멘토에게 멘토링을 받을 수 있었다. 우리 팀은 한국인 머신러닝 전문가 분과 UX/UI 전문가 분에게 각각 2회씩 멘토링을 요청했다. 멘토링을 통해 개선하고 싶은 부분은 다음과 같았다:
UX/UI
- 앱을 본격적으로 시작하기 전에 앱 관련 설명을 슬라이드 형식으로 보여주고, <Start NotiNote>라는 버튼을 누르면 구글 SignIn을 하고, NotiNote에 가입한 적 없는 사용자라면 회원가입 폼을, 이미 가입한 사용자라면 홈 화면을 보여주는 플로우가 있습니다. 앱 관련 설명과 회원가입 또는 로그인 사이의 플로우를 조금 더 매끄럽게 하고 싶은데 어떤 방안이 있을까요?
- 홈 화면(사용자 이름과, 아이 별 일정, Translate 버튼과 Search 버튼이 있는 화면입니다)의 구성을 더 효과적으로 할 수 있는 방법이 있을까요?
- 우리의 핵심 기술인 Translate -> Event Extraction 과정을 좀 더 멋지게 강조하고 싶은데, 몇가지 팁을 알려주실 수 있나요?
- 폰트 크기나 색상 선택이 괜찮은가요?
- 검색 화면을 개편하고 싶어요. 날짜별 검색/키워드별 검색/아이별 검색이 보기 나쁜 모습으로 혼재되어 있는데 유저가 좀 더 검색하기 편하게 하려면 어떻게 해야 할까요?
Machine Learning
- 제일 중요한 기능인 텍스트에서 학교 행사와 진행 일시를 추출하는 알고리즘을 머신 러닝 모델로 대체하고 싶은데, 제일 쓸만할 거라고 생각했던 GCP에서 제공하는 엔티티 추출은 한국 학교의 행사들(현장체험학습, 우유급식, 교내대회 등)을 이벤트로 인식하지 않고, 오히려 행사가 아닌 것들(점심, 코로나 등)을 이벤트로 인식하고 있어요. 이런 상황에 쓸만한 모델을 추천해주실 수 있나요?
- 엔티티 추출 대신 QA 태스크를 사용한 방법을 생각해봤는데, 이 방법에 대한 피드백을 듣고 싶습니다.
여기서 말하는 QA 태스크를 사용한 방법에 대해 설명하자면, 딕셔너리에 들어있는 학교 행사 단어 중 입력값(가정통신문 텍스트)에 포함된 단어가 있는지 확인하고, 딕셔너리에 포함된 단어가 있다면 '{event}는 언제인가요?'라는 질문에 끼워넣어 가정통신문이 context로 제공된 언어 모델에 질문하고, 그 답(아마도 날짜)을 사용하는 것이다. 이런 아이디어를 생각만 해놓고 멘토링 전까지 실행에 옮기지 않았던 이유는 마치 수세미 대신 수건으로 설거지하는 느낌이라고 해야 할까? 잘 닦이긴 하는데 이게 맞는건가 싶은 그런 느낌이 들었기 때문이다. 어쨌든, 이 아이디어가 서비스에 결국 사용이 되었는지, 되지 못했는지는 글을 마저 읽으면서 차차 확인해 보도록 하자.
본격적인 멘토링 시작
멘토링을 통해 기대했던 것 이상으로 많은 것을 배웠다. 궁금했던 점들은 모두 해결했으며 원래 필요했던 정보 이상으로 많은 것들을 알려주셨다. 특히 UX/UI 멘토링을 담당해주신 호영님께서 정말 친절하게 화면 하나하나 짚어가며 개선점을 알려주신 것이 크게 도움이 되었다. 시차 때문에 아침 8시에 일어나서 멘토링 받는 중 휴먼졸림체로 UX 꿀팁 이것저것 기록해놓은 나 자신이 참 자랑스러울 정도다. ML 맡아주신 멘토분도 말해뭐해.. 그저 감사할 뿐이다.
클라이언트 작업을 하면서 '설마 이런 것까지 생각해야 할까?'싶은 생각이 들어 넘어갔던 부분에 대한 피드백도 있었고, 사용자 데이터에 기반한 엘레먼트 위치 수정 등 현업에 오래 있어야 알 수 있는 정보들도 알려주셨다. UX 라이팅과 관련해서도 많은 조언을 받았고(부끄럽게도 워딩과 관련해서는 멘토링 전까지 정말 한 번도 깊게 생각해본 적이 없었다), 질문드렸던 부분들에 대해 주신 답변들도 정말 좋았다.
07. 멘토링 후 개선
Machine Learning
ML 멘토링에서 나온 이야기를 요약해보자면 다음과 같다:
- QA 태스크를 이용한 방법은 좋아 보인다! (와우)
- 가정통신문 사진을 넣으면 OCR을 거쳐 텍스트를 뽑고, 뽑은 텍스트를 번역하고, 번역한 텍스트에서 이벤트와 날짜를 추출하는 과정을 하나의 파이프라인으로 만들어 테스트를 여러 번 돌리고, QA 태스크에 사용할 모델을 선택해 보라.
- 영어로도 해보고 한국어로 해본 다음 정확도를 비교해 보고, 질문도 어투를 바꿔가면서 여러 개 준비해 보라. 그리고 아마 영어가 더 점수가 높게 나올 것이니 영어로 번역된 가정통신문을 context로 넣어봐라.
멘토링이 끝난 후 바로 HuggingFace에서 쓸만한 언어 모델을 찾기 시작했다. 가장 많이 다운로드한 순으로 5개 정도 성능 평가를 해봤고, 스프레드시트에 정리했다.
성능 평가 후 최종적으로 가장 좋은 퍼포먼스를 보인 deepset/bert-large-uncased-whole-word-masking-squad2 모델을 사용하기로 했다. 다만.. 원래 계획대로라면 이 모델을 베이스 모델로 삼아 가정통신문 몇백개를 추가로 학습시키려고 데이터를 모아놨는데, M1 맥북에는 텐서플로우가 깔리지 않더라. 파이토치로 돌리기에는 구글 기술을 사용해야 하는 대회 취지에 맞지 않는다고 생각했고(이미 플러터 대신 리액트 네이티브를 쓰긴 함), 시간도 부족한데다가 이미 베이스 모델만으로도 테스트로 넣은 열몇 개의 가정통신문들에 대해 모두 올바르게 시간을 뽑아내고 있어서 추가 학습 없이 모델을 huggingface accelerate inference에 올려 사용했다.
ML 쪽 처리 과정을 표현해보자면 위와 같다. 딕셔너리 없이 모델을 돌리고 싶었기에 행사가 맞지만 딕셔너리에 없는 경우(학교 축제 이름이 고유명사거나, 딕셔너리에 충분한 데이터가 부족하단 이유로)를 고려해 Event Extraction 단계를 빼고 바로 가정통신문 텍스트를 context로 모델에 넘겨 '이 글의 핵심 행사는 무엇인가요?' 등의 질문을 해 답변으로 받은 행사에 대해서 다시 날짜를 물어보는 식의 방법도 생각을 했었으나, 이렇게 하는 경우 여러 개의 행사가 가정통신문 내에 있음에도 하나의 행사밖에 답변을 못하는 문제가 있었다. 그래서 결국 이벤트 딕셔너리는 포기하지 못했다.
사실 우리가 따로 추가학습을 시켰다면 멘토링을 통해서 좀 더 많은 도움을 받을 수 있었을텐데, 그러지 못해서 아쉽다.
UX/UI
홈 화면 스크린샷을 통해 어떤 변화가 있었는지 살펴보자.
우리 앱의 핵심 기능부터 상단에 두고, 기능에 대한 설명 대신 아이콘으로 간단하게 표시하는 정도로 정보를 제공하면 좋겠다는 피드백을 받아 전체적인 UI의 구성과 배치를 엎었다. 자잘하게는 'Today's events'라는 딱딱한 말 대신 사용자에게 대화를 거는 것처럼 오늘의 행사 수를 타이틀로 하면 좋겠다, 로그아웃은 가능하면 하지 말아줬으면 하니 로그아웃으로 가는 단계를 한 단계 늘려라 등등의 피드백을 받았다. 그리고 아무래도 아이가 있는 학부모를 타겟으로 하는 앱이니 학부모 본인의 프로필보다는 본인 아이들의 프로필을 설정할 수 있도록 하는 게 더 중요할 것 같다고도 하셨다. 세상은 0 아니면 1이라고 생각하는 공대생 4명이서는 도저히 생각해낼 수 없을 것 같은 그런 아이디어와 조언이었다. 이런 디테일을 하나하나 챙기면서 개발을 하니 개발할 맛이 좀 났다. 한창 멘토링받을 때 UX병 걸려서 혼자 '이건 이래서 여기애 배치해야해!' '저건 저래서 저 색이어야해!' 이러고 놀았다.
다음으로 검색 화면을 보자. 검색 화면에서는 뒤로 가는 버튼 이름을 NotiNote에서 Home이나 Back 등의 직관적인 이름으로 바꾸라는 조언을 받았으며, 검색 결과를 굳이 눌러서 볼 필요 없이 그냥 펼쳐서 보여주면 좋겠다는 피드백이 있었다. 멘토님께 받은 피드백 외에 우리끼리 얘기해서 고친 부분도 있는데, 예전에는 날짜별로 묶은 다음, 특정 날짜를 누르면 [아이 이름]-[행사 이름]의 형태로 보여줬는데, 아이별로 필터링이 가능하도록 했고, 분리되어 있었던 날짜 검색과 텍스트 검색을 하나의 엘레먼트로 합쳤다.
이 이외의 변경사항은 1차 제출 데모 영상과 세미파이널 데모 영상을 비교해보면 확인해보실 수 있다.
이렇게 해서... 세미파이널 준비를 모두 끝내고 새로운 데모 영상과 레포지토리 주소를 제출했다.
마무리: 이런저런 생각들
결과적으로 Top 10 파이널리스트로 선정되지는 못했으나, 사실 애초에 기대도 안했다. 그리고 숙대에서 Top 10 한 팀 나왔으니 됐다. ^_^ Top 50에 선정된 것에 대해서는 말할 것도 없이 뿌듯하며, 좀 더 나이가 들어도 생각날 만큼 의미있는 경험이었다. 특히 UX/UI 멘토링은 내가 앞으로 프로젝트를 기획하고 디자인하고 개발하는 모든 과정에 영향을 줄 만큼 좋았다. UI를 보는 새로운 시각이 생긴 것 같은 느낌이다. 이제 정말 배포만 하면 더할 나위 없겠다.
지금 배포 준비를 하고 있긴 한데 뭐 어떻게 될 지 모르겠다. 배포에 성공한다면 3편으로 돌아오겠다. 안녕~.~
'끄적' 카테고리의 다른 글
2022 간단 회고 (0) | 2023.01.02 |
---|---|
친구 중 하나가 구글 유튜브에 나온다고 생각한 적이 있습니까?? - 구글이랑 인터뷰한 짧은 썰 (1) | 2022.10.29 |
NotiNote의 2022 Solution Challenge Global Top 50 진출기 - (1) (3) | 2022.06.26 |
2022년 1월 회고 (4) | 2022.01.30 |
2021년 연말정산 (0) | 2021.12.29 |