본문 바로가기

전체 글85

[Huggingface] PreTrainedTokenizer class 모든 Tokenizer들이 상속받는 기본 tokenizer 클래스이다. Tokenizer에 대한 간단한 정리는 여기에서 확인할 수 있다. Tokenizer는 모델에 어떠한 입력을 넣어주기 위해서 전처리를 담당한다. Huggingface transformers 라이브러리에서는 크게 두 가지 종류의 tokenizer를 지원하는데, 첫 번째로는 파이썬으로 구현된 일반 tokenizer와 Rust 로 구축된 "Fast" tokenizer로 구분할 수 있다. "Fast" tokenizer에서는 batched tokenization에서 속도를 더 빠르게 해주고, 입력으로 주어진 문장과 token 사이를 mapping 해주는 추가적인 함수를 지원한다. 참고로, "Fast" tokenizer들을 SentencePiec.. 2021. 7. 18.
[Huggingface] PretrainedConfig class PretrainedConfig 공식 문서 : https://huggingface.co/transformers/main_classes/configuration.html 코드 : https://huggingface.co/transformers/_modules/transformers/configuration_utils.html#PretrainedConfig 모든 모델들의 configuration class의 base class. 모델들의 configuration 값들을 가지고 있고, 모델을 저장하고 불러오는데 필요한 configuration 들도 가지고 있다. 공통적으로 사용되는 파라미터 - model_type - vocab_size - hidden_size - num_attention_heads : mult.. 2021. 7. 16.
[Huggingface] PreTrainedModel class 최근들어 Huggingface에서 제공하는 Transformers 라이브러리를 많이 사용하는데, 구체적인 동작 방식을 이해하고 사용하면 좋은 것 같아서 기초부터 차근차근 정리해본다. 간단하게 정히한거라, 공식 문서와 코드를 참고하면 더 도움이 될 듯! PreTrainedModel 공식 문서 : https://huggingface.co/transformers/main_classes/model.html 코드 : https://huggingface.co/transformers/_modules/transformers/modeling_utils.html 모델의 configuration을 저장하고, 모델을 불러오고 저장하는 역할을 수행한다. 추가적으로, 임베딩의 크기를 바꿔주는 역할, self-attention h.. 2021. 7. 16.
[Huggingface] Huggingface Tokenizer Huggingface의 tokenizer 동작 방식에 대한 간단한 정리. 컴퓨터는 (당연히) 텍스트를 이해하지 못하고, 각 텍스트에 대응하는 숫자들을 이해한다. 그러므로, 우리는 어떤 텍스트를 어떤식으로 분리해서, 분리된 텍스트를 특정한 숫자(id)에 대응시키고, 해당 id를 모델의 입력으로 넣어주는 과정이 필요하다. 우선, 입력으로 들어온 텍스트를 조금 더 작은 단위로 분리하는 과정이 있는데, 이 과정에서 크게 3가지 방식이 사용된다 : word-based, character-based, subword-based. 1. word-based : 단순하게 단어 단위로 분리하고, 각 단어별로 고유의 id 값을 부여한다. 상당히 단순한 방식이고 구현이 간단하지만 몇 가지 문제점이 있다. 첫 번째로, 각 id에.. 2021. 7. 9.
나 혼자 보려고 만든 참고 노트 (21.02.08 UPDATE) 개발하면서 자주 만나는 오류들과 문제들을 정리한 포스트. 이쯤 정리했으면 외울법도 하지만 못외우니 그냥 ctrl + f 해서 찾아서 제대로 쓰기라도 하자. # MySQL MacOS에 MySQL 설치하기 MySQL 다운로드 (링크) .dmg 파일을 다운받은 후 설치 root user의 비밀번호 설정 [시스템 환경설정]에서 MySQL을 선택하면 현재 실행 중인 MySQL 상태를 확인할 수 있음 MySQL 실행하기 $ cd /user/local/mysql/bin $ ./mysql -u root(또는 다른 계정) -p# 이후 root 계정(또는 다른 게정)의 비밀번호 입력 $ exit# 종료 # Linux alias 설정하기 $ vi ~/.bash_profile # bash shell 인 경우 # in .bas.. 2021. 2. 8.
최대우도법 (Maximum Likelihood Estimation, MLE) 최대우도법(Maximum Likelihood Estimation, MLE)은 파라미터 $ \theta $ 로 구성된 어떠한 확률밀도함수 $ P(x|\theta) $ 에서 관측된 표본의 집합을 $ x = (x_1, ..., x_n) $ 이라고 할 때, 이 표본들을 통해서 파라미터 $ \theta $ 를 추정하는 방법이다. 쉽게 말하면, 데이터를 관찰해서 관찰한 데이터가 추출되었을 것이라고 예상되는 분포에 맞게 현재 분포의 파라미터를 업데이트하는 방법이다. [그림-1]과 은 분포에 대한 likelihood를 먼저 이야기해보자. Likelihood는 지금 주어진 데이터(-3, -2, -1, 0, 1, 2, 3) 에 대한 확률분포의 값들을 모두 곱한 것이라고 생각할 수 있다. 각 데이터에 대한 확률분포의 값을 .. 2021. 1. 21.
[자연어 처리 입문] 순환 신경망 (Recurrent Neural Network) 을 읽고 간단하게 정리한 내용이다. Vanilla RNN에 대해서 알아보고, Vanilla RNN의 한계를 개선한 LSTM과 GRU에 대해서 간단하게 알아본다. 기존의 신경망들은 입력의 크기가 정해져있다는 단점이 있었다. 하지만, 자연어 처리를 위해서는 다양한 길이의 입력을 처리할 수 있는 인공신경망이 필요했다. # RNN (Recurrent Neural Network) RNN은 시퀸스 모델이다. 시퀸스 모델이란 입력과 출력을 시퀸스 단위로 처리한다는 뜻이다. RNN 은닉층의 셀에서는 셀의 값을 출력층 방량으로 보낼 수 도 있고, 재귀적으로 은닉층의 다음 입력의 계산을 위한 입력으로 사용되기도 한다. 은닉층의 셀은 이전 값을 기억하기 위해 값을 저장하는 역할을 수행하기 때문에, 메모리 셀이라고도 한다. .. 2021. 1. 7.
[자연어 처리 입문] 토픽 모델링 (Topic Modeling) 을 읽고 간단하게 정리한 내용이다. Topic modeling의 대표적인 예로, LSA와 LDA에 대해서 알아본다. 주어진 문제의 추상적인 주제를 발견하는 것이 Topic modeling의 목표이다. # LSA (Latent Semantic Analysis) LSA (LSI 라고 부르기도 한다.) 는 DTM의 잠재된 (latent) 의미를 이끌어내는 방법이다. (DTM에 관련된 내용은 여기에서 확인할 수 있다.) LSA에 대해서 이야기하기 전에, 먼저 SVD(Singular Value Decomposition)에 대해서 이야기해보겠다. SVD는 m×n 차원의 행렬 A 를 3개의 행렬 U, ∑, 로 분해하는 방법이다. 이 때, U, V 는 직교행렬이고, ∑ 는 직사각 대각행렬(주대각선의 값을 제외한 모든 .. 2021. 1. 5.
[자연어 처리 입문] 문서 유사도 (Document similarity) 을 읽고 간단하게 정리한 내용이다. 두 문서(두 벡터)의 유사도를 구하는 방식에 대해서 이야기해본다. 가장 대표적으로는 코사인 유사도가 있고, 유클리드 거리, 자카드 유사도도 고려해볼 수 있다. 두 문서가 얼마나 유사한 내용을 포함하고 있는지, 문서의 유사도를 구하는 방법에 대해서 이야기해본다. # 코사인 유사도 (cosine similarity) 코사인 유사도는 두 벡터간의 각도를 이용해서, 두 벡터의 유사도를 구하는 방법이다. 두 벡터의 방향이 같다면 1, 수직을 이루고 있으면 0, 완전 반대 방향을 향하고 있으면 -1의 값을 결과로 갖는다. 코사인 유사도의 값이 1에 가까울수록 두 벡터는 유사하다고 판단한다. 벡터의 크기로 나눠주기 때문에, 벡터의 크기가 아닌, 방향에 초점을 두고 있다. 그러므로 .. 2020. 12. 31.