Machine learning

    [annotation]. 텍스트 데이터 라벨링 꿀팁(1)

    어노테이션은 머신러닝개발자에게는 숙명과도 같은 일이다. 가장 단순하지만 가장 중요한 작업 하지만 너무나도 지루한 건 사실이지만 정신줄을 놓으면 안된다. 그래서 텍스트 데이터를 라벨링할때 항상 효과적인 방법을 머리속으로 생각했다. (지루하니까 최대한 정확하고 빨리하는 방법 ) 나는 공격적인 단어를 필터링하는 검수작업을 맡게 되었는데. 먼저 키위드를 수집했다. 키워드 수집 키워드는 기존 딥러닝 모델의 예측 결과로 나온 것들 중 경계선에 있는 데이터들을 통해 수집했다. 이걸 Active Learning 이라고 한다. 위에서 경계선이 있는 데이터들은 즉 , 모델이 해깔려하는 데이터를 사용했다는 것이다. 경계선 라벨링 -> 데이터 추가 -> 학습 -> 예측 -> 경계선 라벨링 여기서 경계선 라벨링은 하지않고 경계..

    [NLP]. 한국어 맞춤법 검사기 사용하기 (feat. hanspell )

    오픈 소스 링크 : https://github.com/ssut/py-hanspell from hanspell import spell_checker 위 오픈소스는 네이버 맞춤법 검사기 API의 요청을 보내서 결과를 반환하는 오픈소스이다. 네이버 웹페이지에서 사용한 맞춤법검사기와 결과가 동일하다고 볼 수 잇다. 네이버 맞춤법 검사기의 오류로는 4가지가 있다. 오류 없음 .PASSED 맞춤법 검사 결과 문제가 없는 단어 또는 구절 맞춤법 오류 .WRONG_SPELLING 맞춤법에 문제가 있는 단어 또는 구절 띄어쓰기 오류 .WRONG_SPACING 띄어쓰기에 문제가 있는 단어 또는 구절 표준어 의심 오류 .AMBIGUOUS 표준어가 의심되는 단어 또는 구절 통계적 교정 오류 .STATISTICAL_CORREC..

    [전처리]. 핸드폰 번호 , 계좌번호 , 주소 필터링(Python 정규표현식)

    def number_fillter(self,input_text): # 연속된 숫자 필터 nf = re.compile("(\d{8,20})") # 휴대폰번호 필터 pn = re.compile("(\d{2,6}[ -]-?\d{2,6}[ -]-?\d{2,6})") # 계좌번호 필터 ac = re.compile("(\d{2,6}[ -]-?\d{2,6}[ -]-?\d{2,6}[ -]-?\d{2,6})") #검색 if pn.search(input_text): return 1 elif ac.search(input_text): return 1 elif nf.search(input_text): return 1 else: return 0 주소 personal_patterns = { "ad1": r"(\S+[시,도])\s?..

    [전처리]. 한국어 존댓말과 반말을 구별하는 방법(feat. komoran)

    한국어는 영어와 다르게 존댓말(높힘말)과 반말(낮춤말)이 존재한다. 그래서 존댓말을 반말로 바꿔주고 반말을 존댓말로 바꿔주는 모델이 있으면 좋겠지만 (실제로 연구가 많이 진행되었지만 정확도가 높은 편은 아님) 존댓말과 반말을 구분하는 방법을 공유하고자 한다. 방법은 간단하다. 형태소 분석기를 통해 나온 토큰들 중 존댓말에 사용되는 토큰들의 갯 수를 구해서 판단하면 된다. 형태소 분석기는 한나눔 , 코모란 , okt 등이 있지만 코모란 형태소 분석기를 사용했다. 이유는 코모란은 존댓말 토큰을 normalize 하게 잡아주기 떄문이다. okt 의 경우는 습니다, 됩니다 , 합니다 로 토크나이즈 하는 반면 코모란은 ㅂ니다. 로 통일해주기 때문에 적은 토큰들을 가지고 많은 존댓말을 판단할 수 있게된다. *존댓말..

    [PyTorch]. Dataset 과 Dataloader 사용하여 전처리하기

    딥러닝 프로젝트를 진행할 때 데이터 샘플을 처리하는 코드는 지저분하고 유지보수가 어려울 수 있다. 더 나은 가독성과 모듈성을 위해 데이터셋 코드를 모델 학습 코드로부터 분리하는 것이 이상적입니다. 파이토치는 Dataset 과 Dataloader를 사용하여 학습 모델에 맞게 train & test set 을 변경해주는 도구입니다. PyTorch 공식 홈페이지 발취 공감되는 부분이다. 전에는 동작만 되면 상관없다는 마인드로 코드를 짰다. 하지만 정리가 되지 않아서 미래의 내가 알아볼 수 없는 것이다.(어케 짠거야 도대체...) 지금은 코드를 구조화 하고 모듈화하여 가독성을 생각하며 코딩한다.(겪어보지 않으면 모른다.) 파이토치는 이런 부분(data Input preprocessing)을 간결하게 구현할 수 ..

    [DeepLearning]. GPU 메모리와 배치사이즈(Batch_size)의 관계

    사건의 발단 : PyTorch 모델 학습 중 에러 발생 RuntimeError: CUDA out of memory KcBERT-Large모델을 학습시키는 도중 이러한 에러가 발생했고 KcELECTRA-base 모델 학습시에는 발생하지 않았던 에러가 발생해서 당황 스러웠다. 나는 바로 구글링을 했고 해결점을 찾았다. https://twinparadox.tistory.com/606 TensorFlow, Keras GPU 메모리 문제(Out of Memory) 발생 시 시도해볼 방법 빅데이터 처리나 딥러닝을 하다보면 자연스럽게 마주하는 문제가 바로 메모리 문제다. 빅데이터 처리 같은 경우 그냥 파이썬에서 Numpy나 Dataframe을 사용하는 과정에서 발생하는 일이 흔하고, 그 twinparadox.tist..

    [PyTorch] . Tensorflow(텐서플로) PyTorch(파이토치) 차이점 비교

    딥러닝 튜토리얼에 등장하는 FashionMNIST 데이터 셋을 통해서 Tensorflow.Keras 와 PyTorch 모델링의 차이점을 정리해 보았습니다. 모델 정의 * 이해를 돕기 위해 subclass 형식으로 모델을 정의하였습니다. Tensorflow.Keras tf.debugging.set_log_device_placement(True) class MyModel(tf.keras.Model): def __init__(self): super(MyModel,self).__init__() self.flatten = tf.keras.layers.Flatten(input_shape=(28,28)) self.fc1 = tf.keras.layers.Dense(512,activation='relu') self.dr..

    [NLP] . 자연어처리 프로젝트 파일 구조 ( 인공지능 디자인 패턴 )

    파란선은 파일참조 빨간선은 파일생성 인공지능 프로젝트를 여럿 진행하면서 파일관리의 중요서을 깨달았다. 파일관리 방법은 누가 가르쳐주지도 않고 Django 나 flask 처럼 약속된 파일 구조가 인공지능엔 딱히 없다. 그래서 github를 살펴보다가 인공지능 프로젝트(BERT-chatbot)를 깔금하게 정리하신 분을 참고하여 구조를 정리해보았다. 보는 입장에서 이 구조로 개발하면 불편한 점도 있다. 한 파일에 몰아서 하는게 아니라 파일들이 얽히고 섥히는 관계 ( 복잡함 ) 하지만 이런 구조로 프로젝트 관리를 하는 것이 유지보수하기 좋고 익숙해져야한다. (디자인 패턴의 필요성) 프로젝트를 하면 이 게시글을 두고두고 보면서 구현해야겠다. https://github.com/nawnoes/WellnessConve..

    [NLP] BERT - (1).구조와 개념

    BERT Bidirectional Encoder Representations from Transformer - 트랜스 포머의 인코더를 양방향(마스킹)으로 사용한 모델 Task1 . Masked language model (MLM): 임의의 순서의 해당하는 위치를 마스킹[Mask]을 해놓고 마스킹된 부분을 예측하도록 하는 모델 선행하는 단어와 후행하는 단어를 모두 사용하여 예측하겠다는 것(양방향이라고 할 수 있다.) Task2 . Next Sentence Prediction (NSP): 특정의 두 쌍의 문장이 들어왔을 때 두 번째 문장이 첫 번째 문장과 의미가 이어지는 가 (두 번째 문장이 첫 번째 문장 다음에 등장했던 문장인가)를 판단하는 Task 판단은 input 으로 넣었던 copus를 기준으로 함...

    [챗봇] 아주 간단한 검색기반 챗봇 만들기(feat.pororo)

    전에 공부했던 시퀀스 투 시퀀스(seq2seq)로 구현했던 챗봇은 디코더를 통해 단어를 찾아 이어 붙이는 모델이었다. 하지만 문맥이 매끄럽지 않은 부분이 있었고 아웃풋의 시퀀스 수를 결정하는 것이 부자연스러웠다. 토큰이 나와야 하는 조건이 정확하지 않아 보였고 문제가 생각보다 쉽지 않아 보였음. 그래서 이번엔 간단하게 검색 기반 모델을 사용해보고자 한다. 데이터 셋은 전에 사용했던 일상생활(직장, 연애 , 등등 )에서 사용되는 간단한 질문과 답변으로 구성되어있는 데이터를 사용. 진짜 봇처럼 느껴지는 단호박 답변들이 11823건이 있다 ㅋㅋㅋ.. 내 계획은 이렇다. 1. 일단 질문(Q)들을 전부 임베딩 시킨다. 2. 임베딩 값을 미리 저장한다. 3. 새로 입력한 텍스트를 임베딩 시켜서 가장 비슷한 질문을 ..