[NLP] 기초 개념 필기
'에이콘' 출판사의 [예제로 배우는 자연어 처리 기초] 책을 참고하여 자연어 처리의 기초 개념을 기록한 포스팅입니다.
- 데이터는 구조에 따라 정형, 준정형, 비정형으로 나눠진다
정형 데이터 : 엑셀/csv 파일과 같은 표 형식
준정형 데이터 : 주로 xml/html 파일,
명확한 패턴에 따라 태그 사이에 정보를 저장
표 형식으로 변환이 가능
비정형 데이터 : 단순 텍스트, 이미지
처리하기 가장 어려움
- 데이터는 내용에 따라 텍스트, 이미지, 오디오, 비디오로 나눠진다
- 정규 표현식
ab? : a 뒤에 0 또는 하나의 b가 온다
ab* : a 뒤에 0 또는 b가 계속된다
ab+ : a 뒤에 b가 1개 이상 온다
ab{2} : a 뒤에 2개의 b가 온다
ab{3,5}? : a 뒤에 4개의 b가 온다
^ : 시작
$ : 끝
. : 줄바꿈을 제외한 모든 문자
.* : 0개 이상의 문자
\w : 알파벳/숫자/밑줄
\s : 공백
\S : \w 뒤에 있으면 구두점 (\s의 반의어)
\b : 단어의 시작 또는 끝에 있는 빈 문자열과 일치
\B : 단어 내부에서 일치
^a.*c$ : a로 시작하고 그 뒤에 0개 이상의 문자가 오고 c로 끝난다
^\w+ : 알파벳/숫자로 시작하고 1개 이상 출현
\Bu\B : 문장에서 문자 u가 들어 있는 모든 단어
- 토큰 하나하나를 보면 문장의 본래 의미를 이해할 수 없기 때문에, 문맥을 이해하기 위해 n-gram을 추출한다.
n-gram : n개의 연속된 토큰
- 다양한 종류의 Tokenizer
트윗 tokenizer : 트위터에서 흔히 사용되는 감성의 표현과 감정을 다룰 수 있음
MWE(Multi-Word Expression) tokenizer : 여러 단어로 이루어진 특정 표현들을 토큰화 과정에서 하나의 개체로 취급 (ex: United States of America)
정규식 tokenizer : 지정한 정규식에 따라 토큰화
Whitespace tokenizer : 공백, 탭, 줄바꿈 문자를 기준으로 토큰화
Word punct tokenizer : 알파벳 문자, 알파벳 이외의 문자, 숫자로 토큰화
- 영어와 같은 언어에서는 문장에서 단어의 형태가 다양하게 변하기 때문에, 원래의 형태로 복원하는 어간 추출(형태소 분석) 과정이 필요하다.
RegexpStemmer : 정규식을 사용해 구조적 접두사/접미사를 제거해 어간 추출
PorterStemmer : 가장 일반적인 형태소 분석기, 영어 단어의 다양한 형태와 접두사/접미사 제거
- Feature 추출
일반적인 feature : 단어 개수, 각 품사의 출현 빈도, 대문자/소문자 개수 와 같이 텍스트의 각 토큰에 직접적으로 의존하지 않는 feature
BoW(단어 모음) : 텍스트 안에서 각 단어의 빈도 수를 셈
feature를 추출하는 가장 보편적인 방법
행에는 텍스트, 열에는 단어
CountVectorizer() 함수를 이용해 구현
여러 문서에서 여러 번 등장하는 단어가 꼭 중요하지는 않다는 단점 => TF-IDF 사용
TF-IDF(Term Frequency - Inverse Document Frequency)
: 주어진 문서에서 단어가 갖는 정보의 양을 정량화 시켜 텍스트 형식을 행렬 형식으로 표현
행에는 텍스트, 열에는 단어
TF => 단어의 빈도 수
IDF => 주어진 문서에서 해당 단어가 얼마나 특별한 의미를 갖는지를 나타내는 수치
log(전체 문서 수 / 해당 용어를 갖는 문서 수)로 계산
TF-IDF => TF * IDF로 계산
- Feautre engineering : 기존 feature에서 새로운 feature를 추출하는 방법
두 텍스트 사이의 유사도를 계산 => 코사인 유사도, 자카드 유사도
코사인 유사도 : 두 텍스트의 벡터 사이의 각도에 대한 코사인 값을 이용
BoW와 TF-IDF 행렬을 텍스트의 벡터로 사용할 수 있음
자카드 유사도 : 두 텍스트에서 겹치는 단어 수 / 해당 텍스트의 총 고유 단어의 수 로 계산
- 단어 구름 : 텍스트 데이터를 시각화하는 방법- 데이터는 구조에 따라 정형, 준정형, 비정형으로 나눠진다
정형 데이터 : 엑셀/csv 파일과 같은 표 형식
준정형 데이터 : 주로 xml/html 파일,
명확한 패턴에 따라 태그 사이에 정보를 저장
표 형식으로 변환이 가능
비정형 데이터 : 단순 텍스트, 이미지
처리하기 가장 어려움
- 데이터는 내용에 따라 텍스트, 이미지, 오디오, 비디오로 나눠진다
- 정규 표현식
ab? : a 뒤에 0 또는 하나의 b가 온다
ab* : a 뒤에 0 또는 b가 계속된다
ab+ : a 뒤에 b가 1개 이상 온다
ab{2} : a 뒤에 2개의 b가 온다
ab{3,5}? : a 뒤에 4개의 b가 온다
^ : 시작
$ : 끝
. : 줄바꿈을 제외한 모든 문자
.* : 0개 이상의 문자
\w : 알파벳/숫자/밑줄
\s : 공백
\S : \w 뒤에 있으면 구두점 (\s의 반의어)
\b : 단어의 시작 또는 끝에 있는 빈 문자열과 일치
\B : 단어 내부에서 일치
^a.*c$ : a로 시작하고 그 뒤에 0개 이상의 문자가 오고 c로 끝난다
^\w+ : 알파벳/숫자로 시작하고 1개 이상 출현
\Bu\B : 문장에서 문자 u가 들어 있는 모든 단어
- 토큰 하나하나를 보면 문장의 본래 의미를 이해할 수 없기 때문에, 문맥을 이해하기 위해 n-gram을 추출한다.
n-gram : n개의 연속된 토큰
- 다양한 종류의 Tokenizer
트윗 tokenizer : 트위터에서 흔히 사용되는 감성의 표현과 감정을 다룰 수 있음
MWE(Multi-Word Expression) tokenizer : 여러 단어로 이루어진 특정 표현들을 토큰화 과정에서 하나의 개체로 취급 (ex: United States of America)
정규식 tokenizer : 지정한 정규식에 따라 토큰화
Whitespace tokenizer : 공백, 탭, 줄바꿈 문자를 기준으로 토큰화
Word punct tokenizer : 알파벳 문자, 알파벳 이외의 문자, 숫자로 토큰화
- 어간 추출 : 영어와 같은 언어에서는 문장에서 단어의 형태가 다양하게 변하기 때문에, 원래의 형태로 복원하는 어간 추출(형태소 분석) 과정이 필요하다.
RegexpStemmer : 정규식을 사용해 구조적 접두사/접미사를 제거해 어간 추출
PorterStemmer : 가장 일반적인 형태소 분석기, 영어 단어의 다양한 형태와 접두사/접미사 제거
- 표제어 추출 : WordNetLemmatizer() 이용
- Feature 추출
일반적인 feature : 단어 개수, 각 품사의 출현 빈도, 대문자/소문자 개수 와 같이 텍스트의 각 토큰에 직접적으로 의존하지 않는 feature
BoW(단어 모음) : 텍스트 안에서 각 단어의 빈도 수를 셈
feature를 추출하는 가장 보편적인 방법
행에는 텍스트, 열에는 단어
CountVectorizer() 함수를 이용해 구현
여러 문서에서 여러 번 등장하는 단어가 꼭 중요하지는 않다는 단점 => TF-IDF 사용
TF-IDF(Term Frequency - Inverse Document Frequency)
: 주어진 문서에서 단어가 갖는 정보의 양을 정량화 시켜 텍스트 형식을 행렬 형식으로 표현
행에는 텍스트, 열에는 단어
TF => 단어의 빈도 수
IDF => 주어진 문서에서 해당 단어가 얼마나 특별한 의미를 갖는지를 나타내는 수치
log(전체 문서 수 / 해당 용어를 갖는 문서 수)로 계산
TF-IDF => TF * IDF로 계산
- Feautre engineering : 기존 feature에서 새로운 feature를 추출하는 방법
두 텍스트 사이의 유사도를 계산 => 코사인 유사도, 자카드 유사도
코사인 유사도 : 두 텍스트의 벡터 사이의 각도에 대한 코사인 값을 이용
BoW와 TF-IDF 행렬을 텍스트의 벡터로 사용할 수 있음
자카드 유사도 : 두 텍스트에서 겹치는 단어 수 / 해당 텍스트의 총 고유 단어의 수 로 계산
- 텍스트 데이터를 시각화하는 방법 : 단어 구름, 종속성 구문 분석 트리, 개체명 시각화
- 전처리 과정은 주로 tokenization, 어간 추출, 표제어 추출, 불용어 제거 단계로 구성된다!
- 전처리 후에 BoW와 TF-IDF와 같은 방법을 사용해 텍스트로부터 feature를 추출한다