전체 글

전체 글

    [ElasticSearch]. 한국어 형태소 분석기 nori_analyzer 사용하기

    엘라스틱 서치에서 사용하는 토크나이저를 파이썬 클라이언트로 연동해서 사용할 수 있다. 굳이 엘라스틱서치에서 작동되는걸 파이썬으로 가져와서 연동해야할 필요가 있을까 하지만 검색 결과로 나오는 BM25 score 말고 분리된 형태소 간 유사도를 파악하기 위해 사용했다. *(0~1)로 치환되는 값이 필요함. Mapping 정보 "analysis": { "analyzer": { "nori_token_analyzer": { "type": "custom", "tokenizer": "nori_base_tokenizer" } }, "tokenizer": { "nori_base_tokenizer": { "type": "nori_tokenizer", "decompound_mode": "mixed", "discard_pun..

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

    [Python]. multiProcessing 대용량 빅데이터 구간별로 전처리하기

    numpy 데이터를 DB 삽입 하려고하다보니 형식이 맞지않아 삽입을 할 수 없는 상황이 생겼다. 그래서 Python의 flaot 형태로 변경해서 삽입하려고 시도했고 numpy 에서 tolist() 함수를 통해 Python float 형태로 변경하면 FP형식이 유지되지않는다. **numpy FP16을 Python으로 변환해도 FP32로 바뀌어서 변환된다. 그래서 numpy 형식을 python float32 형태로 변경하고 그것을 round 함수를 통해 4째자리까지만 잘라내려고한다.(FP16) 총 256차원의 7,000,000만건의 벡터(Vector) 데이터를 전처리해야했고 생각없이 코드를 작성했더니 많은 시간(10분이상)이 소요되었고 중간중간 병목현상이 발생하였다. 이때 개념으로만 알고있던 멀티 프로세싱이..

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

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

    [Spark]. MySQL 연동하기 A-Z(for mac)

    MySQL 데이터베이스에 연결하려면 Mysql-java-connector를 다운 받아야함. 버전의 맞게 다운로드 설치 https://dev.mysql.com/downloads/connector/j/ MySQL :: Download Connector/J MySQL Connector/J 8.0 is highly recommended for use with MySQL Server 8.0, 5.7 and 5.6. Please upgrade to MySQL Connector/J 8.0. dev.mysql.com 설치하고 앞축을 풀어준다. 위 파일을 mysql 폴더에 넣어주어야함. 폴더 경로 확인 MySQL Base Directory로 이동 cd /usr/local/mysql open . mysql-connecto..

    [WebSocket]. 양방향 통신이 가능한 웹소켓이란?

    WebSocket Chat Send """ @app.get("/") async def get(): return HTMLResponse(html) @app.websocket("/ws") async def websocket_endpoint(websocket: WebSocket): await websocket.accept() while True: data = await websocket.receive_text() await websocket.send_text(f"Message text was: {data}") 실행 화면 ( localhost:8000/ )

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

    [GCP]. Google Cloud Plattform Server 초기셋팅(feat. CentOS)

    1. htop 설치 # yum update $ sudo yum -y update # yum 패키지 매니저는 htop이 기본으로 포함되어있지 않기 때문에 # EPEL repository를 추가한다. $ sudo yum -y install epel-release # htop 설치 $ sudo yum -y install htop 2. unzip 설치 $ rpm -qa | grep unzip $ yum list unzip $ sudo yum install -y unzip 3. docker 설치 Linux curl -s https://get.docker.com/ | sudo sh 명령어를 입력하고 패스워드를 입력하면 리눅스 배포판에 따라 자동으로 최신번전의 도커를 설치 유저 권한 추가 sudo usermod -a..

    [Python]. 현재 파일 디렉터리 절대경로 불러오기

    from pathlib import Path BASE_DIR = Path(__file__).resolve().parent FILE = os.path.dirname(os.path.realpath(__file__)) BASE_DIR = os.getcwd() from pathlib import Path import os import json BASE_DIR = Path(__file__).resolve().parent.parent DATA_PATH = os.path.join(BASE_DIR,'data','base_datasets.xlsx') MAPPING_PATH = os.path.join(BASE_DIR,'mapping.json') mapping = json.load(open(MAPPING_PATH))

    [ElasticSearch]. 다중 검색 종류 비교 : 비동기 검색(async_search) VS 멀티 서치(msearch)

    ElasticSearch 서비스를 개발하는 과정에 있어서 여러 개의 쿼리를 필연적으로 한번에 날려야하는 순간이 있다. 우리 서비스도 동시에 3개의 쿼리를 날려서 결과를 취합하는 과정이 있는데. 처음(비동기 프로그래밍을 모를때)에는 그냥 3개의 쿼리를 순차적으로 날려서 결과값을 받았고 이 과정에서 많은 시간적 비용이 소모되었다. 이번 포스팅에서는 쿼리 여러개를 효과적으로 처리하는 방법 2가지를 소개하고 성능을 비교해보고자한다. Async Search : 비동기 검색 비동기 검색은 엘라스틱서치 쿼리를 비동기로 처리하는 방법이다. 쿼리 3개의 요청을 동시(Concurrency)에 날리고 응답이 빠른 것 부터 받아서 처리하는 방법. 3개의 쿼리중 가장 느린 검색속도가 최종 검색속도라고 볼 수 있다. from e..