분류 전체보기 310

Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks (EMNLP'19)

Contents Abstract BERT, RoBERTa 등의 모델이 STS(Semantic Textual Similarity)과 같은 분야에서 우수한 성능을 발휘하고 있다. 그러나, 두 문장 자체가 전부다 임베딩에 들어가고 계산되어야 하기 때문에 Computational Overhead가 발생한다. 해당 문제를 해결하고자 Sentence-BERT (SBERT)를 제안한다. BERT를 사용하여 문장 간의 유사도를 계산하면 65 시간이 소요되는 것에 비해, SBERT를 사용하면 5초 만에 이를 가능하게 한다. Introduction Siamese과 Triplet Networks를 활용한 BERT 즉, Sentence-BERT를 통해 Large-Scale의 입력 데이터에서도 문장 간의 유사도 비교(Seman..

[부스트캠프 AI Tech NLP] 네이버 부스트 캠프 3주차 회고

Contents Deep Learning 3주차에는 딥러닝이 어떻게 작동되는지에 대해서 학습했다. 기본적인 MLP 모델 부터, CNN, RNN, LSTM, Transformer 등 다양한 모델을 밑바닥부터 구현하는 것을 배웠으며, 마지막으로는 Generative Model 에 대해서도 다루었다. Generative Model은 AutoRegressive 모델과 Generative 모델로 나뉘고 각 방법론에 대한 대표 모델을 함께 다루고, Diffusion Model도 간략하게 다루었다. Diffusion Model은 Geverative Model 뿐만 아니라, 최근에는 추천 시스템에서도 사용되는 모델인데, 처음 접하는 것이 어려웠지만 쉽게 풀어서 정리해주셔서 이해하는 것이 쉬웠다. Vision Trans..

[프로그래머스] 방문 길이 - Python

해당 문제는 Summer/Winter Codding(~2018)에 출제된 문제로 Level 2에 해당한다. 11 by 11 Matrix로 구성된 좌표 평면에서 캐릭터가 이동하고, 캐릭터가 지나간 길 중 처음 걸어본 길의 길이를 구하는 문제다. 입력이 'ULURRDLLU'로 주어졌다면, 아래와 같이 그려볼 수 있고, 8과 9에 해당하는 이동은 처음 걸어본 길이 아니기 때문에 빼고 값은 7이 된다. 두 번째 예시의 경우, 벽에 붙은 경우에는 이를 무시한다. 해당 문제는 좌표 평면 + 집합으로 계산하면 쉽게 해결이 가능하다. 집합을 통해 시작 지점과 끝 지점을 양방향 그래프, 무향 그래프로 표현하고 전체 길이에서 2를 나누게 되면 처음 방문한 거리가 나온다. 만약에 문제에서 방향 까지 고려한다고 했으면, 코드..

Python/Algorithm 2023.11.23

[프로그래머스] 더 맵게 - Python

섞은 음식의 스코빌 지수 = 가장 맵지 않은 음식의 스코빌 지수 + (두 번째로 맵지 않은 음식의 스코빌 지수 * 2) 처음 문제를 접근했을 때는 아래와 같이 deque으로 접근했다. deque으로 접근하게 되면, 매번 Sorted를 통해서 정렬을 해주어야 하기 때문에 시간 초과가 발생했다. from collections import deque def solution(scoville, K): scv = deque(sorted(scoville)) cnt = 0 while min(scv) < K: cnt += 1 x, y = scv.popleft(), scv.popleft() scv.append(x + y*2) scv = deque(sorted(scv)) if len(scv) == 1: return -1 r..

Python/Algorithm 2023.11.22

[프로그래머스] 피로도 - Python

해당 문제는 DFS로 해결이 가능하다. DFS 는 깊이 우선 탐색으로, 한번에 던전을 갈 수 있는 끝까지 탐색한 후 이전 단계로 돌아가는 작업을하면 된다. 이때, 방문 여부와 방문 횟수를 초기화하고 다시 탐색을 하면 끝이다. answer = 0 def solution(k, dungeons): global answer def DFS(k, cnt, dungeons, visited): global answer answer = max(answer, cnt) # 최대 방문 횟수 for i in range(len(dungeons)): if visited[i] == 0 and k >= dungeons[i][0]: visited[i] = 1 # 방문 DFS(k-dungeons[i][1], cnt+1, dungeons,..

Python/Algorithm 2023.11.22

[Docker] ImportError: libGL.so.1: cannot open shared object file: No such file or directory

!apt-get update -y && apt-get install -y libgl1-mesa-glx && apt-get install -y libglib2.0-0 Docker 환경에서 OpenCV를 설치하는 과정에 발새하는 오류 유형 중 하나다. 이는, cv2에 해당하는 의존 패키지가 없을 때 발생하는 문제로, 아래 코드를 추가하면 쉽게 해결이 가능하다. RUN pip install opencv-python RUN apt-get update && apt-get install ffmpeg libsm6 libxext6 -y RUN apt-get update -y && apt-get install -y libgl1-mesa-glx Docker Image를 불러올 때부터 처리를 하고 싶으면 아래와 같이 작성할..

Docker 2023.11.21

[프로그래머스] 의상 - Python

해당 문제는 Level 2에 해당하는 문제로, "해시"로 분류된 문제다. 조합 공식을 이용해 아래와 같이 쉽게 풀이할 수 있다. from collections import defaultdict def solution(clothes): inform = defaultdict(list) answer = 1 for cl in clothes: k, v = cl inform[v] += [k] for k in inform.keys(): n = len(inform[k]) answer *= (n + 1) return answer - 1 모든 의상에 대해서 가지고 온 후, 모든 조합을 계산한다. 이때 모든 조합이란, 옷을 아무것도 입지 않는 경우도 포함하는 것이다. 그렇기 때문에 마지막에 -1을 해주어서 값을 도출하면 된다.

Python/Algorithm 2023.11.16

[부스트캠프 AI Tech NLP] 네이버 부스트 캠프 2주차 회고

Contents PyTorch PyTorch 기초 문법 등을 다루고, PyTorch를 통한 다양한 예제를 다루었다. 딥러닝을 학습하기 위해 필요한 DataLoader, Dataset, Collate_fn 등의 함수를 세부적으로 뜯어보고, PyTorch에 있는 함수 등을 상세하게 다루었다. Numeric Data, Unstructured Data (이미지, 자연어 처리) 등 전체적으로 다루는 것 같다. 아직 세부 트랙별 과제로 나온게 아니라 모든 데이터에 대해서 다루는 것 같다. 추가적으로, Wandb, TensorBoard, Ray 등 모델 학습 관리에 있어 필요한 모델들에 대해서 배우고, 분산 처리, 최적화 등과 관련된 모델에 대해서도 배워서 나중에 많은 도움이 될 것 같다.

[부스트캠프 AI Tech NLP] 네이버 부스트 캠프 1주차 회고

Contents 운이 좋게도, 부스트캠프 AI Tech 6기에 참여하게 되었다. 내가 참여한 트랙은 자연어처리(NLP) 트랙이다. 원래 추천 시스템을 전공했기 때문에 RecSys에 참가하려고 했으나, 최근 NLP 관련 공고가 많아지고 있으며, 추천 시스템만 다루어서 취업을 하기엔 다소 어려움이 있다 생각하여 NLP 트랙으로 지원하였다. Python, 수학 첫 1주차에는 Python 기초 강의와 AI에 필요한 수학 지식(확률론, 수리 통계학 등)을 개략적으로 다루는 것을 시작으로, 딥러닝 관련 기초 내용들을 다루었다. 아무래도 대학원 시절에 해당 내용을 다루어 상대적으로 쉽게 다룰 수 있었던 내용이었다. 내용이 그래도 쉽기는 하지만 양이 엄청나게 많다.. 매일 꾸준히 들어야 겨우 이수할 수 있을 것 같다...

[프로그래머스] n^2 배열 자르기

프로그래머스 월간 코드 챌린지 3에 출제된 Level 2 난이도의 문제다. 초기 풀이는 extend를 활용해서 아래와 같이 작성하였다. def solution(n, left, right): ans = [] for i in range(n): l = list(range(i+1, n+1)) ans.extend([l[0]]*(n-len(l)) + l) return ans[left:right+1] 일부 케이스에서는 통과가 되었으나, 시간 초과가 발생한다. list를 생성하고 extend하는 과정에서 오래 걸리는 것으로 확인된다. 시간 복잡도를 줄이기 위해 몫, 나머지 개념을 도입했다. (0, 0) (0, 1) (0, 2) (1, 0) (1, 1) (1, 2) (2, 0) (2, 1) (2, 2) 1 2 3 2 2..

Python/Algorithm 2023.10.23
반응형