Machine learning

    [위로봇 프로젝트]. 오복이 육아일기 3일차 - 데이터 추가하기

    2022.12.06 - [Chatbot] - [위로봇 프로젝트]. 오복이 육아일기 2일차 - 설계 [위로봇 프로젝트]. 오복이 육아일기 2일차 - 설계 2022.12.06 - [Chatbot] - [위로봇 프로젝트]. 오복이 육아일기 1일차 - 소개 위로봇 오복이의 프로세스는 아주 간단하게 설계되어있습니다. 웹 서버는 Python 언어를 기반으로한 FastAPI를 사용했습니다. acdongpgm.tistory.com 챗봇 사용 데이터 1. 송영숙 님의 챗봇 데이터 https://github.com/songys/Chatbot_data 2. AI-HUB 웰니스 상담 데이터 https://aihub.or.kr/opendata/keti-data/recognition-laguage/KETI-02-006 3. AI..

    [NLP]. SentenceTransformer Tokenize 멀티턴 형식으로 수정하기

    def origin_tokenize(self, texts: Union[List[str], List[Dict], List[Tuple[str, str]]]): """ Tokenizes the texts """ return self._first_module().tokenize(texts) def tokenize(self, texts: Union[List[str], List[Dict], List[Tuple[str, str]]]): """ Tokenization is Mutiturn Utterance Custom 안녕 [SEP] 뭐해 ㅋㅋㅋㅋㅋ [SEP] 나 집에서 넷플릭스 보고있지 """ encoded_dict = self.origin_tokenize(texts) idx = [] input_ids = encod..

    [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..

    [위로봇 프로젝트]. 오복이 육아일기 2일차 - 설계

    2022.12.06 - [Chatbot] - [위로봇 프로젝트]. 오복이 육아일기 1일차 - 소개 위로봇 오복이의 프로세스는 아주 간단하게 설계되어있습니다. 웹 서버는 Python 언어를 기반으로한 FastAPI를 사용했습니다. 웹 서버와 같은 인스턴스 안에는 엘라스틱서치 검색엔진이 있습니다. 데이터 흐름 시나리오 1. 카카오톡 채널 유저 채팅 카카오톡 채널에 접속한 유저가 채팅을 전송하면 채팅 데이터는 직접 구축한 GCP 서버로 요청을 보냅니다. 2. FastAPI Web Server 웹 서버인 fastapi는 요청을 받아 질문의 텍스트만 파씽하고 질문을 엘라스틱서치 쿼리로 전송합니다. 3. ElasticSearch 검색엔진인 엘라스틱서치는 질문의 텍스트와 가장 비슷한 질문을 검색하고 그 질문에 대한 ..

    [위로봇 프로젝트]. 오복이 육아일기 1일차 - 소개

    안녕하세요 오늘부터 토이 프로젝트로 카카오톡 채널을 이용한 챗봇을 만들어보기로 했습니다. http://pf.kakao.com/_BNZRb 사실 이미 만들었지만 중간메모를 안 하고 개발하니 정리가 안 되는 부분이 있어서 처음부터 하나하나 기록하면서 다시 개발해보고자 합니다. 카카오톡 오픈빌더를 연동하여 챗봇을 만들고자 하는 분들께 참고가 되면 좋겠습니다. 1. 캐릭터 소개 이름 : 오복이 직업 : 심리상담사 종류? : 물범 "위로봇 오복이"는 인공지능 비서가 아닙니다. 오복이는 내가 한 질문에 대해 위로로 답변해주는 감성 대화 챗봇입니다. 오복이는 정해진 시나리오로 답변하지 않습니다.(직접구현한 API를 통해 답변합니다.) 오복이는 검색시스템을 통해 질문과 가장 유사한 질문을 찾아 그의 해당하는 답변을 해..

    [chatbot]. 핑퐁 빌더 API 연동하기

    핑퐁API는 스케터랩에서 서비스하고있는 일상대화 챗봇이고 한달에 300건 까지의 호출은 무료로 사용할 수 있다. 그래서 핑퐁 API를 파이썬에 연결하여 테스트해보고자 한다. 카카오톡이나 페이스북에 바로 붙여서 사용할 수도 있다. 회원 가입을 하고 봇을 생성하면 API를 사용할 수 있다. request URL 과 Authorization 인증키가 주어진다. import requests PINGPONG_API_KEY = {발급받은 API_KEY} PINGPONG_URL = {발급받은 URL} def ping_pong_reply(question): url = PINGPONG_URL + "10" #여기 숫자 10은 세션 id (유저구별시 사용) data = {"request": {"query": f"{quest..

    [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)점수에 대한 최고점수를 답변으로 추론하는 경우가 많은데. 이럴 경우 똑..