앞장에서 word2vec의 구조를 배우고 CBOW모델을 구현했다. 하지만 말뭉치에 포함된 어휘 수가 많아지면 계산량도 커져, CBOW모델을 계산 시간이 너무 오래 걸린다는 단점이 있다. 그래서 이번 장의 목표는 word2vec의 속도 개선으로, 단순한 word2vec에 아래 두 가지 개선사항을 추가할 것이다. 1) Embedding이라는 새로운 계층 도입 2) 네거티브 샘플링이라는 새로운 손실 함수 도입 앞 장의 CBOW모델은 단어 2개를 맥락으로, 하나의 단어(타깃)를 추측한다. 이 때 입력 측 가중치(Win)와의 행렬 곱으로 은닉층이 계산되고, 다시 출력 측 가중치(Wout)와의 행렬 곱으로 각 단어의 점수를 구한다. 그리고 이 점수에 소프트맥스 함수를 적용해 각 단어의 출현 확률을 얻고, 이 확률을..
Data Science/NLP 검색 결과
앞 장에서는 '통계 기반 기법'으로 단어의 분산 표현을 얻었는데, 이번 chapter 3에서는 더 강력한 기법인 '추론 기반 기법'을 살펴보자. 추론 과정에 신경망을 이용하는데, 여기서 그 유명한 word2vec가 등장한다. 3.1 추론 기반 기법과 신경망 단어를 벡터로 표현하는 방법은 크게 '통계 기반 기법'과 '추론 기반 기법'이다. 두 기법 모두 분포 가설이 배경이고, 이번 절에서는 추론 기반 기법의 이점을 설명한다. 그 다음 word2vec 전처리를 위해 신경망으로 '단어'를 처리하는 예를 보자. 3.1.1 통계 기반 기법의 문제점 통계 기반 기법은 주변 단어의 빈도를 기초로 단어를 표현했다. 구체적으로는 단어의 동시발생 행렬을 만들고, 행렬에 SVD를 적용하여 밀집벡터(단어의 분산 표현)를 얻었..
2.1 자연어처리란 한국어와 영어 등 평소에 쓰는 말을 자연어(natural language)라고 한다. 자연어 처리(natural language processing)를 문자 그대로 해석하면 '자연어를 처리하는 분야'이고, 쉽게 말해 '우리의 말을 컴퓨터에게 이해시키는 기술이자 분야'이다. 우리의 말은 일상생활에서도 느끼지만, 의미나 형태가 유연하게 바뀔수도 있고 때론 같은 의미의 문장도 여러 형태로 표현되며 세월이 흐르면서 새로운 말이나 새로운 의미가 생겨나거나 사라질 수 있다. 이렇게 언어라는 것이 모호하고 중의적이기 때문에 컴퓨터에게 자연어를 이해시킨다는 것은 매우 어려운 일이기 때문에, 이러한 일들을 할 수 있다면 수많은 사람에게 도움을 줄 수 있다. 2.1.1 단어의 의미 우리의 말은 '문자'..
자연어란? 자연어는 natural language, ordinary language로써, 사람들이 일상적으로 쓰는 언어를 부르는 개념이다. 인공적으로 만들어진 언어인 인공어와 반대되는 개념이다. 자연어 처리 이해 방법 문장의 컨텍스트(Context)를 이해해야, 문장 안에 있는 단어 한 개 한 개가 어떤 의미인지 알 수 있다. 사람은 'Apple'이 사과인지, 바나나인지 문맥을 통해 바로 구분할 수 있지만 기계는 할 수 없다. 그리고 사람은 '안경'을 검색하면 '눈'이나 '시력'등 단어간 의미가 있는 관계성을 바로 인식할 수 있지만 기계는 어렵다. 그렇기 때문에 단어를 수치로 표현하여 기계가 이해하도록 해야 한다. 이 방법이 바로 Word Embedding인데, 간단히 말해서 텍스트를 숫자로 표현하는 것..
NLP(자연어처리) - 정규표현식 with python (1) 글에 이어서 진행됩니다. 메타문자 별도 표기법(자주 사용하는) 앞 글에서 [0-9], [가-힣]과 같은 표현을 보았는데, 이 표현보다는 w와 d처럼 한 문자로 메타문자를 표현하는 방법을 자주 사용한다. 이 글에서는 대표적으로 \w와 \d에 대해 알아보고, 대문자와 소문자의 차이에 대해 다루고자 한다. text = "텍스트마이닝은 정말 신기해요.ㅎ헤ㅏ핳" re.findall('[\w]', text) >>> ['텍','스','트','마','이','닝','은','정','말','신','기','해','요','ㅎ','헤','ㅏ','핳'] re.findall('[\W]', text) >>> [' ', ' ', '.'] ph = '''안녕하세요. 제 전화번..
정규표현식이란? 정규표현식의 사전적인 의미로는 특정한 규칙을 가진 문자열의 집합을 표현하는데 사용하는 형식 언어이다. 즉 텍스트 데이터의 표현 방법을 다루는 것이라고 생각하면 된다. 하지만 코드가 간단한 만큼 가독성이 떨어져서 표현식을 제대로 숙지하지 않으면 이해하기 힘들다는 문제점이 있다. 하지만 텍스트 데이터를 처리하기 위한 가장 기초적인 문법이고, 데이터 익명화와 같은 여러 기술에서 많이 사용하게 된다. 자연어처리를 하기 위한 토대인 것이다. 문자열 검색 import re re.match('연어','연어초밥') >>> match='연어' re.match('장어','연어초밥') >>> 아무것도 x re.search('연어','연어초밥') >>> match='연어' re.search('장어','장어초밥..
최근댓글