전체 글 310

[프로그래머스] 정수 삼각형 - Python

7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 위와 같은 삼각형의 꼭대기에서 바닥까지 이어지는 경로 중, 거쳐간 숫자의 합이 가장 큰 경우를 찾아보려고 합니다. 아래 칸으로 이동할 때는 대각선 방향으로 한 칸 오른쪽 또는 왼쪽으로만 이동 가능합니다. 예를 들어 3에서는 그 아래칸의 8 또는 1로만 이동이 가능합니다. 삼각형의 정보가 담긴 배열 triangle이 매개변수로 주어질 때, 거쳐간 숫자의 최댓값을 return 하도록 solution 함수를 완성하세요. 위 형태로 Triangle을 구성하면 [[7], [3, 8], [8, 1, 0], [2, 7, 4, 4], [4, 5, 2, 6, 5]] 가 된다. 먼저 문제를 풀기 전에 Index Error가 발생하지 않도록 각 행의 양 옆에 [0]을 P..

Python/Algorithm 2023.12.27

[프로그래머스] 큰 수 만들기 - Python

문제 설명 어떤 숫자에서 k개의 수를 제거했을 때 얻을 수 있는 가장 큰 숫자를 구하려 합니다. 예를 들어, 숫자 1924에서 수 두 개를 제거하면 [19, 12, 14, 92, 94, 24] 를 만들 수 있습니다. 이 중 가장 큰 숫자는 94 입니다. 문자열 형식으로 숫자 number와 제거할 수의 개수 k가 solution 함수의 매개변수로 주어집니다. number에서 k 개의 수를 제거했을 때 만들 수 있는 수 중 가장 큰 숫자를 문자열 형태로 return 하도록 solution 함수를 완성하세요. 제한 조건 number는 2자리 이상, 1,000,000 자리 이하인 숫자입니다. k는 1이상, number의 자릿수 미만인 자연수입니다. 해당 문제는 탐욕법(Greedy) 방식으로 접근하는 문제다. d..

Python/Algorithm 2023.12.27

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

Contents 프로젝트 주제 Sentence Textual Similarity (STS): 입력으로 주어진 두 문장이 의미적으로 얼마나 유사한지 판단하는 Task. STS에 사용되는 모델 톺아보기. RoBERTa, SimCSE, BERT, Sentence-BERT, Electra RoBERTa의 경우 token_type_ids를 입력으로 받지 않기 때문에 Model 입력에 token_type_ids를 사용하지 않아도 됨. Separate Token [SEP] 대신 , 등으로 문장을 구분하기 때문에 Sentence 1과 Setence 2를 Concatenation 단계에서 sentence 1 sentence 2 로 사용함. Pytorch Lightning이 아닌 Pytorch로 구현 Pytorch Lig..

[Wandb] Wandb 사용법 + Sweep with Pytorch

Contents Weight & Biases Wandb (Weight & Biases)는 MLOps 플랫폼이며, 딥러닝을 학습하기 위해 필요한 기능들을 제공한다. wandb.ai 에서 회원가입을 하게 되면 API 키를 발급받을 수 있다. 해당 API를 통해 wandb에 login하면 사용할 수 있다. pip install wandb wandb.login() Wandb init Wandb를 사용하기 위해서는 처음에 init을 설정해주어야 한다. 기본적으로 하이퍼 파라미터(Hyper-Paramters)들은 Yaml로 관리하는 것이 편하기 때문에 아래와 같이 사용했다. learning_rate: 1e-5 batch_size: 64 epochs: 10 import yaml def load_yaml(path): ..

Python 2023.12.21

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

이번주차에는 STS (Sentence To Similarity) Task 를 다루었다. 그리고, N21, N2N, N2M 등 NLP Task의 다양한 유형에 대해서 다루어 보았다. 간단한 예제를 다루게 되고, 예제를 통해 실제 작동되는 방법을 다룰 수 있어서 좋았다. 피어 세션 피어 세션에는 Sentence BERT, SimeCSE, RoBERTa 등 NLP 관련 과거 논문 및 Self-supervised Learning에 대해서도 다루어서 NLP Task를 더 깊게 이해할 수 있게 되었다. STS Competition KoSTS 데이터를 바탕으로 실험을 진행하여, 리더보드에 성능을 비교하게 되었는데, 팀원분들이 다들 열심히 해주셔서 새로운 방법으로도 접근할 수 있게 되고 다른 시각을 배울 수 있게 되어..

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

어느덧 부스트캠프 과정이 5주차에 달했다. 5주차에는 NLP 기초 이론, RNN, LSTM, GRU, Transformer 등의 모델 구현을 상세히 다루고, 예제를 통해 놓쳤던 부분을 디테일하게 다룰 수 있었다. 그리고 BERT를 직접 fine-tuning 하는 방법도 다루어서 좋았다. 피어세션 지금 구성된 팀에서는 피어세션 때 매번 새로운 논문을 리뷰하고 있다. 이번주에 내가 발표한 논문은 " Improve Transformer Models with Better Relative Position Embeddings" 라는 논문으로, Position Embedding을 학습해서 Position 정보에서 조금 더 Abundent한 정보를 추출할 수 없을까? 라는 아이디어로 시작되었다. 기존에도 Relativ..

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 등 모델 학습 관리에 있어 필요한 모델들에 대해서 배우고, 분산 처리, 최적화 등과 관련된 모델에 대해서도 배워서 나중에 많은 도움이 될 것 같다.

반응형