일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 문자열
- 후위 표기법
- 규칙찾기
- 영문자 확인
- Dynamic Programming
- 조합
- 순열
- Java
- 보이어무어
- 동적계획법
- 반복문
- 최소공배수
- 어려웠던 문제
- pandas
- fragment identifier
- 튜플
- 완전 탐색
- 2017 카카오 코드
- 쿼드압축 후 개수세기
- dfs
- 메뉴리뉴얼
- 에라토스테네스의 체
- 프로그래머스
- Stack
- HashSet
- 점프와 순간이동
- HashMap
- python
- 알고리즘
- 완전탐색
- Today
- Total
csmoon1010의 SW 블로그
자연어 처리 - 딥 러닝을 이용한 자연어 처리 입문(6) 본문
02. 텍스트 전처리(Text preprocessing)
위키독스
온라인 책을 제작 공유하는 플랫폼 서비스
wikidocs.net
8) 단어 분리하기(Byte Pair Encoding, BPE)
- 단어 집합(vocabulary) : 기계가 훈련 단계에서 학습한 단어들을 모아놓은 것
- OOV(Out-Of-Vocabulary) = UNK(Unknown Token) : 테스트 단계에서 기계가 배우지 못한 모르는 단어
- OOV 문제 : 모르는 단어로 인해(OOV) 문제를 제대로 풀지 못하는 상황
- 단어 분리 : 기계가 배운 적 없는 단어(OOV)에 대한 대처로 기계 번역 등에서 주요 전처리 과정.
ex> BPE(Byte Pair Encoding) 알고리즘, 센텐스피스(Sentencepiece) 알고리즘
1. BPE(Byte Pair Encoding)
데이터 압축 알고리즘이자 단어 분리 알고리즘.
연속적으로 가장 많이 등장한 글자(바이트)의 쌍(2개씩)을 찾아 하나의 글자로 "병합".
2. 자연어 처리에서의 BPE
기존에 있던 단어를 분리 즉, 글자(character) 또는 유니코드 단위에서 점차적으로 단어 집합(vocabulary)를 만드는 Bottom up 방식을 이용.
(1) 기존의 접근
단어의 빈도수가 기록된 딕셔너리(단어 집합)을 만든다. BUT 이 단어 집합에 없는 단어는 OCV문제가 발생한다.
(2) BPE 알고리즘 사용
- 딕셔너리의 단어들을 글자(character) 단위로 분리
- 글자 단위로 단어 집합을 형성
- 알고리즘 동작(빈도수가 높은 유니그램의 쌍 --> 하나의 유니그램으로 통합)을 지정한 iteration만큼 반복.
- 기존에 없던 단어도 글자 단위 분할 후 단어 집합에 따라 만들 수 있게 되어 OOV문제 해결함
(3) 코드 실습
3. WPM(Wordpiece Model)
BPE는 빈도수에 따라 단어를 분리하지만 WPM은 우도(likelihood)를 통해서 단어를 분리한다.
- 모든 단어의 맨 앞에 _를 붙인다. --> 문장 복원을 위한 장치
- 통계에 기반하여 내부단어(subword)로 분리
- 복원 : 모든 띄어쓰기 제거 & 언더바를 띄어쓰기로
4. 센텐스피스(Sentencepiece)
실무에서 단어 분리를 위해 쓰는 구글의 센텐스피스이다.
- BPE에 비해 속도가 빠르다
- 토큰화 작업 없이 row data에 단어 분리 토크나이저를 사용할 수 있음. --> 낮은 언어 종속성
9) 데이터의 분리(Splitting Data)
머신 러닝(딥 러닝) 모델에 데이터를 훈련시키기 위해 데이터 분리 작업이 필요하다. 이 중 지도 학습(Supervised Learning)을 위한 데이터 분리 작업을 배운다.
1. 지도 학습(Supervised Learning)
- 훈련 데이터 : 데이터(문제) + 레이블(정답) --> 규칙 도출&정리
- 테스트 데이터 : 문제-정답 맵핑 관계는 계속해서 유지해야 함. --> 문제에 대한 정답을 예측 --> 정확도(Accuracy) = 정답을 맞춘 비율
2. x와 y분리하기(문제와 정답)
(1) zip 함수를 이용하여 분리하기
동일한 개수를 가지는 시퀀스 자료형에서 각 순서에 등장하는 원소들끼리 묶어줌.
(2) 데이터프레임을 이용하여 분리하기
(3) Numpy를 이용하여 분리하기
3. 테스트 데이터 분리하기
(1) 사이킷 런 이용하여 분리하기
사이킷 런의 train_test_split를 이용한다.
from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size = 0.2, random_state = 1234)
- x : 독립 변수 데이터(배열, 데이터프레임)
- y : 종속 변수 데이터(레이블)
- test_size : 테스트용 데이터의 개수 or 비율
- train_size : 학습용 데이터의 개수 or 비율
**test_size와 train_size 중 하나만 기재도 가능
- random_state : 난수 시드
(2) 수동으로 분리하기
n_of_train, n_of_test를 정해서 앞부터 n_of_train만큼 잘라서 train data로 나머지는 test data로 한다.
'데이터&인공지능 > 자연어처리' 카테고리의 다른 글
자연어 처리 - 딥 러닝을 이용한 자연어 처리 입문(8) (0) | 2020.02.15 |
---|---|
자연어 처리 - 딥 러닝을 이용한 자연어 처리 입문(7) (0) | 2020.02.13 |
자연어 처리 - 딥 러닝을 이용한 자연어 처리 입문(5) (0) | 2020.02.12 |
자연어 처리 - 딥 러닝을 이용한 자연어 처리 입문(4) (0) | 2020.02.12 |
자연어 처리 - 딥 러닝을 이용한 자연어 처리 입문(3) (0) | 2020.02.11 |