온라인에서 발생하는 혐오표현은 널리 알려진 사회적 문제입니다. 익명성 때문에 혐오의 강도가 오프라인에 비해 더욱 세고, 온라인 상에 기록되기 때문에 그 내용을 지지하는 집단만 있다면 쉽게 불특정다수에게 확산되어 피해의 강도가 증폭됩니다. 최근에 발생한 일련의 비극적인 사건들로 포털 사이트들은 연예 및 스포츠 뉴스의 댓글란을 폐쇄하는 조치를 취했지만 그 곳이 아니더라도 혐오 발언은 어딘가에서 계속 표출이 되고 있기 때문에 다소 아쉬울 수 있는 해결책입니다.
이 때문에 어떤 텍스트에 혐오발언이 담겨 있는지 아닌지를 검출하는 모델은 불필요한 곳에서의 혐오 확산 및 노출을 제어할 수 있다는 면에서도, 표현의 자유를 침해하지 않고도 혐오발언으로 인한 피해를 감소시킬 수 있기 때문에도 중요합니다.
하지만 좋은 혐오탐지 모델 개발을 위해서는 우선, 좋은 데이터셋이 필요합니다. 그래서 이번 발표에서는 데이터를 구축하기 위해 했던 고민과 삽질기, 그리고 완성된 데이터를 활용해서 학습한 혐오탐지 모델을 소개할 예정입니다. 발표를 통해 혐오발언에 대한 다양한 논의와 모델 개선을 위해 필요한 작업들에 대한 토의가 이루어지길 기대합니다.
온라인에서 발생하는 혐오표현은 널리 알려진 사회적 문제입니다. 익명성 때문에 혐오의 강도가 오프라인에 비해 더욱 세고, 온라인 상에 기록되기 때문에 그 내용을 지지하는 집단만 있다면 쉽게 불특정다수에게 확산되어 피해의 강도가 증폭됩니다. 최근에 발생한 일련의 비극적인 사건들로 포털 사이트들은 연예 및 스포츠 뉴스의 댓글란을 폐쇄하는 조치를 취했지만 그 곳이 아니더라도 혐오 발언은 어딘가에서 계속 표출이 되고 있기 때문에 다소 아쉬울 수 있는 해결책입니다.
이 때문에 어떤 텍스트에 혐오발언이 담겨 있는지 아닌지를 검출하는 모델은 불필요한 곳에서의 혐오 확산 및 노출을 제어할 수 있다는 면에서도, 표현의 자유를 침해하지 않고도 혐오발언으로 인한 피해를 감소시킬 수 있기 때문에도 중요합니다.
하지만 좋은 혐오탐지 모델 개발을 위해서는 우선, 좋은 데이터셋이 필요합니다. 그래서 이번 발표에서는 데이터를 구축하기 위해 했던 고민과 삽질기, 그리고 완성된 데이터를 활용해서 학습한 혐오탐지 모델을 소개할 예정입니다. 발표를 통해 혐오발언에 대한 다양한 논의와 모델 개선을 위해 필요한 작업들에 대한 토의가 이루어지길 기대합니다.
"손코딩뇌컴파일눈디버깅" 모임을 소개합니다.
백문이 불여일런, 트라이얼앤에러(Trial and Error) 식의 몹쓸 교육을 받아 온 개발자들이 코딩하기 전에 신중하고 꼼꼼하게 생각해보기란 쉽지 않습니다.
개발 시간 중 디버깅 시간이 절반 이상을 차지하고 있는 실정에 버그를 줄이기 위해 TDD니 유닛테스트니 많은 방법들이 개발되고 있지만 가장 일차적으로 중요한 것은 개발자들이 꼼꼼히 따져보는 것이 아니겠는지요?
미국의 선진 SW회사들은 이미 화이트보드에 PS문제를 푸는 것을 인터뷰 방식으로 채택하고 있습니다. 이는 이와 같은 풀이 방식이 개발자들의 기본 역량을 측정하기에 알맞은 지표라는 것이고, 개발자들이 기본적으로 갖춰야 할 역량이기도 하다는 것 입니다.
또한 자신의 생각을 명확하게 정리하고 다른 사람이 이해할 수 있도록 전달하는 Communication Skill 도 개발자가 갖춰야 할 역량 중 하나 입니다. 알고리즘을 어떻게 구현할 것인가를 팀원들과 소통하면서 자연스럽게 생각을 정리하고 전달하는 연습도 할 수 있습니다.
컴퓨터에 앉아 코딩하기 전 펜과 종이를 들고 눈과 머리와 손을 굴려 보시는 것은 어떠신지요??
2020년 서울시에서 주최한 강소기업탐방 프로그램에서 발표한 자료 입니다.
학교를 졸업하고 software engineer로 취직을 하기까지의 여정을 다뤘습니다
1. 개발자가 나에게 맞을지 고민하기 위한 방법
2. 개발자로 취직하기 (이력서/면접 준비 팁)
3. 개발자로 취직한 후 우리가 하는 일
Event Sourcing with Kotlin, who needs frameworks!Nico Krijnen
You've heard about Event Sourcing, it sounds like a useful technique that can potentially make some really hard problems a lot easier. But where do you start? There are many talks about the theory and application of Event Sourcing, but what does it actually look like in code? And why is the Kotlin language such an excellent match for writing event sourced applications?
As Event Sourcing is a complicated topic we'll start with a short introduction to some of the key concepts like Event Sourcing, CQRS, command pattern and projections. Event Sourcing is not for everyone. It requires a significant shift in how you think about your data. Event Sourcing is also not always easy, so we'll point out some pitfalls and guide you on when it's worth using it and when you should stay away from it.
However, Event Sourcing is also super-valuable when it fits your needs! And if you approach it in the right way, it does not have to be as hard as you may think. With some live coding, we'll build up an event sourced model using the CQRS pattern. Along the way you'll get a taste of how these techniques work in code and how typical Kotlin constructs like data classes, immutability, lazy properties and functional style will help you to keep it all readable and easy to understand. You'll see that you don't need to start with a framework to do Event Sourcing and why Java doesn't make it as easy as Kotlin does. The Kotlin language provides a lot of the fundamentals that you need and that allows you to keep everything simple and in your own control.
---
As presented at Kotlin Dev Day, May 2022 in Amsterdam.
AI/Machine Learning의 한 분야인 Natural Language Processing (NLP)에 대해서 발표를 할 예정입니다. NLP는 한국어로 “자연어 처리”로서 Computer Vision 및 Image Processing에서 “언어적 문맥” 이해와 “그 처리”는 상당히 중요한 역할을 차지합니다. Image/Video를 Language화하여 처리하는 다양한 알고리즘이 존재하며 CVPR/ICCV의 학회에서도 핫한 분야 중 하나입니다. 대표적인 분야는 Image/Video Captioning, Description 및 Visual Q&A 등이 있습니다.
그 중에서도 핵심 Background가 되는 Word2Vec에 대해서 소개하고자 합니다. Word2Vec은 언어처리 뿐만 아니라 Generative Model과도 연관성이 높다는 것이 특징이며. NLP의 모든 분야에서의 핵심 이론으로 보시면 되겠습니다.
"손코딩뇌컴파일눈디버깅" 모임을 소개합니다.
백문이 불여일런, 트라이얼앤에러(Trial and Error) 식의 몹쓸 교육을 받아 온 개발자들이 코딩하기 전에 신중하고 꼼꼼하게 생각해보기란 쉽지 않습니다.
개발 시간 중 디버깅 시간이 절반 이상을 차지하고 있는 실정에 버그를 줄이기 위해 TDD니 유닛테스트니 많은 방법들이 개발되고 있지만 가장 일차적으로 중요한 것은 개발자들이 꼼꼼히 따져보는 것이 아니겠는지요?
미국의 선진 SW회사들은 이미 화이트보드에 PS문제를 푸는 것을 인터뷰 방식으로 채택하고 있습니다. 이는 이와 같은 풀이 방식이 개발자들의 기본 역량을 측정하기에 알맞은 지표라는 것이고, 개발자들이 기본적으로 갖춰야 할 역량이기도 하다는 것 입니다.
또한 자신의 생각을 명확하게 정리하고 다른 사람이 이해할 수 있도록 전달하는 Communication Skill 도 개발자가 갖춰야 할 역량 중 하나 입니다. 알고리즘을 어떻게 구현할 것인가를 팀원들과 소통하면서 자연스럽게 생각을 정리하고 전달하는 연습도 할 수 있습니다.
컴퓨터에 앉아 코딩하기 전 펜과 종이를 들고 눈과 머리와 손을 굴려 보시는 것은 어떠신지요??
2020년 서울시에서 주최한 강소기업탐방 프로그램에서 발표한 자료 입니다.
학교를 졸업하고 software engineer로 취직을 하기까지의 여정을 다뤘습니다
1. 개발자가 나에게 맞을지 고민하기 위한 방법
2. 개발자로 취직하기 (이력서/면접 준비 팁)
3. 개발자로 취직한 후 우리가 하는 일
Event Sourcing with Kotlin, who needs frameworks!Nico Krijnen
You've heard about Event Sourcing, it sounds like a useful technique that can potentially make some really hard problems a lot easier. But where do you start? There are many talks about the theory and application of Event Sourcing, but what does it actually look like in code? And why is the Kotlin language such an excellent match for writing event sourced applications?
As Event Sourcing is a complicated topic we'll start with a short introduction to some of the key concepts like Event Sourcing, CQRS, command pattern and projections. Event Sourcing is not for everyone. It requires a significant shift in how you think about your data. Event Sourcing is also not always easy, so we'll point out some pitfalls and guide you on when it's worth using it and when you should stay away from it.
However, Event Sourcing is also super-valuable when it fits your needs! And if you approach it in the right way, it does not have to be as hard as you may think. With some live coding, we'll build up an event sourced model using the CQRS pattern. Along the way you'll get a taste of how these techniques work in code and how typical Kotlin constructs like data classes, immutability, lazy properties and functional style will help you to keep it all readable and easy to understand. You'll see that you don't need to start with a framework to do Event Sourcing and why Java doesn't make it as easy as Kotlin does. The Kotlin language provides a lot of the fundamentals that you need and that allows you to keep everything simple and in your own control.
---
As presented at Kotlin Dev Day, May 2022 in Amsterdam.
AI/Machine Learning의 한 분야인 Natural Language Processing (NLP)에 대해서 발표를 할 예정입니다. NLP는 한국어로 “자연어 처리”로서 Computer Vision 및 Image Processing에서 “언어적 문맥” 이해와 “그 처리”는 상당히 중요한 역할을 차지합니다. Image/Video를 Language화하여 처리하는 다양한 알고리즘이 존재하며 CVPR/ICCV의 학회에서도 핫한 분야 중 하나입니다. 대표적인 분야는 Image/Video Captioning, Description 및 Visual Q&A 등이 있습니다.
그 중에서도 핵심 Background가 되는 Word2Vec에 대해서 소개하고자 합니다. Word2Vec은 언어처리 뿐만 아니라 Generative Model과도 연관성이 높다는 것이 특징이며. NLP의 모든 분야에서의 핵심 이론으로 보시면 되겠습니다.
코어닷 기술 세미나 2018
Session #3 : 도승헌 (코어닷투데이 개발자)
LDA와 3개월 함께한 자연어처리 시행착오기
16:00 ~ 16:50
한국어 자연어 처리를 하면서 알아야 할 최소한의 지식을 전달합니다. 전처리부터 토픽모델링까지 3개월간 동거동락한 Gensim 라이브러리의 비밀을 알려드립니다.
- 자연어 처리의 기본 이론
- 토픽 모델링과 LDA
- Gensim을 이용한 매우 쉬운 자연어 처리
https://coredottoday.github.io/2018/10/15/Coredot-기술-세미나/
『풀스택 개발자를 위한 MEAN 스택 입문』 - 미리보기복연 이
MEAN 스택, 서버와 클라이언트를 넘나드는 풀스택 엔지니어의 선택
MEAN은 서버와 클라이언트 양쪽을 모두 다루는 풀스택 엔지니어를 위한 기술이며, 한번 익혀두면 여러 상황에서 돌파구를 발견할 가능성을 높여준다. 그만큼 개발자의 경쟁력을 높일 수 있음을 의미한다. 스택의 모든 구성 요소가 자바스크립트를 사용하므로 진입 장벽이 낮고 팀 내 협업, 노하우 공유, 의사소통에 큰 도움을 준다.
이 책은 오랜 개발과 번역 경험을 두루 갖춘 베테랑 역자가 원서의 예제를 완결된 형태로 재구성해서 독자의 시간을 절약해주고 아쉬운 설명을 보강해 완성도를 높였다. 책의 흐름에 발맞춰 예제를 조금씩 확장해 나가다 보면 어느 순간 자신만의 멋진 풀스택 앱을 만들 수 있을 것이다.
- 지은이 : 애덤 브레츠, 콜린 J. 이릭
- 옮긴이 : 박재호
- ISBN : 978-89-6848-218-2 93000
- 발행일 : 2015년 9월 1일
- 페이지수 : 348
- 정가 : 28,000원
- 구매(예스24) : http://goo.gl/KNlRGg
코끼리(BOAZ) 사서의 도서 추천 솔루션
: 이 책 내용이 내 취향인데, 비슷한 내용의 책은 어떻게 찾지?’
줄거리를 바탕으로 책을 고르시는 분, 관심 작가의 책을 읽고 싶은 분들께
코끼리 사서가 취향저격 책을 제안해 드립니다.
12기 강호석 고은비 고은지 양태일 이지인 전준수 정해원
[국내 최초 빅데이터 연합동아리 BOAZ]
유튜브 - https://www.youtube.com/channel/UCSniI26A56n2QZ71opJtTUg
페이스북 - https://www.facebook.com/BOAZbigdata
인스타그램 - http://www.instagram.com/boaz_bigdata
블로그 - https://blog.naver.com/boazbigdata
온라인 커머스에서 판매되는 상품을 embedding 하는 방법에 대한 논문입니다.
아마존에서 2017년에 발표한 논문이고 범용적으로 활용할 수 있는 product embedding을 제안했습니다.
multi-task 기반의 bidirection RNN을 활용했다는 점이 가장 큰 차별점입니다.
2. 이 논문을 선정한 이유
이 컨텐츠를 누구한테 보여줄까?
일단 카테고리 설정은 ‘연애’
코스모폴리탄이니깐 20~30대 여성 노출량을 많도록!
어떻게하면 더 정교하게 타겟팅 할 수 있을까?
사람의 개입을 줄일 수는 없을까?
컨텐츠 개수가 100배 이상 늘어난다는데?
3. 이 논문을 선정한 이유
컨텐츠 본문을 분석하자!
어떤 것에 관한 페이지인지 태그를 자동으로 달아보자
(Keyword Extraction)
카테고리도 자동으로 달아보자
(Document Classification)
유사한 웹 페이지는 어떤 것이 있는지 찾아보자
(Document Similarity)
어떤 작업부터 해야할까?
4. 이 논문을 선정한 이유
Word Vector를 구축하는 모델들은?
각 모델들의 장단점은 무엇일까?
한국어에 가장 적합한 Word Vector 모델은 무엇일까?
Word Representation!
일단 각 단어들을 계산 가능하도록 만들어보자
GloVe가 Word2Vec의 어떤 점을 개선시키려고 했는지 살펴보자
6. Word Representation 분류
Word Representation
Discrete Representation Distributed Representation
Count BasedDirect Prediction
Full Document windows
Word2Vec
WordNet One-hot Vector
LSA SVD of X GloVe
7. Discrete Representation (Symbolic)
단점
단어의 관계( e.g. 유사도, 반의어, 문법 등)를 측정할 수 없다
사람이 직접 구축해야한다. 주관적인 판단이 개입될 수 있다
새로운 단어가 나올 경우 일일이 대응해야한다
뉘앙스와 같은 것들을 표현하기 어렵다
Dictionary 기반 (e.g. WordNet) 혹은 One-hot Vector를 통한 Representation
장점
(Dictionary 기반의 경우) 사람이 이해할 수 있는 형태의 Representation
(One-hot Vector의 경우) 비교적 간단하게 구축할 수 있다
8. Distributed Representation
단점
성능을 측정하기가 쉽지 않다
단어의 출현 빈도를 기반으로 계산한 Word Vector
장점
단어의 관계를 측정, 표현 할 수 있다
비지도 학습!
새로운 단어가 나올 경우 Corpus만 제공하면 된다
다른 모델들과 결합해서 추가적인 정보를 제공한다
9. Word2Vec
딥러닝을 활용한 자연어처리에
단어가 출현하는 위치를 기반으로 단어를 학습시켜보자 (Skip-grams)
Center word
(Position t)
Output Context words
(m word window)
Output Context words
(m word window)
P(wt+1|wt)P(wt-1|wt)
“저는
P(wt-2|wt)
관심이 많습니다”
P(wt+2|wt)
12. Word2Vec
비효율적인 부분?
한 번에 하나의 동시 출현만 계산해서 업데이트하는게 좀 비효율처럼 느껴지는데?
왜 통계 정보를 사용하지 않는거지?
전체 Corpus로 부터 한 단어 한 단어씩 훑어가며 학습한다
Center Word를 둘러싸고 있는 단어들을 각각 학습한다
한 번에 단어 한 쌍의 관계를 학습한다
Word2Vec 요약
13. 통계 정보를 활용한 Word Vector
Co-occurrence matrix X 를 구축하자
Full Document 기반
단어-문서간 동시 출현을 기반으로 matrix X를 구축한다
일반적인 주제 분류에 적합하다.
Latent Semantic Analysis
Window 기반
각 단어의 위치로 단어-단어간 동시 출현을 matrix X를 구축한다
의미와 문법 정보를 모두 캡쳐할 수 있다.
19. SVD의 문제점
• 계산양이 많음 ( n<m 일 때 O(mn2) )
• 새로운 단어와 문서들을 적용하기 위해서는 새로 계산해야함
• 자주 출현하는 단어들을 위한 고려가 필요함
20. Count based vs direct prediction
Count based Direct prediction
단점
장점
통계 정보를 효율적으로 사용한다
단어 유사도 정도만 사용할 수 있지만
성능은 그다지 높지 않다
빈도수가 높은 단어들을 위해서
별도의 고려가 필요하다
단어수가 적은 경우 학습이 빠르다
통계 정보를 효율적으로
사용하지 않는다
Corpus가 큰 경우
학습이 오래걸릴 수 있다
다른 딥러닝 모델과 연계해서
사용할 수 있다
유사도 뿐만 아니라 다양한 분야에서
활용 될 수 있다
21. Recap - Word Representation 분류
Word Representation
Discrete Representation Distributed Representation
Count BasedDirect Prediction
Full Document windows
Word2Vec
WordNet One-hot Vector
LSA SVD of X GloVe
22. Combiningthebestofbothworlds:GloVe
GloVe에서 풀고자 했던 것은?!
기존의 Word2Vec 에서는 전체 Corpus의 통계 정보를 활용하지 않는다.
Þ 통계 정보를 활용해서 더 효율적으로 계산해보자
Þ 통계 정보를 활용해서 추가 성능 향상을 만들어보자
Count 기반으로 만든 Vector는 다양한 활용이 어렵다
Þ 범용적으로 사용가능하도록 만들어보자
28. 모델 수식 설명
두개의벡터셋을가지는이유?
• Target word를 학습시키는 것과 Context word를 학습시키는게 뭔가 다른점이 있지 않을까?
• 일반적으로 딥러닝에서 많이 사용하기 때문에 적용해봤는데, 성능이 더 잘 나왔다
• 각각 학습시킨 다음에 간단하게 Sum을 하는게 제일 성능이 좋더라
29. 전체 모델 요약 설명
1. 주어진 Corpus와 Window size를 가지고 co-occurrence matrix X를 만든다
2. Word2Vec과 유사한 방법으로 학습 대상이 되는 단어들을 Window size안에서 고른다
3. 고른 단어와 matrix X 를 기반으로 Objective Function을 사용해서 학습시킨다
“저는 딥러닝을 활용한 자연어 처리에 관심이 많습니다”
“저는 딥러능을 응용한 소프트웨어 개발에 관심이 많습니다”
.
.
.
36. 결론
• Count 기반의 방법과 direct prediction 기반 방법을 합쳐서 사용하니 성능이 크게 올라가더라
• 학습 시간도 빠르다
• 큰 Corpus도 적용 가능하다
• 작은 Corpus에서도 성능이 좋다
• Vector size가 작아도 성능이 좋다
37. 한국어에 더 잘 맞는 모델은?
A Study on Word Vector Models for Representing Korean Semantic Information(2015, Yang, Hejung et al.)
한국어에 적합한 단어 임베딩 모델 및 파라미터 튜닝에 관한 연구(2016, 최상혁, 설진석, 이상구)
Word2Vec이 좋다 GloVe가 좋다
어떤 Corpus로 어떻게 전처리 하느냐에 따라서 성능이 크게 달라진다.
38. References
• Glove: Global Vectors for Word Representation(2014, J. Pennington et al)
• Distributed representations of words and phrases and their compositionality (2013, T. Mikolov et al.)
• A Study on Word Vector Models for Representing Korean Semantic Information(2015, Yang, Hejung et al.)
• 한국어에 적합한 단어 임베딩 모델 및 파라미터 튜닝에 관한 연구(2016, 최상혁, 설진석, 이상구)
• https://youtu.be/OQQ-W_63UgQ?list=PL3FW7Lu3i5Jsnh1rnUwq_TcylNr7EkRe6
• https://web.stanford.edu/class/cs224n/lectures/cs224n-2017-lecture2.pdf
• https://web.stanford.edu/class/cs224n/lectures/cs224n-2017-lecture3.pdf
• https://ratsgo.github.io/from%20frequency%20to%20semantics/2017/04/09/glove/