eubinecto / the-clean-rnns Goto Github PK
View Code? Open in Web Editor NEWA clean and structured implementation of the RNN family with wandb and pytorch-lightning
Home Page: https://share.streamlit.io/eubinecto/the-clean-rnns/main/run_deploy.py
A clean and structured implementation of the RNN family with wandb and pytorch-lightning
Home Page: https://share.streamlit.io/eubinecto/the-clean-rnns/main/run_deploy.py
LSTMCell
LSTM
RNNCell
굳이 브랜치를 만들필요는 없다. 그냥 main에서 진행하면된다.
테스트셋에 대한 f1_score와, accuracy만 비교할 수 있으면 된다.
config.yaml
for cell in self.cells:
x = cell(x)
return x
Sequential을 쓰면..굳이 이렇게 루프를 생성할 필요가 없다:
x = self.cells(x)
어차피 파라미터가 하나인데. Sequential로 처리하는게 더 클린하다.
BiLSTMCell
BiLSTM
fast_dev_run
testconfig.yaml
변경하기cache_pipeline
에 listm pipeline도 넣기!explore_fetch_pipline
으로 학습된 BiLSTM 확인해보기cache_pipeline
에 BiLSTM 도 추가하기korpora
로 불러오는게 가장 깔끔하다.fetch_nsmc()
정의하기run_build_tokenizer
)NSMC
데이터 모듈 정의하기explore_cleanrnns_datamodules_nsmc.py
run_build_nsmc.py
nsmc:raw
)run_build_nsmc.py
v1.0
릴리즈일일히 entity를 파라미터로 받을 필요가 없다. wandb login
을 한 이후에는 알아서 entity가 환경변수에 저장이된다. (https://docs.wandb.ai/guides/track/advanced/environment-variable)
나는 그냥 이걸 빼서 쓰면 된다.
fetchers
: entity 제거하기eubinecto
빼기우선, 한국에서 한국어로 자연어처리에 입문하는 것이 쉽지가 않다. 광주인공지능사관학교에서 학부졸 나부랭이인 내가 자연어처리 강의를 할 수 있었다는 것 자체가, 자연어처리를 한국어로 배울 수 있는 소스가 참으로 부족하다는 방증이다. 물론 영어를 잘하면 큰 문제는 없지만, 영어가 미숙하다면 영어 자료가 흘러넘쳐도 한국에서 입문하는 것이 쉽지가 않다.
또다른 문제 - 영어가 익숙한 사람들일지라도, 트랜스포머 포함, 인터넷에 돌아다니는 RNN, LSTM 구현 튜토리얼을 보면, 아무리 생각해봐도 코드가 너무 지저분하다.
왜 모든 하이퍼 파라미터를 그렇게 일일히 멤버 변수로 등록하는가. pl을 쓰면 save_hyperparamters() 함수로 한번에 저장이 가능한데... |
---|
![]() |
예를 들자면 한참 더 들 수 있다. 백번 양보해서 모델 구현체 자체는 깔끔하더라도, 전부 주피터 노트북으로 선형적으로 구현이 되어 프로젝트에 보통 구조가 없다. 프로젝트를 만들기로 했으면 책이 아니라 프로젝트 다운 구조를 갖춘 패키지를 완성해야된다고 생각한다. 그런 가이드를 주는 프로젝트가 부족하다.
현존하는 모든 RNN 한글 구현 리포 중에서, 가장 깔끔한 코드로 가장 자연어처리 입문에 도움이 되는 리포를 만드는 것이 목표.
한번 해보자!
v1.0
- RNN이 프로젝트의 첫번째 버전. 아마도 시간이 가장 오래 걸릴 것으로 예상되는 버전이다. 감성분석 문제를 우선 최우선으로 두고, 향후 모델 추가에 필요한 모든 인프라를 구축해놓는 것이 목표.
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연산에 최적화하는 방법을 소개해준다. |
---|
![]() |
W_xx
, W_xy
를 그냥 하나의 가중치로 합치면 더 빠르게 행렬곱을 처리할 수 있다.여러 가중치로 흩어져 있는 것들을... 그냥 하나의 가중치에 모아서 처리하는 편이 훨씬 낫다. 그렇게 최적화한 Optimised 버전을 추가해서, 실제로 학습시간이 얼마나 달라지는지도 실험을 해보고 한번 진행해보자.
..
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를 해보는 것. 어차피 계속 공부를 해나가야하는데, 논문을 읽으면서 그렇게 진행해나가는 것이 나의 성장에 있어서도, 그리고 한국 자연어처리 커뮤니티를 위해서도 더 도움이 되는 길일 것.
예를 들면 이분의 리포트와 비슷한 것을 하고 싶다:
가급적이면 깔끔하게 구현하자.
wandb를 적극활용해서 학습진행하기.
The LSTMCell
should only have one weight matrix.
streamlit cloud를 활용해서, 최소한의 노력을 들여 최대한의 배포(?)를 해보자.
PipelineForClassification
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.