Machine learning

    [NLP]. 한국어(Korean)에서 반말(informal)을 존댓말(formal)로 바꿔주는 변환기(convertor) - korean Formal Convertor Using Deep Learning

    존댓말과 반말은 한국어에서만 존재합니다, 본 모델은 반말(informal)을 존댓말(formal)로 바꿔주는 변환기(convertor) 입니다. *확보한 존댓말 데이터셋에는 "해요체"와 "합쇼체" 두 종류가 존재했지만 본 모델은 "해요체"로 통일하여 변환하기로 결정했습니다. 합쇼체 *해요체 안녕하십니까. 안녕하세요. 좋은 아침입니다. 좋은 아침이에요. 바쁘시지 않았으면 좋겠습니다. 바쁘시지 않았으면 좋겠어요. 배경 이전에 존댓말과 반말을 구분하는 분류기(https://github.com/jongmin-oh/korean-formal-classifier) 를 학습했습니다. 분류기로 말투를 나눠 사용하려했지만, 상대적으로 존댓말의 비중이 적었고 반말을 존댓말로 바꾸어 존댓말 데이터의 비중을 늘리기위해 만들게 ..

    [NLP]. 한국어 메신저(구어체)대화 맞춤법(typos) 오타 교정기(Corrector) 모델 : Korean Typos(Spelling) Corrector Using Deep Learning

    한국어 맞춤법 교정기 ETRI-et5 모델을 기반으로 fine-tuning한 한국어 구어체 전용 맞춤법 교정기 입니다. 바로 사용하실 분들은 밑에 예제 코드 참고해서 모델('j5ng/et5-typos-corrector') 다운받아 사용하실 수 있습니다. Base on PLM model(ET5) ETRI(https://aiopen.etri.re.kr/et5Model) Base on Dataset 모두의 말뭉치(https://corpus.korean.go.kr/request/reausetMain.do?lang=ko) 맞춤법 교정 데이터 예시 original corrected 이런게 눔 ㄱ ㅣ찮아서 ㅠㅠ 이런 게 넘 귀찮아서 ㅠㅠ 어쩌다 가게되써 어쩌다 가게 됐어? 이따 얘기하쟈 이따 얘기하자 ㅋㅋㅋㅋㅋㅋ언넝..

    [NLP]. 크로스 인코더(Cross Encoder) Onnx Runtime 양자화 하기

    문제 발생 크로스 인코더(Cross-Encoder)는 바이 인코더(Bi-Encoder)와 다르게 질문(S1)과 답변(S2)을 함께 임베딩하고 그 유사도를 학습하는 방식이다. 일반적으로 속도 때문에 Bi-Encoder를 사용해서 미리 임베딩한 뒤 비교하는 방식을 사용했지만, 크로스 인코더를 사용하면 유사도 스코어가 많이 증가한다, (실제로 73 -> 83 까지 올라갔다.) 하지만 크로스 인코더의 단점은 바로 속도... 최대한 가벼운 모델을 사용해 속도를 최소화 했고 이미 많이 사용해서 쓰고있는 Onnx 모델로 변환하고 양자화를 사용해 모델 속도를 최소화 하려고했다. 하지만 Sentence-Transfomer 모듈에서 학습한 모델은 임베딩만 해주더라. ONNX Runtime을 사용하였더니 output 값이 ..

    [NLP]. Ray와 Sklearn Pipeline을 사용하여 Pandas 데이터 전처리하기

    import pandas as pd import ray import re from sklearn.pipeline import Pipeline from sklearn.preprocessing import FunctionTransformer # 예시 데이터프레임 df = pd.DataFrame({'question': ['Q1', 'Q2', 'Q3'], 'answer': ['Answer 1', 'Answer 2', 'Answer 3']}) # HTML 태그 제거 함수 @ray.remote def remove_html_tags(text): clean_text = re.sub('', '', text) # 정규식을 이용하여 HTML 태그 제거 return clean_text # 데이터프레임의 'answer' 칼럼에..

    [딥러닝]. 자연어 처리 모델 경량화 순서

    [모델 경량화 기법 적용 순서] 딥러닝 모델의 크기를 줄이는 경량화 기법은 다음과 같이 적용 순서를 결정할 수 있습니다. Pruning: 불필요한 가중치를 제거하여 모델의 크기를 줄입니다. 모델의 크기가 대폭 축소되면서도 모델의 정확도는 크게 감소하지 않습니다. Quantization: 모델의 가중치와 활성화 함수 값을 낮은 비트 수로 표현하여 모델의 크기를 줄입니다. 모델의 크기가 줄어들어 메모리 사용량이 줄어들면서도 모델의 정확도는 크게 감소하지 않습니다. Knowledge distillation: 대규모 모델의 지식을 작은 모델에 전달하여 작은 모델의 성능을 향상시킵니다. 작은 모델이 큰 모델의 성능을 따라잡게 되어 큰 모델의 정확도에 근접한 성능을 얻을 수 있습니다. Low-rank approxi..

    [NLP]. HuggingFace Tokenizer에 token 추가(add)하기

    from transformers import AutoTokenizer tokenzer = AutoTokenizer.from_pretrained({model_path}) # new tokens new_tokens = "[NEW]" tokenizer.add_special_tokens({"additional_special_tokens" : [new_tokens]}) model.resize_token_embeddings(len(tokenizer)) resize_token_embeddings(len(tokenizer))를 안해주게 되면 임베딩 에러 발생 + 추가 Sbert의 경우 # ADD tokens tokens = ["[NEW]"] embedding_model = model._first_module() emb..

    [NLP]. MultipleNegativesRankingLoss 적용기(Sentence Transfomer)

    BackGround 인공지능에게 질문에 대한 답변을 학습시킬 때, 한 가지 문제가 있는데 바로 적합한 질문/답변(Positive)데이터만 존재한다는 것이다. 지도학습을 할때는 정답과 오답을 같이 줘야 학습하는데 오답(Negative)이 없어 직접 만들어야 함. 그래서 오답 샘플을 만들어내는 많은 아이디어가 등장했다. 1. Random Sampling - 가장 일반적인 방법으로 여러 정답 데이터들 중에서 답변만 랜덤으로 섞어 오답이라고 하는 것이다. 배고프다. 얼른 밥먹어 ㅠㅠ Postive 피곤하다. 어제 밤샜어?? Postive 배고프다. 어제 밤샜어?? Negative 피곤하다. 얼른 밥먹어 ㅠㅠ Negative 실제로 이렇게만 학습해도 어느 정도 잘 된다. 2. Hard Negative Sampli..

    [NLP]. 인공지능에서 골드 라벨(Gold Label)은 뭘까? (feat. ChatGPT)

    가끔 논문이나 컨퍼런스에가면 골드 라벨, 실버 라벨 등의 용어를 자주 듣게된다. 지도학습에 필요한 라벨은 알겠는데 골드 라벨, 실버 라벨은 뭘까? 등급이 있는 것일까? 골드라벨(Gold Lable)이란? ChatGPT에게 한 번 물어봤다. 골드 라벨(Gold Label)은 보통 사람들이 만든 레이블이 아니라 전문가들이 만든 고품질의 레이블을 말합니다. 따라서, 골드 라벨이 부착된 데이터를 사용하면 보다 높은 정확도를 가진 모델을 만들 수 있습니다. 일반적으로, 골드 라벨을 가진 데이터를 얻는 방법은 두 가지입니다. 전문가에게 작업을 의뢰하여 골드 라벨을 만들어내는 방법: 전문가들이 작업한 데이터를 골드 라벨 데이터로 활용할 수 있습니다. 이전 연구나 대회에서 골드 라벨을 얻는 방법: 이전 연구나 대회에서..

    [NLP]. 한국어 존댓말/반말 분류모델 (formal classifier)

    2021.10.14 - [Data Science/NLP] - [전처리]. 한국어 존댓말과 반말을 구별하는 방법(feat. komoran) [전처리]. 한국어 존댓말과 반말을 구별하는 방법(feat. komoran) 한국어는 영어와 다르게 존댓말(높힘말)과 반말(낮춤말)이 존재한다. 그래서 존댓말을 반말로 바꿔주고 반말을 존댓말로 바꿔주는 모델이 있으면 좋겠지만 (실제로 연구가 많이 진행되었지만 acdongpgm.tistory.com 1. 개발 배경 오래전에 존댓말 , 반말을 한국어 형태소 분석기로 분류하는 간단한 방법을 소개했다. 하지만 이 방법을 실제로 적용하려 했더니, 많은 부분에서 오류가 발생하였다. 예를 들면) '저번에 교수님께서 자료 가져오라했는데 기억나?' 라는 문구를 "께서"라는 존칭때문에 ..

    [NLP] KakaoGPT 사용해서 존댓말/반말 변환하기

    참고 : https://developers.kakao.com/docs/latest/ko/kogpt/rest-api#sample # coding=utf8 # REST API 호출에 필요한 라이브러리 import requests import json # [내 애플리케이션] > [앱 키] 에서 확인한 REST API 키 값 입력 REST_API_KEY = '{KEY}' # KoGPT API 호출을 위한 메서드 선언 # 각 파라미터 기본값으로 설정 def kogpt_api(prompt, max_tokens = 1, temperature = 1.0, top_p = 1.0, n = 1): r = requests.post( 'https://api.kakaobrain.com/v1/inference/kogpt/gener..