0. 왜 함?

공부중임. NLP를 처음 해보는거라서 이상한점 있을 수 있음. 파이썬도 미숙하고 파이토치는 더 미숙함.

중간에 때려칠수도 있지만 안때려치고 하고싶어서 여기 올리는거다.

왜 여기에 올리냐면 프로그래밍갤은 너무 헬로월드 수준인 사람이 대부분인거같고 인공지능갤은 너무 사람이 없어서


1. 링크

https://github.com/Mids/TransformerProect/blob/master/Transformer.py

깃헙갤이니까 깃헙링크.

신상털릴까봐 깃헙 안까는 사람이 많지만 나는 10년전부터 신상안가리고 디씨해서 털려도 별거 없을듯...? 그렇다고 실명으로 부르진 말아주라

글쓴시각 기준 첫커밋밖에 안해서 아직 시작부분임. 이제 열심히 올릴거야


2. 구현하는것

https://arxiv.org/abs/1706.03762

Attention is all you need 논문의 Transformer. NLP 공부하는사람중에 이 논문 모르는 사람은 없을듯?

처음으로 이 논문에서 Attention만을 가지고 러닝하는 모델을 만들고 나서 CNN/RNN이 주류이던 NLP모델들이 전부 Transformer기반으로 바꼈다고 들음.

최신 NLP의 기초를 공부한다고 생각하면 된다. 관심있는 사람은 한번 읽어봐. 영어 모르면 유튜브에 한국어로 설명된거 많으니까 찾아서 봐도 된다.

아래 그림 그대로 구현할 생각임.

viewimage.php?id=2ab4c42ef0d0&no=24b0d769e1d32ca73ced82fa11d02831fe384ecd5bf5471a0304a0eb0c93158624431c1ad6cb4c45401eab9288a8cac5e0f3345940cb9926c6218d9903a9a689d5a6


3. 코드 설명



viewimage.php?id=2ab4c42ef0d0&no=24b0d769e1d32ca73ced82fa11d02831fe384ecd5bf5471a0304a0eb0c93158624431c1ad6cb4c45401eab9288a8cac5e0f3345940cbc729c17380cb54faa689ef48


파이썬/파이토치 문법설명은 pass한다.

필요없는 주석은 안쓰는 스타일이고 네이밍은 최대한 주석이 필요없게 길게 길게 쓰는 편임.

어차피 타이핑은 PyCharm님이 해주니까 짧아봤자 알아보기만 힘들다.


일단 트랜스포머 클래스를 구현했다.

마지막 리턴빼고 2줄만 보면 됨.

1. 인코더 인풋을 인코더에 넣어서 셀프어텐션 시킨다음 그 probability를 받아오는 부분

2. 디코더 인풋/ 인코더 아웃풋(probability) 을 디코더에 넣어서 결과를 뽑는다.


앞으로 뭔가 더 필요해지면 추가될수도 있겠지만 일단은 저 위에 그림보고 필요한거만 넣었음.

다음은 인코더 구현한다.


덧. Indent 다 깨져서 그냥 코드는 사진으로 올림

덧덧. 사진 교체함