일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- dfs
- 점프와 순간이동
- 최소공배수
- 규칙찾기
- 튜플
- 어려웠던 문제
- 에라토스테네스의 체
- Java
- 프로그래머스
- 조합
- fragment identifier
- pandas
- 완전 탐색
- HashSet
- 2017 카카오 코드
- 후위 표기법
- 쿼드압축 후 개수세기
- 반복문
- 영문자 확인
- Dynamic Programming
- 완전탐색
- 보이어무어
- 순열
- HashMap
- 문자열
- 메뉴리뉴얼
- 알고리즘
- Stack
- 동적계획법
- python
- Today
- Total
csmoon1010의 SW 블로그
자연어 처리 - 딥 러닝을 이용한 자연어 처리 입문 공부하기(1) 본문
치매 예방 어플 중 일기 쓰기 메뉴에서 회상 일기 테스트를 위해서는 자연어 처리에 대한 공부가 필요하다. 공부 방법을 찾던 중 wikidocs의 딥 러닝을 이용한 자연어 처리 입문이라는 페이지를 발견하였다. 빠르게 이 페이지를 이용해 자연어 처리가 무엇인지 알아보려 한다.
위키독스
온라인 책을 제작 공유하는 플랫폼 서비스
wikidocs.net
01. 자연어 처리(natural language processing)이란?
우선 아나콘다를 설치한다. 아나콘다 설치는 홈페이지에서 다운로드하면 되므로 어려운 것은 없었다.
아나콘다 설치가 완료되면 관련 라이브러리들을 설치한다. 설치 및 이용할 라이브러리들을 다음과 같다.
(1) 텐서플로우(tensorflow)
구글이 2015년 공개한 머신 러닝과 딥 러닝 오픈소스 라이브러리이다. 아나콘다에 포함되어 있지 않으므로 설치가 필요하다. 그런데! 최신 버전을 설치하고 import를 시도하였더니 계속해서 DLL오류가 났다. 구글링을 해보니 1.5.0으로 downgrade하는 방법을 추천하여 이 방법으로 진행하였다. 이 때 python의 버전 역시 downgrade가 필요하여 3.7버전에서 3.6.10버전으로 변경하였다. downgrade했더니 뒤에서도 계속 오류가 나서 아나콘다를 다시 깔고(python 3.7.4) tensorflow만 2.0버전으로 downgrade하여 설치하고 나머지는 최신버전으로 진행했다.
(2) 케라스(keras)
위의 텐서플로우에 대한 추상화된 API이다. 백엔드로 텐서플로우를 사용하여 좀 더 코드를 간단히 작성할 수 있는 라이브러리이다. keras 역시 설치는 되지만 import에서 오류가 나서 버전을 2.3.1에서 2.1.0으로 downgrade하였다.
(3) 젠심(Gensim)
토픽 모델링, 자연어 처리, Word2Vec을 이용할 수 있는 오픈 소스 라이브러리이다. 이건 설치도 제대로 안 된다!!! (1), (2)에서 너무 힘을 뺐기 때문에 나중에 해당 라이브러리가 필요하면 그 때 다시 도전해보기로 한다. 파이썬 3.7버전으로 upgrade 후 해결할 수 있었다.
이 다음부터는 아나콘다에 이미 설치되어 있는 라이브러리들과 어플리케이션이다!! ipython을 통해 import만 해주기로 한다.
(4) 사이킷런(Scikit-learn)
파이썬 머신러닝 라이브러리로 나이브 베이즈, 서포트 벡터 머신과 같은 머신러닝 모듈을 불러올 수 있다.
(5) 주피터 노트북(Jupyter Notebook)
웹에서 코드를 작성하고 실행할 수 있는 오픈소스 웹 어플리케이션으로 여기서 코드들을 작성하게 될 것이다.
jupyter notebook
이 명령을 통해 주피터 노트북을 실행한다.
(6) NLTK, NLTK Data
NLTK는 자연어 처리를 위한 파이썬 패키지이다. NLTK Data는 NLTK를 제대로 사용하기 위해 이용하는 데이터들이다.
nltk.download()
ipython을 통해 다음과 같은 명령을 실행한다.
(7) KoNLPy
한국어 자연어 처리를 위한 형태소 분석기 패키지로 anaconda로 설치되지 않았기 때문에 따로 설치해야한다. 단, KoNLPY는 JAVA로 구성되어 있으므로 JDK 1.7이상의 버전과 JPype가 필요하다. 설치만 한 후 koNLPy를 import해보니 jpype 모듈이 없다는 오류가 떠서 JDK와 JPype(Java와 Python을 연결해주는 역할)을 설치하였다.
(8) 판다스(Pandas)
파이썬을 이용한 데이터 처리에서 필수적인 라이브러리로 아나콘다 설치시 포함되어있다. pd로 import해준다.
**판다스의 데이터구조
- 시리즈(Series) : 1차원 배열의 값(values)에 각 값에 대응되는 인덱스(index)를 부여할 수 있는 구조
sr = pd.Series([배열 값들], index = [해당하는 인덱스들])
print(sr.values) //배열 값들이 출력
print(sr.index) //배열 인덱스들이 출력
- 데이터프레임(Dataframe)
2차원 리스트 형태로 향방향 인덱스(index), 값(values) 뿐만 아니라 열방향 인덱스(column)도 추가된 형태이다.
//values, index, columns 정의한 후
df = pd.DataFrame(values, index = index , columns = columns)
print(df)
print(df.index)
print(df.columns)
print(df.values)
위의 방식 외에도 리스트, 시리즈, 딕셔너리, Numpy의 ndarrays를 이용하여 데이터프레임을 생성하는 것도 가능하다.
//리스트로 생성하기[ , ,]
data = [
['1000', 'Steve', 90.72],
['1001', 'James', 78.09],
['1002', 'Doyeon', 98.43],
['1003', 'Jane', 64.19],
['1004', 'Pilwoong', 81.30],
['1005', 'Tony', 99.14],
]
df = pd.DataFrame(data, columns=['학번', '이름', '점수']) // 열 지정해주기
print(df)
//딕셔너리로 생성하기 key : [values]
data = { '학번' : ['1000', '1001', '1002', '1003', '1004', '1005'],
'이름' : [ 'Steve', 'James', 'Doyeon', 'Jane', 'Pilwoong', 'Tony'],
'점수': [90.72, 78.09, 98.43, 64.19, 81.30, 99.14]}
df = pd.DataFrame(data)
print(df)
- 외부 데이터 읽기
CSV, 텍스트, Excel, SQL, HTML, JSON 등 다양한 외부 데이터로부터 파일을 읽기가 가능하다.
//CSV에서 읽어들이기
df = pd.read_csv('파일 경로')
(9) Numpy(넘파이)
수치 데이터를 다루는 파이썬 패키지로 다차원 행렬 자료구조인 ndarray를 통해 벡터 및 행렬을 사용하는 선형 대수 계산에서 주로 이용된다. 순수 파이썬보다 빠르기 때문에 만이 이용한다. 아나콘다 설치시 함께 설치되는 패키지이다. np로 import 해준 뒤 이용한다.
**Numpy의 주요 모듈
- np.array()
리스트, 튜플, 배열로 부터 ndarray(다차원 행렬 자료구조)를 생성한다. 이때 인덱스는 항상 0으로 시작한다.
a = np.array([1,2,3,4,5]) //리스트를 이용.
print(type(a)) //<class 'numpy.ndarry'>
print(a) //array([1,2,3,4,5])
2차원 배열 역시 비슷한 방식으로 만들 수 있다. 두개의 리스트를 요소로 가지는 하나의 리스트를 매개변수로 넣어준다. 2차원 배열의 경우에는 ndim과 shape를 통해 각각 차원과 크기를 출력할 수 있다.
- ndarray 초기화하기
a = np.zeros((2,3)) // 2*3배열을 생성하고 모든값을 0으로 초기화
a = np.ones((2,3)) // 2*3배열을 생성하고 모든값을 1로 초기화
a = np.full((2,2),7) //2*2배열을 생성하고 모든값을 7로 초기화
a = np.eye(3) // 3*3배열을 생성하고 대각선은 1로 초기화, 나머지는 0으로 초기화
a = np.random.random((2,2)) //2*2배열을 생성하고 임의의 값으로 초기화
- np.arange()
지정해준 범위에 대해서 배열을 생성한다.
a = np.arange(n) //0~n-1까지의 범위 지정 [0 1 2 ... n-1]
a = np.arange(start, stop, step, dtype) // start에서 stop까지 step씩 증가하며 data type은 dtype
- reshape()
arange(n)함수에 배열을 다차원으로 변형하여 배열을 생성한다.
a = np.array(np.arange(n)).reshape((a,b)) // 0~n-1까지의 arange(n) 함수에 배열을 a*b 다차원 배열로 변형한다.
- Numpy 슬라이싱
파이썬의 리스트와 같은 슬라이스 기능을 제공하여 원하는 원소들 복수 개에 접근이 가능하다.
a = np.array([[1,2,3], [4,5,6]])
b = a[0:2, 0:2] //1,2번째 행과 열만 출력
b = a[0, :] //1번째 행만 출력
b = a[:, 0] //1번째 열만 출력
- Numpy 정수 인덱싱(integer indexing)
원본 배열에서 부분 배열을 구할 수 있다. [행 인덱스, 열 인덱스]를 통해 그 자리에 있는 원소를 넣어준다.
b = a[[2, 1], [1,0]] // [2행1열 원소 1행 0열 원소]로 이루어진 배열
- Numpy 연산
x + y OR np.add(x, y)
x - y OR np.subtract(x, y)
x * y OR np.multiply(x, y) --> 요소별 곱
np.dot(x, y) --> 벡터/행렬의 곱
x / y OR np.divide(x, y)
(단, x와 y 배열의 크기는 같아야 한다.)
(10) 맷플롯립(Matplotlib)
데이터를 차트나 플롯으로 시각화하는 패키지로 아나콘다 설치 시 함께 설치된다.
맷플롯립에서 주요하게 사용되는 모듈은 matplotlib.pyplot이다. plt라는 이름으로 import해서 주로 이용한다.
주피터 노트북에서 맷플롯립을 이용할 수 있는 설정을 주는 %matplotlib inline도 필요하다.
**간단한 시각화 예시
- plot(x축 값 배열, y축 값 배열) : 매개변수로 준 x축값과 y축값을 가지는 그래프를 그릴 수 있다.
- title('제목') : 그래프의 제목을 지정해준다.
- show() : 그래프를 보여줌. 단, 주피터 노트북에서는 자동 렌더링 됨.
- xlabel('라벨명') : 그래프의 x축 이름을 지정한다.
- ylabel('라벨명') : 그래프의 y축 이름을 지정한다.
- legend([범례 리스트]) : 그래프들에 범례를 삽입한다.
'데이터&인공지능 > 자연어처리' 카테고리의 다른 글
자연어 처리 - 딥 러닝을 이용한 자연어 처리 입문(6) (0) | 2020.02.13 |
---|---|
자연어 처리 - 딥 러닝을 이용한 자연어 처리 입문(5) (0) | 2020.02.12 |
자연어 처리 - 딥 러닝을 이용한 자연어 처리 입문(4) (0) | 2020.02.12 |
자연어 처리 - 딥 러닝을 이용한 자연어 처리 입문(3) (0) | 2020.02.11 |
자연어 처리 - 딥 러닝을 이용한 자연어 처리 입문 공부하기(2) (0) | 2020.02.09 |