Machine learning/NLP

    [NLP]. 텍스트 데이터 정제(이모지 , 특수문자, url , 한자 제거)

    import re import emoji from soynlp.normalizer import repeat_normalize pattern = re.compile(f'[^ .,?!/@$%~%·∼()\x00-\x7Fㄱ-ㅣ가-힣]+') url_pattern = re.compile( r'https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*)') def clean(x): x = pattern.sub(' ', x) x = emoji.replace_emoji(x, replace='') #emoji 삭제 x = url_pattern.sub('', x) x = x.strip() x = repe..

    [NLP]. SentenceTransformer 모델 TensorFlow로 불러오기

    참고 : https://www.philschmid.de/tensorflow-sentence-transformers HuggingFace 에는 Tensorflow 모델 형식인 h5 파일이 없는상태 h5 모델이 없는 상태에서도 Tensorflow 모델로 불러올 수 있다. 클래스 구현 import tensorflow as tf from typing import Union , List from transformers import TFAutoModel from transformers import AutoTokenizer class TFSentenceTransformer(tf.keras.layers.Layer): def __init__(self, model_name_or_path): super(TFSentenceT..

    [NLP]. Sentence-Transformer 모델 onnx 형식으로 변환하기

    HuggingFace에 등록된 모델을 불러와 onnx 파일 형식으로 저장하기 from pathlib import Path from transformers.convert_graph_to_onnx import convert convert(framework="pt", model="j5ng/sentence-klue-roberta-base", output=Path("onnx_models/trfs-model.onnx"), opset=11)​ Logs ransformers.convert_graph_to_onnx` package is deprecated and will be removed in version 5 of Transformers warnings.warn( ONNX opset version set to: 11..

    [NLP]. 오타 생성기 구현하기 : Text Noise Augmentation

    오타 생성기 아이디어: 오타는 누르고자 하는 것을 잘못 눌렀을때 발생한다. 누르고자 하는 글자 주변(키보드)단어들을 랜덤으로 섞어주면 오타 생성기가 만들어지지 않을까? 오타 발생 유형 (1). 주변 키보드 문자를 잘못 입력함. (2). 쌍자음으로 잘못 입력함. (3). 한영키를 잘못누름 오타 사전 작성 typos_dict = {'ㅂ' : [ 'ㅈ','ㅁ','1','2','q','ㅃ'], 'ㅃ' : ['ㅂ'], 'ㅉ' : ['ㅈ'], 'ㄸ' : ['ㄷ'], 'ㄲ' : ['ㄱ'], 'ㅈ' : ['2','3','ㅂ','ㄷ','ㅁ','ㄴ','ㅇ','w','ㅉ'], 'ㄷ' : ['ㅈ','3','4','ㄱ','ㄴ','ㅇ','e','ㄸ'], 'ㄱ' : ['ㄷ','4','5','ㅅ','ㅇ','ㄹ','r','ㄲ'], '..

    [NLP]. 챗봇 답변 Top-k sampling 구현

    TOP-K sampling 은 기존 생성 모델에서 사용하는 방법중 하나이다. https://velog.io/@nawnoes/Top-p-%EC%83%98%ED%94%8C%EB%A7%81-aka.-Nucleus-Sampling Top-p Sampling (aka. Nucleus Sampling) How to sample from language models 을 보며 정리GPT-2로 텍스트를 생성하다보면, 랜덤 샘플링이나 Top-k 샘플링 등을 사용해도 문맥이 잘 맞지 않는다고 생각이 된다. 추가로 다른 방법 중 Top-p, Nucleus 샘플 velog.io 챗봇의 대답은 일정한 기준(Similarity score , BM25 score)점수에 대한 최고점수를 답변으로 추론하는 경우가 많은데. 이럴 경우 똑..

    [NLP]. 임베딩 벡터(embedding vector)를 문자열로 저장하는 방법(feat. byte type , base85 )

    Bi-Encoder의 장점은 임베딩한 벡터를 미리 연산을 해두어 속도가 빠르다는 장점이 있다. 여기서 임베딩값들을 메모리(RAM) 자원에 가지고 있는 것이 가장 좋지만 전 포스팅에서 이야기하였듯이 높은 메모리는 곧 서버 비용이다. 비용 절감을 위해서 벡터를 문자열로 변환해서 RDBMS에 저장해서 불러오는 방식으로 구현하기로했다. flaot 형식으로 저장하지 않고 문자열로 저장하는 이유는 문자열로 저장하는 것이 용량도 적게 들고 768열로 각각의 float를 저장해서 불러오는 것보다. 문자열로 저장한 값을 numpy에 np.fromstring() 매서드를 사용하는 것이 더 효과적이기 때문이다. 하지만 위 방법에는 몇 가지 문제가 있다. 1. 문자열의 길이가 너무 길다. : BERT는 기본적으로 768차원이..

    [NLP]. 구어체(채팅)데이터에서 필요한 품사만 가져오기 (feat.꼬꼬마 형태소 분석기)

    구어체 (카카오톡 채팅 대화)에서 필요한 품사(pos tag)만 뽑아내기. 구어체는 일상대화 텍스트이기 때문에 문어체와 다른 특징들이있다. 구어체 : 입말체. 구어체(口語體)는 일상생활에서 실제 입으로 발화되는 말을 문장으로 나타낸 것을 말한다. 문어체 : 문어체(文語體)란 일상생활에서 사용되지 않고 문서에 한하여 쓰이는 문체를 말한다. 그래서 불용어 또한 문어체와 구어체에 따라서 다르게 구별해야한다고 생각한다. 한국어는 불용어에 대한 정의가 없어서 구어체를 기준으로 샘플데이터를 가지고 주관적인 불용어 품사들을 걸러내어 보고자한다. 이 자료가 누군가에게 도움이 되었으면 좋겠다. 품사 태깅 기준은 꼬꼬마(kkm) 형태소 분석기로 진행함. 이유는 엘라스틱서치에 nori 토크나이저의 품사들이 꼬꼬마와 유사하고..

    [NLP]. 도로명 주소 & 지번 주소 인식 정규표현식

    출처 : 당근마켓 블로그 https://medium.com/daangn/%EC%A3%BC%EC%86%8C-%EC%9D%B8%EC%8B%9D%EC%9D%84-%EC%9C%84%ED%95%9C-%EC%82%BD%EC%A7%88%EC%9D%98-%EA%B8%B0%EB%A1%9D-df2d8f82d25 import re input_text = "인천광역시 부평구 안남로 123 행복아파트 101동 101호" address = re.compile("(([가-힣A-Za-z·\d~\-\.]{2,}(로|길).[\d]+)|([가-힣A-Za-z·\d~\-\.]+(읍|동)\s)[\d]+)") address.search(input_text) 결과 :

    [NLP] Fine-tuning(파인튜닝)과 in-context learning(인컨텍스트 러닝)

    대규모 사전 학습 언어모델이 다운스트림 태스크를 학습하는 방식은 크게 3가지가 있습니다. Fine-tuning : 다운스트림 태스크 데이터 전체를 사용합니다. 다운 스트림 데이터에 맞게 모델 전체을 업데이트합니다. - 문서 분류 , 자연어 추론 , 질의응답 , 문장 생성 Prompt tuning : 다운스트림 태스크 데이터 전체를 사용합니다. 다운스트림 데이터에 맞게 모델 일부만 업데이트합니다. In-context learning : 다운스트림 태스크 데이터의 일부만 사용합니다. 모델을 업데이트하지 않습니다. 파인튜닝 방식으로 모델 전체를 업데이트 하려면 많은 비용이 듭니다. 파인튜닝 말고도 다른 방식이 주목받는 이유는 비용과 성능 때문입니다. 최근 언어 모델의 크기가 기하급수적으로 커지고 있고 파인튜닝..

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

    https://unikys.tistory.com/307 [엑셀] 매크로로 선택영역의 특정 문자만 색 변환하기 * 목표: 엑셀에서 선택한 영역을 가져와서 각 문자열의 문자 중에 입력한 단어가 있으면 색을 변환하는 매크로 작성 * 작성 환경: 엑셀 2010 : 예를 들면 아래와 같은 엑셀이 있을 경우 'fer'를 빨간 unikys.tistory.com 전 포스팅에서 키워드들 통한 라벨링 진행 방법을 소개했다. 하지만 문장의 길이가 길 수록 해당 키워드가 어디에 위치하고있는지 찾기가 너무 힘들었다. 문장의 길이가 길면 그 만큼 라벨링 속도 저하 발생...ㅠㅠ 그렇다고 대충보기에는 모호한 데이터들이 많았다. "뒤지" 키워드의 경우 1) 너 뒤지고 싶냐? 2) 방을 다 뒤지고 나서도 찾을 수 없었어. 이런 키워드..