All Articles

TIL&TEL 20.07.27~20.08.02

TIL( Today I Learned)

20-07-27 월

  • API 수정

20-07-28 화

  • 기존코드 리팩토링 할 부분 찾아보기

    • 불필요한 리소스 낭비 확인해보기
    • 실행시 시간 잡아먹는 부분 파악
  • 팀미팅

    • 개발 하고싶은 과제 1차 공유
  • django business logic 리서치

    • business logic 을 view에서 처리하고 있었다.
    • logic이 HTTP api 종속적이 됨
    • 다른 API 에 동일한 로직 적용을 하려면 추상화가 어렵다.
    • 대안들
      1. QuerySet/ Manager
      2. django model에 종속되지 않으면서, 모델을 아우르는 추상화를 할 수 있다..
      3. Model 내 함수들
      4. 괜찮은 대안이 될 수 있지만 특정 model에 종속된다.
      5. Business Layer
      6. django 와의 연결성이 없다.

20-07-29 수

  • python 구현체들 알아봄

    • Django 속도를 올리기 위해 Instagram에서 pypy 사용한다고 들음
    • pypy는 속도를 개선하기 위해 만든 새로운 python 구현체다.
    • 따라서 python 구현체에서 돌아가던 파이썬 코드가 동작이 안될 수도 있다. 호환성 검증이 필요하다.
  • NLP 인증 질문 만들기
  • 한국어 임베딩 복습
  • 19시 배포

20-07-30 목

  • 기획팀 요청자료 공유

    • SQL 반복을 할까 했다가 편한대로 했는데 다음엔 SQL 반복문을 구성해봐야겠다.
  • 한국어 임베딩 복습

    • 4,5,6 장 다시 읽기
    • 4장
    • 단어 분포 기반

      • word2vec
      • 네거티브 샘플링
      • 서브 샘플링
      • 목적함수(비용함수, 손실함수) 로그우도 ?? 개념 잘 안잡힘
      • fast text
      • 음절단위 쪼개기
      • 틀린음절에 대해서도 동작이 가능하다
      • 오타, 미등록 단어에 대해서 가능
      • 자소단위로도 동작을 할수 있다.

        • 자소 단위 쪼개기 - soynlp에 탑재된 기능 활용.
    • 행렬 분해 기반

      • LSA
      • Glove
      • Swivel
    • 가중 임베딩 - 문장 임베딩으로 확장
    • 5장
    • 문서 임베딩

      • tfidf + LSA
      • 새로운 문서가 나올 때마다 모델을 새롭게 학습을 시켜야 한다. 같이 tfidf 작업을 한 내역내에서만 비교 검색이 가능하다.
      • doc2vec
      • 문서의 id 를 문서내 단어들과 동일하게 학습을 시킨다 .
      • 동일 문서내 모든 단어의 의미가 문서 Id에 같이 포함된다.
      • 새로운 문서가 나올 때마다 모델을 새롭게 학습을 시켜야 한다.
      • LDA - topic modeling
      • 새로운 문서 추가가 가능하다.
      • 상담 분류에서 써봄직하다
      • elmo
      • 프리트레인 원조
      • 단계

        • 문자단위 컨볼루션
        • 양방향 LSTM 레이어
        • ELMO 레이어
      • 학습

        • 연속된 자료의 다음 단어를 예측
      • bert
      • 트랜스포머 네트워크

        • Scaled Dot-Product Attention
        • 멀티헤드 어텐션
        • Position-wise Feedforward Networks
      • 학습

        • 문장 중 단어를 mask하고 mask 단어 예측 - 마스크 언어모델
        • 문맥의 양방향으로 접근이 가능(앞 뒤로)해서 성능이 대폭 향상 되었다.\
        • 한 문장 다음에 오는 문장 예측
    • 6장 임베딩 파인 튜닝
    • 가능한 다운스트림 태스크

      • 문장 분류 -Classification
      • 질의응답 답변 (질문과, 해당 콘텍스트 같이 전달) Squad
      • 센텐스 tagging task - NER, Pos Tagging
    • 단어 임베딩 활용

      • 단어임베딩까지 같이 업데이트 => 파인튜닝
      • 임베딩 그대로, 그위 레이어만 학습 => 피처베이스

20-07-31 금

  • BERT 모델 이해하기
  • SQL 처리 에러 발견 디버깅 후 코드 수정

TEL (Trial and Error Log)

20-07-27

  • ERROR: django IntegrityError at /api/dictionary/topicword

    • SITUATION: 모델 칼럼 필드에 default 값을 지정해놔서 default 값 적용이 되는가 싶었는데 안됨
    • REASON: 값이 안들어올때 생기지 None이라는 값은 Nullable=False이기 때문에 동작이 안된다
    • SOLUTION: default 값을 같이 입력 되는 걸로 처리함
  • ERROR: column 값을 null 로 할 것이냐, "" 로 할 것이냐

    • SITUATION: 빈값이 생기는 경우가 있는데 뭐가 나은건지 모르겠음
    • REASON: 그래서 그 값이 어떻게 쓰이는 곳인지 확인을 해보자
    • SOLUTION: Null로도, Blank로도 가능 / None으로 왔을때 처리값 정하고 입력, 기존에 Null로 처리해 놓은 필드들 있어서 따라감

    ‘파이썬 클린코드’에서 보기로는 이후 처리 과정에서 받는 것에 맞추어서 에러가 안터지게 가져오는 것이 좋다. null 객체 패턴인데, STR을 받게 된다면, 빈 STR을 받게 해주는 편이 좋다.

  • ERROR: migration reverse 주의하기

    • SITUATION: 기존에 생성한 Migration 날리고 새로 migration파일은 만들었다.
    • REASON: 기존 생성 migration 원격 마스터에 머지되어 있음… 내가 변경한거 푸시하면 conflict남
    • SOLUTION: 마스터 머지된 버전이 배포까지 된 건 아니라서 다행히 수습은 할 수 있을듯하다. merge 완료된 것인지 확인하고 건드리자.

20-07-31

  • ERROR: DB 데이터 수집 에러,

    • SITUATION: DB 데이터 수집시 타겟 수와 실제 데이터가 안맞음
    • REASON: 해당 데이터 row status ACTIVATED => COMPLETED 로 넘어가는 중간에 SUMMARY_WAITING 상태가 있었음
    • SOLUTION: SQL WHERE status = ‘COMPLETED’ or ‘ACTIVATED’ 추가함
  • ERROR: SQL or 조건 안먹음

    • SITUATION: 한가지 칼럼에 두가지 조건을 넣으려고 colum = A or B 를 입력했다가 전체 row 가 호출됨
    • REASON: 한칼럼에 여러가지 조건을 걸때는 IN을 사용할것!!
    • SOLUTION: where column IN ( ‘condition1’, ‘condition2’…)
  • ERROR: MySql WHERE BETWEEN 잘못 알고 있었음

    • SITUATION: datetime column 범위값 지정
    • REASON: val BETWEEN A AND B 는 val >=A, va <= B와 같음 (inclusive하다)
    • SOLUTION: inclusice, exclusive 등의 조건을 확실하게 따질것.
  • ERROR: 불연속값의 처리를 잘못 알고 있었음

    • SITUATION: 13시부터 14시 까지 시간 범위를 datetime_column BETWEEN 13:00:00 AND 13:59:59 로 했는데 이렇게 하니, 13:59:59.123456 범위가 해당이 안된다.
    • REASON: val BETWEEN A AND B 는 val >=A AND val <= B와 같음 (inclusive하다)
    • SOLUTION: datetimecolumn >= 13:00:00 AND datetimecolumn < 14:00:00으로 수정