SlideShare a Scribd company logo
1 of 46
Download to read offline
<Little Big Data #1>
한국어 채팅 데이터로
머신러닝 하기
조한석
summatic@scatterlab.co.kr
1
소개
• 머신러닝 엔지니어

(@스캐터랩, 2016. 1~)

• 연애 중

(2016. 8~)

• 곧 결혼

(2018. 5~)
!2
소개
텍스트앳: 카톡감정분석
진저: 사랑을 이해하는 인공지능
연애의 과학: 모든 연애의 답• 스캐터랩

• 연애 콘텐츠 및 인공지능(?) 회사

• 시리즈 B

• 사람들의 일상에 큰 영향을 미치는 연애를 도
와줍니다.

• 연애 관련 논문을 쉽게 풀어서 설명해줍
니다.

• 채팅 데이터를 분석해서 썸 혹은 연애를
과학적으로 분석해드립니다.

• 서비스를 통해 수집된 채팅 데이터를 통해 기
능을 수행하는 인공지능이 아닌 일상적인 대
화를 할 수 있는 인공지능을 개발 중입니다.

• 채팅 데이터 비식별화 조치

• 개인을 특정할 수 있는 정보(이름, 유저id 등)
는 저장하지 않습니다.

• 개인정보(이름, 전화번호, 계좌번호 등)이 포
함된 문장은 사용하지 않습니다.
!3
발표 내용
• Intro

• 소개

• 자연어 처리의 어려움

• 한국어 자연어 처리의 어려움

• 커플 채팅 데이터의 어려움

• 한국어 자연어 처리

• Preprocessing

• Word Embedding

• Document Similarity

• 그 외
!4
Intro
본격적으로 들어가기에 앞서
• 발표에서 다루는 내용

• 한국어 채팅 데이터를 다룬 경험

• 기본적으로 “상황” -> “문제" -> “해결” 의 형식을 따릅니다.

• “해결” 에서는 알고리즘에 대한 개념을 소개합니다.

• 머신러닝에 대한 기본 개념은 알고 있다고 가정합니다.

• 머신러닝 혹은 발표 주제와 관련된 키워드는 영어를 사용합니다.

• 발표에서 다루지 않는 내용

• 구체적인 수식과 알고리즘에 대한 자세한 설명은 하지 않습니다.

• 참고자료에 대한 링크는 공개합니다.
!6
한국어 자연어 처리의 어려움 - 언어적 특성에 따른 어려움
• Hell조사

• 어떤 조사를 사용하느냐에 따라 문장의 뉘앙스가 달라집니다.

• 자유로운 언어의 변형

• 줄임말

• 쉬운 외국어 표현

• 유행어

• 말장난
<예시>
- 여자친구 있어?
- 여자친구는 있어? / 여자친구가 있어? 여자친구랑 있어?
<예시> 소확행, 성덕, 갑분띠 등
<예시> 더럽, 빼박캔트, 레알트루
<예시> 오지고 지리고 레릿고
<예시> 이런, 삼런, 사런, 오런
!7
• 혀 꼬인 소리

• 맞춤법 혹은 띄어쓰기

• 채팅에서만 할 수 있는 표현
한국어 자연어 처리의 어려움 - 커플 채팅 데이터의 어려움
<예시>
쟉이능 머해 / 알게떠 엽오 / 이제 모할꼬야? / 누워이또 / 나 잘해쪄? / 오구오구 그래쪄? / 

울애긔 오디얌 빤니왕
<예시>
- 오구오구 잘햇당 잘햇어 (X) -> 오구오구 잘했다 잘했어 (O)
- 밥먹기전에 전화해줄까? (X) -> 밥 먹기 전에 전화해줄까? (O)
- 뭐할꺼야? (X) -> 뭐 할 거야? (O)
- 비온다 (X) -> 비 온다 (O)
<예시>
- 나 솢ㅜ ㅅ병 마셔써ㅓㅓ
- 아ㅏㅏㅏㅏㅏㅏㅏㅏ 힘드러ㅓㅓㅓㅓㅓㅓㅓㅓ
!8
한국어 자연어 처리의 어려움 - preprocess의 중요성
• Data Science의 격언

• Garbage in, Garbage out

• 너무나도 다양한 형태와 변형이 있기 때문에, 불필요한 정보를 날리고 정제하는 preprocess 과정
이 필수입니다.

• 그렇다면 어떤 식으로 preprocess 해야할까요?
!10
Preprocessing
Preprocessing - 형태소 분석기
• 형태소 분석기

• 일반적으로 한국어 데이터 preprocess를 위해서 사용하는 툴은 형태소 분석기(POS1 tagger)
입니다.

• 형태소: 의미를 가지는 최소 단위

• 파이썬에서 가장 많이 사용하는 라이브러리는 KoNLPy2

• 한국어 정보처리를 위한 파이썬 패키지

• 꼬꼬마, 트위터, 한나눔 등 형태소 분석기
1) POS: Part of speech

2) http://konlpy-ko.readthedocs.io/ko/v0.4.3/
!12
Preprocessing - 형태소 분석기 사용 예시(꼬꼬마)
• 자기 너무 보고싶다. 언제 만날까?
 • 자기_NP 너무_MAG 보_VV 고_ECE 

싶_VXA 다_EFN ._SF 언제_MAG 

만나_VV ㄹ까_EFQ ?_SF
• 우리 영원히 사랑하자
 • 우리_NP 영원히_MAG 사랑_NNG 

하_XSV 자_ECE
• 점심 맛있게 먹어요. 다 먹고 연락해
 • 점심_NNG 맛있_VA 게_ECD 먹_VV 

어요_EFN ._SF 다_MAG 먹_VV 

고_ECE 연락_NNG 하_XSV 어_ECS
<원문> <형태소 분석>
!13
Preprocessing - 형태소 분석기 사용 예시(꼬꼬마)
• 쟉이 넘넘 보고시펑. 언제봐?
 • 쟉_UN 이_JKS 넘_MAG 넘_MAG 

보_VV 고_ECE 시_NNG 펑_MAG 

언제_MAG 보_VV 아_ECS ?_SF
• 우리사랑 포에버
 • 우리_NP 사랑_NNG 포_NNG 

에_JKM 벌_VV
• 점심 맛나게머겅. 다먹구톡해ㅋㅋ
 • 점심_NNG 맛나_VA 게_ECD 머_NP 

겅_UN ._SF 다_MAG 먹_VV 구_ECE
톡_MAG 하_VV 어_ECS ㅋㅋ_EMO
<원문> <형태소 분석>
!15
Preprocessing - 형태소 분석기
• 잘 안되는 이유

• 형태소 분석기 학습에 사용된 데이터(말뭉치, corpus)의 단어 분포가 채팅 데이터의 단어분포
와 다름

• 말뭉치(corpus)

• 자연어 연구를 위해 특정한 목적을 가지고 언어의 표본을 추출한 집합
!17
출처: https://ko.wikipedia.org/wiki/말뭉치
Preprocessing - 형태소 분석기
• Sejong Corpus

• National Institute of the Korean Language, 1998-2007.

• 채팅데이터에 비해 아주 예쁘고 잘 정제된 형태의 데이터

• 온실 속의 화초에서 키운 애를 야생에 던져놓았으니 살아남을 리가 있나 (..)
!18
출처: https://ithub.korean.go.kr/user/guide/corpus/guide1.do
• 모든 데이터를 합리적인 기준으로 패턴을 찾고 그 패턴으로 preprocess

• 일종의 normalize(표준화)

• 이 원칙을 바탕으로 preprocessing

• 채팅 데이터에는 문법에 맞지 않는 데이터가 많으니까

• 문법적 요소를 제외한 방식의 tokenizing
<예시>
만약 count(“어디야”) < count(“오디야?”)이면, “오디야”는 문법적으로 틀린 표현이지만 기준으로 삼을 수 있다.
Preprocessing - 형태소 분석기 대안
!19
Preprocessing - Tokenizing
• Tokenizing: 여러 단어로 이루어진 문장 혹은 어절에서 단어를 구분하는 것

• 영어의 경우에는 띄어쓰기 단위로 token이 나뉘어지지만, 한국어는 그렇지 않음.

• 형태소가 의미를 가진 최소의 단위라면, token은 의미를 가진 실질 단위

• “의미를 가진 실질 단위”를 “단어”라고 생각한다면 tokenizing 문제는 문장에서 단어를 추출하는
문제로 생각할 수 있습니다.
!20
<예시>
before tokenizing:
제철에 수확한 국산 유기농 양배추와 브로콜리를 엄선하고 국산 사과즙을 더해 맛있는 유기가공식품 인증제품입
니다.
after tokenizing:
제철 / 에 / 수확 / 한 / 국산 / 유기농 / 양배추 / 와 / 브로콜리 / 를 / 엄선 / 하고 / 국산 / 사과즙 / 을 /더해 / 맛있
는 / 유기가공식품 / 인증 /제품 / 입니다.
• 가정

• 연속된 글자의 연관성이 높을 수록 단어일 가능성이 높음

• c1c2..cn-1 다음에 cn이 많이나온다면 문자열 c1..cn은 단어일 것

• 공식
Preprocessing - Tokenizing(Cohesion Probability)
!21
<예시>
“빅데이” 라는 연속된 글자 다음에 “터”라는 글자가 나타나는게 가장 자연스럽다.
출처: https://ratsgo.github.io/from%20frequency%20to%20semantics/2017/05/05/cohesion/
Preprocessing - Tokenizing(Cohesion Probability)
• 예시) 개꿀잼이다

• 개꿀잼이다 = 개꿀잼 + 이다
!22
substring count
- count(개) = 20000
- count(개꿀) = 1500
- count(개꿀잼) = 1200
- count(개꿀잼이) = 30
- count(개꿀잼이다) = 15
cohesion probability
- CP(개꿀) = 0.2738
- CP(개꿀잼) = 0.3914
- CP(개꿀잼이) = 0.1968
- CP(개꿀잼이다) = 0.2371
Preprocessing - Tokenizing
• 단어를 추출하는 방법은 Cohesion probability 외에 다른 방법들도 있습니다.

• 구체적인 이론과 코드는 다음 자료를 참고해주세요.

• [파이콘 2017] 노가다 없는 텍스트 분석을 위한 한국어 NLP - 김현중

• 이론

• https://www.slideshare.net/kimhyunjoonglovit/pycon2017-koreannlp

• 코드

• https://github.com/lovit/soynlp
!23
Word Embedding
Word Embedding - Word2Vec
• 단어 정보를 이용하여 머신러닝을 하려면 단어를 vector로 변환해주어야 합니다.

• 이를 word embedding 또는 word representation이라고 합니다.

• 가장 대표적인 알고리즘은 word2vec

• You shall know a word by the company it keeps (Firth, J. R. 1957:11)
!25
Word Embedding - Word2Vec의 한계
• word2vec은 이론도 간단하고 공개되어 있는 패키지가 많아서 이용이 간단하지만 OOV 문제가
있습니다.

• OOV(Out-of-vocabulary): 데이터에 포함되어 있지 않은 (=dictionary에 없는) vocabulary
는 vector로 나타낼 수 없는 문제

• training 단계에서는 모델의 input으로 들어가는 vocabulary를 통제하기 때문에 OOV 문제가 생
기기 어렵지만, inference 단계에서는 충분히 생길 수 있습니다.

• inference 단계: 모델을 서비스에 실제로 적용하는 단계

• 커플간의 채팅은 의도적으로든 실수로든 오타를 많이 내서 사전에 없는 단어가 만들어질 확률
이 높음

• 채팅데이터는 다른 텍스트데이터(뉴스, 문학작품 등)에 비해 한 문서당 단어의 수가 적기 때문
에, dictionary에 없는 단어가 하나라도 들어오면 큰 문제가 발생할 수 있습니다.
!26
• word2vec과 비슷한 원리이나 두 단어간의 점수를 측정하는 부분이 다름

• word2vec:

• 

• fasttext: 

• where the set of n grams appearing in w

• 단어 내부의 subword를 이용하는 방식
Word Embedding - Fasttext
!27
<예시>
w: Alpaca
n grams of w (n=3) = <Al, Alp, lpa, pac, aca, ca>
출처: Bojanowski, P., Grave, E., Joulin, A., & Mikolov, T. (2016). Enriching word vectors with subword information. arXiv preprint arXiv:
1607.04606.
Word Embedding - Fasttext + 한국어
• 한국어 데이터에 fasttext를 적용하는 방법은 두 가지가 있습니다.

• 글자(character) 단위의 subword를 사용하는 방법

• 자모 단위의 subword를 사용하는 방법

• 글자 단위보다 자모 단위가 더 작으므로, OOV 문제에 대해 더 유연하게 대처할 수 있습니다.
!28
<예시>
subwords(미세먼지는) = <미세, 미세먼, 세먼지, 먼지는, 지는>
<예시>
미세먼지는 = ㅁㅣ_ㅅㅔ_ㅁㅓㄴㅈㅣ_ㄴㅡㄴ
subwords(미세먼지는) = <ㅁㅣ, ㅁㅣ_, ㅣ_ㅅ, …, ㄴㅡㄴ>
Word Embedding - Fasttext
• 실제 사용 예시
!29
엽오
- 쟈긔, 0.8590
- 여보, 0.8465
- 여뿌, 0.8180
- 자긔, 0.8055
- 자깅, 0.8018
- 댜긔, 0.8017
- 내꼬, 0.8007
- 자기, 0.7983
- 여봉, 0.7972
- 뽀야, 0.7948
오빵
- 여붕, 0.9022
- 여봉, 0.8986
- 요봉, 0.8887
- 자깅, 0.8866
- 어빵, 0.8567
- 옵빵, 0.8498
- 옵빠, 0.8474
- 오라방, 0.8413
- 여뽕, 0.8335
- 여뿌, 0.8191
Word Embedding - Fasttext
• 자세한 이론과 코드는 다음을 참고해주세요

• 이론

• Bojanowski, P., Grave, E., Joulin, A., & Mikolov, T. (2016). Enriching word
vectors with subword information. arXiv preprint arXiv:1607.04606.

• 코드

• https://github.com/facebookresearch/fastText

• https://radimrehurek.com/gensim/models/fasttext.html

• https://github.com/summatic/hangul_jamo_fasttext
!30
Sentence Similarity
Setence Similarity
• 자연어 처리 분야서 주로 다루는 문제 중 하나는 서로 다른 두 document간의 유사도를 비교하는
문제입니다.

• 커플 채팅데이터가 일반적인 document와 다른점은 short sentence라는 점입니다.

• 가장 쉽게 비교할 수 있는 방법은 word embedding과 같이 문장을 vector로 embedding해서
cosine similarity를 이용하는 방법입니다.
!32
<예시>
sim(우리 여보는 어디야, 자기 어디까지 왔어?)
Sentence Similarity - BOW + Word Embedding
• 문장에 있는 모든 word의 vector를 단순히 더하는 방식의 방법

• doc2vec도 포함합니다

• word embedding의 성능에 큰 영향을 받습니다

• 그렇다면 word embedding은 신뢰할 수 있을까요?

• 채팅 데이터에서 학습시킨 word embedding 중 이상한 결과들

• 유사한 단어 != 뜻이 비슷한 단어
!34
- similarity(춥다, 덥다) = 0.9011
- similarity(일찍, 늦게) = 0.8839
- similarity(흰색, 검은색) = 0.9707
Sentence Similarity - RNN
• 자연어 처리 관련 딥러닝 모델은 sentence embedding을 위해 RNN 계열의 모델(LSTM, Bi-
RNN, GRU 등)을 많이 씁니다.

• RNN의 본질은 language modeling

• “반갑습니다 캠퍼스 서울입니다.” <-> “반습갑니다 캠퍼스 서울니입다” 중 어떤 문장이 더 말
이 되는지를 판단

• 주어진 sequence에서 다음에 올 단어 혹은 글자를 예측하는 방향으로 embedding이 된다.

• 그래서.. “우리 언제볼까”와 “어디까지 왔어”가 비슷하게 embedding 되는 경향이 있습니다.

• 두 문장 모두 다음에 올 글자는 “?”
!35
Sentence Similarity - Term vector
• 문장 혹은 문서를 vector로 표현할 때는 embedding 알고리즘 혹은 모델이 의도하는 방향으로
embedding이 됩니다.

• 애매하게 embedding할 바에 term vector로 표현

• one hot encoding이랑 같은 방법이라고 생각하시면 됩니다.

• term vector로 표현을 하고 나면 cosine similarity, edit distance 등으로 두 문장의 유사도를
비교할 수 있습니다.
!36
<예시>
- I love you, you love me
- {“I”: 1, “love”: 2, “you”: 2, “me”: 1}
Sentence Similarity - Term vector
• term vector로 채팅 데이터를 나타냈을 때 발생하는 문제점

• 단어의 변화에 너무 민감. 특히 짧은 문장이 많은 채팅 데이터일수록 문제가 생길 여지가 많음

• 단어의 의미정보를 이용할 수 없음

• pair1의 유사도가 pair2의 유사도보다 더 커야할 것 같지 않나요?
!38
<예시>
pair1: I love you <-> I like you
pair2: I love you <-> I hate you
Sentence Similarity - ESA Similarity
• ESA: Explicit Semantic Analysis

• 명시적인 정보(=word vector)를 이용하자

• cosine similarity

• ESA similarity
!39
I love you
I like you
similarity I love you
I 1 0.2 0.5
like 0.3 0.9 0.4
you 0.5 0.4 1
1 0.9 1
Sentence Similarity - ESA Similarity
• ESA: Explicit Semantic Analysis

• 명시적인 정보(=word vector)를 이용하자

• cosine similarity

• ESA similarity
!40
I love you
I hate you
similarity I love you
I 1 0.2 0.5
hate 0.3 0.5 0.4
you 0.5 0.4 1
1 0.5 1
Sentence Similarity - ESA Similarity
• ESA: Explicit Semantic Analysis

• I love you와의 유사도 비교

• 유의미한 차이를 만들어 낼 수 있습니다.
!41
I like you I hate you
cosine 0.667 0.667
ESA 0.967 0.833
Sentence Similarity - ESA Similarity
• 구체적인 이론과 코드는 다음 자료를 참고해주세요.

• 이론

• Song, Y., & Roth, D. (2015). Unsupervised sparse vector densification for short
text similarity. In Proceedings of the 2015 Conference of the North American
Chapter of the Association for Computational Linguistics: Human Language
Technologies (pp. 1275-1280).

• 코드

• (작업중)
!42
기타
그 외 자잘한 팁
• 한국어 자연어 처리는 preprocessing가 80% 이상

• Zipf’s law

• corpus에서 나타나는 단어들을 사용빈도 순으로 나열한다면, 사용빈도와 해당 단어의 수는 반
비례한다

• (문제마다 다르겠지만) 데이터의 모든 단어를 이용할 필요는 없음. 빈도수가 적은 단어는 과감
히 쳐내자

• 문제 정의를 잘 하는것이 모델을 구현하는 것보다 훨씬 중요

• 현실에서 마주하는 문제는 복합적인 요소들이 작용

• 기술적으로 뛰어난 모델을 적용하는 것도 좋지만, 간단한 통계 혹은 count based 모델을 사용
하는 것이 효과적일수도 있다

• unlabeled data에 직접 label을 달아보자

• label을 달다가 보면 뜻밖의 insight를 얻기도 함
!44
WE WANT YOU!
- End of Document -
46

More Related Content

What's hot

複数時点の単語出現頻度を 扱う時系列データモデリング
複数時点の単語出現頻度を 扱う時系列データモデリング複数時点の単語出現頻度を 扱う時系列データモデリング
複数時点の単語出現頻度を 扱う時系列データモデリング奈良先端大 情報科学研究科
 
Amortize analysis of Deque with 2 Stack
Amortize analysis of Deque with 2 StackAmortize analysis of Deque with 2 Stack
Amortize analysis of Deque with 2 StackKen Ogura
 
ガウス過程入門
ガウス過程入門ガウス過程入門
ガウス過程入門ShoShimoyama
 
미등록단어 문제 해결을 위한 비지도학습 기반 한국어자연어처리 방법론 및 응용
미등록단어 문제 해결을 위한 비지도학습 기반 한국어자연어처리 방법론 및 응용미등록단어 문제 해결을 위한 비지도학습 기반 한국어자연어처리 방법론 및 응용
미등록단어 문제 해결을 위한 비지도학습 기반 한국어자연어처리 방법론 및 응용NAVER Engineering
 
数独のアルゴリズムを考える ― 各種法の改善と高速化
数独のアルゴリズムを考える ― 各種法の改善と高速化数独のアルゴリズムを考える ― 各種法の改善と高速化
数独のアルゴリズムを考える ― 各種法の改善と高速化atmarksharp
 
KorQuAD introduction
KorQuAD introductionKorQuAD introduction
KorQuAD introductionSeungyoungLim
 
지적 대화를 위한 깊고 넓은 딥러닝 PyCon APAC 2016
지적 대화를 위한 깊고 넓은 딥러닝 PyCon APAC 2016지적 대화를 위한 깊고 넓은 딥러닝 PyCon APAC 2016
지적 대화를 위한 깊고 넓은 딥러닝 PyCon APAC 2016Taehoon Kim
 
ウェーブレット木の世界
ウェーブレット木の世界ウェーブレット木の世界
ウェーブレット木の世界Preferred Networks
 
勉強か?趣味か?人生か?―プログラミングコンテストとは
勉強か?趣味か?人生か?―プログラミングコンテストとは勉強か?趣味か?人生か?―プログラミングコンテストとは
勉強か?趣味か?人生か?―プログラミングコンテストとはTakuya Akiba
 
머신러닝의 자연어 처리기술(I)
머신러닝의 자연어 처리기술(I)머신러닝의 자연어 처리기술(I)
머신러닝의 자연어 처리기술(I)홍배 김
 
多目的遺伝的アルゴリズム
多目的遺伝的アルゴリズム多目的遺伝的アルゴリズム
多目的遺伝的アルゴリズムMatsuiRyo
 
파이썬을 활용한 챗봇 서비스 개발 3일차
파이썬을 활용한 챗봇 서비스 개발 3일차파이썬을 활용한 챗봇 서비스 개발 3일차
파이썬을 활용한 챗봇 서비스 개발 3일차Taekyung Han
 
DeepLearning 10章 回帰結合型ニューラルネットワークと再帰型ネットワーク
DeepLearning 10章 回帰結合型ニューラルネットワークと再帰型ネットワークDeepLearning 10章 回帰結合型ニューラルネットワークと再帰型ネットワーク
DeepLearning 10章 回帰結合型ニューラルネットワークと再帰型ネットワークhirono kawashima
 
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~Takuya Akiba
 
自然言語処理に基づく商品情報の整理および構造化
自然言語処理に基づく商品情報の整理および構造化自然言語処理に基づく商品情報の整理および構造化
自然言語処理に基づく商品情報の整理および構造化Rakuten Group, Inc.
 

What's hot (20)

複数時点の単語出現頻度を 扱う時系列データモデリング
複数時点の単語出現頻度を 扱う時系列データモデリング複数時点の単語出現頻度を 扱う時系列データモデリング
複数時点の単語出現頻度を 扱う時系列データモデリング
 
Amortize analysis of Deque with 2 Stack
Amortize analysis of Deque with 2 StackAmortize analysis of Deque with 2 Stack
Amortize analysis of Deque with 2 Stack
 
ガウス過程入門
ガウス過程入門ガウス過程入門
ガウス過程入門
 
미등록단어 문제 해결을 위한 비지도학습 기반 한국어자연어처리 방법론 및 응용
미등록단어 문제 해결을 위한 비지도학습 기반 한국어자연어처리 방법론 및 응용미등록단어 문제 해결을 위한 비지도학습 기반 한국어자연어처리 방법론 및 응용
미등록단어 문제 해결을 위한 비지도학습 기반 한국어자연어처리 방법론 및 응용
 
数独のアルゴリズムを考える ― 各種法の改善と高速化
数独のアルゴリズムを考える ― 各種法の改善と高速化数独のアルゴリズムを考える ― 各種法の改善と高速化
数独のアルゴリズムを考える ― 各種法の改善と高速化
 
KorQuAD introduction
KorQuAD introductionKorQuAD introduction
KorQuAD introduction
 
지적 대화를 위한 깊고 넓은 딥러닝 PyCon APAC 2016
지적 대화를 위한 깊고 넓은 딥러닝 PyCon APAC 2016지적 대화를 위한 깊고 넓은 딥러닝 PyCon APAC 2016
지적 대화를 위한 깊고 넓은 딥러닝 PyCon APAC 2016
 
ウェーブレット木の世界
ウェーブレット木の世界ウェーブレット木の世界
ウェーブレット木の世界
 
Introduction to NLTK
Introduction to NLTKIntroduction to NLTK
Introduction to NLTK
 
数式からみるWord2Vec
数式からみるWord2Vec数式からみるWord2Vec
数式からみるWord2Vec
 
勉強か?趣味か?人生か?―プログラミングコンテストとは
勉強か?趣味か?人生か?―プログラミングコンテストとは勉強か?趣味か?人生か?―プログラミングコンテストとは
勉強か?趣味か?人生か?―プログラミングコンテストとは
 
머신러닝의 자연어 처리기술(I)
머신러닝의 자연어 처리기술(I)머신러닝의 자연어 처리기술(I)
머신러닝의 자연어 처리기술(I)
 
AlphaGoのしくみ
AlphaGoのしくみAlphaGoのしくみ
AlphaGoのしくみ
 
多目的遺伝的アルゴリズム
多目的遺伝的アルゴリズム多目的遺伝的アルゴリズム
多目的遺伝的アルゴリズム
 
KorQuAD v2.0 소개
KorQuAD v2.0 소개KorQuAD v2.0 소개
KorQuAD v2.0 소개
 
파이썬을 활용한 챗봇 서비스 개발 3일차
파이썬을 활용한 챗봇 서비스 개발 3일차파이썬을 활용한 챗봇 서비스 개발 3일차
파이썬을 활용한 챗봇 서비스 개발 3일차
 
Rolling hash
Rolling hashRolling hash
Rolling hash
 
DeepLearning 10章 回帰結合型ニューラルネットワークと再帰型ネットワーク
DeepLearning 10章 回帰結合型ニューラルネットワークと再帰型ネットワークDeepLearning 10章 回帰結合型ニューラルネットワークと再帰型ネットワーク
DeepLearning 10章 回帰結合型ニューラルネットワークと再帰型ネットワーク
 
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
 
自然言語処理に基づく商品情報の整理および構造化
自然言語処理に基づく商品情報の整理および構造化自然言語処理に基づく商品情報の整理および構造化
自然言語処理に基づく商品情報の整理および構造化
 

Similar to <Little Big Data #1> 한국어 채팅 데이터로 머신러닝 하기

[싸이그램즈 2018] 텍스트 데이터 전처리로 시작하는 NLP
[싸이그램즈 2018] 텍스트 데이터 전처리로 시작하는 NLP[싸이그램즈 2018] 텍스트 데이터 전처리로 시작하는 NLP
[싸이그램즈 2018] 텍스트 데이터 전처리로 시작하는 NLPJoeun Park
 
[Langcon2020]롯데의 딥러닝 모델은 어떻게 자기소개서를 읽고 있을까?
[Langcon2020]롯데의 딥러닝 모델은 어떻게 자기소개서를 읽고 있을까?[Langcon2020]롯데의 딥러닝 모델은 어떻게 자기소개서를 읽고 있을까?
[Langcon2020]롯데의 딥러닝 모델은 어떻게 자기소개서를 읽고 있을까?ssuseraf7587
 
CoreDot TechSeminar 2018 - Session3 Doh Seungheon
CoreDot TechSeminar 2018 - Session3 Doh SeungheonCoreDot TechSeminar 2018 - Session3 Doh Seungheon
CoreDot TechSeminar 2018 - Session3 Doh SeungheonCore.Today
 
[IT21 글로벌 컨퍼런스] 대화시스템 개발을 위한 자연어처리기술 - 서희철
[IT21 글로벌 컨퍼런스] 대화시스템 개발을 위한 자연어처리기술 - 서희철[IT21 글로벌 컨퍼런스] 대화시스템 개발을 위한 자연어처리기술 - 서희철
[IT21 글로벌 컨퍼런스] 대화시스템 개발을 위한 자연어처리기술 - 서희철NAVER Engineering
 
(Kor ver.)NLP embedding(word2vec) tutorial & implementation(Tensorflow)
(Kor ver.)NLP embedding(word2vec) tutorial & implementation(Tensorflow)(Kor ver.)NLP embedding(word2vec) tutorial & implementation(Tensorflow)
(Kor ver.)NLP embedding(word2vec) tutorial & implementation(Tensorflow)Adonis Han
 
Brief hystory of NLP and Word2Vec
Brief hystory of NLP and Word2VecBrief hystory of NLP and Word2Vec
Brief hystory of NLP and Word2VecSilverQ
 
Deep Learning for Chatbot (1/4)
Deep Learning for Chatbot (1/4)Deep Learning for Chatbot (1/4)
Deep Learning for Chatbot (1/4)Jaemin Cho
 
1910 tfkr3 warnikchow
1910 tfkr3 warnikchow1910 tfkr3 warnikchow
1910 tfkr3 warnikchowWarNik Chow
 
Python을 활용한 챗봇 서비스 개발 1일차
Python을 활용한 챗봇 서비스 개발 1일차Python을 활용한 챗봇 서비스 개발 1일차
Python을 활용한 챗봇 서비스 개발 1일차Taekyung Han
 
Word 2 Vec Algorithm
Word 2 Vec AlgorithmWord 2 Vec Algorithm
Word 2 Vec AlgorithmHyeongmin Lee
 
이산치수학 Project7
이산치수학 Project7이산치수학 Project7
이산치수학 Project7KoChungWook
 
파이썬과 커뮤니티와 한국어 오픈데이터
파이썬과 커뮤니티와 한국어 오픈데이터파이썬과 커뮤니티와 한국어 오픈데이터
파이썬과 커뮤니티와 한국어 오픈데이터Eunjeong (Lucy) Park
 
딥러닝을 이용한 자연어처리의 연구동향
딥러닝을 이용한 자연어처리의 연구동향딥러닝을 이용한 자연어처리의 연구동향
딥러닝을 이용한 자연어처리의 연구동향홍배 김
 
Open domain dialogue Chatbot(잡담봇 삽질기)
Open domain dialogue Chatbot(잡담봇 삽질기)Open domain dialogue Chatbot(잡담봇 삽질기)
Open domain dialogue Chatbot(잡담봇 삽질기)NAVER Engineering
 
PyCon Korea 2015: 탐색적으로 큰 데이터 분석하기
PyCon Korea 2015: 탐색적으로 큰 데이터 분석하기PyCon Korea 2015: 탐색적으로 큰 데이터 분석하기
PyCon Korea 2015: 탐색적으로 큰 데이터 분석하기Hyeshik Chang
 
데이터는 차트가 아니라 돈이 되어야 한다.
데이터는 차트가 아니라 돈이 되어야 한다.데이터는 차트가 아니라 돈이 되어야 한다.
데이터는 차트가 아니라 돈이 되어야 한다.Yongho Ha
 
[224] backend 개발자의 neural machine translation 개발기 김상경
[224] backend 개발자의 neural machine translation 개발기 김상경[224] backend 개발자의 neural machine translation 개발기 김상경
[224] backend 개발자의 neural machine translation 개발기 김상경NAVER D2
 
[2021 Google I/O] LaMDA : Language Models for DialogApplications
[2021 Google I/O] LaMDA : Language Models for DialogApplications[2021 Google I/O] LaMDA : Language Models for DialogApplications
[2021 Google I/O] LaMDA : Language Models for DialogApplicationstaeseon ryu
 
La mda 딥러닝 논문읽기 모임, 2021 google IO
La mda 딥러닝 논문읽기 모임, 2021 google IOLa mda 딥러닝 논문읽기 모임, 2021 google IO
La mda 딥러닝 논문읽기 모임, 2021 google IOtaeseon ryu
 

Similar to <Little Big Data #1> 한국어 채팅 데이터로 머신러닝 하기 (20)

[싸이그램즈 2018] 텍스트 데이터 전처리로 시작하는 NLP
[싸이그램즈 2018] 텍스트 데이터 전처리로 시작하는 NLP[싸이그램즈 2018] 텍스트 데이터 전처리로 시작하는 NLP
[싸이그램즈 2018] 텍스트 데이터 전처리로 시작하는 NLP
 
[Langcon2020]롯데의 딥러닝 모델은 어떻게 자기소개서를 읽고 있을까?
[Langcon2020]롯데의 딥러닝 모델은 어떻게 자기소개서를 읽고 있을까?[Langcon2020]롯데의 딥러닝 모델은 어떻게 자기소개서를 읽고 있을까?
[Langcon2020]롯데의 딥러닝 모델은 어떻게 자기소개서를 읽고 있을까?
 
CoreDot TechSeminar 2018 - Session3 Doh Seungheon
CoreDot TechSeminar 2018 - Session3 Doh SeungheonCoreDot TechSeminar 2018 - Session3 Doh Seungheon
CoreDot TechSeminar 2018 - Session3 Doh Seungheon
 
[IT21 글로벌 컨퍼런스] 대화시스템 개발을 위한 자연어처리기술 - 서희철
[IT21 글로벌 컨퍼런스] 대화시스템 개발을 위한 자연어처리기술 - 서희철[IT21 글로벌 컨퍼런스] 대화시스템 개발을 위한 자연어처리기술 - 서희철
[IT21 글로벌 컨퍼런스] 대화시스템 개발을 위한 자연어처리기술 - 서희철
 
(Kor ver.)NLP embedding(word2vec) tutorial & implementation(Tensorflow)
(Kor ver.)NLP embedding(word2vec) tutorial & implementation(Tensorflow)(Kor ver.)NLP embedding(word2vec) tutorial & implementation(Tensorflow)
(Kor ver.)NLP embedding(word2vec) tutorial & implementation(Tensorflow)
 
Brief hystory of NLP and Word2Vec
Brief hystory of NLP and Word2VecBrief hystory of NLP and Word2Vec
Brief hystory of NLP and Word2Vec
 
Deep Learning for Chatbot (1/4)
Deep Learning for Chatbot (1/4)Deep Learning for Chatbot (1/4)
Deep Learning for Chatbot (1/4)
 
1910 tfkr3 warnikchow
1910 tfkr3 warnikchow1910 tfkr3 warnikchow
1910 tfkr3 warnikchow
 
Python을 활용한 챗봇 서비스 개발 1일차
Python을 활용한 챗봇 서비스 개발 1일차Python을 활용한 챗봇 서비스 개발 1일차
Python을 활용한 챗봇 서비스 개발 1일차
 
2206 Modupop!
2206 Modupop!2206 Modupop!
2206 Modupop!
 
Word 2 Vec Algorithm
Word 2 Vec AlgorithmWord 2 Vec Algorithm
Word 2 Vec Algorithm
 
이산치수학 Project7
이산치수학 Project7이산치수학 Project7
이산치수학 Project7
 
파이썬과 커뮤니티와 한국어 오픈데이터
파이썬과 커뮤니티와 한국어 오픈데이터파이썬과 커뮤니티와 한국어 오픈데이터
파이썬과 커뮤니티와 한국어 오픈데이터
 
딥러닝을 이용한 자연어처리의 연구동향
딥러닝을 이용한 자연어처리의 연구동향딥러닝을 이용한 자연어처리의 연구동향
딥러닝을 이용한 자연어처리의 연구동향
 
Open domain dialogue Chatbot(잡담봇 삽질기)
Open domain dialogue Chatbot(잡담봇 삽질기)Open domain dialogue Chatbot(잡담봇 삽질기)
Open domain dialogue Chatbot(잡담봇 삽질기)
 
PyCon Korea 2015: 탐색적으로 큰 데이터 분석하기
PyCon Korea 2015: 탐색적으로 큰 데이터 분석하기PyCon Korea 2015: 탐색적으로 큰 데이터 분석하기
PyCon Korea 2015: 탐색적으로 큰 데이터 분석하기
 
데이터는 차트가 아니라 돈이 되어야 한다.
데이터는 차트가 아니라 돈이 되어야 한다.데이터는 차트가 아니라 돈이 되어야 한다.
데이터는 차트가 아니라 돈이 되어야 한다.
 
[224] backend 개발자의 neural machine translation 개발기 김상경
[224] backend 개발자의 neural machine translation 개발기 김상경[224] backend 개발자의 neural machine translation 개발기 김상경
[224] backend 개발자의 neural machine translation 개발기 김상경
 
[2021 Google I/O] LaMDA : Language Models for DialogApplications
[2021 Google I/O] LaMDA : Language Models for DialogApplications[2021 Google I/O] LaMDA : Language Models for DialogApplications
[2021 Google I/O] LaMDA : Language Models for DialogApplications
 
La mda 딥러닝 논문읽기 모임, 2021 google IO
La mda 딥러닝 논문읽기 모임, 2021 google IOLa mda 딥러닝 논문읽기 모임, 2021 google IO
La mda 딥러닝 논문읽기 모임, 2021 google IO
 

<Little Big Data #1> 한국어 채팅 데이터로 머신러닝 하기

  • 1. <Little Big Data #1> 한국어 채팅 데이터로 머신러닝 하기 조한석 summatic@scatterlab.co.kr 1
  • 2. 소개 • 머신러닝 엔지니어
 (@스캐터랩, 2016. 1~) • 연애 중
 (2016. 8~) • 곧 결혼
 (2018. 5~) !2
  • 3. 소개 텍스트앳: 카톡감정분석 진저: 사랑을 이해하는 인공지능 연애의 과학: 모든 연애의 답• 스캐터랩 • 연애 콘텐츠 및 인공지능(?) 회사 • 시리즈 B • 사람들의 일상에 큰 영향을 미치는 연애를 도 와줍니다. • 연애 관련 논문을 쉽게 풀어서 설명해줍 니다. • 채팅 데이터를 분석해서 썸 혹은 연애를 과학적으로 분석해드립니다. • 서비스를 통해 수집된 채팅 데이터를 통해 기 능을 수행하는 인공지능이 아닌 일상적인 대 화를 할 수 있는 인공지능을 개발 중입니다. • 채팅 데이터 비식별화 조치 • 개인을 특정할 수 있는 정보(이름, 유저id 등) 는 저장하지 않습니다. • 개인정보(이름, 전화번호, 계좌번호 등)이 포 함된 문장은 사용하지 않습니다. !3
  • 4. 발표 내용 • Intro • 소개 • 자연어 처리의 어려움 • 한국어 자연어 처리의 어려움 • 커플 채팅 데이터의 어려움 • 한국어 자연어 처리 • Preprocessing • Word Embedding • Document Similarity • 그 외 !4
  • 6. 본격적으로 들어가기에 앞서 • 발표에서 다루는 내용 • 한국어 채팅 데이터를 다룬 경험 • 기본적으로 “상황” -> “문제" -> “해결” 의 형식을 따릅니다. • “해결” 에서는 알고리즘에 대한 개념을 소개합니다. • 머신러닝에 대한 기본 개념은 알고 있다고 가정합니다. • 머신러닝 혹은 발표 주제와 관련된 키워드는 영어를 사용합니다. • 발표에서 다루지 않는 내용 • 구체적인 수식과 알고리즘에 대한 자세한 설명은 하지 않습니다. • 참고자료에 대한 링크는 공개합니다. !6
  • 7. 한국어 자연어 처리의 어려움 - 언어적 특성에 따른 어려움 • Hell조사 • 어떤 조사를 사용하느냐에 따라 문장의 뉘앙스가 달라집니다. • 자유로운 언어의 변형 • 줄임말 • 쉬운 외국어 표현 • 유행어 • 말장난 <예시> - 여자친구 있어? - 여자친구는 있어? / 여자친구가 있어? 여자친구랑 있어? <예시> 소확행, 성덕, 갑분띠 등 <예시> 더럽, 빼박캔트, 레알트루 <예시> 오지고 지리고 레릿고 <예시> 이런, 삼런, 사런, 오런 !7
  • 8. • 혀 꼬인 소리 • 맞춤법 혹은 띄어쓰기 • 채팅에서만 할 수 있는 표현 한국어 자연어 처리의 어려움 - 커플 채팅 데이터의 어려움 <예시> 쟉이능 머해 / 알게떠 엽오 / 이제 모할꼬야? / 누워이또 / 나 잘해쪄? / 오구오구 그래쪄? / 
 울애긔 오디얌 빤니왕 <예시> - 오구오구 잘햇당 잘햇어 (X) -> 오구오구 잘했다 잘했어 (O) - 밥먹기전에 전화해줄까? (X) -> 밥 먹기 전에 전화해줄까? (O) - 뭐할꺼야? (X) -> 뭐 할 거야? (O) - 비온다 (X) -> 비 온다 (O) <예시> - 나 솢ㅜ ㅅ병 마셔써ㅓㅓ - 아ㅏㅏㅏㅏㅏㅏㅏㅏ 힘드러ㅓㅓㅓㅓㅓㅓㅓㅓ !8
  • 9.
  • 10. 한국어 자연어 처리의 어려움 - preprocess의 중요성 • Data Science의 격언 • Garbage in, Garbage out • 너무나도 다양한 형태와 변형이 있기 때문에, 불필요한 정보를 날리고 정제하는 preprocess 과정 이 필수입니다. • 그렇다면 어떤 식으로 preprocess 해야할까요? !10
  • 12. Preprocessing - 형태소 분석기 • 형태소 분석기 • 일반적으로 한국어 데이터 preprocess를 위해서 사용하는 툴은 형태소 분석기(POS1 tagger) 입니다. • 형태소: 의미를 가지는 최소 단위 • 파이썬에서 가장 많이 사용하는 라이브러리는 KoNLPy2 • 한국어 정보처리를 위한 파이썬 패키지 • 꼬꼬마, 트위터, 한나눔 등 형태소 분석기 1) POS: Part of speech 2) http://konlpy-ko.readthedocs.io/ko/v0.4.3/ !12
  • 13. Preprocessing - 형태소 분석기 사용 예시(꼬꼬마) • 자기 너무 보고싶다. 언제 만날까? • 자기_NP 너무_MAG 보_VV 고_ECE 
 싶_VXA 다_EFN ._SF 언제_MAG 
 만나_VV ㄹ까_EFQ ?_SF • 우리 영원히 사랑하자 • 우리_NP 영원히_MAG 사랑_NNG 
 하_XSV 자_ECE • 점심 맛있게 먹어요. 다 먹고 연락해 • 점심_NNG 맛있_VA 게_ECD 먹_VV 
 어요_EFN ._SF 다_MAG 먹_VV 
 고_ECE 연락_NNG 하_XSV 어_ECS <원문> <형태소 분석> !13
  • 14.
  • 15. Preprocessing - 형태소 분석기 사용 예시(꼬꼬마) • 쟉이 넘넘 보고시펑. 언제봐? • 쟉_UN 이_JKS 넘_MAG 넘_MAG 
 보_VV 고_ECE 시_NNG 펑_MAG 
 언제_MAG 보_VV 아_ECS ?_SF • 우리사랑 포에버 • 우리_NP 사랑_NNG 포_NNG 
 에_JKM 벌_VV • 점심 맛나게머겅. 다먹구톡해ㅋㅋ • 점심_NNG 맛나_VA 게_ECD 머_NP 
 겅_UN ._SF 다_MAG 먹_VV 구_ECE 톡_MAG 하_VV 어_ECS ㅋㅋ_EMO <원문> <형태소 분석> !15
  • 16.
  • 17. Preprocessing - 형태소 분석기 • 잘 안되는 이유 • 형태소 분석기 학습에 사용된 데이터(말뭉치, corpus)의 단어 분포가 채팅 데이터의 단어분포 와 다름 • 말뭉치(corpus) • 자연어 연구를 위해 특정한 목적을 가지고 언어의 표본을 추출한 집합 !17 출처: https://ko.wikipedia.org/wiki/말뭉치
  • 18. Preprocessing - 형태소 분석기 • Sejong Corpus • National Institute of the Korean Language, 1998-2007. • 채팅데이터에 비해 아주 예쁘고 잘 정제된 형태의 데이터 • 온실 속의 화초에서 키운 애를 야생에 던져놓았으니 살아남을 리가 있나 (..) !18 출처: https://ithub.korean.go.kr/user/guide/corpus/guide1.do
  • 19. • 모든 데이터를 합리적인 기준으로 패턴을 찾고 그 패턴으로 preprocess • 일종의 normalize(표준화) • 이 원칙을 바탕으로 preprocessing • 채팅 데이터에는 문법에 맞지 않는 데이터가 많으니까 • 문법적 요소를 제외한 방식의 tokenizing <예시> 만약 count(“어디야”) < count(“오디야?”)이면, “오디야”는 문법적으로 틀린 표현이지만 기준으로 삼을 수 있다. Preprocessing - 형태소 분석기 대안 !19
  • 20. Preprocessing - Tokenizing • Tokenizing: 여러 단어로 이루어진 문장 혹은 어절에서 단어를 구분하는 것 • 영어의 경우에는 띄어쓰기 단위로 token이 나뉘어지지만, 한국어는 그렇지 않음. • 형태소가 의미를 가진 최소의 단위라면, token은 의미를 가진 실질 단위 • “의미를 가진 실질 단위”를 “단어”라고 생각한다면 tokenizing 문제는 문장에서 단어를 추출하는 문제로 생각할 수 있습니다. !20 <예시> before tokenizing: 제철에 수확한 국산 유기농 양배추와 브로콜리를 엄선하고 국산 사과즙을 더해 맛있는 유기가공식품 인증제품입 니다. after tokenizing: 제철 / 에 / 수확 / 한 / 국산 / 유기농 / 양배추 / 와 / 브로콜리 / 를 / 엄선 / 하고 / 국산 / 사과즙 / 을 /더해 / 맛있 는 / 유기가공식품 / 인증 /제품 / 입니다.
  • 21. • 가정 • 연속된 글자의 연관성이 높을 수록 단어일 가능성이 높음 • c1c2..cn-1 다음에 cn이 많이나온다면 문자열 c1..cn은 단어일 것 • 공식 Preprocessing - Tokenizing(Cohesion Probability) !21 <예시> “빅데이” 라는 연속된 글자 다음에 “터”라는 글자가 나타나는게 가장 자연스럽다. 출처: https://ratsgo.github.io/from%20frequency%20to%20semantics/2017/05/05/cohesion/
  • 22. Preprocessing - Tokenizing(Cohesion Probability) • 예시) 개꿀잼이다 • 개꿀잼이다 = 개꿀잼 + 이다 !22 substring count - count(개) = 20000 - count(개꿀) = 1500 - count(개꿀잼) = 1200 - count(개꿀잼이) = 30 - count(개꿀잼이다) = 15 cohesion probability - CP(개꿀) = 0.2738 - CP(개꿀잼) = 0.3914 - CP(개꿀잼이) = 0.1968 - CP(개꿀잼이다) = 0.2371
  • 23. Preprocessing - Tokenizing • 단어를 추출하는 방법은 Cohesion probability 외에 다른 방법들도 있습니다. • 구체적인 이론과 코드는 다음 자료를 참고해주세요. • [파이콘 2017] 노가다 없는 텍스트 분석을 위한 한국어 NLP - 김현중 • 이론 • https://www.slideshare.net/kimhyunjoonglovit/pycon2017-koreannlp • 코드 • https://github.com/lovit/soynlp !23
  • 25. Word Embedding - Word2Vec • 단어 정보를 이용하여 머신러닝을 하려면 단어를 vector로 변환해주어야 합니다. • 이를 word embedding 또는 word representation이라고 합니다. • 가장 대표적인 알고리즘은 word2vec • You shall know a word by the company it keeps (Firth, J. R. 1957:11) !25
  • 26. Word Embedding - Word2Vec의 한계 • word2vec은 이론도 간단하고 공개되어 있는 패키지가 많아서 이용이 간단하지만 OOV 문제가 있습니다. • OOV(Out-of-vocabulary): 데이터에 포함되어 있지 않은 (=dictionary에 없는) vocabulary 는 vector로 나타낼 수 없는 문제 • training 단계에서는 모델의 input으로 들어가는 vocabulary를 통제하기 때문에 OOV 문제가 생 기기 어렵지만, inference 단계에서는 충분히 생길 수 있습니다. • inference 단계: 모델을 서비스에 실제로 적용하는 단계 • 커플간의 채팅은 의도적으로든 실수로든 오타를 많이 내서 사전에 없는 단어가 만들어질 확률 이 높음 • 채팅데이터는 다른 텍스트데이터(뉴스, 문학작품 등)에 비해 한 문서당 단어의 수가 적기 때문 에, dictionary에 없는 단어가 하나라도 들어오면 큰 문제가 발생할 수 있습니다. !26
  • 27. • word2vec과 비슷한 원리이나 두 단어간의 점수를 측정하는 부분이 다름 • word2vec: • • fasttext: • where the set of n grams appearing in w • 단어 내부의 subword를 이용하는 방식 Word Embedding - Fasttext !27 <예시> w: Alpaca n grams of w (n=3) = <Al, Alp, lpa, pac, aca, ca> 출처: Bojanowski, P., Grave, E., Joulin, A., & Mikolov, T. (2016). Enriching word vectors with subword information. arXiv preprint arXiv: 1607.04606.
  • 28. Word Embedding - Fasttext + 한국어 • 한국어 데이터에 fasttext를 적용하는 방법은 두 가지가 있습니다. • 글자(character) 단위의 subword를 사용하는 방법 • 자모 단위의 subword를 사용하는 방법 • 글자 단위보다 자모 단위가 더 작으므로, OOV 문제에 대해 더 유연하게 대처할 수 있습니다. !28 <예시> subwords(미세먼지는) = <미세, 미세먼, 세먼지, 먼지는, 지는> <예시> 미세먼지는 = ㅁㅣ_ㅅㅔ_ㅁㅓㄴㅈㅣ_ㄴㅡㄴ subwords(미세먼지는) = <ㅁㅣ, ㅁㅣ_, ㅣ_ㅅ, …, ㄴㅡㄴ>
  • 29. Word Embedding - Fasttext • 실제 사용 예시 !29 엽오 - 쟈긔, 0.8590 - 여보, 0.8465 - 여뿌, 0.8180 - 자긔, 0.8055 - 자깅, 0.8018 - 댜긔, 0.8017 - 내꼬, 0.8007 - 자기, 0.7983 - 여봉, 0.7972 - 뽀야, 0.7948 오빵 - 여붕, 0.9022 - 여봉, 0.8986 - 요봉, 0.8887 - 자깅, 0.8866 - 어빵, 0.8567 - 옵빵, 0.8498 - 옵빠, 0.8474 - 오라방, 0.8413 - 여뽕, 0.8335 - 여뿌, 0.8191
  • 30. Word Embedding - Fasttext • 자세한 이론과 코드는 다음을 참고해주세요 • 이론 • Bojanowski, P., Grave, E., Joulin, A., & Mikolov, T. (2016). Enriching word vectors with subword information. arXiv preprint arXiv:1607.04606. • 코드 • https://github.com/facebookresearch/fastText • https://radimrehurek.com/gensim/models/fasttext.html • https://github.com/summatic/hangul_jamo_fasttext !30
  • 32. Setence Similarity • 자연어 처리 분야서 주로 다루는 문제 중 하나는 서로 다른 두 document간의 유사도를 비교하는 문제입니다. • 커플 채팅데이터가 일반적인 document와 다른점은 short sentence라는 점입니다. • 가장 쉽게 비교할 수 있는 방법은 word embedding과 같이 문장을 vector로 embedding해서 cosine similarity를 이용하는 방법입니다. !32 <예시> sim(우리 여보는 어디야, 자기 어디까지 왔어?)
  • 33.
  • 34. Sentence Similarity - BOW + Word Embedding • 문장에 있는 모든 word의 vector를 단순히 더하는 방식의 방법 • doc2vec도 포함합니다 • word embedding의 성능에 큰 영향을 받습니다 • 그렇다면 word embedding은 신뢰할 수 있을까요? • 채팅 데이터에서 학습시킨 word embedding 중 이상한 결과들 • 유사한 단어 != 뜻이 비슷한 단어 !34 - similarity(춥다, 덥다) = 0.9011 - similarity(일찍, 늦게) = 0.8839 - similarity(흰색, 검은색) = 0.9707
  • 35. Sentence Similarity - RNN • 자연어 처리 관련 딥러닝 모델은 sentence embedding을 위해 RNN 계열의 모델(LSTM, Bi- RNN, GRU 등)을 많이 씁니다. • RNN의 본질은 language modeling • “반갑습니다 캠퍼스 서울입니다.” <-> “반습갑니다 캠퍼스 서울니입다” 중 어떤 문장이 더 말 이 되는지를 판단 • 주어진 sequence에서 다음에 올 단어 혹은 글자를 예측하는 방향으로 embedding이 된다. • 그래서.. “우리 언제볼까”와 “어디까지 왔어”가 비슷하게 embedding 되는 경향이 있습니다. • 두 문장 모두 다음에 올 글자는 “?” !35
  • 36. Sentence Similarity - Term vector • 문장 혹은 문서를 vector로 표현할 때는 embedding 알고리즘 혹은 모델이 의도하는 방향으로 embedding이 됩니다. • 애매하게 embedding할 바에 term vector로 표현 • one hot encoding이랑 같은 방법이라고 생각하시면 됩니다. • term vector로 표현을 하고 나면 cosine similarity, edit distance 등으로 두 문장의 유사도를 비교할 수 있습니다. !36 <예시> - I love you, you love me - {“I”: 1, “love”: 2, “you”: 2, “me”: 1}
  • 37.
  • 38. Sentence Similarity - Term vector • term vector로 채팅 데이터를 나타냈을 때 발생하는 문제점 • 단어의 변화에 너무 민감. 특히 짧은 문장이 많은 채팅 데이터일수록 문제가 생길 여지가 많음 • 단어의 의미정보를 이용할 수 없음 • pair1의 유사도가 pair2의 유사도보다 더 커야할 것 같지 않나요? !38 <예시> pair1: I love you <-> I like you pair2: I love you <-> I hate you
  • 39. Sentence Similarity - ESA Similarity • ESA: Explicit Semantic Analysis • 명시적인 정보(=word vector)를 이용하자 • cosine similarity • ESA similarity !39 I love you I like you similarity I love you I 1 0.2 0.5 like 0.3 0.9 0.4 you 0.5 0.4 1 1 0.9 1
  • 40. Sentence Similarity - ESA Similarity • ESA: Explicit Semantic Analysis • 명시적인 정보(=word vector)를 이용하자 • cosine similarity • ESA similarity !40 I love you I hate you similarity I love you I 1 0.2 0.5 hate 0.3 0.5 0.4 you 0.5 0.4 1 1 0.5 1
  • 41. Sentence Similarity - ESA Similarity • ESA: Explicit Semantic Analysis • I love you와의 유사도 비교 • 유의미한 차이를 만들어 낼 수 있습니다. !41 I like you I hate you cosine 0.667 0.667 ESA 0.967 0.833
  • 42. Sentence Similarity - ESA Similarity • 구체적인 이론과 코드는 다음 자료를 참고해주세요. • 이론 • Song, Y., & Roth, D. (2015). Unsupervised sparse vector densification for short text similarity. In Proceedings of the 2015 Conference of the North American Chapter of the Association for Computational Linguistics: Human Language Technologies (pp. 1275-1280). • 코드 • (작업중) !42
  • 44. 그 외 자잘한 팁 • 한국어 자연어 처리는 preprocessing가 80% 이상 • Zipf’s law • corpus에서 나타나는 단어들을 사용빈도 순으로 나열한다면, 사용빈도와 해당 단어의 수는 반 비례한다 • (문제마다 다르겠지만) 데이터의 모든 단어를 이용할 필요는 없음. 빈도수가 적은 단어는 과감 히 쳐내자 • 문제 정의를 잘 하는것이 모델을 구현하는 것보다 훨씬 중요 • 현실에서 마주하는 문제는 복합적인 요소들이 작용 • 기술적으로 뛰어난 모델을 적용하는 것도 좋지만, 간단한 통계 혹은 count based 모델을 사용 하는 것이 효과적일수도 있다 • unlabeled data에 직접 label을 달아보자 • label을 달다가 보면 뜻밖의 insight를 얻기도 함 !44
  • 46. - End of Document - 46