전체 글 188

[알고리즘] 너비 우선 탐색 (BFS, Breadth-First Search)이란? 너비 우선 탐색 (BFS, Breadth-First Search) - 그래프에서 가까운 노드부터 우선적으로 탐색하는 알고리즘 - 큐 자료구조를 이용함 장점 - 출발노드에서 목표노드까지의 최단 길이 경로를 보장한다. 단점 - 경로가 매우 길 경우에는 탐색 가지가 급격히 증가함에 따라 보다 많은 기억 공간을 필요로 하게 된다. - 해가 존재하지 않는다면 유한 그래프(finite graph)의 경우에는 모든 그래프를 탐색한 후에 실패로 끝난다. - 무한 그래프(infinite graph)의 경우에는 결코 해를 찾지도 못하고, 끝내지도 못한다. 구현 예시(Python) from collections import deque # BFS 메서드 정의 def bfs(graph, start, visited): # 큐(Q.. 알고리즘 정복하기!/알고리즘 정리 2022. 1. 25.
[알고리즘] 깊이 우선 탐색 (DFS, Depth-First Search)이란? 깊이 우선 탐색(DFS, Depth-First Search) - 그래프 탐색에서 루트 노드에서 시작해 다음 분기로 넘어가기 전에 해당 분기를 완벽하게 탐색하는 방법 - 재귀 혹은 스택 자료구조를 이용함 장점 - 현 경로상의 노드들만 기억하면 되므로 저장공간의 수요가 비교적 적다. - 목표노드가 깊은 단계에 있을 경우 해를 빨리 구할 수 있다. 단점 - 해가 없는 경로에 깊이 빠질 가능성이 있다. 따라서 실제의 경우 미리 지정한 임의의 깊이까지만 탐색하고 목표노드를 발견하지 못하면 다음의 경로를 따라 탐색하는 방법이 유용할 수 있다. - 얻어진 해가 최단 경로가 된다는 보장이 없다. 구현 예시(Python) # DFS 메서드 정의 def dfs(graph, v, visited): # 현재 노드를 방문 처리.. 알고리즘 정복하기!/알고리즘 정리 2022. 1. 25.
NLP 기초 - KoNLPy를 활용한 한국어 형태소 토크나이징(Komoran, Kkma, Okt) 토크나이징(tokenizing) 일반적으로, 자연어 처리를 하기 위해서는 문장을 일정 의미를 지닌 작은 단어들로 나누어야 합니다. 가장 기본이 되는 단어를 토큰(token)이라 합니다. 말뭉치(혹은 문장)가 주어졌을 때, 이러한 토큰 단위로 나누는 작업을 토크나이징(tokenizing)이라고 합니다. 주로 텍스트 전처리 과정에서 사용되고, 이 과정에 따라 성능 차이가 날 수 있습니다. 한국어 토크나이징? 띄어쓰기와 단어의 변화가 적은 영어와 달리, 한국어는 문법적으로 복잡하고 한국어 토크나이징을 구현하기 위해서는 한국어 문법에 대해 깊이 있는 이해력이 필요합니다. 하지만, 이 기능을 지원하는 라이브러리가 존재하며 이를 사용해 한국어를 토크나이징 해보도록 하겠습니다. 형태소를 토큰 단위로 쓰며, 형태소는 .. 머신러닝 & 딥러닝/자연어처리 2021. 12. 3.
자연어처리(NLP)에 쓰이는 13가지 기초 용어 알아보기 자연어처리(NLP)에서 쓰이는 기초 용어들을 정리했습니다. 자연어 공부를 시작하면서 기초적인 용어부터 공부하고 있습니다. 기초 용어만 잘 숙지해도 앞으로의 공부 내용에 이해가 잘 될 것 같아 정리했습니다. 자연어처리(NLP) 기초 용어 1. 말뭉치(Corpus) : NLP작업에서 의미하는 텍스트 데이터 일반적으로 원시 텍스트와 연관된 메타데이터를 포함 2. 토큰(token) : 문법적으로 더이상 나눌수 없는 요소를 토큰이라 함 3. 토큰화(tokenization) : 토큰화는 주어진 말뭉치(텍스트)에서 토큰 단위로 나누는 작업을 의미함 4. 메타데이터(metadata) : 식별자, 레이블, 타임스탬프 등 텍스트와 관련된 어떤 부가 정보도 메타데이터가 될 수 있음. 메타데이터가 붙은 텍스트를 샘플(samp.. 머신러닝 & 딥러닝/자연어처리 2021. 11. 29.
파이토치 기초 텐서(Tensor) 인덱싱, 슬라이싱, 합치기(연결) - torch.index_select(), cat(), stack() 이번에는 텐서(Tensor) 인덱싱, 슬라이싱, 합치기를 알아보겠습니다. 주피터 노트북으로 실습하기 In [1] : import torch def describe(x): print("타입: {}".format(x.type())) print("크기: {}".format(x.shape)) print("값: \n{}".format(x)) - 라이브러리를 불러옵니다. - 결과 확인을 위한 간단한 함수를 정의합니다. In [2] : x = torch.arange(9).view(3,3) describe(x) - 실습을 위해서 .arange() 함수와 .view()함수를 사용해 3*3 텐서를 만듭니다. In [3] : describe(x[:2, :3]) In [4] : describe(x[1, 2]) - x[:2, .. 머신러닝 & 딥러닝/자연어처리 2021. 11. 28.
파이토치 기초 텐서(Tensor) 연산 및 유용한 함수 - torch.add(), arange(), view(), sum(), transpose() 저번 글(텐서 타입)에 이어서 기본적인 연산에 대한 공부입니다. 주피터 노트북으로 실습 In [1] : import torch def describe(x): print("타입: {}".format(x.type())) print("크기: {}".format(x.shape)) print("값: \n{}".format(x)) - 라이브러리를 불러온 후, 설명을 위한 간단한 함수를 정의합니다. In [2] : x = torch.randn(2,3) describe(x) - 실습을 진행하기 위해서 텐서 생성합니다. In [3] : describe(torch.add(x, x)) - torch.add() 함수를 사용해 연산 수행합니다. - torch.add(), torch.sub() 등 다양한 함수가 존재합니다. In.. 머신러닝 & 딥러닝/자연어처리 2021. 11. 27.
파이토치 기초 텐서(Tensor) 타입 - float, long, double 지난 글에 이어서 텐서의 타입에 대해서 알아보겠습니다. 텐서 타입과 크기 텐서에는 타입과 크기가 있습니다. torch.Tensor()의 기본 텐서 타입은 torch.FloatTensor입니다. 텐서 타입은 초기화할 때 지정하거나 나중에 다른 타입(float, long, double 등)으로 바꿀 수 있습니다. 처음 초기화 할 때의 타입 지정엔 두 가지 방법이 있습니다. 1. FloatTensor, LongTensor 같은 특정 텐서 타입의 생성자를 직접 호출한다. 2. torch.tensor()와 함께 dtype 매개변수를 사용한다. 주피터 노트북으로 실습 In [1] : import torch def describe(x): print("타입: {}".format(x.type())) print("크기: .. 머신러닝 & 딥러닝/자연어처리 2021. 11. 27.
파이토치 기초 텐서(Tensor) 다루기 - torch.Tensor(), rand(), randn(), zeros(), ones(), fill_(), from_numpy() 파이토치를 활용한 자연어 처리를 기본서부터 공부하고 있습니다 기본서에서 파이토치를 사용해 텐서를 만드는 기초부분을 공부했습니다. 주피터 노트북으로 실습 In [1] : import torch def describe(x): print("타입: {}".format(x.type())) print("크기: {}".format(x.shape)) print("값: \n{}".format(x)) - 파이토치를 불러오고, 텐서를 생성했을 때 확인하기 위한 간단한 함수입니다. In [2] : describe(torch.Tensor(2,3)) - torch.Tensor()를 사용해 차원을 지정하여 텐서를 랜덤하게 초기화 할 수 있습니다. In [3] : describe(torch.rand(2,3)) describe(tor.. 머신러닝 & 딥러닝/자연어처리 2021. 11. 27.