본문 바로가기

분류 전체보기43

Khaiii 형태소 분석기 설치 및 사용방법 1. 개요 Khaiii 형태소 분석기는 카카오에서 공개한 형태소 분석기입니다. 기존 Konlpy에서 제공하는 형태소 분석기의 공통적인 특징은 사전과 규칙기반(명사/형용사 등등)으로 형태소를 분석해 주는 반면, khaiii는 데이터 기반 알고리즘을 이용해서 분석하였다고 합니다. 사용한 데이터의 양은 85만 문장과 천만 어절의 코퍼스를 이용하였습니다. khaiii가 데이터를 가지고 형태소 분석기를 만들 때 사용한 기계학습 알고리즘은 CNN(Convolution Neural Network)입니다. 대규모 언어 모델을 학습하기 위해서는 엄청난 양의 문장을 전처리 해야 하기 때문에 속도가 빠른 CNN을 사용한 것으로 보입니다. Khaiii는 어떤 단어의 주변단어의 갯수(Window size)와 임베딩 차원(Emb.. 2023. 11. 15.
Positional encoding과 Relative position representation은 어떻게 동작하는가 Overview 이번 포스트에서는 Position encoding에 대해 정리합니다. 'Attention is all you need'에서 제시한 모델인 Transformer에서 사용된 Position encoding은 self-attention이 order independent하기 때문에 모델에게 input token간의 순서를 알려주기 위해 사용되었습니다. 이후 많은 연구에서 기존 position encoding과는 약간 다른 관점에서의 position encoding이 제안되었습니다. 우선, 기존 Transformer 모델에서 활용된 positional encoding의 필요성과 그 개념에 대해 간단히 살펴본 후, T5 저자들이 활용한 relative position encoding에 대해 정리하고.. 2023. 10. 11.
[백준] Solved.ac Gold 3 & Class 4 달성! 저번 Gold 5 달성 이후 간만에 근황이네요 친구들끼리 진행하는 알고리즘 스터디는 진작에 끝났지만 그래도 꾸준히 했더니 어느새 Gold 3과 Class 4를 달성하게 되었습니다...!! Class 4는 제가 처음 알고리즘 스터디를 시작할 때 목표로 설정한 것들 중 하나이기 때문에 꽤나 뿌듯했습니다! 앞으로는 Class 5문제를 천천히 풀면서 Class 3,4 문제들 위주로 좀 더 풀어봐야 할 것 같습니다. 저는 아직도 Dynamic Programming문제는 너무 어렵네여... 그리고 문제 유형 편식을 하지 않으려고는 노력했는데, 아무래도 편식을 좀 했을 것 같아서 그 부분에 대한 보완도 할 겸 클래스 올리기를 메인으로 하는건 당분간 보류해야할것 같습니다. 다음 목표는 저의 최종 목표이기도 한 Plat.. 2023. 8. 2.
[Hugging Face🤗] Padding & Truncation 정리 보통 transformers에서 커스텀 LLM 모델을 만들 때, tokenizer도 미리 pretrained되어있는 모델을 주로 사용한다. 예를들어 RobertaTokenizer를 사용한다고 가정해보자. from transformers import RobertaTokenizer #tokenizer tokenizer = RobertaTokenizer.from_pretrained('roberta-base',sep_token = '') 보통은 텍스트 데이터를 모델에 입력할 때, 모든 텍스트의 길이를 통일시켜 주는 경우가 많다. 하지만 문장의 길이가 모두 다르기 때문에 통일을 시켜 주는데, 이때 해주는 작업이 padding 작업이다. Padding은 짧은 문장을 길게 늘일때 사용하는 기법으로, 예를들어 입력 문.. 2023. 6. 28.
[백준] 14500번 - 테트로미노 문제 출처 : https://www.acmicpc.net/problem/14500 14500번: 테트로미노 폴리오미노란 크기가 1×1인 정사각형을 여러 개 이어서 붙인 도형이며, 다음과 같은 조건을 만족해야 한다. 정사각형은 서로 겹치면 안 된다. 도형은 모두 연결되어 있어야 한다. 정사각형의 변 www.acmicpc.net 백준 14500번 - 테트로미노의 풀이와 개인적인 저의 생각을 정리하였습니다. [문제] [입력과 출력] 우선 문제를 읽으면 BFS 혹은 DFS로 접근을 해야겠다는 생각이 들게 됩니다. 여기서 저는 BFS는 주변을 순차적으로 탐색하기 때문에 적절하지 않으므로 DFS를 이용하여 탐색을 해야겠구나! 라고 접근하였습니다. 그렇다면 DFS를 이용하여 접근을 하게 된다면 다음과 같이 코드를 작.. 2023. 6. 21.
Solved.ac 골드 5 달성! 사실 그동안 꾸준히 PS를 하지는 않았지만, 친구들이랑 알고리즘 스터디를 계기로 나름 꾸준히 할 수 있는 계기가 생겨서 문제를 계속 풀었다. 처음에는 자료구조 이론만 대강 알고 있었고 실제로 문제를 많이 풀어본 적은 많이 없어서 처음에 문제 푸는게 너무 어려웠지만, 문제 몇개를 계속 풀다 보니 이제는 조금(?)은 자신감이 생긴 것 같다. 앞으로는 딱 일년만 열심히 해서 플래티넘을 달아보는 게 목표다! 2023. 6. 13.
GPU 메모리 확보하기 모델을 돌릴 때 OutofMemory error가 발생하는 경우가 있다. 보통은 이런 경우에는 - 커널을 재시작하기(나도 모르게 모델이 여러개 올라가 있는 경우가 있다) - 사용하지 않는 변수를 제거하기 - Batch size를 줄여서 학습해보기 - 모델 자체의 네트워크 사이즈를 줄여보기 - inference 단계에서는 자동미분(torch.no_grad()) 사용하기 를 하는 경우가 일반적이지만, torch에서 캐쉬를 지워주는 함수도 사용해 볼 수 있다. 사용 방법은 torch.cuda.empty_cache()를 실행시켜 주면 된다. 2023. 6. 13.
논문을 Review 한다는 것 논문을 읽을 때 꼭 답을 할 수 있어야하는 좋은 질문을 우연히 발견하게 되어서 공유합니다. 1. 이 논문이 나오게 된 역사적인 이유는? 즉, 이 분야에서 어떤 연구들이 진행되어왔고 어떤 맥락에서 이번 연구가 시작된 것인가? 2. 이 논문은 어떤 질문에 답하기 위해 진행된 연구인가? 한 문장으로 적으시오. 3. 그 질문에 답하기 위해 저자들은 어떻게 연구를 진행했는가? 한 그림(figure) 혹은 결과 부분(result)의 한 두 문단을 각각 한 문장으로 요약해서 논리적 흐름을 적으시오. 4. 이 논문이 출판 될 수 있었던 가장 중요한 부분, 또는 이 논문의 가장 중요한 새로운 점(novelty)를 지적하시오. 5. 이 논문의 결론(conclusion) 또는 부족한 점(limitation)을 바탕으로 후속.. 2023. 5. 4.
Selenium으로 웹사이트(디시인사이드) 크롤링하기 이번 포스트에서는 Selenium으로 국내 온라인 커뮤니티중 하나인 DC Inside(디시인사이드)를 크롤링하는 방법에 대해 정리하고자 합니다. 일반적으로 웹에서 데이터를 가져올 때 해당 사이트에서 제공하는 공식 API가 있으면 가장 좋지만, 그렇지 않은 경우에 request와 BeautifulSoup을 이용해서 크롤링을 진행할 수 있습니다. 하지만 request를 사용하는 경우 sleep()을 사용했음에도 불구하고 접속 차단을 하는 사이트가 존재합니다. 또한 크롤링 타깃 사이트가 동적페이지인 경우, request를 이용하여 동적 페이지를 크롤링 못하는 건 아니지만(예시 : 네이버 데이터랩 크롤링) 개인적으로 다른 사이트에 적용 해 보았을 때 잘 안 되는 경우가 있었습니다. 이러한 경우에는 request.. 2023. 4. 15.