목록Python/챗봇 (9)
minhui study
이번에는 문장 자동 생성을 해보자. 마르코프 체인과 LSTM/RNN은 서로 다른 방식의 문장 생성 방법으로 마르코프 체인은 확률을 기반으로 문장을 이어 붙여 나가는 방법이며, LSTM/RNN은 머신러닝으로 다음에 위치할 문장을 예측해서 문장을 생성하는 방법이다. 마르코프 체인이란? 마르코프 체인은 마르코프 성질을 지닌 이산 확률 과정을 의미하며 이를 이용하면 기존 문장을 기반으로 문장을 자동으로 생성할 수 있다. 마르코프 성질(Markov property)이란 과거의 상태를 무시하고, 현재의 상태만을 기반으로 다음 상태를 선택하는 것을 의미한다. 예를 들어 현재 상태를 q라고 표현했을 때 다음 상태 p로 이동할 확률은 현재 상태와 다음 상태만을 기준으로 결정되므로 P( q | p )이다. 또한 마르코프 ..
이번에는 레벤슈타인 거리 계산과 n-gram을 사용해 단어 또는 문장의 유사도를 분석하는 방법을 알아보자 레벤슈타인 거리 "레벤슈타인 거리(Lvenshtein distance)"는 두 개의 문자열이 어느 정도 다른지를 나타내는 것이다. 이를 "편집 거리(Edit Distance)"라고도 부른다. 철자 오류 수정, 비슷한 어구 검색 등에 사용되고 있는데 의학 분야에서는 DNA배열의 유사성을 판단할 때도 사용하고 있다. 예를 들어 "가나다라"와 "가하마라"는 얼마나 비슷할까? 레벤슈타인 거리는 "가나다라"를 "가마바라"로 편집할 때 몇 번의 문자열 조작이 필요한지에 주목해서 단어의 거리를 구한다. 횟수 편집 조작 결과 0 - 가나다라 1 "나"를 하"로 변환 가마다라 2 "다"를 "마"로 변환 가마바라 이처..
MLP로 텍스트 분류하기 MLP(Multi Layer Perception, 다층 퍼셉트론)는 입력층과 출력층 사이에 각각 전체 결합하는 은닉층을 넣은 뉴럴 네트워크이다. 여기서 중요한 점은 텍스트 데이터를 숫자로 표현할 수 있는 벡터로 변환한다는 것이다. 머신러닝 프레임워크는 글을 그대로 입력할 수 없으므로 텍스트 데이터를 숫자로 변환해야 한다. 또한 텍스트 데이터는 이미지 데이터와 다르게 길이가 다른데 이를 고정된 길이의 벡터로 어떻게 변환할 수 있는지 살펴보자 즉, 가장 기본적인 형태의 인공신경망 구조이며, 하나의 입력층(input layer), 하나 이상의 은닉층(hidden layer),그리고 하나의 출력층(output layer)로 구성된다. MLP는 층의 갯수(depth)와 각 층의 크기(wi..
텍스트 분류 텍스트 분류에는 여러 가지 방법이 사용되는데 자주 사용되는 방법으로는 베이즈 정리를 이용한 "베이지안 필터(Bayesian filter)"가 있다. 학습을 많이 시킬수록 필터의 분류 능력이 오른다는 특징이 있어 스팸 글을 구분할 때 많이 사용되고 문자의 카테고리 분류에도 많이 사용된다. 머신러닝은 "교사 학습", "비교사 학습", "강화 학습"이라는 3가지 종류가 있는데 베이지안 필터는 이 중에서 "교사 학습"에 해당한다. *교사 학습(Supervised learning)이란? 훈련 데이터로부터 하나의 함수를 유추해내기 위해 기계 학습의 한 방법으로 데이터와 답을 함께 줘서 학습시켜 머신러닝 모델을 구축하면 새로운 데이터를 줬을 때 답을 예측할 수 있다. 종류 설명 교사 학습 데이터와 함께 ..
Word2Vec란 문장 내부의 단어를 벡터로 변환하는 도구이다. 단어의 연결을 기반으로 단어의 연관성을 벡터로 만들어준다. 즉, 단어를 벡터로 표현해주는 것이다. 이를 활용하면 단어의 의미를 파악할 수 있다. 단어를 벡터로 만들면 단어와 단어의 유사도를 쉽게 확인할 수 있다. 다음 그림은 Word2Vec으로 글을 읽게 하고 단어를 2차원 그래프에 그린 것이다. 그림을 보면 "아버지"와 "어머니"는 "사랑"과 가깝고 "인생"과 "개", "고양이"는 멀리 있다는 것을 알 수 있다. Word2Vec을 이용하면 의미를 선형으로 계산할 수 있는데 예를 들어 "아빠 - 남자 + 여자" 라는 계산을 하면 "엄마"가 나온다. Gensim의 Word2Vec으로 "토지"를 읽어오기 다음은 konlpy의 Okt 형태소 분석..
형태소 분석 수많은 형태소 분석 라이브러리가 오픈소스로 배포되고 있고 파이썬에서도 사용할 수 있다. 파이썬 한국어 형태소 분석 라이크러리 KoNLPy를 이용하면 한나눔, 꼬꼬마, Komoran, MeCab, 트위터 등의 형태소 분석기를 쉽게 사용할 수 있다. 이 중에서 트위토 형태소 분석기를 사용해보자 from konlpy.tag import Okt okt=Okt() malist = okt.pos("아버지 가방에 들어가신다.", norm=True, stem=True) print(malist) Okt()메서드로 Okt객체를 생성하고 pos() 메서드에 형태소 분석을 수행할 문장을 지정하기만 하면 된다. 이 때 두가지 옵션을 지정했는데 사실 지정하지 않아도 실행은 된다. (1) norm옵션을 지정하면 "그래..
서포트 벡터 머신 알고리즘 서포트 벡터 머신은 데이터 분포를 나누는 지도학습의 분류에 해당하며 지도학습 모델로서 라벨이 달린 이진 분류 문제에 주로 사용된다. 서포트 벡터 머신 알고리즘에서는 각 데이터 항목을 다차원의 벡터 공간에 점으로 표시한다. 예를 들어 두 보기 중 하나의 보기를 선택하는 데 영향을 주는 요소가 2가지이면 2차원 모델이 된다. 이번 글에서는 이해하기 쉽도록 2차원 공간에 있는 두 그룹을 분류하다는 가정하에 서포트 벡터 머신을 알아볼 것이다.여기서 중요한 점은 밑에 그림들 처럼 두 그룹을 매우 잘 구분하는 직선을 찾는 것이다. 서포트 벡터 머신은 데이터를 선형 또는 비선형으로 분리하는 최적의 경계를 찾는 알고리즘이다. 서포트 벡터 머신의 동작 원리 첫 번째. 어떻게 구룹을 나눌 것인가..
의사결정나무 Decision tree 의사결정나무는 데이터 분포를 나누는 지도학습의 분류에 해당하는 모델 연속적인 질문을 통해 예측 결과를 제공하는 예측 모델로서 사람이 조건에 따라 행동하고 판단하는 것을 머신러닝에 응용한 것이 의사결정나무다. 즉, 의사결정에 필요한 규칙을 나무 형태로 분류해 나가는 분석 기법을 말한다. ▶ 알고리즘 해석이 용이하다. : 처리 결과를 해석하기가 쉬운 점이 의사결정나무의 가장 큰 장점이다. 의사결정나무 모델을 이용하여 데이터를 예측하는 경우도 있고 데이터가 분류되어가는 과정에서 분류의 기준이 되는 중요한 아이템을 찾는 경우에도 쓰일 수 있다. ▶ 수치형, 범주형 데이터도 적용이 가능하다. : 입력 데이터로 숫자 데이터나 범주 데이터 등 다양한 데이터 형식을 사용할 수 있다..