본 글은 '파이토치로 배우는 자연어 처리(Natural Language Processing with PyTorch)'를 참고하여 정리한 글입니다.
NLP 기술 훑어보기
말뭉치
고전이나 현대의 모든 NLP 작업은 말뭉치(corpus, 복수형 corpora)라 부르는 텍스트 데이터로 시작합니다.
말뭉치는 일반적으로 원시 텍스트(ASCII나 UTF-8 형태)와 이 텍스트에 연관된 메타데이터(metadata)를 포함합니다.
원시 텍스트는 문자(바이트) 시퀀스지만 일반적으로 문자를 토큰(token)이라는 연속된 단위로 묶었을 때 유용하고,
영어에서 토큰(token)은 공백 문자나 구두점으로 구분되는 단어와 숫자에 해당합니다.
메타데이터는 식별자, 레이블, 타임스탬프 등 텍스트와 관련된 어떤 부가 정보도 될 수 있습니다.
머신러닝 분야에서는 메타데이터가 붙은 텍스트를 샘플(sample) 또는 데이터 포인트(data point)라고 부르고,
샘플의 모음인 말뭉치는 데이터셋이라고 부릅니다.
토큰화(tokenization)
- 텍스트를 토큰으로 나누는 과정을 의미
- 토큰화는 알파벳과 숫자가 아닌 문자를 기준으로 텍스트를 나누는 작업보다 더 복잡할 수 있음
- 터키어와 같은 교착어는 공백 문자와 구두점으로 나누는 것으로 충분하지 않음, 더 전문 기술이 필요
- 교착어 : 어근과 접사가 단어의 기능을 결정하는 언어, 한국어도 교착어
- 토큰화의 기준은 저마다 다름
- 하지만 이런 결정은 실제 정확도에 생각보다 더 큰 영향을 미칠 수 있음
- 오픈 소스 NLP 패키지는 대부분 기본적인 토큰화를 제공해서 고된 전처리 작업을 덜어줌
타입(type)
- 말뭉치에 등장하는 고유한 토큰
- 말뭉치에 있는 모든 타입의 집합이 어휘 사전 또는 어휘(lexicon)
- 단어는 내용어(content words)와 불용어(stopword)로 구분됨
- 불용어 : 의미가 없어 불필요한 단어라 생각되어 대부분 제거
- 관사와 전치사 같은 불용어는 대부분 내용어를 보충하는 문법적인 용도로 사용
특성 공학(feature engineering)
- 언어학을 이해하고 NLP 문제 해결에 적용하는 과정을 의미
- 언어 간의 모델 이식성과 편리성을 높이기 위해 최소한으로 사용
유니그램, 바이그램, 트라이그램, ..., n-그램
유니그램(unigram) : 토큰 한 개
바이그램(bigram) : 토큰 두 개
n-그램(n-gram) : 텍스트에 있는 고정 길이(n)의 연속된 토큰 시퀀스
부분 단어(subword) 자체가 유용한 정보를 전달한다면 문자 n-그램을 생성할 수 있음
- 예를 들어 ‘methanol’의 접미사 ‘-ol’은 알코올 종류를 나타냄
- 유기 화합물 이름을 구분하는 작업에서는 n-그램으로 찾은 부분 단어의 정보가 유용할 것임
- 이런 경우에 같은 코드를 재사용할 수 있지만 모든 문자의 n-그램을 토큰 하나로 취급
표제어(lemma)
- 단어의 기본형
- 동사 fly를 생각해보면 flow, flew, flies, flown, flowing 등 어미가 바뀌며 여러 단어로 변형됨, fly는 이런 모든 단어의 표제어
- 쉽게 생각해 표제어는 사전에 등재된 단어
- 토큰을 표제어로 바꾸어 벡터 표현의 차원을 줄이는 방법이 종종 도움됨
- 이런 축소를 표제어 추출(lemmatization)이라고 함
- 예를 들어 spaCy는 사전에 정의된 WordNet 사전을 사용해 표제어를 추출하지만 표제어 추출은 언어의 형태론을 이해하려는 머신러닝의 문제로 나타낼 수 있음
어간 추출(stemming)
- 표제어 추출 대신에 사용하는 축소 기법
- 수동으로 만든 규칙을 사용해 단어의 끝을 잘라 어간(stem)이라는 공통 형태로 축소
- 오픈 소스 패키지에 구현된 Porter와 Snowball 어간 추출기가 유명
- 예를 들어, 단어 ‘geese’의 표제어 추출과 어간 추출의 차이점
- 표제어 추출 : goose
- 어간 추출 : gees
문장과 문서 분류하기
TF와 TF-IDF 표현이 문서나 문장 같은 긴 텍스트 뭉치를 분류하는 데 유용합니다.
토픽 레이블 할당, 리뷰의 감성 예측, 스팸 이메일 필터링, 언어 식별, 이메일 분류 같은 작업은 지도 학습 기반의 문서 분류 문제입니다.
레이블 된 데이터셋이 적을 때는 준지도 학습이 매우 유용합니다.
단어 분류하기 : 품사 태깅
문서에 레이블을 할당하는 개념을 단어나 토큰으로 확장할 수 있습니다.
단어 분류 작업의 예로는 품사(POS, part-of-speech) 태깅(tagging)이 있음
- 어떤 품사인지 분류하는 작업
청크 나누기와 개채명 인식
종종 연속된 여러 토큰으로 구분되는 텍스트 구에 레이블을 할당해야 합니다.
청크 나누기(chunking)(또는 부분 구문 분석(shallow parsing))
- 명사구(NP)와 동사구(VP)를 구별
- 부분 구문 분석의 목적은 명사, 동사, 형용사 같은 문법 요소로 구성된 고차원의 단위를 유도해 내는 것
- 부분 구문 분석 모델 훈련에 사용할 데이터가 없다면 품사 태깅에 정규식(regular expression)을 적용해 부분 구문 분석을 근사할 수 있음
개체명(named entity)
- 다른 유용한 단위
- 사람, 장소, 회사, 약 이름과 같은 실제 세상의 개념을 의미하는 문자열
문장 구조
구문 분석(parsing)
- 구 사이의 관계를 파악하는 작업
- 부분 구문 분석 : 구 단위를 식별
구분 분석 트리(parse tree)
- 문장 안의 문법 요소가 계층적으로 어떻게 관련되는지 보여줌
구성 구분 분석(constituent parsing)
의존 구문 분석(dependency parsing)
단어 의미와 의미론
단어에는 의미가 하나 이상 있고, 그 단어가 나타내는 각각의 뜻을 단어의 의미(sense0라고 합니다.
그리고 단어의 의미는 문맥으로 결정될 수도 있습니다.
WordNet
- 프린스턴 대학교에서 장기간 진행하고 있는 어휘 사전 프로젝트
- (거의) 모든 영어 단어의 관계와 의미를 수집하는 것이 목표
'Data Science > NLP' 카테고리의 다른 글
[NLP] Bag-of-Words, Classical NLP (0) | 2022.05.23 |
---|---|
[NLP] NLP Introduction (0) | 2022.05.03 |
[NLP] Attention Mechanism (0) | 2022.03.28 |
[NLP] GRU (Gated Recurrent Unit) (0) | 2022.03.28 |
[NLP] LSTM (Long Short-Term Memory, 장단기 메모리) (0) | 2022.03.28 |
댓글