Code Monkey home page Code Monkey logo

the-clean-rnns's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

Forkers

geekbgm

the-clean-rnns's Issues

`cells`는 그냥 `torch.nn.Sequential`로 처리하기

Why?

        for cell in self.cells:
            x = cell(x)
        return x

Sequential을 쓰면..굳이 이렇게 루프를 생성할 필요가 없다:

        x = self.cells(x)

어차피 파라미터가 하나인데. Sequential로 처리하는게 더 클린하다.

리드미 업데이트

To-do's

  • LSTM 테스트하기
  • BiLSTM 테스트하기
  • 성능비교표에 파라미터 개수 표기하기
  • 성능비교표에 학습에 걸린시간 표기하기 (BiLSTM은 성능은 준수해도, LSTM대비 RoI가 그리높지 않음)
  • 간단한 튜토리얼 노트북을 작성하기 (직접 wandb에 가입하고, 자신의 wandb 계정에 프로젝트를 진행할 수 있도록 도와주기)

BiLSTM 배포하기

To-do's

  • explore_fetch_pipline으로 학습된 BiLSTM 확인해보기
  • cache_pipeline에 BiLSTM 도 추가하기
  • 로컬에서 데모 테스트하기
  • 숫자를 4자리수로 변경하기

데이터 & 토크나이저 구축

How?

  • 사용할 데이터 = 네이버 감성분석 데이터
  • 데이터 로드 방법 = 내가 직접 구축하는 것보다 korpora 로 불러오는게 가장 깔끔하다.
  • 풀고자하는 문제 = 긍/부정 감성분석. 멋사에서 강의를 했을 당시, 이게 seq2seq 문제보다 초보자에게 설명하기 쉬운 문제였다 (seq2seq는 autoregressive training, beam search 등 추가적으로 학습해야하는 것이 많아, 모델의 inductive bias에 집중하는 것이 힘들다). 특히 마지막에 attention을 구현했을 때, 긍 / 부정을 예측할 때 어떤 단어에 초점을 맞추는지 확인하기에도 좋다.

To-do's

  • fetch_nsmc() 정의하기
  • nsmc로 토크나이저 구축하기 (run_build_tokenizer)
  • NSMC 데이터 모듈 정의하기
  • explore_cleanrnns_datamodules_nsmc.py
  • nsmc raw 버전을 wandb에 올리기 run_build_nsmc.py
    • 그리고 이 코드는 어차피 다시 사용할 필요가 없음. 하지만 혹시라도.. 나중에 다시 사용하고 싶을 때를 대비해서, git tag를 미리하자. (nsmc:raw)
  • nsmc preprocessed 버전을 wandb에 올리기 run_build_nsmc.py
  • 토크나이저 구축을 위한 데이터를 wandb에서 가져오도록 설명하기

Chronicles

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 - 리팩토링

  • #31
  • #33
  • git tag 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를 해보는 것. 어차피 계속 공부를 해나가야하는데, 논문을 읽으면서 그렇게 진행해나가는 것이 나의 성장에 있어서도, 그리고 한국 자연어처리 커뮤니티를 위해서도 더 도움이 되는 길일 것.

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

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.