본문 바로가기
개발일지

scikit-learn 사이킷런 공식 문서 한글 번역 프로젝트 / 사이킷런 repository contribution 후기

by pandatta 2022. 12. 24.

안녕하세요, 오늘은 사이킷런(scikit-learn) 공식 문서 한글 번역 프로젝트를 진행하며, 사이킷런 공식 github repository에 contribution한 후기를 들려드릴까 합니다.

데이터쪽 개발자의 토이 프로젝트는 질리기 쉽다

머신러닝/딥러닝을 연구하는 데이터 엔지니어/분석가/사이언티스트는 짬날 때 뭘 할까요? 물론 놀고 싶지만, 참된 개발자는 노는 시간에도 코딩을 하며 놀아야 한다는 가스라이팅이 업계 전반에 퍼져 있습니다...ㅋㅋㅋ 아마도 개발자가 여러 직군 중 여가 시간에도 업무 관련된 무언가를 하는 비율이 가장 높은 직종이긴 할 겁니다. 실제로도 그걸 즐기는 사람들이 개발 업계에 많이 뛰어들기도 하구요.

stack overflow, API docs, code review, stack overflow, API docs, ...

데이터 엔지니어나 머신러닝 엔지니어는 백엔드 출신 분들이 많으니까 당연히 개발을 즐기실 거고(?), 데이터 분석가/사이언티스트는 대학원에서 석/박사를 하고 오시는 분들이 많으니 개발은 몰라도 최소한 공부나 논문 읽기를 여가 시간에 꾸준히 하시는 분들이 많습니다. 저처럼 하고(X) 하다(O) 온 사람도 뭐 다르지 않습니다. 공부는 평생 하는거라 생각하는게 개발 업계에서 가늘고 길게 가는 법이라고들 하고, 워낙 트렌드가 빨리 바뀌는 업종이다 보니 그러려니 하고 살고 있습니다. 조금 재밌기도 하구요.

하지만 이런 것들이 쉽게 포트폴리오로 바뀌진 않습니다. 일단 독서나 수학 공부, 논문 읽기는 포트폴리오가 되지 않고, 토이 프로젝트는 데이터쪽 사람들에겐 조금 애매합니다. 캐글 문제처럼 아주 짧은, 1천 줄 안쪽의 notebook을 짜게 되기 때문에, "실험"을 하는 느낌이지 "프로그래밍"을 하는 느낌은 들지도 않고, 여러 문제를 풀어봐도 결국 다 비슷한 논리 흐름으로 모델을 짜니까 쉽게 질리게 되죠. 다시 말해 데이터 분석은 너무 "나만의 포트폴리오"를 만들기 어렵습니다. 모델이 핵심이긴 하니까 또 전처리 과정만 싹 다 모아놓을 수도 없구요. 좀 큰 프로젝트를 하자니, 집에 그만큼 장비가 없죠. GPU가 가득 딸린 서버를 어디서 구하죠? 회사 서버를 축낼수도 없고, 클라우드를 쓰자니 돈이 너무 많이 깨지고...ㅋㅋㅋ

오픈 소스 문서 한글 번역으로 세 마리 토끼 잡기

한편, Microsoft GitHub의 open source repositories 덕분에 개발자들이 조금 더, 아니 엄청 살기 좋은 세상이 되었습니다. 남들이 개발해놓은 코드를 공짜로 가져다 쓸 수 있다니! 하지만 써먹기만 하는 사람만 있다면 오픈 소스는 유지가 되지 않겠죠, 저도 언젠가 오픈 소스에 기여(contribution, 컨트리뷰션)해봐야겠다는 마음을 먹고 있었습니다. 마침 할 토이 프로젝트도 마땅찮고, 제가 평생 혼자 개발 공부하면서 늘 한글 자료 부족에 슬픔을 느꼈기 때문에, 오픈 소스 데이터 소스 문서를 한글 번역해보면서, 포트폴리오도 만들고, 공부도 하면서, 세상에 기여도 해보기로 했습니다. 그럼 어떤 오픈 소스를 번역해보기로 했을까요?

  1. 일단 모든 데이터 분석가/사이언티스트에게 익숙한 repository(레포지토리)를 모두 모아봤습니다.
    1. 수학: NumPy, SciPy, statsmodels, ...
    2. 데이터: pandas, SQLite, Postgresql, ...
    3. 머신러닝/딥러닝: scikit-learn, Tensorflow, Keras, PyTorch, ...
    4. 시각화: matplotlib, seaborn, bokeh, ...
  2. 이 중에서 이미 한글 번역이 있거나, 기업 주도의 프로젝트를 제외합니다.
  3. (중요) 남은 것들 중에, 공식 문서를 번역하고 싶게 생긴 것들을 고릅니다. 유익하거나, 잘 문서화되어있거나, ...

해서 세 가지를 골랐습니다.

엄청 자세한 scikit-learn 공식 문서. 시중 머신러닝 교과서보다 훨씬 낫다.

  1. scikit-learn(사이킷런): 최대의 머신러닝 라이브러리. 튜토리얼뿐만 아니라 유저 가이드까지 있는데, 머신러닝 알고리즘을 소개해주기까지 합니다. 어지간한 머신러닝 책보다 낫습니다. Related projects 페이지에, 비공식으로 마구 번역해도 된다고 적혀져 있어서, 제일 처음 번역을 시작했습니다.
  2. pandas(판다스): 자료 구조 및 데이터 분석 라이브러리. 이 라이브러리가 없었다면 우리는 numpy array와 matrix를 모두 머릿속에 상상하며 코딩해야했겠죠. 튜토리얼이 은근 탄탄하고, 데이터 전처리에 대한 전반적인 지식이 잘 녹아있습니다.
  3. seaborn(씨본): 시각화 라이브러리. matplotlib이 가장 바닥에 있는 시각화 라이브러리지만, seaborn을 쓸 줄 알면 논문 퀄리티의 피겨를 뽑아낼 수 있습니다. 딱히 훌륭한 지식이 튜토리얼에 녹아있진 않지만, 세상에 이 좋은 라이브러리를 아는 사람이 생각보다 많지 않더라구요, 아쉬워서 번역하기로 했습니다.

그 외에 NumPy랑 SciPy, matplotlib 번역도 해보고싶긴 했지만, numpy는 제가 아는 수준을 넘는 선형대수학 지식과 C 최적화 지식이 필요하고, scipy는 공학과 물리를 넘나드는 도메인 지식이 필요했으며, matplotlib은 사실 seaborn을 쓰기 위한 용도로만 써서... 제외했습니다.

번역 시작과 GitHub pages 만들기, Google search console 등록 등

배포한 scikit-learn-korean, 사이킷런 문서 한국어 번역 페이지.

scikit-learn 번역을 어느정도 하면, scikit-learn related projects 페이지에 제가 번역한 페이지를 링크하면서 scikit-learn repository contribution을 할 수 있는 영광이 주어질 것 같더라구요. 그래서 재빠르게 번역을 시작했습니다.

  1. GitHub repository를 scikit-learn-korean 처럼 만들고, repository 설정에서 repository의 docs 폴더를 정적 페이지로 렌더링해주는 공짜 서비스, 즉 GitHub pages를 등록했습니다. MS 만세!
  2. GitHub pages theme 중 Cayman 테마를 골라서 적용하고, GitHub pages 렌더링 기본값인 jekyll 문서를 읽으면서 몇 가지 세팅을 해주었습니다.
  3. Google search console에 접속해서 구글에서 해당 페이지를 검색할 수 있게 세팅해주고, sitemap.xml과 robots.txt를 추가해서 구글 검색 알고리즘이 제 페이지를 모두 긁어갈 수 있도록 해주었습니다. 여기를 많이 참조했습니다.
  4. 설치와 튜토리얼, 유저 가이드 등 유익해보이는 페이지들을 추려서 번역했습니다. API 문서는 너무 많아서 번역할 엄두가 안나더라구요, 유저 가이드만 해도 교과서 한 편 뚝딱이라...

뭔가 한게 많아보이지만, 사실 별로 한 건 없습니다. 시간이 오래 걸리는 부분은 무엇보다도 번역입니다. 최대한 원문의 의미와 느낌을 살리면서, 또 이해가 잘 되게끔 노력하는... 아예 다 갈아엎으면서 번역하고 싶은 마음을 참으면서, 최대한 문장 구조를 유지하면서 번역했습니다. 또 컴퓨터공학이나 머신러닝 전문 용어는 영어가 한글보다 익숙한 것들이 꽤 있기 때문에, 최대한 한글을 사용하되 한글 뜻이 너무 어색하면 또 모든 문서에서 그 단어를 영어로 교체... 번역 참어렵더라구요. 아무튼 너무 재밌는 작업이었습니다. 적성에 꽤 맞는 것 같아 정식 번역 제안이 들어오면 꼭 해야겠단 생각이 들 정도로...

Scikit-learn GitHub repository contribution

scikit-learn pull request approval. "Looks like an easy yes to me."

부끄럽지 않은 최소한의 scikit-learn 번역을 마치고 나서 scikit-learn repository에 pull request를 만들었습니다. 앞서 related projects pages에 각자 모국어(Persian, Spanish, and Chinese)로 번역을 한 페이지를 올려둔 몇 가지 pull request를 찾아서, 특별히 큰 걱정 없이 내 페이지를 링크해서 pull request 날리면 된다는 것을 확인했습니다.

손을 덜덜 떨면서, "설마 pull request reject되진 않겠지?" 하면서 생애 처음 global github repository에 pull request를 날렸습니다. review에 시간이 조금 걸리긴 했는데, LGTM(Looks good to me)를 추가적인 수정 없이 일주일 정도만에 받을 수 있었습니다. 리뷰어들 분명 본업이 따로 있을텐데, 남는 시간에 scikit-learn 개발도 하려면 힘들겠다 싶으면서도, "아 내거 한줄만 바뀌는건데 금방 해주면 안되나" 하는 못된 생각도 들고...ㅋㅋㅋ

암튼 제 pull request는 승인됐고, scikit-learn official repository에 제가 쓴 docs code 한 줄이 들어가게 되었습니다! 내년에 release되는 새 버전 문서에 제가 번역한 scikit-learn docs의 링크가 scikit-learn Korean translation page 들어가겠네요. 세상에 기여하고싶다는 제 여러 희망사항 중에 개발자는 조금 멀리 와버린 것 같았는데, 한 줄 뿐이지만 이렇게 또 특별한 방식으로 연말에 제 소원 중 하나를 이루게 되었네요.

아직도 할 건 많습니다. scikit-learn 번역도 아직 유저 가이드랑 예제는 손도 못댔고, 최소 1년은 이것만 하게 생겼습니다. 하나만 하니 질려서 seaborn-korean과 pandas-korean도 만들었는데, 이것도 각각 몇 달은 걸릴 예정입니다. 이 셋 말고도 또 번역하고싶은 것들이 생길 수도 있죠. 솔직히 seaborn-korean과 pandas-korean은 시작은 하겠지만 자신은 없습니다만... 이 글을 읽으시는 분들 중에서도, 저의 오픈 소스 번역 여정에 동참해주실 분이 있으면 다 끝낼 수도 있을겁니다. 꽤 재밌습니다, 유익합니다. 같이 번역해보아요...

댓글