인공지능 AI/자연어처리 NLP

텍스트 전처리 NLP BPE WordPiece Subword Tokenization

sailorCat 2022. 3. 15. 14:06
728x90

단어 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

byte pair encoding

 

 

 

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]

 

 

728x90