Machine learning/NLP

    [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 의 경우는 습니다, 됩니다 , 합니다 로 토크나이즈 하는 반면 코모란은 ㅂ니다. 로 통일해주기 때문에 적은 토큰들을 가지고 많은 존댓말을 판단할 수 있게된다. *존댓말..

    [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를 기준으로 함...

    [NLP] . OOV 를 해결하는 방법 - 1. BPE(Byte Pair Encoding)

    컴퓨터가 자연어를 이해하는 기술은 크게 발전했다. 그 이유는 자연어의 근본적인 문제였던 OOV문제를 해결했다는 점에서 큰 역할을 했다고 본다. 사실 해결이라고 보긴 어렵고 완화가 더 맞는 표현인 거 같다. 사람들도 모르는 단어 있으면 이해하기 어려운건 마찬가지 OOV(Out-Of-Vocabulary) 문제란 무엇일까? 말 그대로 단어 사전에 없다는 뜻이다. 자연어의 전처리 과정에서는 학습데이터의 모든 단어를 토큰화 하여 Vocabulary를 만들고 그 Vocabulary 를 기준으로 정수 인코딩(단어를 숫자로 표현함)을 하게된다. 실제 사용할 때(검증 혹은 상용화)도 이 과정을 반복하는데 새로운 단어 토큰이 들어왔을 때 vocabulary에 없을 경우 unknown token을 반환한다. * 실제 경험담..

    [NLP] Transformer : Masked Multi-Head Attention - part3

    Transformer Decoder : 트렌스포머 모델의 디코더(Decoder)는 인코더(Encoder)와 다르게 Masked Attention 이 들어간다. Masked Multi-head Attention Mask(마스크) 란? Masked 혹은 Masking 이라는 용어 차제는 포토샵에서 많이 접할 수 있지만 무언가로 가린다는 의미이다. 디코더(Decoder)에서의 Self-Attention Layer 는 반드시 자기 자신 보다 앞쪽에 포지션에 해당하는 토큰들의 어텐션 스코어만 볼수있다. 아웃풋들이 주어졌을 때 뒤에 나오는 단어들은 볼 수 없다. ( 기본적인 seq2seq 모델의 학습 개념 transformer 도 동일함.) Masking을 수학적으로 구현할 때는 포지션에 해당하는 Score 값을 ..

    [NLP] Transformer : Self-Attention ( Multi-head-Attention ) - part2

    https://acdongpgm.tistory.com/219?category=910966 [NLP]. Transformer : Structure 앞서 시퀀스 투 시퀀스 모델에 대해서 설명하면서 어텐션에 대한 개념을 설명했다. Transformer의 논문 제목은 "Attention is All You Need"이다. 어텐션만 있으면 다 가능하다. 뭐 이런 뜻이다. 즉, 트랜스 acdongpgm.tistory.com 앞서 설명했듯이 임베딩 이후에 포지셔널 인코딩을 통해서 포지션 정보를 가진 임베딩 벡터가 인코딩 블록으로 들어오게 된다. 논문의 핵심인 Multi-Head Attention의 동작하는 방식을 알아보고 그 이후에 정규화 방법(Residual connection & Normalization)도 같이..

    [NLP]. Transformer : Structure - part1

    앞서 시퀀스 투 시퀀스 모델에 대해서 설명하면서 어텐션에 대한 개념을 설명했다. Transformer의 논문 제목은 "Attention is All You Need"이다. 어텐션만 있으면 다 가능하다. 뭐 이런 뜻이다. 즉, 트랜스포머는 어텐션 기법을 극대화 한 모델이라고 볼 수 있다. 트랜스포머는 RNN의 기반의 모델처럼 한 번에 하나씩 처리하는 문제를 지적했다. * 순차적으로 처리하면 속도가 너무가 느리다!!! 어텐션을 사용하면서 스피드를 최대한으로 끌어올려보자!! 그래서 트랜스포머는 순차적으로 하지 않고 한 번에 계산을 해버린다. 그전에 모델의 구조부터 살펴보자. 모델의 구조는 6개의 인코더와 6개의 디코더 구조로 되어있다. 여기서 6개는 최적화 수가 아니라 논문에서 사용한 갯 수 이기 때문에 6개..