sailorCat

전체 글 250

카테고리 설명
😘
작성일
2022. 4. 13. 18:18
작성자
sailorCat
728x90

라이브러리

data - 사용한 데이터 전체

notes - 설명 pdf

soynlp - 전처리기

test - 각종 테스트 결과

tutorials - 사용법

 

attributes 

Readme.md

setup

 

 

챗봇

 

텔레그램 챗봇

https://py-son.tistory.com/8 

 

[챗봇] 파이썬 텔레그램 챗봇, 이것만 따라하면 20분 완성 (코로나 알리미 봇)

텔레그램은 챗봇을 만들기 매우매우 쉬운 편입니다. 이 포스팅을 따라하면, 다른 것 볼 필요 없이 챗봇을 만들어 볼 수 있습니다. A. 텔레그램 앱 설치 안드로이드의 구글 플레이스토어나 iOS의

py-son.tistory.com

카카오 챗봇

https://badaturtle93.tistory.com/15

 

[Python] 파이썬코드로 챗봇 만들기 (with. kakao i developer)

예전에 파이썬 자료분석 수업 과제로 만들었던 챗봇!! 먼저 전체코드를 공개 ㅎㅎㅎ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43..

badaturtle93.tistory.com

https://givemethesocks.tistory.com/85

 

[KAKAO + FLASK] 카카오 챗봇 만들기 (3) - API 서버 연동

0. 들어가기 -. 이번 포스팅에선 카카오챗봇과 API 서버 (이 글에서는 앞서 포스팅한 FLASK를 이용한다)의 연동을 하여 조금 더 자유로운 챗봇 출력을 해본다. -. FLASK를 이용한 다양한 (글, 사진, etc.)

givemethesocks.tistory.com

카카오톡 승인 필요

 

디스코드 챗봇

 

 

 

챗봇, 웹 API -> API 서버를 만들기 까지 동일하게 진행

 

챗봇 구현이 더 가능성 있다.

 

 

 

 

웹 API

https://velog.io/@dbj2000/1-Python%EC%9C%BC%EB%A1%9C-%EB%82%98%EB%A7%8C%EC%9D%98-%EB%94%A5%EB%9F%AC%EB%8B%9D-API%EB%A7%8C%EB%93%A4%EA%B8%B0

모델을 API로 만드는 작업을 Model Serving이라고 한다.

직접 웹서버를 올리는 방법 외에 Docker나 Kubernetes를 활용하는 방법이 있다.

 

메모리에 올라가 있는 Data 전체를 dump라고 load를 통해 외부에 저장하고 사용하는 것 -> Pickle

https://teddylee777.github.io/linux/docker%EB%A5%BC-%ED%99%9C%EC%9A%A9%ED%95%98%EC%97%AC-%EB%94%A5%EB%9F%AC%EB%8B%9D-%ED%99%98%EA%B2%BD%EA%B5%AC%EC%84%B1.md

 

Docker를 활용하여 딥러닝/머신러닝 환경을 10분만에 구성하고 jupyter notebook 원격 연결하기

Docker를 활용하여 딥러닝/머신러닝 환경을 10분만에 구성하고 jupyter notebook 원격 연결하는 방법에 대하여 알아보겠습니다.

teddylee777.github.io

 

 

 

 

 

 

https://tutorials.pytorch.kr/intermediate/model_parallel_tutorial.html

 

단일 머신을 사용한 모델 병렬화 모범 사례 — PyTorch Tutorials 1.11.0+cu102 documentation

Note Click here to download the full example code

tutorials.pytorch.kr

 

728x90
작성일
2022. 4. 12. 17:06
작성자
sailorCat
728x90

https://bigwaveai.com/api/

 

 

 

Know Comment API – 빅웨이브AI

 

bigwaveai.com

중복되는 비하 표현이 있을 경우 한가지만 전달해준다.

Multi Class Classification

씨발 -> 욕설

대학도 못나온 자식 -> 비난

대학도 못나온 자식 씨발 -> 욕설

 

대회였기 때문에 이진분류기 선택한 것일까?

이진분류 모델 여러개를 돌리는 것이 하나의 멀티 분류기 모델을 돌리는 것보다 정확도가 높다고 한다.

하지만 시간은 정말 오래 걸리는 듯 하다.

실제 서비스를 위해서는 90% 이상의 정확도와 2초 이내의 반응속도를 가져야만 한다.

그렇다는 것은 데이터의 품질과 양이 정말 좋아야 하며 DL도 좋지만 속도 면에서 ML이 서비스에 적합할 수 있다는 예상을 가능하게 한다.

 

실무에서 DL개발에 너무 몰입하지 말라는 경력자의 조언이 어떤 의미인지 알 것 같다.

 

https://towardsdatascience.com/two-is-better-than-one-ensembling-models-611ee4fa9bd8

 

Two is better than one: Ensembling Models

Ensembling sounds like a very intimidating word at first but it’s actually deceptively simple….lemme explain ensembling with an analogy

towardsdatascience.com

https://stats.stackexchange.com/questions/318520/many-binary-classifiers-vs-single-multiclass-classifier

 

Many binary classifiers vs. single multiclass classifier

What factors should be considered when determining whether to use multiple binary classifiers or a single multiclass classifier? For example, I'm building a model that does hand gesture classific...

stats.stackexchange.com

 

 

 

 

모델

1. 이진분류기 여러개와 멀티 레이블 분류기 하나로 정확도를 높이고, 어떤 분야의 비하표현인지 알아내는 방법

2. 멀티 레이블 분류기로 빠르고 정확도는 살짝 낮은, 어떤 분야의 비하표현인지 알아내는 방법

3. 이진분류기 여러개를 느리고 정확도가 높은, 여러 분야의 비하표현을 중복해서 알아내는 방법

4. 멀티 클래스 분류기로 빠르고 정확도는 살짝 낮은, 어떤 분야의 비하표현인지 알아내는 방법

 

빅웨이브 1

CNN + LSTM

 

멀티클래스 하나의 객체가 2개 이상의 카테고리에 속할 때

Multi Class Classification은 여러개의 클래스 중에 어디에 속하는지 알아본다.

예를 들어 강아지 그림을 넣어서 강아지인지 고양이인지 새인지 어떤 클래스의 카테고리에 속하는 것을 알아본다.

하나의 카테고리에만 속하게 되어 있다.

 

 

 

멀티레이블 여러개의 객체가 카테고리가 각각 있을 때

반면 Multi Label Classification 는 객체가 여러 카테고리 안에 속할 때 사용된다.

예를들어 영화의 장르를 조사한다면, 영화는 하나의 카테고리 안에 속하는 것이 아니라 액션, SF, 판타지, 로맨스, 스릴러 등의 다양한 카테고리에 중복되어 속하게 된다.

 

멀티레이블 ->> 영화가 어떤 장르에 속하는지, 액션 사이파이 등등.. 여러개 가능

 

https://soohee410.github.io/multilabel

 

네이버 쇼핑 데이터를 이용한 Multi-label Classification (feat. GRU)

네이버 쇼핑 데이터를 이용한 Multi-label Classification (feat. GRU) Published Sep 10, 2021 <!-- --> Multi-label Classification에 대하여 어떤 상품 리뷰에 대해 대표적으로 할 수 있는 분석은, 리뷰 내용이 긍정적인지

soohee410.github.io

https://github.com/myeonghak/kobert-multi-label-VOC-classifier/blob/master/voc_classifier/kobert_multilabel_text_classifier.ipynb

 

GitHub - myeonghak/kobert-multi-label-VOC-classifier: pretrained kobert를 사용한 multi-label VOC(Voice of Customers) 태그

pretrained kobert를 사용한 multi-label VOC(Voice of Customers) 태그 분류 모델 - GitHub - myeonghak/kobert-multi-label-VOC-classifier: pretrained kobert를 사용한 multi-label VOC(Voice of Customers) 태그 분류 모델

github.com

https://www.kaggle.com/code/ssilb4/classifying-multi-label-comments-with-korean/notebook

 

Classifying multi-label comments with korean

Explore and run machine learning code with Kaggle Notebooks | Using data from Toxic Comment Classification Challenge

www.kaggle.com

 

https://github.com/kiyoungkim1/LMkor

 

GitHub - kiyoungkim1/LMkor: Pretrained Language Models for Korean

Pretrained Language Models for Korean. Contribute to kiyoungkim1/LMkor development by creating an account on GitHub.

github.com

 

 

 

 

 

 

 

음성 처리

http://www.aitimes.kr/news/articleView.html?idxno=22445 

 

텍스트 없는 자연어처리?... 음성 인공지능 NLP 시대 열어, 페이스북 AI ‘생성적 화자 언어 모델’

BERT, RoBERTA 및 GPT-3와 같은 텍스트 기반 인공지능(AI) 언어 모델은 최근 몇 년간 큰 발전을 이루었다.그들은 서면 단어를 입력으로 제공하면 사실상 어떤 주제에도 매우 현실적인 텍스트를 생성할

www.aitimes.kr

 

728x90
작성일
2022. 4. 1. 15:48
작성자
sailorCat
728x90

아직 프로젝트가 회의단계에 있기 때문에

개인적으로 데이터셋을 살펴보는 코드를 작성했다.

 

욕설 관련 데이터셋 7개를 모았고 그 중에서 1개는 쓰지 않기로 했다.

스마일게이트와 카카오톡의 데이터 2개는 레이블이 정확히 나눠어져 있고 괜찮은 데이터였다.

나머지 3개 데이터는 다시 라벨링 해줘야 모델 학습에 쓸수 있을 것으로 보인다.

 

 

 

 

 

먼저 같은 label을 가진 데이터들의 train, test셋을 합쳐서 보기로 했다.

나중에 다 섞어서 다시 train, test셋을 나눠야 하기 때문이다.

 

 

 

각각의 데이터에서 결측치 NaN이 있는 부분을 살펴보고 처리했다.

데이터에 결측치가 있는 부분을 부니 삭제해도 되는 부분이어서 삭제했다.

hatespeech의 약 35만개의 댓글을 제외하고 나머지 데이터를 전부 모으면 약 60000개 정도가 모여있다.

여기서 unsmile 데이터와 discrimination 데이터 두가지로 먼저 모델 학습을 할 예정이다.

22000개의 데이터로 할 수 있을지 고민이 된다.

 

 

 

정제한 데이터셋들을 저장했다.

 

 

 

 

 

마지막으로 악성과 비악성 데이터를 이진 분류해서 수를 세어봤다.

악성은 1.0 비악성은 0.0으로 전체를 레이블링 해줬다.

그리고 data라는 하나의 데이터 셋으로 묶어줬다.

 

 

 

 

전체 데이터의 길이는 60852이다.

Null값이 없다.

비악성 댓글은 약 20000개 조금 안되게 있고 악성 댓글은 약 40000개 이상인 것을 볼 수 있다.

 

혼자서 먼저 데이터를 정리해보니 앞으로 나아갈 방향이 보이는 것 같아서 팀원들에게도 소개했다.

728x90
작성일
2022. 4. 1. 15:25
작성자
sailorCat
728x90

https://storage.googleapis.com/download.tensorflow.org/data/shakespeare.txt

https://github.com/google/sentencepiece

 

GitHub - google/sentencepiece: Unsupervised text tokenizer for Neural Network-based text generation.

Unsupervised text tokenizer for Neural Network-based text generation. - GitHub - google/sentencepiece: Unsupervised text tokenizer for Neural Network-based text generation.

github.com

 

Sentence Piece를 사용하여 Word2Vec를 Subword 단위로 만들어보았다.

위에 주소에서 셰익스피어의 소설중 일부를 다운받았다.

 

 

 

 

센텐스피스 Subword Tokenizing

셰익스피어 햄릿 텍스트를 제공하는 사이트에서 다운로드 받는다.

문장을 쪼개지 않고 문장부호를 제거해서 센텐스 피스로 만들것이다.

이런식으로 라인과 사람이 매칭되어 있다.

 

 

 

 

 

센텐스피스는 단어단위가 아니라 의미를 가진 토큰으로 나눈다.

단어보다 더 작은 범위이고, 이 텍스트에서 8000개의 센텐스피스가 나왔다.

 

센텐스피스로 전체 햄릿의 문장을 나눠본다.

그리고 이 단어들의 인덱스가 무엇인지 나열한다.

문장에 나와있는 센텐스피스 토큰들을 나열했다.

 

이 토큰들의 인덱스를 나열했다.

 

 

 

 

 

 

Skipgram

 

 

 

 

 

Negative Sampling

 

 

 

 

 

 

 

이 부분은 새로운 데이터가 들어오면 한번에 skipgram부터 negative sampling까지 한번에 처리해서 데이터를 만드는 일종의 파이프라인인데 위에서 햄릿 데이터를 만들었기 때문에 작성하고 사용하지 않았다.

 

 

 

 

데이터셋 설정

위에서 만들었던 Targets, Contexts, Labels를 묶어서 하나의 데이터셋으로 만든다.

순서를 섞고 배치 사이즈를 정한다.

 

 

 

 

 

Word2Vec

이제 만들어진 데이터를 워드투벡터로 단어임베딩 한다.

 

 

모델 훈련은 optimizer로 Adam을 사용했고, 손실함수로는 크로스 엔트로피를 사용했다.

여기서 sp.GetPieceSize()는 센텐스피스의 함수로, 토큰의 전체 길이(8000)을 반환했다.

정확도는 0.8930으로 매 Epoch마다 결과가 향상되는 것을 볼 수 있다.

로그 기록을 텐서보드로 시각화 했다.

 

 

그리고 이 Subword의 토큰 인덱스 순서대로 Word2Vec를 저장해서 vectors.tsv 파일로 만들었다.

 

 

 

 

이 파일을 열면 벡터의 모습이 나온다.

https://www.tensorflow.org/tutorials/text/word2vec

 

워드2벡  |  TensorFlow Core

이 페이지는 Cloud Translation API를 통해 번역되었습니다. Switch to English 워드2벡 word2vec는 단일 알고리즘이 아니라 대규모 데이터 세트에서 단어 임베딩을 학습하는 데 사용할 수 있는 모델 아키텍처

www.tensorflow.org

이 문서를 보고 단어 토크나이징이 아닌 Subword 단위로 토크나이징 해서 Word2Vec를 해봤다.

728x90
작성일
2022. 3. 30. 03:12
작성자
sailorCat
728x90

2runo/Curse-detection-data: 문장의 욕설 여부를 분류한 한글 데이터셋입니다. (github.com)

 

GitHub - 2runo/Curse-detection-data: 문장의 욕설 여부를 분류한 한글 데이터셋입니다.

문장의 욕설 여부를 분류한 한글 데이터셋입니다. Contribute to 2runo/Curse-detection-data development by creating an account on GitHub.

github.com

daanVeer/HateSpeech_dataset: Korean Hate Speech dataset (github.com)

 

GitHub - daanVeer/HateSpeech_dataset: Korean Hate Speech dataset

Korean Hate Speech dataset. Contribute to daanVeer/HateSpeech_dataset development by creating an account on GitHub.

github.com

 

728x90
작성일
2022. 3. 29. 21:49
작성자
sailorCat
728x90

https://github.com/smilegate-ai/korean_unsmile_dataset?fbclid=IwAR0xTlHYCWK0LtrghSL1bPm2su69-LbjisutmcvLlERlHzroMlVpHq3h71g 

 

GitHub - smilegate-ai/korean_unsmile_dataset

Contribute to smilegate-ai/korean_unsmile_dataset development by creating an account on GitHub.

github.com

https://github.com/smilegate-ai/HuLiC?fbclid=IwAR0jNYaQBTUfj8X8hbP_ihNXHFGnWLSWRfNOzP0X2r4pTqAIBfRLUPl33K8 

 

GitHub - smilegate-ai/HuLiC

Contribute to smilegate-ai/HuLiC development by creating an account on GitHub.

github.com

밑에 있는 데이터셋은 챗봇 관련 데이터이다.

 

Train과 Validaiton 데이터셋으로 구분되어 있고 총 약 15000개의 훈련데이터, 3737개의 val 데이터가 있었고 NaN도 없는 완전한 데이터이다.

 

클린~

 

약 18000개의 데이터를 더 얻었다.

 

728x90
카테고리
작성일
2022. 3. 29. 18:21
작성자
sailorCat
728x90

GAN 생성모델에서의 Loss Function

 

Fixed Loss

고정된 손실함수의 문제점은 한가지 목표만을 향해서 간다는 점이다.

시간이 지나거나 새로운 기준이 생긴다면 목표를 변경해야 좋은 결과를 낼 수 있다.

하지만 한가지 목표를 고정한 Fixed Loss는 경쟁과는 거리가 멀다.

 

Fixed Loss를 사용하는 이미지 컬러라이징 모델을 학습시키면 L2 Loss에서 색이 바래는 현상이 나타난다.

빨간 값과 파란 값의 중간 평균을 내서 덧칠했기 때문에 색이 연해진 것이다.

 

해상도를 높이는 수퍼 레졸루션 모델에서도 평균을 내다가 뿌연 사진을 명확하게 만들지 못했다.

 

고정된 목적을 달성하는 것은 단점이 있다.

 

 

Universal Loss

고정된 손실값이 아닌 자유롭게 변화하는 손실값을 사용한다.

고정된 Loss가 아닌 Universal Loss를 사용해서 사진의 퀄리티가 더 높아졌다.

Discriminator 자체를 손실값으로 사용한다.

매번 Discriminator은 업데이트 하며 진짜와 가짜를 구분하는 능력이 높아진다.

 

 

손실함수가 계속 학습하며 모델의 목표값을 변화시킨다.

 

 

 

 

728x90

'인공지능 AI > GAN' 카테고리의 다른 글

GAN Generative 생성모델  (0) 2022.03.29
GAN 생성모델  (0) 2022.02.14
카테고리
작성일
2022. 3. 29. 17:52
작성자
sailorCat
728x90

생성 모델 GAN Generative Adversarial Network

적대적으로 성능 경쟁을 하면서 생성한다.

Generator는 가짜를 만들어내고, Discriminator는 이것이 실제인지 가짜인지 판독한다.

이런 과정을 거치면서 더 정교한 가짜를 만들어내고, 더 정확한 감정을 해낸다.

위조의 능력이 판독의 역할을 넘어서면 가짜인지 진짜인지 구분할 수 없는 상태가 된다.

 

 

 

 

 

 

 

 

 

 

이전까지의 영상 생성은 확률모델에 기인해왔다.

 

PDF probability density function

사건의 발생 확률을 나타내었다.

 

이 확률 분포를 가지고 샘플을 나타내보면 0 주변에 발생할 확률이 높고 양쪽으로 퍼질 수록 나타날 확률이 줄어든다.

만약 그림과 같은 다차원의 영상에서 PDF를 나타낸다면 (4, 1) 벡터보다 (3, 2)에서 사건이 발생할 확률이 높다.

영상이 2차원 벡터일 때 얼굴일 확률을 PDF로 나타낸다고 하면

(3, 2)에서 얼굴일 확률은 0.9

(4, 1)에서 얼굴일 확률은 0.01이다.

 

실제 영상은 n차원 벡터로부터 n개의 축을 가진 PDF로 생성된 샘플이다.

PDF 값을 알고 있다면 영상을 생성할 수 있게 된다.

하지만 PDF 값을 구하는 것이 불가능한 상황이라면 영상을 생성해낼 수 없다.

 

 

 

 

GAN에서의 분포 매핑함수

가우시안 분포로부터 샘플을 뽑아서 GAN 모델을 적용하면 얼굴이 생성된다.

 

 

 

Discriminator

D의 값을 보고 Generator는 피드백을 받아 계속 업데이트 된다.

인공신경망으로 구성된 Discriminator의 초기 모습이다.

컨볼루션을 통해 점점 차원을 축소시켜서 마지막에 1, 0 둘중에 하나를 출력하게 된다.

 

 

Generator의 초기 모습이다.

Z에서 100 사이즈를 갖는 노이즈값을 선택해서 점점 차원을 늘려간다.

결국 G(Z)인 영상이 출력된다.

 

 

비용함수 Cost Function은 다음과 같다.

진짜 값이 들어가면 큰값, 가짜 값이 들어가면 작은 값이 나오게 만든 V(D)라는 함수를 최대화 한다.

bedroom의 이미지를 생성해낸 모습이다.

사실 존재하지 않지만 가짜로 만들어냈다.

 

 

 Walking in the latent space

여기서 latent space 는 Z를 의미한다.

숨어있는 공간인 latent space에서 거리가 멀어질수록 5에서 멀어져서 9로 자연스럽게 변화가 되는 모습을 보여주고 있다.

 

생성모델의 Z에서 5라는 사진만 보고 만들어낼 수 있는 것이 아니라, 하나의 샘플만 보고 만드는 것이 아니라 전체적인 그림을 보고 만들어낸다는 것을 알 수 있다.

 

 

Latent Space에서의 선형결합을 보여준다.

노이즈 공간에서 화살표 방향의 다양한 벡터가 있을 때 선형적으로 연산해서 새로운 피쳐를 가진 그림을 만들어낼 수 있다.

Smailing Woman이 z1벡터

Neutral Woman이 z2벡터 

Neutral Man이 z4벡터일때

 

G(Z1) - G(Z2) + G(Z4) = G(Z3 +Z4) = Smailing Man

 

Z공간에서는 선형 연산으로 의미를 갖는 이미지를 추출할 수 있다.

 

728x90

'인공지능 AI > GAN' 카테고리의 다른 글

GAN 생성모델 손실함수 Fixed Loss Universal Loss  (0) 2022.03.29
GAN 생성모델  (0) 2022.02.14