단어들이나 문장들을 벡터로 표현이 가능할 경우 이 벡터간의 거리를 이용해서 유사성을 알 수 있으며 본 포스팅은 대표적으로 많이 활용하는 코사인 유사도를 설명하고 문장간의 유사도를 Python으로 구현해보도록 한다. 코사인 유사도는 벡터간의 코사인 각도를 이용하여 서로간에 얼마나 유사한지를 산정한다. 각도를 유사도로 판별하기 때문에 거리가 중요하지 않을 경우 사용되는 방식이라 할 수 있겠다. 예를 들어 다음과 같은 문장이 있다고 가정을 해보자 첫번째 문장 : 안녕하세요 저는 자비스 입니다. 두번째 문장 : 안녕하세요 저는 자비스 입니다. 안녕하세요 저는 자비스 입니다. 위 문장에서는 동일한 내용을 다루고 있다. 공백기준으로 벡터화를 한다면, 첫번째 문장은 [안녕하세요, 저는, 자비스, 입니다] 정도로 벡터..
희소 표현(Sparse Representation) 희소 표현(Sparse Representation)이란 데이터가 희소(부족)한 형태를 띄는 것을 말한다. 즉 대부분의 값이 0인 경우를 뜻하며, 원핫 인코딩(One Hot Encoding)이 대표적인 예이다. 원핫 인코딩(One-Hot Encoding) 개념과 구현해보기 원핫 인코딩(One-Hot Encoding) 개념과 구현해보기 사람과 컴퓨터는 데이터를 바라보는 형태가 다르다 인간과 컴퓨터는 데이터를 바라보는 형태가 다르다 사람은 어떤 물체를 보더라도 숫자로 인식하지는 않지만 컴퓨터에게 인공지능을 구현시 needjarvis.tistory.com 희소표현이 구현하기에는 매우 편리하지만, 몇몇가지 약점들이 있다. 우선 Feature가 많아질수록 데이터 ..
생성적 적대 신경망(Generative Adversarial network)은 GAN 혹은 GANs(networks)이라고 표기하며, 한국에서는 간이라고 많이 말하지만 영어 발음으로는 겐, 갠이라 발음한다. 보통 한가지에 치중된 신경망 모델들과 다르게 GAN은 2가지(생성자, 판별자) 종류의 신경망을 가지고 있으며, 이를 통해서 진짜 같은 가짜를 만들어내는 것을 목표로 두고 있는 딥러닝(Deep Learning) 알고리즘이다. GAN 단어의 의미 생성적(Generative) 일단 메인이 되는 것은 바로 생성이라고 할 수 있으며 GAN의 첫번째 단어인 Generative(생성적)는 바로 데이터를 스스로 생성하는 생성자(Generator)를 뜻한다. 데이터를 생성하는 것은 훈련 세트에 따라 결정되기에 예를 ..
Okt(Open Korean Text)는 트위터에서 만든 오픈소스 한국어 처리기인 twitter-korean-text를 이어받아 만들고 있는 프로젝트이다. 기존 형태소 분석기인 트위터 형태소 처리기의 깃헙(github)을 들어가면 github.com/twitter/twitter-korean-text twitter/twitter-korean-text Korean tokenizer. Contribute to twitter/twitter-korean-text development by creating an account on GitHub. github.com 기존 트위터 형태소 분석기에 다음과 같은 내용이 있다. 트위터에서 넘어온 깃허브 주소는 아래와 같고 github.com/open-korean-text/o..
현재 유니코드로 대부분의 문자열을 추출하기 때문에 본 포스팅도 유니코드를 기반의 한글 자모 추출 내용이다. 우리가 한글에서 자모를 추출하기 위해서는 유니코드에서 한글이 어느위치에 있는지를 알아야 한다. (참고로 파이썬에 관련된 자모 추출이 궁금하면 포스팅 맨 하단의 링크글로 들어가면 된다.) 유니코드는 마구잡이로 한글을 넣지 않았고 초성, 중성, 종성의 조합으로 값을 넣게 되었는데 반대로 이 조합을 알면 현재의 한글을 초성, 중성, 중성으로 분리할 수 있다는 말이 된다. 비슷한 개념으로 영어의 소문자(97~122)와 대문자(65~90)의 변환을 32로 빼고 더하는 것으로 변환할 수 있는 것과 유사하다. 유니코드에서 한글의 시작점은 AC00값이며, 이 값은 한글로 "가"이다. 즉 이 값을 기준으로 유니코드..
아스키코드(ASCII) 아스키코드(American Standard Code for Information Interchange, ASCII)는 아스키의 말을 풀어 썼을 때 알 수 있는 것처럼 오로지 미국을 위한 표준 부호였다. 초창기 컴퓨터는 영어권에서 사용됐으며, 당시 그들은 전세계의 말을 쓸 필요가 없다 생각했기에 1bit의 체크섬(Checksum)용을 제외하고 라틴 문자, 숫자 그리고 특수 문자들을 128개 모와 7bit의 아스키코드를 만들었다. 그러나, 컴퓨터의 발달로 전세계가 각자 부호표를 만들어 수많은 캐릭터셋(ex: euckr, cp949)을 만들게 되었고 이 캐릭터셋은 최근 10년 들어서 UTF-8로 대동단결하게 된다. 참고로 10년전만 하더라도 수많은 국내 사이트들이 EUC-KR로 사이트를..
자연어처리(NLP)에서 토크나이징(Tokenizing)이란 데이터를 처리하기 위해서 최소한의 의미를 기반으로 토큰(Token)을 뽑는 것을 말한다. 형태소(Morpheme)는 언어에서 의미를 가지는 가장 작은 단위이기 때문에 토크나이징을 한다는 것은 사실 형태소를 기반으로 쪼개는 경우가 가장 많고, 결국 필드에서 형태소 분석는 토크나이징(자연어처리에 한함)과 유사한 의미로 사용된다. 그리고 형태소 분석(Morphological analysis)은 품사 기준으로 데이터를 분석하기 때문에 품사 태깅(part-of-speech tagging, POS tagging)과 거의 동의어(토크나이징 = 품사태깅 = 형태소 분석)로 사용한다. 실제로 필드에서 형태소 분석이란 대부분 단어를 품사 기준으로 분리하고 품사로 ..
랜드마크(Landmark)라는 것은 탐험가 혹은 여행가들이 원래의 장소를 돌아오기 위해서 표식을 해두는 것을 말하였지만 현대에 들어서는 유명한 장소를 랜드마크라고 한다. 예를 들어 서울의 랜드마크 중 하나로 63 빌딩, 롯데 타워, 남산 타워 등 다양한 랜드마크들이 있다. Face Landmark는 얼굴의 특징점을 말한다. 예를 들어 동공의 위치, 입술의 좌표, 눈썹의 좌표 등 이런 값들을 추출하여 x,y 값으로 리턴을 하는데 대표적으로 Python의 라이브러리 중 dlib, opencv로 랜드마크를 추출하는 방법이 있으며 본 포스팅에서는 opencv로 얼굴의 특징점들을 추출하는 것을 보여드리고자 한다. 라이브러리 설치 pip install dlib pip install imutils pip instal..
이 포스팅은 직접 구현해본 나이브 베이즈 분류기 #1에 연이은 포스팅으로 #1을 아직 못보신 분들은 이전 포스팅을 읽고 오셔야 이해가 될 것이다. #1 포스팅을 보고 싶으면 본 포스팅의 끝에 있는 연관 글을 찾고 해당 글을 클릭하면 된다. 빈도테이블의 값 출력(디버깅) for(String feat : freqMap.keySet()) { System.out.println(feat + "=>" + freqMap.get(feat)); } temperature=>{mild={no=2, yes=4}, cool={no=1, yes=3}, hot={no=2, yes=2}} humidity=>{normal={no=1, yes=6}, high={no=4, yes=3}} outlook=>{rainy={no=2, yes=3..
이 포스팅은 머신러닝 알고리즘 중 하나인 나이브 베이즈 분류기를 자바(Java)로 구현해본 것으로 개발자가 쉽게 접근할 수 있는 것을 목표로 합니다. 쉽고 강력한 머신러닝, 나이브 베이즈 분류 (Naive Bayes Classification) 쉽고 강력한 머신러닝, 나이브 베이즈 분류 (Naive Bayes Classification) ※ 베이즈 정리를 모르는 분들은 나이브 베이즈를 알기에 앞서 베이즈 정리에 대해서 먼저 이해해야 한다. 확률의 함정을 간파, 베이즈 정리(Bayes' Theorem) 확률의 함정을 간파, 베이즈 정리(Bayes' T needjarvis.tistory.com 포스팅에서 설명하는 스텝 즉 나이브베이즈의 정석인 사전확률, 우도, 사후확률을 쉽게 이해하고자 각각 메소드로 구현을..
자모의 정의 자모(子母, 字母)또는 낱자는 문자 체계의 한 요소로서 한글에서는 모음인 ㅏ나 ㅗ, ㄱ,ㅎ 따위를 일컫는다. 알파벳 체계에서도 위와 같은 특징이 존재하고 있으며 구어 형태로 쓰이는 모든 언어에서 자모는 음성학과 연관된다. 위키피디아 - 자모 자모 분리 자모를 분리하기 위해서는 jamo 라는 패키지를 설치하여 진행한다. github.com/JDongian/python-jamo JDongian/python-jamo Hangul syllable decomposition and synthesis using jamo. - JDongian/python-jamo github.com 위 깃허브는 자모 패키지를 만든 분의 깃헙이고, 패키지가 어떻게 처리가 되는 것인지 대충 알고리즘을 파악하면 좋을 것 같다...
파이썬은 데이터 분석에 매우 강력한 기능을 제공하고 있고, 나이브베이즈와 같은 머신러닝은 sklearn(sk런 혹은 사이킷 런이라고 말함)에서 다양한 라이브러리를 제공한다. 나이브베이즈에 대해서 제대로 모르는 분들이 계시다면, 우선 필자가 작성했던 나이브베이즈 포스팅을 보면 이해가 될 것이다. 쉽고 강력한 머신러닝, 나이브 베이즈 분류 (Naive Bayes Classification) 쉽고 강력한 머신러닝, 나이브 베이즈 분류 (Naive Bayes Classification) ※ 베이즈 정리를 모르는 분들은 나이브 베이즈를 알기에 앞서 베이즈 정리에 대해서 먼저 이해해야 한다. 확률의 함정을 간파, 베이즈 정리(Bayes' Theorem) 확률의 함정을 간파, 베이즈 정리(Bayes' T needja..