no image
[논문 리뷰] Augmented SBERT: Data Augmentation Method for Improving Bi-Encoders for Pairwise Sentence Scoring Tasks
1. 등장 배경 기존 BERT(Cross-encoder)는 STS Task를 해결할 때 두 문장 사이 [SEP] 토큰을 추가해 한번에 입력 처리 이 방법은 두 입력 문장의 self-attention을 통해 높은 성능 기록 하지만 두 문장 사이만의 관계를 확인하는 기존 BERT로 Semantic-Search나 Clustering에 활용하는 것은 매우 비효율적(massive computational overhead) 이를 해결하기 위해서 Siamese/Triplet 구조를 활용해 sentence-embedding을 얻을 수 있는 SBERT(bi-encoder)를 제안 SBERT는 BERT에 비해서 낮은 성능을 갖지만 적절한 dense-vector space(sentence-embedding)을 얻기 위해 많..
2022.03.24
no image
[논문 리뷰] Sentence-BERT : Sentence Embeddings using Siamese BERT-Networks
1. 등장 배경 STS Task에서 높은 성능을 얻은 BERT는 문장 사이 유사도를 비교하기 위해서 문장들을 [SEP] 토큰으로 분리해 한번에 입력으로 받아 처리 이 방식의 경우 두 입력 문장 사이 유사도를 높은 정확도로 얻을 수 있지만 한 문장과 가장 유사한 문장을 찾는 것은 매우 비효율적(massive computational overhead) 모든 경우의 수를 모두 차례로 대입해봐야지만 알 수 있음 한 문장과 유사한 다른 문장들을 찾는 것은 semantic-search, clustering 와 같은 분야에서 다양하게 활용되기 때문에 매우 중요. 이를 효율적으로 해결하기 위해선 정확한 sentence-embeddings를 얻는 것이 관건 sentence-embedding를 얻기 위해서 기존 BERT에..
2022.03.18
no image
[논문 리뷰] Transformer : Attention Is All You Need
1. 등장 배경 기존 sequence transduction(machine translation)에서 활용된 seq2seq 모델은 순차적으로 입력(sequence position $t$)을 받아 처리 seq2seq는 순차적으로 입력을 받아 간단하게 sequence를 표현할 수 있지만 long-range dependencies, parallelizable 문제가 발생 long-range dependencies를 해결하기 위해서 Attention을 도입했지만 fixed-encoder representation으로 context를 온전히 표현할 수 없는 seq2seq의 근본적인 문제는 해결 불가 2. 제안 입력을 순차적으로 처리하는 RNN을 버리고 Attention만을 사용한 Encoder - Decoder ..
2022.03.09
no image
[파이썬] 백준 1193번 분수 찾기
1193번: 분수찾기 첫째 줄에 X(1 ≤ X ≤ 10,000,000)가 주어진다. www.acmicpc.net 문제 무한히 큰 배열에 다음과 같이 분수들이 적혀있다. 1/1 1/2 1/3 1/4 1/5 … 2/1 2/2 2/3 2/4 … … 3/1 3/2 3/3 … … … 4/1 4/2 … … … … 5/1 … … … … … … … … … … … 이와 같이 나열된 분수들을 1/1 → 1/2 → 2/1 → 3/1 → 2/2 → … 과 같은 지그재그 순서로 차례대로 1번, 2번, 3번, 4번, 5번, … 분수라고 하자. X가 주어졌을 때, X번째 분수를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 X(1 ≤ X ≤ 10,000,000)가 주어진다. 출력 첫째 줄에 분수를 출력한다. 대각선 단위로 처리 홀..
2022.03.02
no image
시간, 공간 복잡도 Cheat Sheet
시간복잡도 알고리즘을 위해 필요한 연산의 횟수를 나타냄 코딩 테스트에서 작성한 프로그램이 모든 입력을 받아 처리하고 실행한 결과를 출력하는데까지 걸리는 시간 측정 특정한 크기의 입력에 대해 알고리즘이 얼마나 오래 걸리는 지를 나타냄 문제에서 가장 먼저 확인 ‘복잡도’라고 하면 보통 ‘시간 복잡도’를 의미 보통 코딩 테스트의 시간 제한 : 1 ~ 5초 / 파이썬 기준 대략 2000만번의 연산 ~ 1억번의 연산 처리 가능 시간 제한 문제를 해결할 때는 N의 범위에 따라 다른 시간 복잡도 알고리즘을 설계 시간 제한이 1초에 대한 문제에 대한 예시 N의 범위 복잡도 500 O($N^{3}$) 2,000 O($N^{2}$) 100,000 O($Nlog N$) 10,000,000 O($N$) 공간 복잡도 알고리즘을..
2022.02.26
no image
NLP Task 맛보기 - (3) NLG, Summarization
NLU와 QA에 대해서 다뤄보았으니 이번 포스팅에선 NLG(Natural Language Generation)의 전반적인 내용과 Extractive Summarization에 대해서 다뤄보겠습니다. NLG? NLG란 자연어 문장을 생성하는 기술입니다. 문장을 생성하기 위해서 주어진 정보(Text, Image, Video 등)을 이용합니다. 생성된 문장을 통해 주어진 정보를 축약하거나 보강할 수 있습니다. 또한 정보를 재구성하는 데도 도움을 줍니다. 이때 문장을 생성한다는 것은 결국 sequence $x$를 가장 잘 표현할 수 있는 token sequences를 얻는 것과 동일합니다. NLG Task는 크게 보면 문장 축약, 보강, 재구성으로 구성됩니다. 간단하게 살펴보면 다음과 같습니다. 문장 축약 1...
2022.02.23
no image
NLP Task 맛보기 - (2) NLU, QA
NLP는 NLU(Natural Language Understanding)와 NLG(Natural Language Generation)로 구분할 수 있습니다. 문자 그대로 NLU는 자연어 형태의 문장을 이해하는 기술이고 NLG는 자연어 문장을 생성하는 기술입니다. 결국 NLU와 NLG 모두 인간과 기계가 의사 소통할 수 있도록 도와주는 기술입니다. 이번 포스팅에선 NLU의 전반적인 내용과 QA에 대해서 다뤄보겠습니다. NLU? NLU는 자연어 형태의 문장을 이해하는 기술입니다. 이때 언어를 이해한다는 것은 2가지 측면으로 나눠서 생각할 수 있습니다. 바로 문법과 의미입니다. 따라서 기계가 만약 문법과 의미를 잘 알고 있다면 언어를 이해하고 있다고 할 수 있습니다. Syntatic : 언어를 이해한다면 주어..
2022.02.22
no image
NLP Task 맛보기 - (1)
이번 포스팅에선 매력적이라고 생각하는 NLP Task인 Dialogue Systems(대화 시스템)과 Language Modelling(언어 모델링)에 대해서 간단하게 다뤄보겠습니다. Dialogue Systems(대화 시스템) 대화 시스템은 문자 그대로 사람과 대화를 할 수 있는 시스템을 구성하는 것이 목표입니다. 따라서 대화 시스템 구성은 곧 '이루다' 만들기라고 할 수 있습니다. 대화 시스템의 경우 generation, retrieval-based 모델로 구분됩니다. 이 중에서 이루다가 사용했다고하는 retrieval-based 모델은 retrieval이란 단어에서 알 수 있듯이 기존에 미리 구축해둔 답변 DB에서 그럴듯한 대답을 여러개 골라서 그 중 최종적으로 답변을 선택합니다. 따라서 적절한 대..
2022.02.21
no image
Bias - Variance 이해하기
Intro 지도 학습 모델의 성능을 확인할 때는 과대 적합이나 과소 적합 여부를 정확하게 파악해야, 올바른 방법으로 모델을 개선할 수 있습니다. 과대 적합, 과소 적합은 Bias(편향)와 Variance(분산)과 깊은 관련이 있기 때문에 우선 편향과 분산을 이해하는 것이 중요합니다. 이번 포스팅에선 편향과 분산을 이해를 돕기 위한 내용을 정리했습니다. Bias - Variance? 먼저 그림을 통해서 편향과 분산에 대해서 이해해 봅시다. 그림에선 과녁의 중심과 다트 사이의 거리가 멀면 편향이 높다고 합니다. 또한 각 다트 사이의 거리가 멀게 되면 분산이 크다고 말합니다. 다트를 던지는 행위를 예측이라고 해봅시다. 이때 각 다트들의 위치는 곧 예측값이, 과녁의 중심은 실제값이 됩니다. 이를 통해 편향과 분..
2022.02.14
no image
[파이썬] 변수(Python vs C++)
C++의 변수 할당 과정 C++에서 int 형 변수를 선언한 후 값을 저장하고, 이를 다른 변수에 저장하는 과정은 다음과 같다. int a = 1; int b = a; 4 Byte(int) 만큼의 메모리를 할당한 후 a 라고 이름 붙인다. a에 5를 저장한다. 다시 4 Byte 만큼의 메모리를 할당한 후 b 라고 이름 붙인다. a 에 저장된 5를 b 에 저장한다. 저장된 변수의 메모리를 확인하면 다음과 같다. int a = 1; int b = a; cout
2022.02.08
no image
파이썬을 파이썬답게 : 내장 함수를 활용한 Pythonic 코드 작성법
파이썬을 파이썬답게 본 강의는 파이썬 문법을 이미 알고 있는 분들을 대상으로 만들어졌습니다. ##### 이런 분들께 추천합니다 * 파이썬 문법을 알고 계시는 분 * 알고리즘 문제를 조금 더 쉽게 풀고 싶은 분 * Python 코 school.programmers.co.kr 위 강의를 참고해 공부한 내용을 정리했습니다. int 다루기 몫과 나머지 구하기 divmod와 unpacking을 이용해서 쉽게 표현 가능 a = 7 b = 5 print(a//b, a%b) ↓ a = 7 b = 5 print(*divmod(a, b)) 진법 변환 int(x, base)으로 10진수 ↔ N 진수를 쉽게 변환 가능 num = '3212' base = 5 answer = 0 for idx, number in enumerat..
2022.02.08
no image
Cosine Similarity(코사인 유사도)와 Euclidean Distance(유클리드 거리) 알아보기
Intro 인공지능이 주어진 문제를 해결하기 위해서는 Feature(특성)을 적절하게 숫자로 변환해주어야 합니다. 특성을 성공적으로 숫자로 변환하는데 성공했다고 가정한다면, 특성은 벡터의 형태로 표현할 수 있습니다. 서로 다른 두 특성 벡터 사이의 관계를 분석하기 위해선 여러 기준이 있습니다. 이번 포스팅에선 그 중에서 많이 활용되는 Cosine 유사도와 Euclidean 거리에 대해서 알아보겠습니다. Cosine 유사도 코사인 유사도는 두 벡터의 내적을 벡터의 크기로 정규화하여 구하기 때문에, 두 벡터 사이 각도에 초점이 맞춰져있습니다. 따라서 각 Feature의 값 편차가 클 경우 효과적으로 사용할 수 있는 지표입니다. Euclidean(유클리드) 거리 유클리드 거리는 두 벡터 사이 차 성분을 제곱한..
2022.01.31