ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • chapter3.토크나이징
    공부/처음 배우는 딥러닝 챗봇 2023. 4. 13. 10:12
    728x90

    3.1 토크나이징 소개

    우리가 일상에서 사용하는 언어 = 자연어

    컴퓨터는 자연어를 직접적으로 이해할 수 없음

    컴퓨터 분야에서는 자연어 의미를 분석해 컴퓨터가 처리할 수 있도록 하는 일을 자연어 처리(Natural Language Processing, NLP)라고 함

     

    어떤 문장을 일정한 의미가 있는 가장 작은 단어들로 나눔

    그 다음 나눠진 단어들을 이용해 의미를 분석

    여기서 가장 기본이 되는 단어들을 토큰(token)이라고 함

    토큰의 단위는방법에 따라 달라질 수 있지만 일반적으로 일정한 의미가 있는 가장 작은 정보 단위로 결정

    주어진 문장에서 토큰 단위로 정보를 나누는 작업을 토크나이징이라고 함

    문장 형태의 데이터를 처리하기 위해 제일 처음 수행해야하는 기본적인 작업

    텍스트 전처리 과정에서 사용됨

     

    한국어 토크나이징을 지원하는 파이썬 라이브러리가 존재

    이 장에서는 한국어 자연어 처리에 많이 사용하는 KoNLPy를 알아보겠음

     

    3.2 KoNLPy

    기본적인 한국어 자연어 처리를 위한 파이썬 라이브러리

    한국어 문장을 분석하려면 토크나이징 작업을 제일 먼저 수행해야 함

    이 때 토큰 단위를 어떻게 정의하느냐에 따라 자연어 처리 성능에 영향을 미침

    이 책에서는 형태소(morpheme)를 토큰 단위로 사용할 것

    형태소는 언어학에서 사용되는 용어이며, 일정한 의미가 있는 가장 작은 말의 단위

    즉, 의미상 더 이상 쪼개지지 않는 단어

     

    영어의 경우 단어의 변화가 크지 않고 띄어쓰기로 단어를 구분하기 때문에 공백을 기준으로 토크나이징을 수행해도 문제X

    한국어는 명사와 조사를 띄어쓰지않고, 용언에 따라 여러가지 어미가 붙기 때문에 띄어쓰기만으로는 불가능!

    따라서 한국어의 복잡한 특성에 따라 문장에서 형태소를 분석할 수 있는 도구가 필요

    ->형태소 분석기

    형태소 뿐만 아니라, 어근,접두사/접미사,품사 등 다양한 언어적 속성의 구조를 파악해줌

    문장에서 형태소를 추출하면서 형태소의 뜻과 문맥을 고려해 품사 태깅

    품사란 단어를 의미나 형식, 기능에 따라 분류한 것을 말함

    더보기
    1. 명사 : 주로 물건이나 사람, 동식물을 가리킬 때 쓰는 품사
    2. 대명사 : 사람이나 사물의 이름을 대신해서 쓰는 품사
    3. 수사 : 숫자나 순서를 나타내는 품사
    4. 동사 : 동작이나 작용을 나타내는 품사
    5. 형용사 : 사물의 성질이나 상태를 나타내는 품사
    6. 관형사 : 체언(명사,대명사,수사)앞에서 체언을 수식하는 품사 ex)이, 그, 저, 새, 헌, 옛, ...
    7. 부사 : 동사, 형용사, 동사구, 문장 전체를 수식하는 역할을 맡은 품사 ex)정말, 매우, 벌써,...
    8. 조사 : 명사, 부사 따위에 붙어 문법 관계를 맺어주는 품사 ex)~이, ~가, ~에서,...
    9. 감탄사 : 감탄이나 놀람, 느낌, 응답 등을 나타내는 품사

    3.2.1 Kkma

    =꼬꼬마, 서울대학교 IDS연구실에서 자연어 처리를 위해 개발한 한국어 형태소 분석기

    from konlpy.tag import Kkma

    Kkma는 다음 4가지 함수를 제공

    1. morphs(phrase) : 인자로 입력한 문장을 형태소 단위로 토크나이징, 토크나이징된 형태소들은 리스트 형태로 반환
    2. nouns(phrase) : 인자로 입력한 문장에서 품사가 명사인 토큰만 추출
    3. pos(phrase,flatten=True) : 인자로 입력한 문장에서 형태소를 추출한 뒤 품사 태깅, 추출된 형태소와 그 형태소의 품사가 튜플 형태로 묶여서 리스트로 반환
    4. sentences(phrase) : 인자로 입력한 여러 문장을 분리, 분리된 문장은 리스트 형태로 반환
    from konlpy.tag import Kkma
    
    #꼬꼬마 형태소 분석기 객체 생성
    kkma=Kkma()
    
    text='아버지가 방에 들어갑니다.'
    
    #1. 형태소 추출
    morphs=kkma.morphs(text)
    print(morphs)
    
    #2. 형태소와 품사 태그 추출
    pos=kkma.pos(text)
    print(pos)
    
    #3. 명사만 추출
    nouns=kkma.nouns(text)
    print(nouns)
    
    #4. 문장 분리
    sentences='오늘 날씨는 어때요? 내일은 덥다던데.'
    s=kkma.sentences(sentences)
    print(s)

    더보기

    Kkma는 총 56개의 품사 태그를 지원

    임의의 문장으로 실습 시 아래 웹사이트를 참고

    kkma.snu.ac.kr/documents/?doc=postag

     

    3.2.2 Komoran

    =코모란, Shineware에서 자바로 개발한 한국어 형태소 분석기

    Apache라이선스 2.0을 따르는 오픈소스 소프트웨어

    경량화 버전도 존재, 다른 형태소 분석기와 다르게 공백이 포함된 형태소 단위로도 분석이 가능해 많이 사용

    from konlpy.tag import Komoran

    Komoran은 다음 3가지 함수를 제공

    1. morphs(phrase) : 인자로 입력한 문장을 형태소 단위로 토크나이징, 토크나이징된 형태소들은 리스트 형태로 반환
    2. nouns(phrase) : 인자로 입력한 문장에서 품사가 명사인 토큰만 추출
    3. pos(phrase,flatten=True) : 인자로 입력한 문장에서 형태소를 추출한 뒤 품사 태깅, 추출된 형태소와 그 형태소의 품사가 튜플 형태로 묶여서 리스트로 반환
    from konlpy.tag import Komoran
    
    #코모란 형태소 분석기 객체 생성
    komoran=Komoran()
    
    text='아버지가 방에 들어갑니다.'
    
    #1. 형태소 추출
    morphs=komoran.morphs(text)
    print(morphs)
    
    #2. 형태소와 품사 태그 추출
    pos=komoran.pos(text)
    print(pos)
    
    #3.명사만 추출
    nouns=komoran.nouns(text)
    print(nouns)

    더보기

    Komoran은 총 42개의 품사 태그를 지원

    임의의 문장으로 실습 시 아래 웹사이트를 참고

    docs.komoran.kr/firststep/postypes.html

     

    3.2.3 Okt

    트위터에서 개발한 Twitter 한국어 처리기에서 파생된 오픈 소스(아파치 2.0 라이선스)한국어 처리기

    Okt는 빅데이터에서 간단한 한국어 처리를 통해 색인어를 추출->완전한 수준은 아님

    띄어쓰기가 어느 정도 되어 있는 문장을 빠르게 분석할 때 많이 사용

    from konlpy.tag import Okt

    Okt는 다음 4가지 함수를 제공

    1. morphs(phrase) : 인자로 입력한 문장을 형태소 단위로 토크나이징, 토크나이징된 형태소들은 리스트 형태로 반환
    2. nouns(phrase) : 인자로 입력한 문장에서 품사가 명사인 토큰만 추출
    3. pos(phrase,stem=False, join=False) : 인자로 입력한 문장에서 형태소를 추출한 뒤 품사 태깅, 추출된 형태소와 그 형태소의 품사가 튜플 형태로 묶여서 리스트로 반환
    4. normalize(phrase) : 입력한 문장을 정규화시킴
    5. phrases(phrase) : 입력한 문장에서 어구를 추출
    from konlpy.tag import Okt
    
    #꼬꼬마 형태소 분석기 객체 생성
    okt=Okt()
    
    text='아버지가 방에 들어갑니다.'
    
    #1. 형태소 추출
    morphs=okt.morphs(text)
    print(morphs)
    
    #2. 형태소와 품사 태그 추출
    pos=okt.pos(text)
    print(pos)
    
    #3. 명사만 추출
    nouns=okt.nouns(text)
    print(nouns)
    
    #4. 정규화, 어구 추출
    sentences='오늘 날씨가 좋아욬ㅋㅋ'
    print(okt.normalize(sentences))
    print(okt.phrases(sentences))

    더보기

    Okt를 더 자세히 알고 싶으면 아래 웹사이트를 참고

    https://openkoreantext.org/

     

    3.2.4 사용자 사전 구축

    챗봇의 데이터 입력단은 인터넷 구어체와 관련이 많음

    새롭게 생겨나는 단어나 문장은 형태소 분석기에서 인식이 안 되는 경우가 많음

    ->대부분의 형태소 분석기들은 사용자 사전을 추가할 수 있도록 구성

    ex)Komoran

    #user_dic.tsv
    #[단어]\t[품사]
    엔엘피\tNNG
    나는 내일, 어제의 너와 만난다\tNNG
    시샵
    from konlpy.tag import Komoran
    
    komoran=Komoran(usedic='./ser_dic.tsv')
    text='우리 챗봇은 엔엘피를 좋아해.'
    pos=komoran.pos(text)
    print(pos)

     

    3.3 마치며

    영어의 경우 단순히 토큰 정보만 필요하다면 띄어쓰기만 하더라도 훌륭한 결과를 보여줌

    하지만 한국어는 명사와 조사를 띄어쓰지 않고, 용언에 따라 여러 가지 어미가 붙기 때문에 띄어쓰기만으로는 토크나이징을 할 수 업승ㅁ

    따라서 KoNLPy의 형태소 분석기를 이용해 형태소 단위의 토큰과 품사 정보까지 추출

    추출된 정보에서 필요없는 정보를 제거하는 과정이 추가되어야함

    ->전처리(preprocessing), 챗봇 엔진에서 문장의 의미나 의도를 빠르게 잘 분석하기 위해 필수적으로 거쳐야하는 작업

    형태소 분석기 장점 단점
    Kkma 분석 품질이 좋음
    지원하는 품사 태그가 가장 많음
    분석 속도가 느림
    사용자 사전으로 추가한 복합 명사에 대해 불완전하게 동작
    Komoran 자소가 분리된 문장이나 오탈자에 강함
    사용자 사전 관리 용이
    적당한 분석 품질과 분석 속도
    Okt 매우 빠른 분석 속도
    정규화 기능 지원
    사용자 사전 관리 어려움
    용언 분석에 일관성이 부족함

    댓글

Designed by Tistory.