책 소개
가장 최신 버전의 소스 파일은 여기에서 내려 받으실 수 있습니다.
https://github.com/ratsgo/embedding/zipball/master
공식 안내 페이지는 여기를 누르시면 확인하실 수 있습니다.
https://ratsgo.github.io/embedding/
요약
임베딩(embedding)은 자연어를 숫자의 나열인 벡터로 바꾼 결과 혹은 그 일련의 과정 전체를 가리키는 용어다. 단어나 문장 각각을 벡터로 변환해 벡터 공간에 '끼워 넣는다(embed)'는 취지에서 임베딩이라는 이름이 붙었다. 컴퓨터가 자연어를 처리할 수 있게 하려면 자연어를 계산 가능한 형식인 임베딩으로 바꿔줘야 한다.
임베딩은 컴퓨터가 자연어를 이해하도록 하는 첫 관문으로 매우 중요한 기능을 한다. 자연어 처리 모델의 성능은 임베딩이 좌우한다고 해도 과언이 아니다. 이 책에서는 다양한 임베딩 기법을 일별하고 한국어 데이터 전처리, 임베딩 구축에 이르는 전 과정을 튜토리얼 방식으로 소개한다. Word2Vec 등 단어 수준 기법부터 ELMo, BERT 등 문장 수준 임베딩까지 다룬다.
추천의 글
처음 리뷰를 부탁받고 읽어봤을 때가 생각납니다. 책을 펼치기 전에는 솔직히 약간의 의구심이 있었습니다. 한 권의 책으로 풀어내기에는 임베딩이 다소 협소한 주제가 아닐지, 한국어라는 재료와 관련 지어 어떻게 설명할 수 있을지 말이지요. 하지만 원고를 읽어 나가며 의구심이 모두 사라졌습니다. 이 책은 임베딩의 개념, 수학적 원리, Word2Vec이나 FastText 등 단어 임베딩 기법, ELMo나 BERT 등 문장 임베딩 기법, 또 구현과 예시까지 관련 내용들을 빠짐없이 짚어 나갑니다. 한국어 처리에 대한 장을 따로 마련하고 이를 기반으로 실제 지은이가 새로이 구현한 내용을 바탕으로 설명한 내용도 인상적이었습니다. 마치 저자 직강 수업을 듣는 듯했습니다. 처음에는 가벼운 마음으로 컴퓨터 화면으로 원고를 보고 있었는데, 어느 순간 이 내용을 종이책으로 만나고 싶다는 생각이 부쩍 들었습니다. 그런데 드디어 그날이 오게 됐네요. 기쁜 마음으로 독자 여러분께 추천드립니다. 더불어 지은이의 겸손하고 꼼꼼한 성향이 책의 완성도를 높인 것은 물론, 이 책의 생명력에 큰 기여를 할 것 같습니다. 원고를 다 읽은 다음 이기창 님에게 이런저런 제안을 드리자 진지하고 겸허한 태도로 저의 제안을 검토하고 원고를 보완하기 위해 고민하는 것을 봤습니다. 그 마음이 계속 이어져 호흡이 짧은 IT 출판 시장에서 이 책이 스테디셀러가 되기를 희망합니다.
ㅡ 박규병/ 카카오브레인 NLP 연구원
빅데이터의 시대라고 한다. 어디를 가도 데이터는 넘쳐흐를 것만 같다. 하지만 막상 내가 관심 있는 영역이 생겨 데이터를 얻으려고 하면 좀처럼 찾기 힘들다. 영역을 좁히고 보면 빅데이터란 것은 존재하지 않는다.
공부 자료 역시 마찬가지다. 세상에 공부거리가 차고 넘쳐서 더 이상 공부 환경을 가지고 투덜거리면 안 된다고는 하지만, 막상 세부 영역으로 가면 관련 자료가 희박하다. 그 자료가 한국어로 쓰여진 것이거나 한국어에 대한 것이라면 더더욱.
그런데 이 책은 그 두 가지 목마름을 다 채운다. 한국어에 대한 한국어로 쓰인 책. 한국어 NLP에 대해 목말라 했던 사람들에게 단비 같은 존재가 아닐 수 없다. 게다가 기초적인 개념 해석부터 아주 최근의 연구 결과까지도 담고 있어 기본기를 갖춘 사람뿐만 아니라 경험이 어느 정도 있는 사람도 얻어 갈 것이 있는 책이다. 각종 알고리즘에 대한 해석뿐만 아니라 실무에 적용할 수 있게 코드 스니펫도 담고 있어 공부하는 학생도, 실무에 투입된 회사원도 얻어 갈 내용이 많으리라 장담한다. 이렇게 탄탄한 책을 써 준 지은이에게 무척 고맙다.
혹자는 이 책의 제목만 보고 ‘한국어’와 ‘임베딩’의 교집합만 다룰 거라고 여길 수 있다. 하지만 고맙게도 ‘한국어’와 ‘임베딩’의 합집합을 다룬다. 따라서 둘 중 한쪽에만 관심 있는 사람에게도 유용하다. 한국어 분석에 관심은 있는데, 어디서부터 시작해야 할지 몰랐다면 이 책을 추천한다. NLP 관련 최신 논문을 여러 권 접했지만 좀 더 개념을 분명하게 잡고 싶은 사람에게도 이 책을 추천한다.
ㅡ 박은정/ 네이버 파파고 테크리더, KoNLPy 컨트리뷰터
지은이를 처음 만난 곳은 자연어 처리를 공부하는 자리였습니다. 저는 이기창 님의 블로그를 읽으면서 그의 팬이 됐습니다. 습득한 지식을 나누려는 마음뿐만 아니라 스스로의 발전을 위해 꾸준히 노력하는 모습에서 많은 것을 배울 수 있었습니다. 이 책 역시 임베딩의 개념과 사용법을 배울 수 있는 좋은 자료가 되리라 생각합니다.
최근의 자연어 처리의 발전은 정보를 표현하는 방식의 변화에 기인합니다. 벡터 공간에서 작동하는 머신 러닝 알고리즘을 잘 활용하기 위해서는 벡터 공간에서의 데이터의 표현법에 대해 깊게 알 필요가 있습니다. 이 책은 임베딩이라 부르는 자연어 처리 분야에서의 데이터 표현법에 대한 개념, 원리, 실습을 통한 학습의 경험이 잘 정리돼 있습니다. 그렇기 때문에 임베딩 기반 자연어 처리 방법에 입문하는 이들은 공부의 범위와 우선순위에 대한 방향타를 얻을 수 있으며, 자연어 처리 학습자들도 임베딩 지식을 정리할 기회를 얻을 것이라 생각합니다.
이 책은 각 알고리즘을 학습하고 활용할 수 있는 코드를 제공하고 있습니다. 머신 러닝의 공부 과정에는 반드시 실제 데이터의 적용 및 학습 결과의 탐색이 포함돼야 합니다. 또한 빠르게 현업에 알고리즘을 적용하기 위해서는 사용하기 쉬운 정리된 코드가 필요합니다. 이 책은 스크립트 형식으로 손쉽게 사용할 수 있는 코드와 세부 파이썬 코드들을 모두 제공하기 때문에 실습과 적용이 필요하신 분 들에게도 큰 도움이 될 것이라 생각합니다.
언제나 이기창 님을 응원하며, 그 결실 가운데 하나인 이 책이 임베딩과 자연어 처리를 공부하는 분들께 큰 도움이 되길 바랍니다.
ㅡ 김현중/ 서울대 공학박사, soynlp 메인 컨트리뷰터, 텍스트마이닝 블로그(lovit.github.io) 운영
이 책에서 다루는 내용
■ 자연어 처리의 첫 관문인 임베딩의 개념과 종류, 역사 소개
■ 임베딩이 어떻게 자연어 의미를 함축하는지 이론적 배경 풀이
■ 위키백과, KorQuAD 등 한국어 말뭉치 전처리 노하우 공유
■ KoNLPy, soynlp, 구글 센텐스피스(sentencepiece) 패키지 안내
■ Word2Vec, GloVe, FastText, Swivel 등 단어 수준 임베딩
■ LDA, Doc2Vec, ELMo, BERT 등 문장 수준 임베딩 설명
■ 개별 모델 학습과 동작 과정을 코드 레벨로 설명한 후 튜토리얼 진행
■ 문서 분류 태스크를 중심으로 임베딩 파인튜닝(fine-tuning) 실습
이 책의 대상 독자
■ 임베딩의 이론적 배경과 동작 원리에 관심이 많은 데이터 과학자
■ 자연어 분포와 의미 사이의 관계 해명을 중시하는 언어학 연구자
■ 품질 좋은 임베딩을 현업에 적용하려는 머신 러닝 엔지니어와 개발자
이 책의 구성
이 책은 다양한 임베딩 기법을 소개한다. 크게 단어 수준 임베딩과 문장 수준 임베딩을 다룬다. 각각 단어와 문장을 벡터로 변환하는 기법이다. 여기서 설명하는 단어 수준 임베딩으로는 Word2Vec, GloVe, FastText, Swivel 등이 있다. 문장 수준 임베딩은 ELMo, BERT 등이 있다.
이 책에서는 각 임베딩 기법의 이론적 배경을 살펴본 후 한국어 말뭉치로 실제 임베딩을 구축하는 과정을 설명한다. 각 기법을 설명할 때는 가급적 원 논문의 수식과 표기를 따른다. 코드 또한 논문 저자의 공식 리포지터리에서 가져와 소개할 예정이다.
말뭉치 전처리(preprocess), 임베딩 파인 튜닝(fine-tuning) 역시 이 책이 다루는 중요한 주제다. 전자는 임베딩 구축 전에, 후자는 임베딩 구축 후에 거쳐야 하는 과정이다. 전처리의 경우 KoNLPy, soynlp, 구글 센텐스피스(sentencepiece) 등 오픈소스 사용법을 설명한다. 긍정, 부정 등 문서의 극성(polarity)을 예측하는 문서 분류 과제를 예로 들어 임베딩을 파인 튜닝하는 방법을 실습한다.
각 장별 주요 내용은 다음과 같다.
1장, '서론'에서는 임베딩의 정의, 역사와 종류 등을 살핀다. 도커(docker) 등 개발 환경을 구성하는 과정 역시 설명한다.
2장, ‘벡터가 어떻게 의미를 가지게 되는가’에서는 자연어의 의미를 임베딩에 어떻게 함축시킬 수 있는지에 대한 내용을 소개한다. 각 임베딩 기법들은 크고 작은 차이가 있지만 말뭉치의 통계적 패턴(statistical pattern) 정보를 반영한다는 점에서 공통점을 지닌다는 사실을 짚는다.
3장, ‘한국어 전처리’에서는 임베딩 학습을 위한 한국어 데이터의 전처리 과정을 다룬다. 웹 문서나 json 파일 같은 형태의 데이터를 순수 텍스트 파일로 바꾸고 여기에 형태소 분석을 실시하는 방법을 설명한다. 띄어쓰기 교정 등도 소개한다.
4장, ‘단어 수준 임베딩’에서는 다양한 단어 수준 임베딩 모델을 설명한다. NPLM, Word2Vec, FastText 등은 예측 기반 모델, LSA, GloVe, Swivel 등은 행렬 분해(matrix factorization) 기반의 기법들이다. 가중 임베딩(weighted embedding)은 단어 임베딩을 문장 수준으로 확장하는 방법이다.
5장, ‘문장 수준 임베딩’에서는 문장 수준 임베딩을 다룬다. 행렬 분해(matrix factorization), 확률 모형, 뉴럴 네트워크 기반 모델 등 세 가지 종류를 소개한다. 잠재 의미 분석(LSA)은 행렬 분해, 잠재 디리클레 할당(LDA)은 확률 모델, Doc2Vec, ELMo, BERT 등은 뉴럴 네트워크가 중심인 방법들이다. 특히 BERT는 셀프 어텐션(self-attention) 기반의 트랜스포머 네트워크(transformer network)가 그 뼈대를 이루고 있다.
6장, ‘임베딩 파인 튜닝’에서는 단어, 문장 수준 임베딩을 파인 튜닝하는 방법을 다룬다. 네이버 영화 리뷰 말뭉치를 가지고 극성을 분류하는 과제를 수행한다.
‘부록’에서는 이 책을 이해하는 데 필요한 기초 지식을 간략하게 살펴본다. 선형대수학, 확률론, 뉴럴 네트워크, 국어학 등의 주요 개념을 설명한다.
상세 이미지
목차
목차
- 1장. 서론
- 1.1 임베딩이란
- 1.2 임베딩의 역할
- 1.2.1 단어/문장 간 관련도 계산
- 1.2.2 의미/문법 정보 함축
- 1.2.3 전이 학습
- 1.3 임베딩 기법의 역사와 종류
- 1.3.1 통계 기반에서 뉴럴 네트워크 기반으로
- 1.3.2 단어 수준에서 문장 수준으로
- 1.3.3 룰 → 엔드투엔드 → 프리트레인/파인 튜닝
- 1.3.4 임베딩의 종류와 성능
- 1.4 개발 환경
- 1.4.1 환경 소개
- 1.4.2 AWS 구성
- 1.4.3 코드 실행
- 1.4.4 버그 리포트 및 Q&A
- 1.4.5 이 책이 도움받고 있는 오픈소스들
- 1.5 이 책이 다루는 데이터와 주요 용어
- 1.6 이 장의 요약
- 1.7 참고 문헌
- 2장. 벡터가 어떻게 의미를 가지게 되는가
- 2.1 자연어 계산과 이해
- 2.2 어떤 단어가 많이 쓰였는가
- 2.2.1 백오브워즈 가정
- 2.2.2 TF-IDF
- 2.2.3 Deep Averaging Network
- 2.3 단어가 어떤 순서로 쓰였는가
- 2.3.1 통계 기반 언어 모델
- 2.3.2 뉴럴 네트워크 기반 언어 모델
- 2.4 어떤 단어가 같이 쓰였는가
- 2.4.1 분포 가정
- 2.4.2 분포와 의미 (1): 형태소
- 2.4.3 분포와 의미 (2): 품사
- 2.4.4 점별 상호 정보량
- 2.4.5 Word2Vec
- 2.5 이 장의 요약
- 2.6 참고 문헌
- 3장. 한국어 전처리
- 3.1 데이터 확보
- 3.1.1 한국어 위키백과
- 3.1.2 KorQuAD
- 3.1.3 네이버 영화 리뷰 말뭉치
- 3.1.4 전처리 완료된 데이터 다운로드
- 3.2 지도 학습 기반 형태소 분석
- 3.2.1 KoNLPy 사용법
- 3.2.2 KoNLPy 내 분석기별 성능 차이 분석
- 3.2.3 Khaiii 사용법
- 3.2.4 은전한닢에 사용자 사전 추가하기
- 3.3 비지도 학습 기반 형태소 분석
- 3.3.1 soynlp 형태소 분석기
- 3.3.2 구글 센텐스피스
- 3.3.3 띄어쓰기 교정
- 3.3.4 형태소 분석 완료된 데이터 다운로드
- 3.4 이 장의 요약
- 3.5 참고 문헌
- 4장. 단어 수준 임베딩
- 4.1 NPLM
- 4.1.1 모델 기본 구조
- 4.1.2 NPLM의 학습
- 4.1.3 NPLM과 의미 정보
- 4.2 Word2Vec
- 4.2.1 모델 기본 구조
- 4.2.2 학습 데이터 구축
- 4.2.3 모델 학습
- 4.2.4 튜토리얼
- 4.3 FastText
- 4.3.1 모델 기본 구조
- 4.3.2 튜토리얼
- 4.3.3 한글 자소와 FastText
- 4.4 잠재 의미 분석
- 4.4.1 PPMI 행렬
- 4.4.2 행렬 분해로 이해하는 잠재 의미 분석
- 4.4.3 행렬 분해로 이해하는 Word2Vec
- 4.4.4 튜토리얼
- 4.5 GloVe
- 4.5.1 모델 기본 구조
- 4.5.2 튜토리얼
- 4.6 Swivel
- 4.6.1 모델 기본 구조
- 4.6.2 튜토리얼
- 4.7 어떤 단어 임베딩을 사용할 것인가
- 4.7.1 단어 임베딩 다운로드
- 4.7.2 단어 유사도 평가
- 4.7.3 단어 유추 평가
- 4.7.4 단어 임베딩 시각화
- 4.8 가중 임베딩
- 4.8.1 모델 개요
- 4.8.2 모델 구현
- 4.8.3 튜토리얼
- 4.9 이 장의 요약
- 4.10 참고 문헌
- 5장. 문장 수준 임베딩
- 5.1 잠재 의미 분석
- 5.2 Doc2Vec
- 5.2.1 모델 개요
- 5.2.2 튜토리얼
- 5.3 잠재 디리클레 할당
- 5.3.1 모델 개요
- 5.3.2 아키텍처
- 5.3.3 LDA와 깁스 샘플링
- 5.3.4 튜토리얼
- 5.4 ELMo
- 5.4.1 문자 단위 컨볼루션 레이어
- 5.4.2 양방향 LSTM, 스코어 레이어
- 5.4.3 ELMo 레이어
- 5.4.4 프리트레인 튜토리얼
- 5.5 트랜스포머 네트워크
- 5.5.1 Scaled Dot-Product Attention
- 5.5.2 멀티헤드 어텐션
- 5.5.3 Pointwise Feed-Forward Networks
- 5.5.4 트랜스포머의 학습 전략
- 5.6 BERT
- 5.6.1 BERT, ELMo, GPT
- 5.6.2 프리트레인 태스크와 학습 데이터 구축
- 5.6.3 BERT 모델의 구조
- 5.6.4 프리트레인 튜토리얼
- 5.7 이 장의 요약
- 5.8 참고 문헌
- 6장. 임베딩 파인 튜닝
- 6.1 프리트레인과 파인 튜닝
- 6.2 분류를 위한 파이프라인 만들기
- 6.3 단어 임베딩 활용
- 6.3.1 네트워크 개요
- 6.3.2 네트워크 구현
- 6.3.3 튜토리얼
- 6.4 ELMo 활용
- 6.4.1 네트워크 개요
- 6.4.2 네트워크 구현
- 6.4.3 튜토리얼
- 6.5 BERT 활용
- 6.5.1 네트워크 개요
- 6.5.2 네트워크 구현
- 6.5.3 튜토리얼
- 6.6 어떤 문장 임베딩을 사용할 것인가
- 6.7 이 장의 요약
- 6.8 참고 문헌
- 부록
- 부록 A. 선형대수학 기초
- 1.1 벡터, 행렬 연산
- 1.2 내적과 공분산
- 1.3 내적과 사영
- 1.4 내적과 선형변환
- 1.5 행렬 분해 기반 차원 축소 (1): 주성분 분석(PCA)
- 1.6 행렬 분해 기반 차원 축소 (2): 특이값 분해(SVD)
- 부록 B. 확률론 기초
- 2.1 확률변수와 확률 분포
- 2.2 베이지안 확률론
- 부록 C. 뉴럴 네트워크 기초
- 3.1 DAG로 이해하는 뉴럴 네트워크
- 3.2 뉴럴 네트워크는 확률모델이다
- 3.3 최대우도추정과 학습 손실
- 3.4 그래디언트 디센트
- 3.5 계산 노드별 역전파
- 3.6 CNN과 RNN
- 부록 D. 국어학 기초
- 4.1 통사 단위
- 4.2 문장 유형
- 4.3 품사
- 4.4 상과 시제
- 4.5 주제
- 4.6 높임
- 4.7 양태
- 4.8 의미역
- 4.9 피동
- 4.10 사동
- 4.11 부정
- 참고 문헌
도서 오류 신고
정오표
정오표
수정 사항은 여기에서 내려받으세요.
3쇄 수정사항 (2020년 2월 출간)
[p.20 : 부록 페이지]
245
->
291
[p.217 : 2문단 1행]
쓰인다. 쓰인다.
->
쓰인다.
[p.149 : 4.6.1 모델 기본 구조]
f(xij)가 클수록 Ui,Uj 벡터 간 내적값이 실제 PMI 값과 좀 더 비슷해야 학습 손실이 줄어든다.
->
f(xij)가 클수록 Ui,Vj 벡터 간 내적값이 실제 PMI 값과 좀 더 비슷해야 학습 손실이 줄어든다.
2쇄 수정사항 (2019년 10월 출간)
https://ratsgo.github.io/embedding/notice.html
1쇄 수정사항 (2019년 9월 출간)
https://ratsgo.github.io/embedding/notice.html