ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 자연어 처리 개념 (NLP Bible)
    BIG DATA & AI/NLP 2021. 4. 8. 15:36
    반응형

    프로젝트 중 자연어 처리 및 얕은 인공지능을 사용할 일이 생겼다.

    졸업 프로젝트로 자연어 처리 및 딥러닝을 진행하면서, (심지어 비지도 학습이었다) 다시는 NLP를 건드리지 않겠다고 다짐했었는데, 회사에서 하게되다니!! 다시 국어 공부와 기계 가르치기 공부를 시작한다.. 책도 빌렸다. "밑바닥부터 시작하는 딥러닝(Deep Learning from Scratch)"이라고, Oreilly 출판간이다. 나중에 책 정리도 포스팅 해야겠다.

    참고로 졸업 프로젝트 주제는 "소설 텍스트 분석을 통한 등장인물 도출 및 관계 분석" 이었는데, 주제 자체도 흥미로웠고 진행하면서 visualization 하는 부분이 재밌었던 기억이 난다. 정확도가 안 나와서 문제였지만 😂😂


    우선 개념부터 잡아야 겠죠?

    자연어 처리(NLP)란?

    일단, 우리가 평소에 쓰는 말 ─ 을 자연어(Natural Language)라고 한다.

    자연어 처리(NLP, Natural Language Processing)를 문자 그대로 해석하면 '자연어를 처리하는 분야'인데, 쉽게 풀어서 설명하면 사람의 말을 컴퓨터에게 이해시키기 위한 기술(분야) ─ 정도 되겠다.

    말뭉치(Corpus)란?

    NLP 공부하면서 corpus라는 단어를 많이 접하게 되는데, 이는 자연언어 연구를 위해 특정한 목적을 가지고 언어의 표본을 추출한 집합이다. 사실 굉장히 추상적인 단어인데, 넓은 의미에서는 우리 일상 생활에서 쉽게 접할 수 있는 책, 광고 문구, 신문, 사전 등 "언어 자료의 집합"을 의미한다.

    자연어 처리 분야에서는 corpus를 컴퓨터가 읽을 수 있는 형태로 저장된 일정 규모 이상의 언어 자료 ─ 로 이해하면 되겠다. 즉 텍스트 데이터라고 정의할 수 있다. 심지어 문장 하나도 하나의 말뭉치이다.

    임베딩(Embedding)이란?

    자연어 처리 분야에서 임베딩(Embedding)은 사람이 쓰는 자연어를 기계가 이해할 수 있는 숫자형태인 vector로 바꾼 결과 혹은 그 일련의 과정 전체를 의미한다. 가장 간단한 형태의 임베딩은 단어의 빈도를 그대로 벡터로 사용하는 것이다. 단어-문서 행렬(Term-Document Matrix)는 row는 단어 column은 문서에 대응한다.

    임베딩으로 얻을 수 있는 효과는 단어/문장 간 관련도 계산 (졸프에서 사용함!), 의미적/문법적 정보 함축 그리고 전이학습(Transfer learning)이 되겠다. 내가 이번에 맡은 프로젝트에서는 임베딩이 정확도에 아주 중요한 역할을 할 예정이어서, 많은 study 및 seminar가 필요할 듯 하다.

    자연어 분석 단위

    • Sentence
    • Document
    • Word (=Token, Morpheme, subword)
    보통 자연어 처리 문서는 영어 기준이기 때문에 morpheme과 word는 strict하게 구분되지 않는다.

    자연어 처리 기법

    시소러스를 활용한 기법

    시소러스 (thesaurus, 유의어 사전) : 사람이 만든 유의어 사전으로, 뜻이 같은 단어(동의어)나 뜻이 비슷한 단어(유의어)가 한 그룹으로 분류되어 있다.
    ex) car = auto, automobile, machine, motocar

    시소러스 종류에 따라 상/하위 관계까지 정의된 시소러스도 있다. 가장 유명한 시소러스는 프린스턴 대학교에서 개발한 WordNet 이라고 한다. NLTK 모듈을 통해 사용할 수 있다.

    하지만 사람이 정의하는 사전이다 보니, 시대 변화에 대응하기 어렵고 비용이 크며, 단어의 미묘한 차이를 표현하기가 어렵다는 단점이 있다.

    통계 기반 기법

    사람의 지식(단어를 선택하고, 쓰는 방법 등)을 이용해, 말뭉치에서 자동으로 그리고 효율적으로 그 핵심을 추출하는 기법이다. 대부분 아래와 같은 순서로 진행된다. 가장 쉽고, 흔하게 쓰이는 기법으로 특정 단어를 지목했을 때 그 주변에 어떤 단어가 몇 번이나 등장하는지를 count한다.

    1. 말뭉치 선정
    2. 말뭉치 전처리
    3. 분산 표현 (Distributional Representation)
      ➡ 단어의 의미를 정확하게 파악할 수 있는 벡터 표현
    4. 분포 가설 (Distributational Hypothesis)
    5. 동시 발생 행렬 생성
    6. 벡터 간 유사도 계산
    7. 유사 단어의 랭킹 표시

    추론 기반 기법

    통계 기반 기법보다 더 강력해졌다! 추론 과정에서 신경망을 이용하는 기법이다.

    통계 기반 기법은 행렬의 크기가 말뭉치의 크기에 비례하기 때문에 대규모의 말뭉치를 다룰 때 문제가 발생할 수 있다. 하지만 추론 기반 기법에서는 mini batch로 학습하는 것이 일반적이기 때문에, 신경망이 한 번에 소량의 단위로 학습하여 가중치를 갱신해 나가므로 대규모 말뭉치에서 큰 이점을 지닌다. 대표적으로 word2vec이 있고, one-hot encoding, CBOW 모델, skip-gram 모델 등을 사용할 수 있는데 이는 추후 포스팅에 정리하도록 하겠다.

     


    References

    반응형

    댓글

Written by Emily.