AI/NLP

[NLP] 기초 개념 필기

체봄 2020. 12. 18. 19:48

'에이콘' 출판사의 [예제로 배우는 자연어 처리 기초] 책을 참고하여 자연어 처리의 기초 개념을 기록한 포스팅입니다.

 

 

- 데이터는 구조에 따라 정형, 준정형, 비정형으로 나눠진다
    정형 데이터   : 엑셀/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를 추출한다
              
              
          
              
              
              
              
              

반응형