분류 전체보기

논문 및 개념 정리

[2018] Deep contextualized word representations(ELMo)

2018년도에 자연어 처리와 관련해서 중요한 개념을 소개한 논문이 여러개 발표되었다. 그 중 하나인 ELMo에 대해 간단히 정리하고자 한다. 논문은 여기서 확인할 수 있다. 핵심 개념: contextualized word representaion 0. Abstract 자연어를 token 단위로 임베딩하는 많은 방법들 중 Word2Vec, BoW 등이 유행하였다. 이중 Word2Vec은 단어들 간의 co-occurence 정보를 반영하는 방법을 통해 '주변 단어의 정보'를 활용하는 개념을 적용하였다. 하지만 어떤 token의 임베딩이 문맥과 의미와 관계 없이 동일하다는 단점이 있었다. 때문에 동음이의어를 처리할 때 문제가 발생한다. ELMo 논문에서는 이러한 한계점을 탈피하는 '문맥 정보를 반영한 임베딩'..

알고리즘

[2. 정렬] 분할정복법(Divide and Conquer)

정렬 알고리즘 종류 Bubble Sort, Selection Sort, Insertion Sort(간단하지만 느림) Merge Sort, Quick Sort, Heap Sort(빠름) Radix Sort(매우 빠름) 이 중 Merge Sort, Quick Sort, Heap Sort는 분할정복법을 적용하여 풀 수 있다. 분할: 풀고자 하는 문제를 작은 크기의 동일한 문제들로 분할 정복: 각각의 작은 문제들을 순환적으로 해결 합병: 작은 문제의 해들을 합하여 원래 문제에 대한 답을 구함(merging) 1. Merge Sort(합병정렬) 1) 정렬과정 - ① 분할: 배열의 길이가 1이 될때 까지 배열을 반복적으로 반으로 나눔($n \rightarrow \frac{n}{2} \rightarrow \frac{..

논문 및 개념 정리

[2017] Attention is All you Need

RNN 계열의 sequence model에 attention을 적용하여 비약적인 성능향상을 확인한 이후, attention만을 사용하면 과연 어떤 성능을 보여줄지에 대한 연구가 Attention is All you need 논문이다. 1. Introduction RNN, LSTM, GRU 등의 sequence modelling approach들은 long sequence에 취약하다는 한계점이 있다. 하지만 attention mechanism이 적용되면서 sequence에서의 위치와 관계없이 dependency를 반영할 수 있게 되었다. Transformer 모델은 recurrence라는 특성(과거의 output의 현재의 input으로 사용되는 점)을 없애고 attention mechanism만을 적용하여..

개발

[Docker] Docker 개념, build, 자주 쓰는 명령어

1. Docker란? 1) Docker Docker는 컨테이너 방식으로 프로세스를 격리해서 실행하고 관리할 수 있게 해주는 도구로, 계층화된 파일 시스템에 기반해 효율적으로 이미지(프로세스 실행 환경)을 구축할 수 있게 해준다. 일반적으로 가상머신(Virtual Machine)은 호스트 머신(Host Machine)에 '가상화된 하드웨어'와 'OS'를 구축하며, 시스템 분리를 통해 프로세스를 격리시킨다. 하지만 Docker Container는 프로세스의 실행 환경 자체를 격리시킨다. 이렇게 되면 호스트 머신 입장에서는 단순히 프로세스에 불과하지만, 사용자나 컨테이너 입장에서는 호스트와 무관하게 동작하는 가상머신으로 보인다. Docker는 Ubuntu 위에서 안정적으로 실행되므로 Ubuntu 사용을 적극 ..

개발

[git] 작업하면서 자주 쓰는 git 명령어

*작업 시작 전 반드시 main/devel 변경사항 확인하여 로컬 브랜치에 적용! git pull origin (branch 명) *새로운 원격저장소 등록하기 git remote add origin http://github.com/.... *원격 저장소에 새롭게 생성된 브랜치 받아오기 git remote update git checkout new_branch # 새로 생성된 저장소 받아오기 *브랜치 변경 git checkout (브랜치명) # local, remote의 브랜치로의 변경 *브랜치 간 다른 부분 확인 git diff는 두 개 브랜치의 차이점을 출력해준다. ## 현재 branch_A에 있고, branch_B와의 차이점을 알고 싶다고 할 때 git diff branch_B >>>> git dif..

개발

[ubuntu] 프로세스 실행시간 측정

ubuntu 환경에서 프로세스를 실행시킬 때 실행시간을 측정하는 방법을 소개하고자 한다. time명령어를 사용하면 프로세스 실행이 끝난 후 real, user, sys 3가지 실행시간을 출력한다. 1. Ubuntu 프로세스 실행시간 측정 실행할 명령어 앞에 time을 붙여서 실행하면 실행시간을 측정할 수 있다. time source script.sh '''script running logs''' '''script running logs''' '''script running logs''' ... real 2m51.954s user 3m25.265s sys 0m3.250s 2. time 명령어의 real, user, sys 구분 Real - process가 시작되어 끝나는데 걸린 시간(elapsed time..

개발

[ubuntu] 프로세스 백그라운드에서 실행

프로세스를 백그라운드에서 실행시키고, 로그를 저장하여 확인하는 방법을 소개하고자 한다. 백그라운드 실행 및 로그 확인 nohup ./script.sh & # 권한 755 이상이어야 함 tail -f nohup.out # nohup으로 돌아가는 프로세스 로그 실시간으로 확인

python 메모

[pandas] 다중 컬럼(multiple columns) apply 사용하기

pandas는 boolean 연산을 지원하기 때문에 column별 apply를 적용하여 데이터를 다루면 실행시간이 훨씬 빠르며 코드가 간단하다. 다중컬럼을 적용하는 방법은 몇 가지가 있지만 가장 직관적이며 기억하기 쉬운 방법을 소개하고자 한다. 1. 다중 컬럼(multiple columns)에 apply 사용하기 다음과 같은 데이터가 있다고 하자. data = pd.DataFrame( {'a':['A','A','B','B','B','C'], 'b':[1,2,5,5,4,6], 'c':[-1,3,-3,2,5,6] }) a b c 0 A 1 -1 1 A 2 3 2 B 5 -3 3 B 5 2 4 B 4 5 5 C 6 6 이때 항목 $b,c$가 모두 양수인 데이터만 남기고 싶다고 하자. $b$와 $c$ 컬럼을 모..

python 메모

[pandas] groupby를 활용한 그룹별 데이터 목록 리스트화

0. pandas groupby A groupby operation involves some combination of splitting the object, applying a function, and combining the results. This can be used to group large amounts of data and compute operations on these groups. pandas groupby 메소드는 전체 데이터를 그룹별로 나누고(splitting), 각 그룹별로 동일한 함수를 적용하고(applying), 그 결과를 하나로 합쳐(combine) 결과를 return 한다. - pandas groupby documentation - pandas groupby user gui..

개발

[ubuntu] 파일, 폴더 용량 확인

1. df 1) 디스크 별 용량 확인 df -h 2. du 1) 특정 디렉토리 용량 확인 du -hs folder -h 옵션은 사람이 읽을 수 있는 형태(mb, gb단위)로 출력해준다. 2) 현재 폴더에 있는 폴더 및 파일 용량 출력 du -hs * 3) 현재 폴더에서 파일 용량이 큰 순서대로 출력 du -h --max-depth=1 | sort -hr 4) 현재 디렉토리에서 상위 10개 폴더의 용량 보기 sudo du -hsx * | sort -rh | head -n 10 5) 디렉토리에 있는 폴더들의 모든 용량을 큰 순서로 정렬 # root dir sudo du -ah --max-depth=1 / | sort -hr # 현재 dir sudo du -ah --max-depth=1 . | sort -hr..

알고리즘

[2. 정렬] 기본적인 정렬 알고리즘

정렬 알고리즘 종류 Bubble Sort, Selection Sort, Insertion Sort(간단하지만 느림) Merge Sort, Quick Sort, Heap Sort(빠름) Radix Sort(매우 빠름) 1. Selection Sort(선택 정렬) 1) 정렬 과정 ⓪하나의 원소만 남을 때 까지 아래 루프를 실행한다.($O(n-1)$) - ①최대값 원소를 찾는다($O(n-1), O(n-2) \cdots O(1)$) - ②맨 오른쪽 원소를 최대값 원소로 교체한다($O(1)$) - ③정렬 대상인 배열에서 맨 오른쪽 원소를 제한다 2) 실행시간 ⓪루프는 $n-1$번 실행하며 ①최대값 원소를 찾는 과정은 $n-1, n-2,,, 1$번 실행한다. 시간복잡도: $T(n) = (n-1) + (n-2) + ..

개발

[Tensorflow] tfds를 활용한 custom dataset 생성

tensorflow_datasets(tfds)을 사용하여 custom dataset 생성하고자 한다. 구글에서 공개한 tensorflow 모델을 custom dataset으로 학습하는 세팅이다.(개발환경 세팅은 여기와 여기 참고) 작업환경 ubuntu18.04 + Docker Container *tensorflow_datasets와 tf.data 1) tensorflow_datasets(공식문서) 목적: 공개되어 있는 많은 데이터셋들의 원본을 tfds 모듈로 불러들일 수 있음 주요 특징: 연구에서 사용되고 있는 많은 데이터셋 원본 파일들(전처리 X)을 공개해둠(데이터셋 목록) tfds.features으로 데이터셋 정의(Audio, ClassLabel, Image, Sequence, Tensor, Text..

개발

[ubuntu] zip, unzip 명령어

먼저 zip 모듈을 설치해준다. apt-get update apt-get install zip 1. zip zip 명령어는 다음과 같은 형태이다 zip [생성될 압축 파일 명] [압축할 폴더 또는 파일1] [압축할 폴더 또는 파일2] ... zip -r data.zip folder1 folder2 # -r 디렉토리와 내부 파일 모두 압축함 -r 설정으로 압축할 때 특정 파일을 제거하고 압축하는 경우가 생길 수 있다. 이때는 -x 으로 제거할 파일 명을 설정한다. zip -r data1.zip [압축할 폴더 명1] -x '*.git*' zip -r data2.zip [압축할 폴더 명2] -x '*.ipynb*' 2. unzip unzip [파일이름].zip unzip [파일이름].zip -d [destin..

알고리즘

[1. 순환(Recursion)] 순환 알고리즘 설계

모든 Recursion은 Iterative 함수로 표현이 가능하다. 그 역도 성립한다. 두개를 비교해보면 Recursion을 어떻게 설계하는게 좋을지 알 수가 있다. 1. Recursion 설계 포인트 1) 임시적(implicit) 매개변수를 명시적(explicit) 매개변수로 바꾸어라 2) 적어도 하나의 base case(순환이 종료되는 시점)이 존재해야 하며, 모든 recursive case가 base case로 수렴해야 한다. Recursion 설계 예시 1) 이진탐색 - Iterative version def binary_search_iterative(data, target): n = len(data) assert n > 0 begin = 0 end = n-1 while bigin end: ret..

알고리즘

[1. 순환(Recursion)] Recursive하게 생각하기

순환하는 알고리즘을 익숙하게 받아들이기는 쉽지가 않은 것 같다. 함수의 출력물이 함수라고 생각되기 때문이다. 순환 알고리즘을 생각하기 위해서는 '바로 직전 스텝에서의 함수의 출력물을 사용한다', 또는 '현재 스텝에서의 함수의 출력물을 바로 다음 스텝에서 사용한다'는 방식의 사고가 필요하다. 즉 brute force처럼 스텝별로 탐색하도록 설계하는 것이다. (1) 문자열의 길이 계산 def string_length(string): assert type(string) == str if string=='': # base case return 0 else: return 1 + string_length(string[1:]) # recursive case (2) 문자열의 프린트 def print_forward(st..

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