분류 전체보기
[이직]. 머신러닝 엔지니어(AI개발자) 이직 성공기
나는 광주에서 3개월 동안 머신러닝 개발자로 근무했고 7월 9일 퇴사했다. 7월 9일(퇴사일)부터 8월 26일(최종 합격일)까지의 내용을 기록해보고자 한다. 먼저 퇴사하고 느낀 점을 말해보면 처음 구직할때는 "제발 일만 시켜주십시오 뭐든지 하면 열심히 하겠습니다." 이런 마인드였다. 그리고 일을 시켜준다니까 전라도 광주까지 가서 근무했다. ( 지금 생각해보면 진짜 미친놈인가?.. ) 이 마인드가 처음엔 좋게 작용했지만 이게 전부가 아니라는 것을 깨달았다. 이 회사가 내 커리어 혹은 내 최종 목표에 있어서 도움이 되는 회사인가. 같이 일하는 동료들이 진취적이고 열정이 있는가 신입이기 때문에 배울 수 있는 상사(중간급)가 존재하는가 경영자가 인공지능 및 4차 산업혁명에 대한 이해도가 높은가 이런 부분을 짧은..
[챗봇] 아주 간단한 검색기반 챗봇 만들기(feat.pororo)
전에 공부했던 시퀀스 투 시퀀스(seq2seq)로 구현했던 챗봇은 디코더를 통해 단어를 찾아 이어 붙이는 모델이었다. 하지만 문맥이 매끄럽지 않은 부분이 있었고 아웃풋의 시퀀스 수를 결정하는 것이 부자연스러웠다. 토큰이 나와야 하는 조건이 정확하지 않아 보였고 문제가 생각보다 쉽지 않아 보였음. 그래서 이번엔 간단하게 검색 기반 모델을 사용해보고자 한다. 데이터 셋은 전에 사용했던 일상생활(직장, 연애 , 등등 )에서 사용되는 간단한 질문과 답변으로 구성되어있는 데이터를 사용. 진짜 봇처럼 느껴지는 단호박 답변들이 11823건이 있다 ㅋㅋㅋ.. 내 계획은 이렇다. 1. 일단 질문(Q)들을 전부 임베딩 시킨다. 2. 임베딩 값을 미리 저장한다. 3. 새로 입력한 텍스트를 임베딩 시켜서 가장 비슷한 질문을 ..
[NLP] . OOV 를 해결하는 방법 - 1. BPE(Byte Pair Encoding)
컴퓨터가 자연어를 이해하는 기술은 크게 발전했다. 그 이유는 자연어의 근본적인 문제였던 OOV문제를 해결했다는 점에서 큰 역할을 했다고 본다. 사실 해결이라고 보긴 어렵고 완화가 더 맞는 표현인 거 같다. 사람들도 모르는 단어 있으면 이해하기 어려운건 마찬가지 OOV(Out-Of-Vocabulary) 문제란 무엇일까? 말 그대로 단어 사전에 없다는 뜻이다. 자연어의 전처리 과정에서는 학습데이터의 모든 단어를 토큰화 하여 Vocabulary를 만들고 그 Vocabulary 를 기준으로 정수 인코딩(단어를 숫자로 표현함)을 하게된다. 실제 사용할 때(검증 혹은 상용화)도 이 과정을 반복하는데 새로운 단어 토큰이 들어왔을 때 vocabulary에 없을 경우 unknown token을 반환한다. * 실제 경험담..
[Deep Learning] Tensorflow 자주 사용하는 Tensor 함수 정리
Tensorflow 프레임 워크를 사용하다 보면 자주사용하는 코드를 발견하곤 하는데. 정확히 어떤 기능을 하는 지 알지못하고 함수이름으로 대충 짐작하고 넘어가는 경우가 많았다. 이번엔 이런 것들을 코딩하는 동안에 발견할때마다 정확한 기능을 정리해보고자 한다. 중요도 상관없이 계속해서 나열 *Dense , Embedding 같은 Layer 들은 제외하고 Tensor들을 다루는 함수들 expand_dims - tf.expand_dims(input, axis) 용어 설명 : (1) Expand : 확장하다, 넓히다 (2) dimension(dims) : 차원 해석 : 차원을 확장해주는 함수이다. image = tf.zeros([10,10,3]) # TensorShape([10, 10, 3]) "0"으로 채워진..
[NLP] Transformer : Masked Multi-Head Attention - part3
Transformer Decoder : 트렌스포머 모델의 디코더(Decoder)는 인코더(Encoder)와 다르게 Masked Attention 이 들어간다. Masked Multi-head Attention Mask(마스크) 란? Masked 혹은 Masking 이라는 용어 차제는 포토샵에서 많이 접할 수 있지만 무언가로 가린다는 의미이다. 디코더(Decoder)에서의 Self-Attention Layer 는 반드시 자기 자신 보다 앞쪽에 포지션에 해당하는 토큰들의 어텐션 스코어만 볼수있다. 아웃풋들이 주어졌을 때 뒤에 나오는 단어들은 볼 수 없다. ( 기본적인 seq2seq 모델의 학습 개념 transformer 도 동일함.) Masking을 수학적으로 구현할 때는 포지션에 해당하는 Score 값을 ..
[NLP] Transformer : Self-Attention ( Multi-head-Attention ) - part2
https://acdongpgm.tistory.com/219?category=910966 [NLP]. Transformer : Structure 앞서 시퀀스 투 시퀀스 모델에 대해서 설명하면서 어텐션에 대한 개념을 설명했다. Transformer의 논문 제목은 "Attention is All You Need"이다. 어텐션만 있으면 다 가능하다. 뭐 이런 뜻이다. 즉, 트랜스 acdongpgm.tistory.com 앞서 설명했듯이 임베딩 이후에 포지셔널 인코딩을 통해서 포지션 정보를 가진 임베딩 벡터가 인코딩 블록으로 들어오게 된다. 논문의 핵심인 Multi-Head Attention의 동작하는 방식을 알아보고 그 이후에 정규화 방법(Residual connection & Normalization)도 같이..
[NLP]. Transformer : Structure - part1
앞서 시퀀스 투 시퀀스 모델에 대해서 설명하면서 어텐션에 대한 개념을 설명했다. Transformer의 논문 제목은 "Attention is All You Need"이다. 어텐션만 있으면 다 가능하다. 뭐 이런 뜻이다. 즉, 트랜스포머는 어텐션 기법을 극대화 한 모델이라고 볼 수 있다. 트랜스포머는 RNN의 기반의 모델처럼 한 번에 하나씩 처리하는 문제를 지적했다. * 순차적으로 처리하면 속도가 너무가 느리다!!! 어텐션을 사용하면서 스피드를 최대한으로 끌어올려보자!! 그래서 트랜스포머는 순차적으로 하지 않고 한 번에 계산을 해버린다. 그전에 모델의 구조부터 살펴보자. 모델의 구조는 6개의 인코더와 6개의 디코더 구조로 되어있다. 여기서 6개는 최적화 수가 아니라 논문에서 사용한 갯 수 이기 때문에 6개..
[NLP] Sequence to Sequence(시퀀스 투 시퀀스) 코드
https://acdongpgm.tistory.com/216 [NLP] Sequence to Sequence (시퀀스 투 시퀀스), Attention(어텐션) 개념 시퀀스 투 시퀀스 모델은 셀프 어텐션의 등장으로 요즘에 잘 사용하지 않지만 자연어 처리에서 중요한 개념을 내포하고 있고 Many to Many task에 대해서 자세히 알아볼 수 있다. 그리고 꼭 얻어가야 acdongpgm.tistory.com 시퀀스 투 시퀀스의 모델 구조와 어떻게 동작하는지에 대해 코드를 통해 이해해 보고자 한다. 예제에서 사용한 데이터 셋은 연애 질문에 대한 Q&A 데이터이고 시퀀스 투 시퀀스로 간단한 챗봇을 만들고자 한다. 출처 : 텐서 플로 2와 머신러닝으로 시작하는 자연어 처리 위 책에 있는 예제를 그대로 따라 해보..
[NLP] Sequence to Sequence (시퀀스 투 시퀀스), Attention(어텐션) 개념
시퀀스 투 시퀀스 모델은 셀프 어텐션의 등장으로 요즘에 잘 사용하지 않지만 자연어 처리에서 중요한 개념을 내포하고 있고 Many to Many task에 대해서 자세히 알아볼 수 있다. 그리고 꼭 얻어가야 할 것은 시퀀스 투 시퀀스는 어떤 게 문제였고 현재는 그 문제를 어떻게 개선했는지에 대해서 반드시 알 필요가 있다. 먼저 시퀀스(Sequence)란 무엇일까? 시퀀스란 말은 영화에서 몇 개의 관련된 장면을 모아서 이루는 구성단위로도 쓰이고 전기 회로를 구성한 도면을 말하기도 한다. 이 처럼 여러 분야에서 각기 다르게 쓰이는데 자연어 처리에서는 단어들이 2개 이상 묶여있는 것으로 이해하면 된다. [ i , am , a ,boy ] 시퀀스 투 시퀀스 모델(Sequence to Sequence model) ..
[Deep Learning] Weight Initialization(기울기 초기화), Xavier , He
Weight Initialization 은 Gradient descent(경사하강법)을 하기전에 기울기값을 초기화 해준다라는 뜻이다. 실제 사용할 때는 대부분 Default 로 설정되어있어서 그냥 넘어가는 경우도 있지만 알아보도록하자. 기울기를 초기화 해준다는 것은 사실 생소하지만 당연한 것이다. 컴퓨터는 초기화해주지 않으면 쓰레기 값을 가지기 때문이다. 그래서 0으로 초기화를 해주거나 랜덤으로 초기화해주는 경우가 종종있지만. 딥러닝에서는 초기화 시점의 차이가 학습의 결과를 뒤바꿀 수 있으므로 보다 나은 초기화 방식을 모색하게 되었다. 초기화 시점의 차이가 학습 결과를 뒤바꿀 수 있다는 것을 풀어서 해석해보면 왼쪽 끝지점으로 초기화를 한 경우에는 local minimum 값이 학습결과가 될 것이고. 오른..