Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Chronicles #1

Open
25 of 27 tasks
eubinecto opened this issue Apr 5, 2022 · 0 comments
Open
25 of 27 tasks

Chronicles #1

eubinecto opened this issue Apr 5, 2022 · 0 comments

Comments

@eubinecto
Copy link
Owner

eubinecto commented Apr 5, 2022

Rationale & aims

문제인식

우선, 한국에서 한국어로 자연어처리에 입문하는 것이 쉽지가 않다. 광주인공지능사관학교에서 학부졸 나부랭이인 내가 자연어처리 강의를 할 수 있었다는 것 자체가, 자연어처리를 한국어로 배울 수 있는 소스가 참으로 부족하다는 방증이다. 물론 영어를 잘하면 큰 문제는 없지만, 영어가 미숙하다면 영어 자료가 흘러넘쳐도 한국에서 입문하는 것이 쉽지가 않다.

또다른 문제 - 영어가 익숙한 사람들일지라도, 트랜스포머 포함, 인터넷에 돌아다니는 RNN, LSTM 구현 튜토리얼을 보면, 아무리 생각해봐도 코드가 너무 지저분하다.

왜 모든 하이퍼 파라미터를 그렇게 일일히 멤버 변수로 등록하는가. pl을 쓰면 save_hyperparamters() 함수로 한번에 저장이 가능한데...
image

예를 들자면 한참 더 들 수 있다. 백번 양보해서 모델 구현체 자체는 깔끔하더라도, 전부 주피터 노트북으로 선형적으로 구현이 되어 프로젝트에 보통 구조가 없다. 프로젝트를 만들기로 했으면 책이 아니라 프로젝트 다운 구조를 갖춘 패키지를 완성해야된다고 생각한다. 그런 가이드를 주는 프로젝트가 부족하다.

그래서 내 목표는?

현존하는 모든 RNN 한글 구현 리포 중에서, 가장 깔끔한 코드로 가장 자연어처리 입문에 도움이 되는 리포를 만드는 것이 목표.

그래서 "깔끔하다"는 것의 기준이 무엇인데?

  1. 바로 데모를 실행해볼 수 있는 웹 데모가 존재한다. (웹 디자인에 신경 쓰고 싶지는 않기에, 웹 설계는 streamlit으로 하고, 배포는 streamlit cloud나 heroku + docker 조합으로 하자..!)
  2. 짧고 굵은, 동시에 의미가 분명한 코드를 지향한다. (3-4줄에 걸쳐서 쓴 코드를 한줄로 줄일 수 있으면 그렇게 한다)
  3. 실행 스크립트와 프로젝트 코드를 분리한다.
  4. 동일한 데이터와 동일한 문제를 두고, inductive bias만 바꾸었을 때 지표가 변화하는 양상을 한눈에 확인할 수 있다. --> 이게 지금 내가 가장 원하는 것!
  5. git tag 로 각 버전을 설명과 함께 릴리즈한다. 변화가 있을 때마다 설명한다.
  6. 존재하는 RNN 구현 리포 중에서, 가장 구조적이고, 이해하기 쉽고, 접근성이 높은 프로젝트를 지향한다.

한번 해보자!

v1.0 - RNN

설명

이 프로젝트의 첫번째 버전. 아마도 시간이 가장 오래 걸릴 것으로 예상되는 버전이다. 감성분석 문제를 우선 최우선으로 두고, 향후 모델 추가에 필요한 모든 인프라를 구축해놓는 것이 목표.

To-do's

v2.0 - RNN + LSTM

목표 - RNN에서 데이터는 그대로 두고, 모델만을 LSTM으로 변경했을 때, 성능지표가 개선이 되는지를 확인할 수 있도록 한다.

v3.0 - RNN + LSTM + BiLSTM

목표 - LSTM보다 성능이 좋아지는지 확인하는 것.

v3.1 - 리팩토링

v3.2 - add OptimizedRNNCell , OptimizedLSTMCell, OptimizedRNN, OptimizedLSTM

옥스포드에서 엔비디아 엔지니어가 자연어처리 강의를 한적이 있었다. 역시 GPU 엔지니어이다보니, RNN과 LSTM을 GPU연산에 최적화하는 방법을 소개해준다.
image
  • RNN의 W_xx, W_xy를 그냥 하나의 가중치로 합치면 더 빠르게 행렬곱을 처리할 수 있다.
  • LSTM의 4개의 게이트도 그냥 하나의 가중치로 합치면 한번에 행렬 곱을 처리할 수 있다.

여러 가중치로 흩어져 있는 것들을... 그냥 하나의 가중치에 모아서 처리하는 편이 훨씬 낫다. 그렇게 최적화한 Optimised 버전을 추가해서, 실제로 학습시간이 얼마나 달라지는지도 실험을 해보고 한번 진행해보자.

Sometime in the future

..withAttention 모듈 추가하기!

classification이던, seqseq던, attention 메커니즘을 직접 구현해보는 것은 도움이 되므로! (그리고 재미도 있으니까)

seq2seq with RNN's!

the-clean-transformer를 작업해보면서 구현했었던 auto-regressive training을 여기에도 구현해보자!

beam decoding도 직접 구현해보는게? 그리고 지표로 before & after 성능을 비교해보는 것?

the-clean-rnns -> the-probing-rnns (그리고 p는 돋보기로!)

단순히 깔끔하게 구현하는 것이 큰 가치가 있을까. 더 가치가 있고 많은 것을 배울 수 있는 것은, 모델을 하나하나 뜯어보며 실험을 진행하는 편이지 않을까. (e.g. padding을 left, right로 바꾸었을 때의 차이라던지.)
그렇게 질문을 가지고 실험을 하는 것, 이미 존재하는 paper가 있다면 replication study를 해보는 것. 어차피 계속 공부를 해나가야하는데, 논문을 읽으면서 그렇게 진행해나가는 것이 나의 성장에 있어서도, 그리고 한국 자연어처리 커뮤니티를 위해서도 더 도움이 되는 길일 것.

예를 들면 이분의 리포트와 비슷한 것을 하고 싶다:

@eubinecto eubinecto pinned this issue May 6, 2022
@eubinecto eubinecto changed the title Progress Chronicles May 21, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant