[n421]Count-based Representation
■ Key words
ㆍNPL(Natural Language Processing) : 자연어 이해(NLU) / 자연어 생성(NLG)
- 말뭉치(Corpus)
- 문서(Document)
- 문장(Sentence)
- 어휘집합(Vocabulary)
ㆍ전처리(Preprocessing)
- 토큰화(Tokenization)
- 불용어(Stop words)
- 어간 추출(stemming) / 표제어 추출(Lemmatization)
ㆍ등장 횟수 기반의 단어 표현(Count-based Representation)
- 문서-단어 행렬(Document-Term Matrix, DTM) / Bag-of-words
- TF(Term Frequency) / TD-IDF(- Inverse Document Frequency)
■ 주요내용
ㆍNLP(Natural Language Processing) : 자연어를 컴퓨터에게 이해시키는 작업
* 자연어 : 자연적으로 발생된 언어
- 말뭉치(Corpus) : 특정한 목적을 가지고 수집한 텍스트 데이터
- 문서(Document) : 문장(Sentence)들의 집합
- 문장(Sentence) : 여러 개의 토큰(단어, 형태소 등)으로 구성된 문자열. 마침표, 느낌표 등의 기호로 구분
- 어휘집합(Vocabulary) : 말뭉치에 있는 모든 문서, 문장을 토큰화한 후 중복을 제거한 토큰의 집합
- 벡터화(Vectorize) : 자연어를 컴퓨터가 이해할 수 있는 벡터로 만드는 과정
· 등장 횟수 기반의 단어 표현(Count-based Representation) : 문서/문장에 등장하는 횟수를 기반으로 벡터화
⇒ Bag-of-Words(CounterVectorizer) / TF-IDF(TfidfVectorizer)
· 분포 기반의 단어 표현(Distributed Representation) : 타겟 주변의 단어를 기반으로 벡터화
⇒ Word2Vec / GloVe / fastText
※ 자연어 처리로 할 수 있는 일들
ㅇ자연어 이해(Natural Language Understanding, NLU)
- 분류(Classification) : 뉴스 기사 분류, 감성 분석(positive/negative) 등
- 자연어 추론(Natural Language Inference, NLI)
- 기계 독해(Machine Reading Comprehension, MRC), 질의응답(QnA) : 비문학 문제 풀기 등
- 품사 태깅(Part-of-Speech(POS) tagging), 개체명 인식(Named Entity Recognition, NER) 등
ㅇ자연어 생성(Natural Language Generation, NLG) : 특정 도메인의 텍스트 생성
ㅇNLU & NLG
- 기계 번역(Machine Translation)
- 요약(Summarization)
· 추출 요약(Extractive Summerization) : 문서 내에서 해당 문서를 가장 잘 요약하는 부분을 찾아내는 일(NLU)
· 생성 요약(Abstractive Summerization) : 해당 문서를 요약하는 요약문을 생성(NLG)
- 챗봇(Chatbot)
· TOD(Task Oriented Dialog) : 특정 태스크를 처리하기 위한 챗봇(식당예약, 상담 응대 등)
· ODD(Open Domain Dialog) : 정해지지 않은 주제를 다루는 일반대화 챗봇
ㅇ기타
- TTS(Text to Speech) : 텍스트를 음성으로 읽는 프로그램(유투브 슈퍼챗 등)
- STT(Speech to Text) : 음성을 텍스트로 저장하는 프로그램(자막서비스 등)
- Image Captioning : 이미지를 설명하는 문장을 생성하는 프로그램
ㆍ텍스트 전처리(Text Preprocessing)
* 차원의 저주(Curse of Dimensionality) : 차원이 높아져 모델의 설명력(성능)이 떨어지는 현상
『특성의 개수가 선형적으로 늘어날 때 동일한 설명력을 가지기 위해 필요한 인스턴스의 수는 지수적으로
증가한다. 즉, 동일한 개수의 인스턴스를 가지는 데이터셋의 차원이 늘어날수록 설명력이 떨어지게 된다.』
⇒ 대·소문자 통일, 특수문자 제거, 불용어 제거 등을 통해 차원을 최대한 낮춰줘야 함.
- 내장 method를 활용한 전처리(lower, replace, etc.)
- 정규 표현식(Regular Expression, Regex)
- 토큰화(Tokenization) : corpus 내에서 token(보통 의미 있는 단어 / 한국어는 형태소) 단위로 나누는 작업
- 불용어(Stop Words) : 관사, 대명사 등 다른 문장과 중복되어 문장 분석에 크게 의미가 없는 단어 /
도메인 지식을 활용하여 목록을 추가/삭제할 수 있음
- 통계적 트리밍(Trimming) : 불용어를 직접 제거하는 대신 통계적 방법을 통해 말뭉치(corpus) 내
지나치게 빈도가 높거나(통찰력 제공 X) 낮은(의미 X) 토큰 제거 가능
- 어간 추출(Stemming) : 단어의 변형형(동사의 시제 / 단·복수 등)을 제하고 어간으로 토큰화 / nltk
⇒ 알고리즘이 간단하여 검색 등 속도가 중요한 분야에서 활용
- 표제어 추출(Lemmatization) : 사전을 근간으로 단어의 원형을 추출하는 방법 / Spacy(색인화로 빠른 검색)
ㆍ등장 횟수 기반의 단어 표현(Count-based Representation) : 단어가 특정 문서/문장에 들어있는 횟수를 바탕으로 벡터화
- 벡터화(Vectorization) : 텍스트를 컴퓨터가 계산할 수 있도록 수치정보로 변환하는 과정
- 문서-단어 행렬(Document-Term Matrix, DTM) : 행(raw)에는 문서, 열(column)에는 단어(term)이 있는 행렬
- Bag-of-Words(BoW)
· TF(Term Frequency) - 문법이나 단어의 순서 등을 무시한 단순 빈도 고려 벡터화
* CSR(Compressed Sparse Row matrix) : 0을 표현하지 않는 행렬(matrix)
· TF-IDF(Term Frequency - Inverse Document Frequency) : 특정 문서에만 등장하는 단어에 가중치를 두는 방법
* 코사인 유사도(Cosine Similarity) : 두 벡터의 코사인을 구해 유사도를 구하는 방법
* NearestNeighbor(K-NN, K-최근접 이웃) : 쿼리와 가장 가까운 상위 K개의 근접한 데이터를 찾아 그 유사성을 기반으로 점을 추정하거나 분류하는 예측 분석 방법
ㆍ통계적 언어 모델(Statistical Language Model, SLM) : 통계적인 접근 방법으로 언어를 모델링 하는 것
- 희소문제(sparsity problem) : 충분한 데이터를 관측하지 못하여 언어를 정확히 모델링하지 못하는 문제
■ Session note
ㅁ 오전 session
ㆍ자연어 처리
ㆍ자연어 이해
- 분류 : 뉴스 기사 분류, 감성 분석
- 자연어 추론
- 기계 독해 : 비문학 문제 풀기
- 품사 태깅
ㆍ자연어 생성(NLG, Natural Language Generation) : 간단한 기사 생성
ㆍNLU & NLG
- 기계 번영
- 요약
- 챗봇
- TTS : 텍스트 음석으로 읽어주기
- STT : 음성을 텍스트로 쓰기
- Image Captionning : 이미지를 설명하는 문장 생성
ㆍ벡터화 : 벡터화를 어떻게 하느냐에 따라 모델의 성능이 많이 달라지게 됨
ㆍ텍스트 전처리 : 자연어 처리는 특히 전처리가 더 중요함
- 차원의 저주 회피를 위한 작업 : 특수문자 제거(정규표현식 활용) / 소문자화 등
- 불용어(stopwords) 처리 : 관사, 대명사 등 지나치게 자주 반복되는 단어나 거의 쓰이지 않는 단어, Amazon review에서 amazon 등 불필요한 단어는 제거
⇒ 의미는 없지만, 차원만 늘리기 때문에 제거\
- 표제어 추출 : 사전에서 찾아 단어 원형을 검색
ㆍ벡터화
- DTM
- bag-of-words
- CountVectorizer
- TF(counts)-IDF(panelty) : 공통된 단어를 제거하고, 문서의 특별한 단어를 추출하는 방법
ㆍspy-cy로는 한국어 벡터화 불가. 한국어 전처리가 더 까다로워서 Konlpy 등 다른 라이브러리를 해야 함. 한국어는 형태소 단위로 tokenize하여 사용
ㆍ전처리 순서 : 일반적으로 소문자화 → 구두점 제거 → 어간 추출 → 불용어 처리 → 벡터화
ㆍ표제어 처리보다 빠른 처리방법 : 더 좋은 library를 만들어 사용한다 / 사용용도에 따라 다른 library 활용
ㆍ자연어 처리 library는 용량에 따라 다운로드하여 사용 / nonSQL DB와 연동된 것이 아님
* BoW / TF-IDF 사용처 구분하여 알아두기
ㆍbow 쓰는 경우 : 전처리 과정
ㆍ통계적 트리밍 과정 중 대표 단어가 삭제될 수 있으므로 domain 지식을 활용하여 남기거나 오타를 수정하여야 함
ㆍNLP library에서 일반동사를 불용어로 포함하는 이유 : 동사보다 형용사 등이 문장의 nuance를 더 잘 대표하기 때문; i'm happy에서 be동사는 의미 없음
ㆍ오타난 단어는 출현빈도가 낮아 전처리 과정에서 다 제외될 수 있음
ㆍ표제어 추출 시 현재시점의 기본동사형을 기준으로 추출;
시점이 중요할 시 표제어 추출을 지양해야 할 수도 있음
ㆍgpt3 : rnn은 쓰지 않지만, text 처리를 함(n423에서 배움)
ㆍCountVectorizer() : bow; int / TfidfVectorzer() : log * 정수 = float
ㆍ하이퍼 클로바 등 대기업 라이브러리는 1. 컴퓨터가 좋거나 2. 전처리가 좋거나 3. 알고리즘이 좋거나
ㆍ한국어 형태소 분석 library : mecab / 한나눔 / 꼬꼬마
ㆍ벡터화 : 컴퓨터가 알아들을 수 있게 숫자화 해주는 것. encoder도 해당
ㆍ자연어 처리에 편하게 하기 위해 정규표현식 사용 / 필수로 사용할 것은 아님
ㆍ평가지표는 문제에 귀속되는 내용
ㅁ 오후 session
ㆍ벡터화
ㆍ불용어
ㆍ불용어 처리를 하는 이유 : 차원의 저주를 피하고, 모델의 성능을 높이기 위함
ㆍDTM(Document Term Matrix) : 문서 단어 행렬(data frame화)
ㆍBag-of-Words
- TF(Term Frequency) : 문법과 단어의 순서에 상관없이 단어의 빈도만 추출
- TF-IDF(- Inverse Document Frequency) : 단어의 빈도에 모든 문서에 등장하는 단어에 패널티를 주어(IDF) 그 중요도를 구하는 것
ㆍ어간 추출 : 어미를 제외하고 어간만 남겨 추출하는 방법 / 검색 등 빠르게 분석할 때 쓰임
ㆍ표제어 추출 : 사전에 등재되어 있는 기본형으로 추출 / 정확도는 높지만, 시간이 오래 걸림
ㆍcorpus(말뭉치) : 특정한 목적을 가지고 수집한 텍스트 데이터
ㆍ문서 : 문장의 집합
ㆍ문장 : 토큰(단어)으로 구성된 문자열
ㆍ토큰화 : 토큰 단위로 쪼개는 과정 / 영어는 단어(띄어쓰기)로, 한국어는 형태소 단위로 나눔
ㆍ단어집합(Vocab) : 문서를 토큰화하여 중복값을 제거한 집합
ㆍsmoothing : 분모가 0일 때 수학적 오류가 발생하는 것을 피하기 위해 분모에 +1을 하는 것
* 거인의 어깨 위에서 시작하라
ㆍ정규표현식은 알파벳/숫자/특수문자 정도만 알면 충분히 유용할 것
ㆍcolum : title / company / description ⇒ 따로 만들고, 별도의 column으로 바꿔줌
ㆍ3번은 description 기준으로 순위 10개
⇒ column별로 내용이 다르기 때문에 섞어서 쓰진 않음
ㆍ마지막 문제는 답이 없음
* 단어를 one-hot encoding으로 가져가면 내적이 0이 되어 cos이 0이 나와 의미의 연관성이 없도록 나옴; 단어의 의미를 벡터화 하는 방법 배울 예정
■ 주요함수
ㆍ
■ Reference
ㆍBag of Words : https://youtu.be/dKYFfUtij_U
ㆍTF-IDF : https://youtu.be/meEchvkdB1U
ㆍ중복값 확인/제거 : https://rfriend.tistory.com/266
[Python pandas] 중복값 확인 및 처리 : DataFrame.duplicated(), DataFrame.drop_duplicates(), keep='first', 'last', False
데이터를 수집하는 과정 중의 오류, 데이터를 병합하는 과정에서의 오류 등으로 인해서 중복되지 않아야 할 데이터가 중복이 되는 경우가 생길 수 있습니다. 특히, unique 한 'key' 값을 관리해야
rfriend.tistory.com
ㆍN-gram : https://wikidocs.net/21692
위키독스
온라인 책을 제작 공유하는 플랫폼 서비스
wikidocs.net
ㆍpython 내장 method : https://rfriend.tistory.com/327
[Python] 파이썬 문자열 처리를 위한 다양한 메소드 (Python string methods)
지난번 포스팅에서는 파이썬의 자료 유형인 - 숫자(Number), - 문자열(String), - 리스트(List), - 튜플(Tuple), - 사전(Dictionary) 중에서 먼저 숫자(Number)와 문자열(String)의 기본 사용법을 소개..
rfriend.tistory.com
ㆍ통계적 언어 모델(Statistical Language Model, SLM) : https://wikidocs.net/21687
위키독스
온라인 책을 제작 공유하는 플랫폼 서비스
wikidocs.net
ㆍPOS(Part-of-Speech) tagging : https://excelsior-cjh.tistory.com/71
Chap04-1: Part-of-speech Tagging
Part-Of-Speech tagging(POS tagging)은 문장 내 단어들의 품사를 식별하여 태그를 붙여주는 것을 말한다. 투플(tuple)의 형태로 출력되며 (단어, 태그)로 출력된다. 여기서 태그는 품사(POS) 태그다. 1. Defaul.
excelsior-cjh.tistory.com
ㆍNER(Named Entity Recognition) : https://stellarway.tistory.com/29
NER 개론과 NER 데이터셋 모음 (한국어 개체명인식 포함)
**아래 글은 A Survey on Deep Learning for Named Entity Recognition 논문을 읽고 작성한 글입니다.** 목차 NER이란? NE의 태깅 시스템 NE의 카테고리와 대표적인 데이터셋 NER에 대한 전통적인 접근법 딥러닝으..
stellarway.tistory.com
ㆍ토큰화(Tokenization) : https://wikidocs.net/21698
01) 토큰화(Tokenization)
자연어 처리에서 크롤링 등으로 얻어낸 코퍼스 데이터가 필요에 맞게 전처리되지 않은 상태라면, 해당 데이터를 사용하고자하는 용도에 맞게 토큰화(tokenization) & 정 ...
wikidocs.net
ㆍ지프의 법칙 : https://ko.wikipedia.org/wiki/%EC%A7%80%ED%94%84%EC%9D%98_%EB%B2%95%EC%B9%99
지프의 법칙 - 위키백과, 우리 모두의 백과사전
지프의 법칙 확률 질량 함수 N = 10 일 때의 지프 확률질량함수의 로그 스케일 그래프. x축은 인덱스값 k를 나타낸다. (이 함수는 오직 정수값의 k에 대해서만 정의된다는 점에 유의할 것. 연결된
ko.wikipedia.org