boostcamp AITech

[16일차] NLP 시작과 word embedding

라이크나우 2021. 2. 16. 00:55

아 재밌다.(진짜임)

 

NLP에 대해서 본격적으로 배우기 시작했다. 정말 너무 배워보고싶었다. 여기저기 지원공고를 들여다볼 때 NLP 경험 적으라는걸 너무 많이 봤어서 대체 왜 뭐길래 왜때문에 뭘 위해서(광희톤)

 

하튼 NLP는 NLU와 NLG로 나뉜다.

understanding과 generator

 

오늘은 NLU를 전반적으로 다뤘던 것 같다.

 

우선 종류들부터 자세히 살펴보고가자

 

자연어를 가지고 무언가 학습하고 처리하는 여러 분야들에 대한 설명이다.

 

NLP

말 그대로 자연어처리. level별로 해야할 일들을 정리해주셨다.

  • low-level parsing
    • Tokenization, stemming

tokenization은 token단위로 쪼개는거다. 단어 단위라고 하셨는데 단어는 아니고 형태소 단위로 쪼개는 듯 하다. 아 나 고3때 국어 문법 잘했었는데 지금은 넘나 희미하다 ㅎㅎ

+) 추가 설명을 보니 tokenizer를 무엇ㅇ르 썻느냐도 중요한 고려 사항이라고 한다. 형태소를 기준으로 나눌 수도 있고, 음절 혹은 subword단위일 수도 있다고  하신다.

stemming는 어미 변화를 빼고 어근을 추출하는거다. 영어에서는 study와 같은 시제가 안드어간 동사. 우리나라는 어근이니까 음 먹다에서 먹을 추출하는 거겠지?

  • Word and phrase level
    • NER, POS tagging, noun-phrase chunking, dependency parsing, coreference resolution

단어/문단 단위로 해석하는거다.

NER은 named entity recognition인데 단일다어 혹은 여러 단어로 이루어진 고유명사를 인식하는거다.

POS는 part-of speech인데 품사를 태깅해주는거다. 주어, 목적어, 본동사 등등

  • Sentence level
    • Sentiment analysis, machine translation

전자는 문장의 어조를 판단하는거다. 긍정적인 문장인지 부정적인 문장인지.

기계 번역은 번역기임!

  • Multi-sentence and paragraph level
    • Entailment prediction, question answering, dialog systems, summarization

Entailment prediction은 두 문장간의 모순 혹은 내포 관계를 파악한다. 말그대로 모순. 이 창이 뚫지 못하는 방패는 없슴다! 이 방패가 못막을 창은 없슴다! 두 문장이 공존할 수 없음을 판단해준다.

quenstion answering은.. 너무 좋다. 기술의 발전은 대단하다. 분명 예전엔 안그랬던거같은데 아래처럼 사이트에 들어가지 않아도 답을 쏙 알려준다.

dialog systems은 챗봇구현이니까 대화를 할 수 있도록 학습한다는거다.

 

Text mining

이 쪽은 사실 좀 빅데이터 분야라고 봐야할 듯 하다.

  • text와 문서 데이타를 이용하여 트렌드를 분석한다든지,
  • 문서의 단어들을 클러스터링하여 필요한 정보를 얻는다든지,
  • SNS data로 신조어를 알아내든가, 사회 현상을 분석하는 등

텍스트로 mining하는 분야이다.

Information retrieval

정보 검색 기술, 포털 사이트에서 검색을 했을 때 최적의 사이트 혹은 결과를 위로 올려주는 기술을 말한다.

이미 고도화되어있어서 이젠 연구가 활발하지 않다.

대신 조금 다른 방향으로 추천시스템이 있는데, 검색을 안해도 검색한것처럼 나에게 적절한 정보를 주는 것이니 여기에 포함된다.

 

(NLP 트렌드 두페이지 정도 다룸)

 

Bag-of-Words

단어들의 가방와 이를 이용해서 할 수 있는 것에 대해서 배우는 시간이다. 이름 누가 지었을까 백오브월즈,,

우선 baof of words를 만들어보자

먼저 unique words set을 만든다. 

그리고 각 요소를 원핫벡터로 표현한다. 그렇게 되면 어떤 단어든지간에 거리는 루트2이고 유사도는 0이겠죵?

이런식으로 단어를 표현하고나면 문장도 원핫벡터의 합으로 표현이 가능하다.

👆요런식으로!

 

NaiveBays Classifier

그럼 이 baf of words를 이용해서 naivebayes classifier를 만들어보자

어떤 단어가 어떤 class에 속하는지 판단하는거다.

👆공식은 여태 많이 다뤘으니 설명은 생략한다.

 

👆우리가 학습할 데이터이다.

위의 공식을 활용해서 구하면 쉽게 구해지는데, 과정을 남겨놓자면, 

이렇게 우리가 test해야할 문장이 어떠한 클래스에 속할 확률을 구할 수 있다!

정말 단순 분수 계산이라 자세한 설명은 생략하고, 이 기법은 특정 class 내에서 특정 단어가 나타나지 않으면 확률이 0이라 절대 분류를 하지 못하는 문제점이 존재한다..!

 

word enbedding

단어를 벡터로 표현하는 거다.

그러면 의미상 유사도를 측정할 수 있다. 거리를 측정하면 되니까.

이 유사도는 감정판단의 근거가 될 수도 있고, 비슷한 단어 혹은 연관된 단어를 알 수 있는 근거가 될 수 있다.

 

Word2Vec

단어를 벡터로 표현하는 방법이겠지? 이를 이용하여 

다른 문장 내에 같은 단어가 있다면 그 주변단어는 의미가 비슷할거라고 가정하면서 벡터로 바꾼다.

죽 비슷한 문맥에 있는 단어들은 비슷한 의미를 가질거라고 보는거다. 

 

그러면 이런걸 구할 수 있겠지, P(w|cat)는 cat이 있는 환경에서 w단어가 나타날 확률이다.

 

word2vec 알고리즘을 살펴보자.

우선 당연히 단어들을 set한 다음에 원핫벡터를 만든다.

  • input :  중심단어의 원핫벡터
  • output : input과 연관있는 단어의 원핫벡터

이 알고리즘의 목적은 뭐 당연히 weight를 원하는 값으로 조절하는 걸텐데, 여기서 weight는 어떤 의미일지 먼저 살펴보자.

기존 MLP에서는 hidden layer가 활성함수를 곱하는거였는데..이번엔 의미가 좀 다른 것 같다.

 

dreamgonfly.github.io/blog/word2vec-explained/

 

쉽게 씌어진 word2vec | Dreamgonfly's blog

텍스트 기반의 모델 만들기는 텍스트를 숫자로 바꾸려는 노력의 연속이다. 텍스트를 숫자로 바꾸어야만 알고리즘에 넣고 계산을 한 후 결과값을 낼 수 있기 때문이다. 텍스트를 숫자로 바꾸는

dreamgonfly.github.io

~작성중~