분류 전체보기

논문 및 개념 정리

[2020] ColBERT: Efficient and Effective Passage Search via Contextualized Late Interaction over BERT

Document 랭킹을 성능 및 서비스 측면에서 고민한 ColBERT 논문에 대해 정리하고자 한다. 1. Introduction BERT 등의 큰 언어모델(LM)은 성능이 우수하나 계산량이 많아 latency가 생긴다. 때문에 query-document pair를 입력을 받아 수십만개의 문서 중 정답이 있을만한 문서를 찾는 문서탐색의 경우 시간이 매우 오래걸린다. ColBERT는 이를 해결하기 위한 방법으로 1) 미리 계산한 문서 임베딩을 저장해두고(pre-computation) 2) query를 입력으로 받아 계산량이 낮은 연산(late interaction)으로 문서탐색을 수행하는 모델이다. 2. ColBERT 모델 1) Architecture ColBERT는 두 개의 encoder와 late in..

논문 및 개념 정리

[2022] SimCSE: Simple Contrastive Learning of Sentence Embeddings

효과적인 Sentence embedding을 얻기 위한 SimCSE 논문 내용을 정리하고자 한다. 1. Introduction BERT와 같은 transformer 계열 인코더들은 context를 반영한 문장 임베딩을 잘 뽑는다. SimCSE는 contrastive learning + dropout을 사용하여 인코더를 추가학습해 성능을 향상시켰다. 논문에서는 unsupervised, supervised 내용을 담고 있지만 unsupervised 내용이 더 핵심적이다. 2. Background 1) Contrastive Learning Contrastive Learning은 self-supervised learning의 방법 중 하나로 unlabled data를 활용하되 이를 positive, negati..

python 메모

[matplotlib] 두개 그래프 y축 동시에 plot하기

matplotlib.pyplt을 사용하다 보면 하나의 그래프에 y_label 2개를 양쪽에 둬서 두개의 그래프를 동시에 표현하고 싶은 순간들이 있다. 이때 ax.twinx()를 사용하면 아래와 같이 표현할 수 있다. import numpy as np import matplotlib.pyplot as plt x = np.arange(0, 10, 0.1) y1 = 0.05 * x**2 y2 = -1 *y1 fig, ax1 = plt.subplots(figsize=(12,6)) ax2 = ax1.twinx() ax1.plot(x, y1, 'g-', label="green") ax2.plot(x, y2, 'b-', label="blue") ax1.set_xlabel('X data') ax1.set_ylabel(..

pytorch, tensorflow

[PyTorch] Embedding 추가하기

hugginface의 여러 모델들을 사용하다보면 vocab_size가 달라 임베딩 차원이 안맞는 경우가 생긴다. 이때 임베딩 차원을 추가하면 문제를 해결할 수 있다. 1. Embedding 추가하기 torch.nn.Embedding 모델에 새로운 아이템들을 더할 수 있는 방법은 아래와 같다. vocab_size = 10 emb_dim = 128 # 기존에 학습 완료된 임베딩 original_emb = torch.nn.Embedding(vocab_size, emb_dim) # 추가하거나 새로 학습하고자 하는 vocab의 임베딩 new_vocab_size = 2 to_add_emb = torch.nn.Embedding(new_vocab_size, emb_dim) # 각 임베딩의 parameter를 합쳐 임베..

pytorch, tensorflow

[PyTorch] torch.cat(), torch.stack() 비교

1. torch.cat() torch.cat() 기능 정의는 다음과 같다. Concatenates the given sequence of seq tensors in the given dimension. All tensors must either have the same shape (except in the concatenating dimension) 기준 차원에 대해 두 텐서의 요소를 연결하며(list의 extend), 기준 차원을 제외한 shape은 동일해야 한다. import torch t1 = torch.rand((6, 32)) t2 = torch.rand((4, 32)) torch.cat((t1, t2), dim=0).shape >>>> torch.Size([10, 32]) torch.cat((t..

python 메모

[JSON] JSON 파일 읽고 저장하고 예쁘게 프린트하기

0. JSON이란? JSON은 JavaScript Object Notation의 약자로 데이터 객체를 저장하거나 전송할 때 많이 사용되는 방법으로 이해하기 쉬우며 용량이 작아서 많아 사용된다. 1. json 저장하고 읽어오기 import json data = {"a": 1, "b":[1,2,3], "c":"abcd"} # 저장하기 with open("file.json", "w") as f: json.dump(data, f) # 읽어오기 with open("file.json", 'r') as f: data = json.load(f) 2. JSON 보기 좋기 프린트하기 print(json.dumps(data, indent=4)) >>>> { "a": 1, "b": [ 1, 2, 3 ], "c": "abcd" }

python 메모

[huggingface] transformers 모델 onnx로 변환하기

hugginface의 transformers 라이브러리로 만든 커스텀 모델을 onnx로 변환하고 서빙하는 과정을 정리하고자 한다. PyTorch, ONNX Runtime 튜토리얼을 참고하였으며 실제 사용 시 참고해야될 부분들을 적어두고자 한다. 0. ONNX ONNX는 프레임워크에 종속되었던 AI, machine learning 모델들을 하나의 형식으로 통합하기 위한 오픈소스 프로젝트이다. Pytorch, Keras, TensorFlow등을 사용해 생성된 모델(연산자, parameter 집합)을 ONNX로 변환하기 위한 튜토리얼은 여기에 잘 정리되어 있다. 참고로 ONNX는 파일 포맷을 의미한다고 생각하면 되며, ONNX로 변환된 모델을 ONNX Runtime 등의 프레임워크를 통해 CPU, GPU 및 ..

Pattern Recognition

5. Density Estimation

한성대학교 지준교수님 강의자료를 통해 기초적인 개념들을 다지고자 한다. 0. Density Estimation Density Estimation(밀도 추정)은 관찰된 데이터가 있을 때, 해당 데이터 분포에 내재된 확률밀도함수(probability density function)을 추정하는 방법이다(확률 함수가 아닌 확률밀도함수이다). $$\begin{array}{} f_{X}(x) \text{ is pdf}\\ P[a\le X\le b] = \int_{a}^{b}f_{X}(x)dx \\ \end{array}$$ 대표적으로 Non-Parametric Density Estimation 방법인 Histogram, Kernel Density Estimation 등이 있다. 또한 Parametric Density..

Pattern Recognition

4. Clustering (2)

한성대학교 지준교수님 강의자료를 통해 기초적인 개념들을 다지고자 한다. GMM 내용은 여기와 여기를 많이 참고하였다. 앞선 글에서 비모수적(non-parametric) 클러스터링 알고리즘 종류들을 살펴보았다. 이 글에서는 모수적(parameter) 클러스터링의 대표적인 방법인 GMM을 살표보고자 한다. 1. GMM(Gaussian Mixture Model) GMM은 혼합가우시안 모델로 여러개의 Gaussian 분포를 선형결합해서 만든 분포라는 뜻이다. 실제 현실에서의 복잡한 데이터 분포를 설명할 때 적합하다. 아래와 같은 데이터는 하나의 Gaussian 분포로는 설명이 어렵기 때문에 여러개를 합쳐서 표현할 수 있다. 1) GMM 수식 먼저 Gaussian Distribution(Normal Distrib..

Pattern Recognition

4. Clustering (1)

한성대학교 지준교수님 강의자료를 통해 기초적인 개념들을 다지고자 한다. 클러스터링은 크게 비모수적(non-parametric) 방법과 모수적(parametric) 방법으로 나뉜다. 두 방법의 대표적인 알고리즘들을 살펴보고자 한다. 0. Parametric, Non-parametric Methods Parametric modeling은 통계모델링의 한 종류로 유한한 개수의 parameter를 지닌 확률 분포를 가정하여 데이터에 대한 분포를 모델링하는 방법이다(e.g. Gaussian Mixture Model). Nonp-parametrinc modeling은 데이터에 대한 parametric 확률 분포를 가정하지 않거나 모델 또한 고정되어있지 않다는 것을 가정한 추정 방식이다(e.g. K-Means clu..

Pattern Recognition

3. Maximum Likelihood Estimation(MLE)

한성대학교 지준교수님 강의자료를 통해 기초적인 개념들을 다지고자 한다. 1. Maximum Likelihood Estimation(MLE) 확률에 대해 배울 때 여러가지 확률분포들을 배우게 된다. Guassian, binomial과 Bernoulli, Poisson 등등 empirical distribution을 제외하면 모두 모수(parameter)를 가지고 있는 분포들이다. 만약 샘플링한 데이터만 있고 원래의 확률분포를 추정하고 싶다면 어떻게 해야할까? 크게 두 가지 방법이 있다. 파라미터 추정법(Parameter Estimation): '확률밀도'에 대해 특정한 형태를 가정하고(e.g. Guassian) 분포를 결정짓는 파라미터(eg. $\mu, \sigma$)을 최대우도추정방법(MLE)방법을 통해..

Pattern Recognition

(참고) Gaussian Distribution

한성대학교 지준교수님 강의자료를 통해 기초적인 개념들을 다지고자 한다. 확률이론에서 기초가 되는 Gaussian Distribution에 대해 다뤄보고자 한다. 1. 단변량 가우시안(Univariate Gaussian) 단변량 가우시안 확률밀도 함수 평균(기대값)을 $\mu$, 표준편차를 $\sigma$라고 할 때, Gaussian 분포는 다음과 같이 표현한다. $$f(x) = N(\mu, \sigma) = \frac{1}{\sqrt[]{2\pi}\sigma}\text{exp}\left[ -\frac{1}{2}(\frac{x - \mu}{\sigma})^{2} \right]$$ 2. 다변량 가우시안(Multivariate Gaussian) 다변량 가우시안 확률밀도 함수 D차원의 다변량 가우시안 정규분포(..

Pattern Recognition

2. Random Variable & Probability Distribution

한성대학교 지준교수님 강의자료를 통해 기초적인 개념들을 다지고자 한다. 1. 확률변수와 확률분포 확률변수란? 확률변수(random variable)란 확률실험에 따라 정의되는 표본공간 $S$의 모든 원소를 실수 값을 대응시키는 함수이다. 즉, 확률실험 시행 결과 각각은 확률변수에 의해 실수 값으로 표현될 수 있다. 확률변수의 종류는 주사위 굴리기와 같은 이산변수(discrete variable), 몸무게, 키와 같은 연속변수(continuous variable)가 있다. $$X:S \rightarrow R, \ \text{that is For} \ s \in S, \ X(s) \in R$$ 확률분포란? 확률분포는 수치로 대응된 확률변수의 개별 값들이 가지는 확률값의 분포이며, 확률변수가 취할 수 있는 값..

Pattern Recognition

1. Probability

한성대학교 지준교수님 강의자료를 통해 기초적인 개념들을 다지고자 한다. 1. 통계 기초 및 확률 이론 Pattern recognition is the automated recognition of patterns and regularities in data(wikipedia) 패턴인식에서 통계학적인 기법들을 이용하여 데이터를 분석하고 확률기법들을 이용하여 데이터를 분류하거나 특성을 파악하는데 사용한다. 1) 통계용어 모집단(population): 데이터 분석의 관심이 되는 대상의 전체집합 표본(sample): 모집단의 부분집합으로 모집단의 특성을 파악하기 위해 수집된 개별 집단 표본 분포(sample distribution): 동일한 모집단에서 샘플링된 동일한 크기의 모든 가능한 표본으로부터 얻어진 통계값..

python 메모

[python] Thread-Local Data

파이썬에서 thread-local data와 관련된 좋은 글이 있어 정리하고자 한다. 원글은 이 글인데 이 사이트에 Threading, Multiprocessing, ThreadPoolExecutor, ProcessPoolExecutor에 대한 설명들이 매우 잘 돼있다. 0. Thread-local data의 필요성 Thread는 프로그램의 실행 단위이며, 파이썬 프로그램은 실행 시 하나의 main thread를 가지고 실행된다. 이때 추가적인 thread가 필요한 상황이 생기는데 파이썬은 threading.Thread 모듈로 이를 지원한다. 이때 모든 thread들은 process가 할당받은 메모리 중 heap, static 등의 영역을 공유하면서 각자의 stack 메모리 공간을 보유하고 있다. 즉, ..

Fine애플
'분류 전체보기' 카테고리의 글 목록 (5 Page)