Python-이론/python-인공지능(17)
-
마르코프체인을 통해 뒤에 나올 단어 예측해보기
마르코프 체인을 통해 뒤에 나올 단어 예측하기 마르코프 체인은 러시아의 수학자 마르코프의 이름을 따서 만든 알고리즘이다. 주로 물리학과 통계학의 기본모델로 사용되고 있다. 간단하게 설명하자면 과거의 상태는 전혀 신경쓰지 않고 현재의 상태만을 고려하여 다음의 값을 추측하는 것을 의미한다. 만들 방법 1. 각 문장을 한글 형태소로 나눈다. 2. 각 문장의 세단어씩 딕셔너리에 대입 시켜준다. json 파일로 만들어준다. 3. json 파일을 참조하여 뒤에 무슨 단어가 나올지 추측할 수 있다. import codecs from bs4 import BeautifulSoup from konlpy.tag import Twitter import json fp = codecs.open('toji.txt','r',enco..
2018.05.20 -
ngram으로 문장 비교하기
n-gram으로 문장 비교하기 앞서 했던 레벤슈타인의 최단거리는 각 글자들을 비교했는데 n-gram은 문장을 n개 만큼 토막내서 비교하는 것을 의미한다. 예를 들어서 만약 n이 2라면 "오늘 강남에서 맛있는 스파게티를 먹었다. "를 "오늘", "늘 ", " 강", "강남", "남에", "에서", "서 ", " 맛", "맛있", "있는", "는 ", " 스", "스파", "파게", "게티", "티를", "를 ", " 먹", "먹었", "었다" 2글자씩 나누어서 두문장을 비교해준다. def ngram(text,i): result = [] for a in range(len(text) -i +1): result.append(text[a:a+i]) return result def getAccuracy(aText,..
2018.05.20 -
레벤슈타인 거리를 이용해서 두 문장 비교하기
레벤슈타인 거리를 이용해서 두 문장 비교하기 레벤슈타인 거리는 독일의 레벤슈타인이라는 사람이 고안한 알고리즘이다. 레벤슈타인 거리란 두개의 문장을 2차원 배열로 나타내어서 각 문장의 각 글자들을 비교하여 몇개의 글자가 다른지 구분하는 방법이다. 알고리즘 1.이런식으로 [문장길이+1][문장길이 +1] 만큼의 2차원 배열을 만들어 주어야한다. 2. [0][n]과 [n][0]을 모드 0 ~ 문장길이 만큼 초기화 3. (1). 두 문장의 첫단어와 첫단어가 같으면 cost를 0으로 주고 [i-1][j-1] + cost만큼을 [i][j]에 집어넣는다. (2). 첫문장의 첫단어와 두번째 문장의 두번째 단어가 다르면 두번째 단어를 제거해주어야 한다. [i-1][j] + 1 = [i][j]에 집어 넣어준다. (3). 첫..
2018.05.20 -
다중 퍼셉트론을 이용해서 텍스트 분류하기
다중 퍼셉트론을 이용해서 텍스트 분류하기 필요한 데이터들 저번 글에서는 베이즈의 정리를 사용해서 텍스트를 구분시켜 보았는데 이번에는 딥러닝을 사용해서 구분시켜보겠습니다. 다중 퍼셉트론이란 입력 층과 출력 층사이에 이 두개를 연결하는 은닉층을 넣는 뉴럴 네트워크입니다. 데이터를 어떤형태로 만들 것인가?? 1. 하나의 뉴스기사를 단어들을 모두 구분 시켜놓는다. 2. 각 단어마다 ID값을 지정해줍니다.3. {X:[ [기사 1의 단어 베열] , [기사 2의 단어배열], [기사 3의 단어 배열] .....},Y:[기사1의 카테고리 , 기사2의 카테고리 .......] 이런식으로 표현 시켜준다. json파일을 만드는 코드 import os, sys, glob import json root = "./newsData/..
2018.05.20 -
베이즈의 정리를 통해 텍스트 구분하기
베이즈의 정리를 통해 텍스트 구분하기 베이즈의 정리는 우리가 고등학생 때 배웠던 통계공식이다. P(A|B) = P(B|A) X P(B) = P(AnB)/P(B) 이런 식으로 표현할 수 있다. 하지만 우린 베이즈의 정리를 뛰어 넘어서 나이브 베이즈의 정리를 사용하려고합니다. 나이브 베이즈의 정리는 자기가 이메일을 받고 (A) 이것이 스팸인지 판단 해주는 것을 (B)라고 합시다. 우선은 텍스트내부에서의 단어 출현 비율을 조사합니다. 그리고 이를 기반으로 어떤 카테고리로 분류할지 판단합니다. 실제로 판정할 때 여러 카테고리 중 어떤 카테고리의 확률이 제일 클지 판단하여 출려합니다. 그래서 우리는 이 공식을 P(B|A) = P(B) X P(A|B) 우리는 여기서 P(A|B)를 생각해봅시다 P(A|B)는 B라는 ..
2018.05.19 -
word2vec 사용해서 한 단어와 연관된 단어들 찾아보기
word2vec를 사용해서 단어를 벡터 데이터로 나타내기 사람들은 단어를 사용할 때 이 단어가 어느 의미를 뜻하고 어느 단어들과 비슷하다는 것을 당연히 느낄 수 있습니다. 하지만 컴퓨터는 어떻게 느낄까요???? 우리 컴퓨터는 0과 1밖에 모르는데 ㅠㅠ 그래서 단어들에게 벡터값을 주어 이단어와 다른 단어가 얼마나 가깝고 연관되어 있는지 값을 나타낼 수 있습니다. 하지만 이렇게 어려운걸 어떻게 만들어내냐구요?? 당연히 모듈로 만들어져있습니다. 지금부터 이 모듈을 다운받아 보겠습니다. gensim Download pip3 install gensim 을 통해서 다운받을 수 있습니다. 그럼 이전 글의 토지데이터를 사용해서 예제를 실행시켜 보겠습니다. from konlpy.tag import Twitter from..
2018.05.17