목록자연어 처리 (NLP) (14)
귀퉁이 서재
이전 장에서는 새로운 문장을 생성하는 seq2seq에 대해 알아봤습니다. 이번 장에서는 seq2seq의 기능을 더 강화시켜 주는 어텐션(Attention)에 대해 알아보겠습니다. 어텐션은 자연어 처리 분야에서 강력하고 중요한 기술 중 하나입니다. seq2seq를 이미 알고 있다는 가정하에 이번 장을 썼습니다. seq2seq를 잘 모르시는 분은 NLP - 13. 시퀀스-투-시퀀스(seq2seq)를 참고해주시기 바랍니다. 이번 장의 모든 글 및 그림은 밑바닥부터 시작하는 딥러닝 2를 참고, 정리하였음을 밝힙니다. 어텐션이라는 메커니즘 덕분에 seq2seq는 인간처럼 필요한 정보에 '주목(Attention)'할 수 있습니다. 어텐션은 기존 seq2seq의 문제점을 해결하여 성능을 향상시킵니다. 우선 기존 se..
이번 글은 RNN(Recurrent Neural Network)에 대해 이미 알고 있다는 가정 하에 썼습니다. RNN에 대해 잘 모르신다면 RNN을 먼저 배워오시기를 추천드립니다. NLP 분야에서 seq2seq는 기계 번역, 문장 생성, 질의응답, 메일 자동 응답 등에 활용되는 모델입니다. 우선 기계 번역에 대해 알아보겠습니다. 예전의 기계 번역은 주로 규칙 기반(rule based)이었습니다. 문맥을 전체적으로 고려하지 않고 단어와 단어를 1:1로 번역하기 때문에 결과가 좋지 않았습니다. 극단적인 예이긴 하지만 아래와 같습니다. 성능이 좋지 않은 규칙 기반 번역: 나는 그곳에 갔다 -> I there went ?? '나는'을 I, '그곳에'를 there, '갔다'를 went로 단어 간 1:1 번역이기 ..
글로브(GloVe) 글로브(GloVe, Global Vectors for Word Representation)는 스탠퍼드에서 2014년 개발한 워드 임베딩 방법론입니다. 글로브는 카운트 기반의 LSA와 예측 기반의 Word2Vec의 문제점을 개선하기 위해 탄생했습니다. LSA는 문서 전체의 통계적인 정보를 활용한다는 장점이 있지만, 단어간 유사도를 측정하기 어렵다는 단점이 있습니다. 반면 Word2Vec은 단어 간 유사도를 측정할 수 있다는 장점이 있지만, 사용자가 지정한 위도우 내에서만, 즉 주변 단어(맥락 단어) 몇 개만 활용하여 결과가 도출되기 때문에 문서 전체의 단어 정보가 반영되기 힘들다는 단점이 있습니다. 글로브는 LSA와 Word2Vec의 장점을 합친 워드 임베딩 방법론으로 단어 간 유사도도..
Word2Vec은 워드 임베딩(Word Embedding) 방법론 중 하나입니다. Word2Vec을 설명하기 앞서 아래 예시를 한번 보겠습니다. 한국 - 서울 + 파리 = 프랑스 어머니 - 아버지 + 여자 = 남자 아버지 + 여자 = 어머니 직관적으로 이해하시는 분들도 있을 겁니다. 첫번째 예시를 보면 우선 한국이라는 단어에서 수도에 해당하는 서울을 빼줍니다. 한국에서 서울이라는 특성을 뺐으니 나라에 해당하는 껍데기 의미만 남아있을 겁니다. 거기에 파리를 더해주면 프랑스가 됩니다. 나라에 해당하는 껍데기에 파리라는 프랑스 수도를 더해주니 그 단어는 프랑스가 되는 것입니다. 마지막 예에서는 아버지에 여자라는 요소를 더해주면 어머니가 된다는 뜻입니다. Word2Vec을 활용하면 위와 같이 단어 간 관계를 파..
단어를 밀집 행렬로 표현하는 것을 워드 임베딩(Word Embedding) 혹은 단어의 분산 표현(Distributed Representation)이라고 합니다. 밀집 행렬은 희소 행렬의 반대되는 개념으로, 대부분이 0이 아닌 값으로 채워진 행렬을 의미합니다. (밀집 행렬, 희소 행렬에 대한 자세한 사항은 NLP - 7. 희소 행렬 (Sparse Matrix) - COO 형식, CSR 형식을 참고해주시기 바랍니다.) 색을 예로 들어보겠습니다. 색을 표현할 때 우리는 흔히 RGB 형식을 사용합니다. (R, G, B) = (170, 33, 22)라면 빨강 계열의 색임을 알 수 있습니다. 이를 A색이라고 합시다. 또한 B색의 RGB는 (180, 20, 30)이고, C색의 RGB는 (20, 180, 30)이라고..
토픽 모델링(Topic Modeling)이란 문서 집합에 숨어 있는 '주제'를 찾아내는 텍스트 마이닝기법 중 하나입니다. 사람이 모든 문서를 읽고 그 주제를 파악할 수도 있겠지만, 그러기에는 시간과 노력이 매우 많이 소요됩니다. 이럴 때 토픽 모델링을 통하여 문서에 함축되어 있는 주요 주제를 효과적으로 찾아낼 수 있습니다. 철학에 관한 문서 A와 웨이트 트레이닝에 관한 문서 B가 있다고 해봅시다. A문서에는 '소크라테스', '니체', '실존주의', '형이상학' 등과 같은 단어가 많이 들어가 있고, B문서에는 '스쿼트', '데드리프트', '벤치프레스', '복강 내압', '척추 중립' 등과 같은 단어가 많이 들어가 있을 것입니다. 그리고 두 문서에 모두 '그', '그리고', '그래서', '그러나', '~이다..
문서 유사도란 말그대로 문서와 문서 간의 유사도가 어느정도인지 나타내는 척도입니다. 문서 간 유사도를 측정해 지금 보고 있는 뉴스와 가장 유사한 뉴스를 추천해주기도 하고, 줄거리를 기반으로 내가 본 영화와 가장 유사한 영화를 추천해줄 수도 있습니다. 문서 유사도를 측정하는 방법은 여러개가 있지만 일반적으로 코사인 유사도(Cosine Similarity)를 많이 사용합니다. 이번 장에서는 코사인 유사도의 정의와 사용 방법에 대해 알아보겠습니다. 역시나 이전과 마찬가지로 파이썬 머신러닝 완벽 가이드 (권철민 저), 딥 러닝을 이용한 자연어 처리 입문 (유원주 저)을 요약정리했습니다. 코사인 유사도 (Cosine Similarity) 코사인 유사도란 벡터와 벡터 간의 유사도를 비교할 때 두 벡터 간의 사잇각을..
이번 장에선 희소 행렬에 대해 알아보겠습니다. 마찬가지로 파이썬 머신러닝 완벽 가이드 (권철민 저), 딥 러닝을 이용한 자연어 처리 입문(유원주 저)을 요약정리했습니다. 이전 장에서 배웠던 CountVectorizer, TfidfVectorizer를 이용해 피처 벡터화를 하면 상당히 많은 칼럼이 생깁니다. 모든 문서에 포함된 모든 고유 단어를 피처로 만들어주기 때문입니다. 모든 문서의 단어를 피처로 만들어주면 수만 개에서 수십만 개의 단어가 만들어집니다. 이렇게 대규모의 행렬이 생기더라도 각 문서에 포함된 단어의 수는 제한적이기 때문에 행렬의 대부분의 값은 0으로 채워집니다. 이렇듯 대부분 값이 0으로 채워진 행렬을 희소 행렬(Sparse Matrix)이라고 합니다. 아래는 희소 행렬의 예시입니다. 이와..
이전 장에서 BOW에 대해 알아봤고, BOW의 피처 벡터화는 카운트 기반 벡터화(CountVectorizer)와 TF-IDF(Term Frequency - Inverse Document Frequency) 기반 벡터화가 있다고 했습니다. 이번장에서는 CountVectorizer와 TF-IDF에 대해 알아보겠습니다. 이번 장 역시 파이썬 머신러닝 완벽 가이드 (권철민 저), 딥 러닝을 이용한 자연어 처리 입문(유원주 저)을 요약정리했습니다. 카운트 기반 벡터화 이전 장에서 BOW(Bag of Words) 모델에서의 피처 벡터화 수행 방법에 대해 설명했습니다. 그와 마찬가지로, 단어 피처에 값을 부여할 때, 각 문서에서 해당 단어가 나타나는 횟수, 즉 Count를 부여하는 경우를 카운트 벡터화라고 합니다. ..
이번 장에선 Bag of Words에 대해 알아보겠습니다. 이전과 마찬가지로 파이썬 머신러닝 완벽 가이드 (권철민 저), 딥 러닝을 이용한 자연어 처리 입문(유원주 저)을 요약정리했습니다. Bag of Words란 단어들의 문맥이나 순서를 무시하고, 단어들에 대해 빈도 값(frequency)을 부여해 피쳐 값을 만드는 모델입니다. Bag of Words는 직역하자면 단어들의 가방입니다. 문서 내 모든 단어를 한꺼번에 가방(Bag) 안에 넣은 뒤에 흔들어서 섞는다는 의미로 Bag of Words(BOW) 모델이라고 합니다. BOW를 기반으로 피처 추출하기 아래의 두 문장이 있다고 가정하고 이 문장을 BOW 기반으로 피처 추출해보겠습니다. 문장1: 'My wife likes to watch baseball ..
텍스트 전처리 세 번째 주제는 어간 추출(Stemming)과 표제어 추출(Lemmatization)입니다. 이전과 마찬가지로 파이썬 머신러닝 완벽 가이드 (권철민 저), 딥 러닝을 이용한 자연어 처리 입문(유원주 저)을 요약정리했습니다. 택스트 전처리의 목적은 말뭉치(Corpus)로부터 복잡성을 줄이는 것입니다. 어간 추출과 표제어 추출 역시 말뭉치의 복잡성을 줄여주는 텍스트 정규화 기법입니다. 텍스트 안에서 언어는 다양하게 변합니다. 영어를 예로 들면, 과거형, 현재 진행형, 미래형, 3인칭 단수 여부 등 많은 조건에 따라 원래 단어가 변화합니다. play를 예로 들면, plays, played, playing 등과 같이 조건에 따라 다양하게 달라집니다. 어간 추출(Stemming)과 표제어 추출(Le..
텍스트 전처리 두 번째 주제는 불용어(Stop word) 제거입니다. 불용어(Stop word)는 분석에 큰 의미가 없는 단어를 지칭합니다. 예를 들어 the, a, an, is, I, my 등과 같이 문장을 구성하는 필수 요소지만 문맥적으로 큰 의미가 없는 단어가 이에 속합니다. 이런 불용어는 텍스트에 빈번하게 나타나기 때문에 중요한 단어로 인지될 수 있습니다. 하지만 실질적으로는 중요한 단어가 아니므로 사전에 제거해줘야 합니다. 이전과 마찬가지로 파이썬 머신러닝 완벽 가이드 (권철민 저), 딥 러닝을 이용한 자연어 처리 입문 (유원주 저)을 요약정리했습니다. 불용어 확인하기 import nltk nltk.download('stopwords') print('영어 불용어 갯수:',len(nltk.corp..
NLP에서 텍스트 자체를 바로 피처로 사용할 수는 없습니다. 사전에 텍스트 전처리 작업이 반드시 필요합니다. 텍스트 전처리를 위해서는 클렌징, 토큰화, 불용어 제거, 정규화 등의 작업이 필요합니다. 텍스트 전처리 첫번째 시간으로 이번 장에서는 텍스트 토큰화에 대해 알아보겠습니다. (참고로, 파이썬 머신러닝 완벽 가이드(권철민 저)와 딥 러닝을 이용한 자연어 처리 입문(유원준 저)를 요약정리한 것입니다.) 그전에 말뭉치(Corpus, 코퍼스)의 뜻에 대해 먼저 알아보겠습니다. 말뭉치를 위키피디아에서 검색하면 아래와 같이 나옵니다. 말뭉치 또는 코퍼스(Corpus)는 자연언어 연구를 위해 특정한 목적을 가지고 언어의 표본을 추출한 집합이다. (Reference1) 어렵게 설명이 되어 있는데 그냥 우리가 사용..
자연어(Nautral Language)란 인간이 일상에서 사용하는 언어를 말합니다. 자연어 처리(Natural Laguage Processing)란 기계가 자연어를 이해하고 해석하여 처리할 수 있도록 하는 일을 말합니다. 자연어 처리(Natural Laguage Processing)는 줄여서 NLP라고 부릅니다. 자연어 처리(NLP)와 텍스트 분석(Text Mining)은 엄밀히 말하면 다른 개념입니다. 자연어 처리는 기계가 인간의 언어를 해석하는데 중점이 두어져 있다면, 텍스트 분석은 텍스트에서 의미 있는 정보를 추출하여 인사이트를 얻는데 더 중점이 두어져 있습니다. 다만, 머신러닝이 보편화되면서 자연어 처리와 텍스트 분석을 구분하는 것이 큰 의미가 없어졌습니다. NLP가 활용되는 분야 텍스트 분류(T..