pandas를 쓰다가 중복된 데이터를 처리할 때 모든 중복 데이터를 확인하고 싶을 때가 있다. 이를 위한 방법을 정리하고자 한다. 1. duplicated()의 함정 아래와 같은 데이터가 있다고 하자. print(data.to_markdown()) >>>> | | class | age | good | |---:|:--------|------:|:-------| | 0 | a | 11 | True | | 1 | a | 10 | True | | 2 | b | 9 | True | | 3 | c | 9 | False | | 4 | c | 7 | False | | 5 | c | 7 | False | duplicated()를 사용하면 중복데이터 중 남겨둘 데이터 하나를 제외한 중복데이터만 보여준다. print(da..
jupyter notebook은 접속 화면을 끄면 실행이 중단되는 부분이 있어서 아쉽다. 이를 우회하기 위해 notebook 파일을 작성하고 nohup, tmux 등으로 백그라운드에서 실행시키는 방법을 정리하고자 한다. 1. jupyter notebook 파일 작성하기 방법을 테스트하기 위해 matplotlib, tqdm 스크립트를 작성하고 cli_run_test.ipynb로 저장해두었다. 2. jupyter notebook cli로 실행 아래와 같이 jupyter nbconvert를 사용하면 되며 결과물로 cli_run_test.nbconvert.ipynb이 새로 생긴다. jupyter nbconvert --execute --to notebook cli_run_test.ipynb >>>> [NbConv..
np.array 원소를 index에 따라서 가져오고 싶은 경우가 많이 있다. 이때 사용할 수 있는 방법들을 정리하고자 한다. 0. Index를 사용하는 경우 np.array에서 index만 뽑아오는 경우는 대표적으로 np.where, np.argsort, np.min, np.max 등이 있다. a = np.array([4, 3, 7, 9, 6, 8]) np.argsort(a) >>>> array([1, 0, 4, 2, 5, 3]) np.where(a>4) >>>> (array([2, 3, 4, 5]),) 1. np.take 원문에 보면 아래와 같이 설명되어 있다. Take elements from an array along an axis. When axis is not None, this function..
git cli로 작업할 때 종종 쓰게되는 취소 명령어를 정리하고자 한다. 기본적으로는 reset 명령어를 사용한다. 1. 변경사항에 대한 stage 이후 단계인 경우 0. reset 옵션 soft: index를 보존(staged 상태), 파일 보존 mixed: index취소(unstaged 상태), 파일 보존, 기본옵션 hard: index취소(unstaged 상태), 파일 삭제 즉 모두 취소 git reset --soft HEAD와 같이 사용하면 된다. 1. add 취소 git reset HEAD "filename" 2. commit 취소 git reset HEAD~1 git reset @~1 @는 HEAD의 동의어이며, HEAD~1, @~1, @^, @~ 모두 같은 동작을 한다. 3. pull 취소 ..
Process, Thread를 이해하기 위해 개념만 정리하고자 한다. 1. Process Process는 운영체제(os)에서 실행중인 프로그램을 의미하며 자원을 할당받는 작업 단위를 의미한다. Process는 어떤 프로그램을 실행하기 위해 메모리 자원, cpu를 할당 받는데 이 과정은 상대적으로 많은 시간과 자원을 사용한다. 또한 각각의 프로세스는 각자 다른 메모리 공간(Heap, Stack, Code)를 가지며, 다른 프로세스의 메모리 공간 접근을 제한한다. 2. Thread Thread는 Process가 할당받은 자원을 이용하는 실행 단위이다. 하나의 Process는 여러개의 Thread로 구성이 가능하며, 같은 Process안의 Thread들은 할당받은 자원(메모리에서 Heap, Code, Data..
1. 셀 모든 내용 출력 pandas를 사용할 때 셀의 내용이 길면 잘려서 나오는게 기본 세팅이다(truncated). 셀의 모든 내용을 출력하고 싶으면 아래 설정을 사용하면 된다. import pandas as pd pd.set_option('display.max_colwidth', None) 2. 모든 row, column 출력 pandas.set_option('display.max_rows', None) # 항상 모두 출력 pandas.set_option('display.max_rows', 10) # 항상 10개만 출력 pandas.set_option('display.max_columns', None) # 항상 모두 출력 pandas.set_option('display.max_columns', 10..
파이썬 예외처리에 사용되는 구문을 정리하고자 한다. 1. try, except, finally a = dict() try: print('Hello World!') print(a['key']) except KeyError: print('KeyError 발생') except: print('다른 Error 발생') finally: print('수고하셨습니다') >>>> Hello World! KeyError 발생 수고하셨습니다 except 부분은 에러 종류별로 다르게 실행할 수 있도록 에러를 지정할 수 있으며, raise와 함께 별도의 에러를 만들 수도 있다. # define Python user-defined exceptions class Error(Exception): """Base class for ot..
LoRa 논문은 큰 언어모델을 fine-tuning하기 위한 여러가지 방법 중 효과가 꽤 괜찮은 방법을 제시했는데 그 내용을 정리하고자 한다. 1. Introduction 매우 큰 언어모델을 만들고 이를 도메인에 맞게 fine-tuning하는 일은 매우 빈번하다. GPT3 계열의 모델은 크기가 매우 크기 때문에 원래의 모델은 freeze 해두고 태스크별로 별도 layer를 두는 방식을 사용한다. 하지만 모델 크기가 매우 크기 때문에 제대로 학습이 안될 수도 있고 inference 속도가 충분하지 않을 수 있다. 논문에서 제시하는 아이디어는 간단하다. 딥러닝 layer에서 hidden dimension의 차원이 아무리 커도 그 공간의 rank는 낮을 수 있다고 생각하는데, 이를 활용하는 것이다. We ta..
torch.reshape()에 대해 궁금했던 부분들을 정리하고자 한다. Emil Bogomolov의 글을 참고하였다. 1. n-차원 텐서는 메모리 공간에서 어떻게 존재하는가?(Contiguous) 다수의 데이터에 접근할 때 데이터가 가까운 메모리 공간에 모여있으면 읽는 효율이 좋아진다. 때문에 배열 데이터도 연속된 공간안에 위치시키는게 좋다. 다차원 공간에서 배열 데이터를 저장하는 방법은 크게 row-major order와 column-major order가 있다(위키). C계열 언어는 row-major order를 따르며 이는 같은 행(row)에 데이터들이 연속된 메모리 공간에 위치해있는 것을 의미한다. PyTorch도 row-major order로 다차원 데이터를 저장하는데 이를 contiguous라..
1. 압축하기 example 폴더를 example.tar로 압축한다고 할 때 아래와 같이 하면 된다. # tar -cvf (압축후 사용할 폴더명) (압축될 파일명) tar -cvf ./example.tar ./example 특정 폴더나 파일을 제외하고 압축하고 싶다면 --exclude 옵션을 주고 파일, 폴더 명을 ""으로 감싸면 된다. 이때 꼭 압축하고자 하는 폴더(./example) 앞에 옵션을 줘야 한다. # tar -cvf (압축후 사용할 폴더명) (압축될 파일명) tar -cvf ./example.tar --exclude "not_this_one" ./example 2. 압축풀기 # tar -xvf (압축 해제할 폴더명) tar -xvf ./example.tar *tar 명령어 옵션 -c: ta..
GPT3와 같이 매우 큰 언어모델을 서비스 목적에 맞게 fine-tuning하는 것은 비용도 클 뿐더러 성능이 안정적이지 않을 수 있다. 이런 fine-tuning을 효율적으로 하기 위해 p-tuning, LoRA와 같은 방법들이 소개가 되었다. 개인적으로는 p-tuning이 개발기간도 짧고 안정적인 성능향상이 있기 때문에 더 선호하는데 이를 정리해보고자 한다.(논문링크)(공개소스) 1. Introduction 언어모델은 다음과 같이 크게 3종류가 있다. unidirectional LM(a.k.a auto-regressive model): GPT 계열 bidirectional LM: BERT 계열 hybrid LM: XLNet, UniLM GPT 계열의 단점은 NLU 태스크(NLI, AE 등)에서 성능이..
기존에 존재하는 GPT 언어모델을 추가로 학습할 때 달라지는 양상을 확인한 내용을 정리하고자 한다. 0. Language Model Skt GPT2 모델을 사용하였다. 모델크기는 125M로 상당히 작으며 40GB 한국어 데이터셋으로 학습되었다고 한다. 모델의 추가 pre-train 및 테스트를 위해 AI Hub의 감성 대화 말뭉치를 사용하였다. 1. 추가 pre-train 전 모델 성능 1) Perplexity 테스트셋 중 200여개 문장으로 측정하였으며, 기존 모델의 경우 40.1396으로 측정되었다. # PPL encodings = tokenizer("\n\n".join(test_ppl), return_tensors="pt") max_length = model.config.n_positions str..
Information retrieval이나 question answering 모델을 구성할 때 매우 큰 search space에서 속도와 성능이 둘다 중요한데 이를 위해 Retrieval & Rerank 구조가 많이 쓰인다(SBERT 설명글). Retireval 엔진으로는 Bi-encoder, Reranker 엔진으로는 Cross-encoder가 많이 쓰인다. Microsoft에서 발표한 Poly-encoder는 Bi-encoder, Cross-encoder의 장점을 취해 Bi-encoder의 성능을 향상시킨 모델이며 효과가 좋은 것으로 알려져있다(원문). 참고로 이 Github에 깔끔하게 구현되어 있다. 1. Introduction 두 입력 sequence에 대한 비교나, 입력 sequence에 대한 ..
언어모델을 평가하기 위한 하나의 척도인 Perplexity에 대해 정리하고자 한다. 원문 내용을 많이 참고하였다. 1. 언어모델이란? 언어모델(Language Model)은 가능한 단어 시퀀스에 대한 확률을 계산하는 모델이다. 어떤 문장이 주어질 때, 언어모델이 보유한 모든 토큰들에 대해 그 다음에 올 확률을 계산하면 엔지니어가 태스크에 맞게 최대 확률값을 가진 토큰을 1개 이상 사용하여 문장을 완성할 수 있다. 좋은 언어모델은 real 또는 syntactically correct한 문장에 더 높은 화률을 부여하는 모델이다. $n$개의 단어 $(w_{1}, w_{2}, \cdots, w_{n})$로 이루어진 문장 $W$에 대한 확률은 다음과 같이 표현할 수 있다(문장에 대한 확률이라는 말이 조금 어색할 ..