rOpenSci Text Workshop 참석 후기

 

숙소에서 도보로 17분 거리에 위치한 LSE

 

 

LSE의 룸번호가 LG로 시작하는건….. 무엇때문인지는 모르겠다.

 

전 세계에서 24명이 모여서 R에서 텍스트 분석을 어떻게 하면 효과적으로 수행할지 많이 논의가 이어졌고 대략적인 내용은 이곳에서 해당 워크샵을 주최한 교수가 소개하고 있다. 이런 저런 이야기가 오갔고, 내가 주로 설명한 내용은 한글 오타 교정에 대한 hunspell 패키지 개발자가 물어보는 질문에 답하고 설명하는 것으로 첫날을 시작해 둘째날은 한글 색인어 추출에 대한 기능지원을 stringi에 적용 가능성을 타진하는 것을 계기로 이 기능이 ICU에 들어가면 바로 지원해주겠다는 stringi개발자의 제안을 듣고 이런 이슈까지 만들어 팔로업을 하고 있다.  KoNLP의 한글 데이터들을 적절히 사용해 일본어 ICU 토크나이저를 기반으로 간단하게 만들면 어떨까 하는 생각만을 공유하고 워크샵 참석을 마치게 되었다. 그곳 개발자들은 ICU에 한글 토크나이저가 없다는 사실에 매우 놀라는 눈치였는데, 그도 그럴것이 태국문자에 대한 처리 모듈이 있는 상황에 한글 모듈이 단순히 공백을 기준으로 자르는 기능만 있는것은 다소 어이없다는 눈치였다. 물론 단순히 공백을 기준으로 잘라서는 제대로된 분석이 안된다는 부연설명이 필요했지만 말이다.

이 작업은 생각만큼 단순하지 않다. 왜냐면 ICU를 개선하게 되면 이를 사용하는 전 세계의 수많은 텍스트 처리 관련 라이브러리에 영향을 주게 되기 때문이다. 그만큼 신중하게 시간을 투자해서 개발해야 되는 부분이라는 것이며, 개인적으로 그런 시간이 날지는 확신이 서지 않는다. 공공 과제로 띄울 수 있다면 공익적인 측면에서 큰 기여를 할 수 있을 수 있겠다는 생각 정도만 했고, 물론 내년에 초대받을지는 확실하지 않지만 그때 자랑스러운 성과로도 이야기 할 수 있을 거라는 생각도 든다.

개인적으론 kerasR 개발자를 만나본게 좋았는데, 최근 딥러닝에 관심을 가지고 사용하고 하면서 R에서 keras를 잘 사용할 수 있는 패키지가 있었으면 좋겠다 생각하던 시점에 이를 개발해서 공개한 친구가 워크샵에 참석했기 때문이다. 이 친구는 리치몬드 대학에서 딥러닝 강의를 하는 교수인데, 학생들이 좀더 쉽게 딥러닝을 사용하게 할 수 있게 하려고 kerasR을 만들었다는 이야기를 듣고 상당히 감명을 받았다. kerasR의 몇몇 버그를 알려줬는데, 이미 github에서는 다 고쳐놓았다는 말을 듣고 역시나 하는 생각을 했다.(왼쪽 사진은 그와 함께 찍은 사진…)

 

 

이 이외에 상당히 많은 부분 느끼고 감동받고 배우고 했지만 이곳에 모든것을 열거하기는 어려울것 같다. 다만 대부분이 학교에 몸담고 있는 교수나 박사과정 학생이고, 또한 이들의 배경이 컴퓨터 사이언스인 경우는 30%도 되지 않는 다는 사실에 매우 놀랐다. 그러니까 사회과학 쪽 연구를 하는 분들이고 이들의 프로그래밍 능력과 지식이 상당했다는 것이다. 정말 세상은 넓고 배울 사람들은 정말 많은거 같다.

 

이틀간의 워크샵을 마치고 가족과 함께 아주 맛있는 저녁 만찬을 먹고 다음날 아침 서울행 비행기에 올랐다. 이번 워크샵을 통해 한글의 전산처리 이슈에 대해서 많은 개발자들과 논의할 수 있었다는 것에 큰 보람과 할일에 대한 부담을 느끼고 돌아왔다. 다만 내가 혼자만의 시간을 통해 기여를 얼마나 할 수 있을지는 미지수지만 말이다.

 

 

이번 영국 가족 여행중 만족스러웠던 장소중에 하나인 bourton on the water

 

 

 

rOpenSci Text Workshop 참석차 런던에…

rOpenSci Text Workshop에 참석하기 위해 가족과 영국에 왔다.

 

 

이 워크샵은 올 연초에 초대를 받아 Europian Rearch Conceil의 펀딩으로 숙박과 항공료를 제공받아 오게 되었다. 무엇보다 변방의 언어인 한글에 대해서 관심을 가지고 초청해준 관계자 분들에게 감사의 마음을 전하고 싶다.

이 워크샵의 목적은 R을 기반으로 하는 텍스트 분석 패키지들의 개발자들이 모여 서로의 경험을 공유하고 추후 협력의 방향을 잡는것이다.  얼굴을 보고 서로의 스페셜리티를 확인하고 앞으로 잘 해보자하고 결의하는 그러한 자리이다. 물론 그 자리에서 여러가지 테스트와 더불어 코드 작성도 할 것으로 보인다.

이 모임에서 CJK(Chinese, Japanese, Korean) 논의그룹에 참여하고 있고, 주로 지금까지 하던대로 R에서의 한글 텍스트 분석 이슈에 대해서 이야기하고 이들에 대한 해결방안 계획까지 이야기할 것이다.

이번 기회로 다른 패키지 개발자들과 협력포인트를 만들어 좀더 생산적인 패키지 개발과 한글 지원이 가능해졌으면 하는 소망이 있다.

R TensorFlow 코드 깃헙 공개

딥러닝을 공부하는 가장 좋은 방법은 몇몇 대표적인 모형을 직접 코드로 작성해보고 모델링을 해보는 것이다. 최근에 많은 책들이 책을 출간하기 전에 코드를 깃헙에 공개하고 있는데, 이들 책 중에서 하나를 골라서 R로 코드를 구현하는 작업을 틈틈이 해왔다. 이 작업이 다소 번거로운건 Python코드와 R코드를 모두 잘 이해하고 구현해야 된다는 것이다. 다행히 Python에 대한 구현 경험이 있어서 큰 문제가 되지는 않았으나, 배열 인덱스 차이와 매트릭스 형태에 대한 기본 사고 방식이 달라서 다소 어려움이 있었다. 그러나 이런 코드 구현이 재밋는 점은 하나의 코드를 완벽히 이해하고 구현을 해야 정확히 동작한다는 것이여서 꽤 많은 공부가 되고 있다.

이 작업을 한 두번째 이유는 R기반 텐서플로 모델링이 Python이 하는 그것만큼 가능할 것인가?라는 질문에 스스로 답을 얻고 싶어서였다. 이 부분에 대한 개인적인 해답은 YES이다. Python이 하는 것 모두 가능하다! 게다가 R의 모델링 패키지와 데이터 전처리 패키지들의 잇점을 그대로 텐서플로에 활용할 수 있다. 물론 코드 구현시 최근에 나온 reticulate패키지를 활용하면 전처리 코드까지 쉽게 구현이 가능한데, 필자가 구현할때는 CNN예제에서 이미지 형태가 Python Pickle 형태로 제공되는 데이터를 핸들링 하는것 이외에는 사용하지 않았다. reticulate를 사용하는건 텐서플로 R way를 찾는걸 포기하는것과 같다고 생각했다.

텐서플로를 R로 모델링 한다는건 몇가지 장점과 더불어 단점도 존재한다.

결국 텐서플로 코드는 R이나 Python이나 큰 차이가 없다. 거의 99% 같다고 보면 된다. 그렇다면 차이가 나는 부분은 결국 데이터 전처리나 결과 시각화 부분 뿐이다. 데이터 전처리 부분은 이미지를 핸들링 한다면 3차원 이상의 array를 핸들링하는 연습이 충분히 되어 있어야 되는데, 신기하게도 이 부분에 대한 자료가 R에서는 그렇게 많지않아서 필자도 애로사항이 많다. 그래서 3차원 이상의 데이터를 핸들링 하는 코드가 Python보다 길어지는 경우가 많아 필자 역시 이 부분에 대한 경험이 부족함을 통감하고 있는 상황이다. 그러나 만일 2차원 테이블 형태의 데이터를 기반으로 텐서플로를 한다면 전처리 부분이 Python에 대비해 많은 잇점을 가져갈 수 있는데, data.table, caret과 같은 패키지를 적절히 활용하면 좋은 퍼포먼스로 다양한 데이터 전처리/피딩 방식을 적용하면서 모델링의 묘미를 만끽할 수 있다.

필자가 R 코드를 구현하고 있는 책은 Machine Learning with TensorFlow이며, 코드가 상당히 잘 정리되어 있고 책 자체도 아주 적절한 수준으로 코드 정리가 잘 되어있어 텐서플로를 처음 시작하는 사람들에게 좋은 시작점을 제공하고 있다. 아쉽지만 책은 아직 출간전이다.

책에 나온 전체 코드를 구현하는것 뿐만 아니라 개인적인 모델링 관련 코드도 올려 두었는데, 예를 들어 CNN 학습된 모형에 대한 시각화 코드가 그것이다. 이런 방식으로 다른 모형들에 대한 정리도 비슷한 방식으로 정리할 예정이다. 구현상 텐서플로 코드는 일반적인 나열 형태의 R코드로 구현하게 되면 나중에 텐서객체들이 꼬여서 큰 문제가 생길 수 있어 Python과 같이 클래스 형태로 구현하는게 가장 좋다. R에서는 많은 객체지향 코딩 방식이 존재하는데, 가장 기존 언어와 유사한 Reference Class로 구현했다. AutoEncoder 클래스가 대표적인 예이다.

필자가 코드 정리중인 github의 README를 붙이며 글을 마친다.


Machine Learning with TensorFlow(R version)

This is the unofficial code repository for Machine Learning with TensorFlow with R.

This repository is for practicing R tensorflow modeling exercises. I'm personally writing this code for me to know that there are some areas where you can get the benefits of R, and that the code in the book may contain partially improved or experimented code. (example: CNN model view )

TODO

  • make full book example code with R.
  • make use of R Reference Class for code reusablilty.
  • adding GAN code.

Requirement

Summary

Chapter 2 – TensorFlow Basics

Chapter 3 – Regression

Chapter 4 – Classification

Chapter 5 – Clustering (working)

  • Concept 1: Clustering
  • Concept 2: Segmentation
  • Concept 3: Self-organizing map

Chapter 6 – Hidden markov models

Chapter 7 – Autoencoders

Chapter 8 – Reinforcement learning (working)

  • Concept 1: Reinforcement learning

Chapter 9 – Convolutional Neural Networks

Chapter 10 – Recurrent Neural Network(working)

  • Concept 1: Loading timeseries data
  • Concept 2: Recurrent neural networks
  • Concept 3: Applying RNN to real-world data for timeseries prediction