텍스트 전처리 NLP BPE WordPiece Subword Tokenization
단어 word
He stepped out into the hall, was delighted to encounter a water brother.
다음 문장은 몇개의 단어를 가지고 있을까?
문장 부호를 단어에 포함시켜야 할까? 15 - 13
상황에 따라서 다르다.
문장안에 쉼표는 구과 구를 나누는 boundary 역할을 하기 때문에 중요하다.
구어체 문장에서
I do uh main - mainly business data processing
깨진 단어 fragments, filled pauses(uh, um..)
Susie's cat in the hat is different from other cats!
표제어 lemma는 여러단어들이 공유하는 뿌리언어
단어형태 wordform 같은 표제어를 공유하지만 다양한 형태를 가진다.
cat, cats는 두가지의 형태이지만 표제어 cat을 공유한다.
Vocabulary
단어의 집합
Type
단어의 한 원소
Token
문장 내에 나타나는 한 단어
an instance of a type in running text
They picnicked by the pool, then lay back on the grass and looked at the stars.
16 token
14 types 관사 the 반복
말뭉치 Corpus
말뭉치는 대용량의 문서 집합이다.
말뭉치의 특성 요소
- 언어 (7097개의 언어가 존재)
- 방언
- 장르 (뉴스, 소설, 과학기술문서, SNS, 수필, 위키피디아, 종교문서 ..)
- 인구통계적 속성 (나이, 성별, 인종 ..)
이런 다양한 말뭉치에 적용할 수 있는 NLP 알고리즘을 개발해야 한다.
Unix 명령으로 텍스트 파일 안의 단어들을 토큰화 한다.
https://shakespeare.folger.edu/shakespeares-works/hamlet/
Hamlet | The Folger SHAKESPEARE
Read Shakespeare’s Hamlet for free from the Folger Shakespeare Library! Full text, summaries, illustrations, guides for reading, and more.
shakespeare.folger.edu
햄릿 데이터를 사용한다.
tr -sc 'A-Za-z' '\n' < hamlet.txt
#단어 토큰화
tr -sc 'A-Za-z' '\n' < hamlet.txt | sort | uniq -c | sort -n -r
#단어 토큰화 후 빈도수로 정렬
tr 'A-Z''a-z' < hamlet.txt | tr -sc'a-z' '\n' | sort | uniq-c | sort -n -r
#소문자로 변환하여 정렬
NLP 에서 해결해야 하는 문제는 다음과 같다
- 문장부호 punctuation을 구분해서 사용해야한다.
m.p.h, AT&T, Ph.D와 같이 단어안에 나타나는 문장 부호
$ 화폐단위
01/02/2021 날짜
https://lsann38.tistory.com/ URLS
서안이
><
lsann38.tistory.com
#ml 해쉬태그
이런 경우에는 단어의 의미를 문장 부호가 결정하기 때문에 제외하지 않는것이 좋다.
- 접어 clitics
다른 단어에 붙어서 존재하는 형태
we're = we are
- 여러개의 단어가 붙어야 의미있는 경우
New York, rock'n'roll
국어
- 띄어쓰기가 잘 지켜지지 않고, 한 어절이 하나 이상의 의미가 있을 수 있다
- 형태소 morpheme가 존재한다
자립형태소 : 명사, 대명사, 부사
의존형태소 : 어미, 접사, 조사
- 단어보다 작은 단위 subword로 토큰화가 필요하다
Subword Tokenization
학습 데이터에서 새로운 단어가 나타난다면
new low newer
테스트 데이터가 -er -est를 분류할 수 있으면 좋을 것이다.
- Byte-Pair Encoding BPE
- WordPiece
- Unigram Language modeling
두가지의 구성요소
- Token Learner
말뭉치에서 Vocabulary를 만든다
- Token Segmenter
새로운 문장을 토큰화 한다
Token Learner BPE
Token Segmenter BPE
lower segmentation 순서
l o w e r _
l o w er _
l o w er_
lo w er_
low er_
BPE를 통해 새로운 단어가 들어와도 자주쓰는 pair를 인식하기 때문에 segmentation으로 보다 인식률을 높일 수 있다.
이미 Voca에 존재하는 단어로 인식할 수 있고, NLP에서 조금 더 인식률이 좋다.
WordPiece
문장이 나타날 확률 likelihood를 계산해서 기호들의 쌍을 찾는다.
Unigram
확률모델 (언어모델) 을 사용여러개의 기호 병합이 동시에 일어날 수 있게 한다.학습데이터 내의 문장을 관측 observed 확률변수로 정의
Tokenization을 잠재 latent 확률변수로 정의- 연속적인 변수
데이터의 주변 우도 marginal likelihood를 최대화 시키는 tokenization을 구한다.- EM expectation maximization 사용- Maximization step 에서 Viterbi 알고리즘을 사용
wordpiece는 우도를 greedy 한 방식으로 향상시킨다.
단어정규화
단어들을 정규화된 형식으로 표현한다.U.S.A USA US uhhuh uh-huhFed fedam is be are다른 표현이지만 같은 뜻을 지니고 있는 단어들이다.
검색엔진에서 문서들을 추출할 때 유용하다.
Case Folding
모든 문자를 소문자로 만든다.- 일반화를 위해서 유용하다- 정보검색, 음성인식에서 유용하다
하지만 감성분석과 같은 문서 분류 문제에서는 대소문자 구분이 유용하다.US 미국, us 우리의
Lemmatization
어근을 사용해서 표현한다.am are is -> becar car's cars cars' -> car
He is reading detective storiesHe be read detective story
최근에는 단어정규화를 무조건 하는 추세가 아니다.단어정규화가 필요한 이유는 단어사이의 유사성을 발견하고 같은 의미를 가진 여러 형태의 단어를 하나의 단어로 대응시키는 것이다.만약 단어를 Voca로 정의된 공간인 고차원 희소벡터가 아닌 저차원 밀집 벡터로 대응시킨다면 정규화의 필요성이 낮아진다.
단어 임베딩은 이미 단어 사이의 유사성을 알고 있는 벡터이기 때문에 정규화가 필요 없어진다.car [0.13, 0.52, 0.01]cars [0.15, 0.49, 0.02]