레이블이 data인 게시물을 표시합니다. 모든 게시물 표시
레이블이 data인 게시물을 표시합니다. 모든 게시물 표시

2023년 9월 22일 금요일

huggingface 모델의 maximum token length 알아보는 방법

from transformers import AutoConfig

model_name = "EleutherAI/polyglot-ko-5.8b"

config = AutoConfig.from_pretrained(model_name)

max_length = config.max_position_embeddings

print("Maximum input sequence length:", max_length) 

2022년 12월 29일 목요일

도커 간단 사용법


# 컨테이너 생성
 docker run -it --gpus "device=0" -d -p local_port:container_port -v local_dir_path:container_dir_path --name container_name image_name:version /bin/bash
 docker run -it --gpus "device=0" -d -p 3000:3000 -v /home/co/nd_chat:/home/co/nd_chat --name nd nd_chat:1.0 /bin/bash

# 컨테이너 종료하지 않고 컨테니어 나가기
 Control + p + Control + q

# 컨테이너 접속
 docker attatch container_id
 ex. docker attatch nd_chat

 docker exec -it container_name bash
 ex. docker exec -it nd_bento bash

# 컨테이너로 이미지 만들기
  docker commit container_name new_repository:new_image(tag)
  docker commit nd


# 컨테이너 종료
 docker stop container_id
 ex. docker stop nd_chat

#컨테이너 삭제
 docker rm container_id
 ex. docker rm nd_chat


# 이미지 제거
  docker rmi image_id

# 이미지 목록 보기
 docker images

# 컨테이너 목록 보기
 docker ps

docker run -it --gpus all --name py torch_modi -v /home/hjjeong/workspace:/home/hjjeong/workspace pytorch/pytorch:1.10.0-cuda11.3-c udnn8-devel /bin/bash

2022년 12월 12일 월요일

python lists로 dataframe 만들기

  •  python lists로 dataframe 만들기
    • 컬럼명을 key, list를 value로 하는 dictionary로 만든 다음, dataframe으로 만들기


months = ['Jan','Apr','Mar','June']
days = [31,30,31,30]

# make dictionary (key = column name, value = list}
d = {'Month':months,'Day':days}

import pandas as pd
df = pd.DataFrame(d)

  • source: https://cmdlinetips.com/2018/01/how-to-create-pandas-dataframe-from-multiple-lists/

2022년 12월 6일 화요일

huggingface pipeline 기능을 사용시에 truncate 하는 방법 (에러 : RuntimeError: The size of tensor a (1185) must match the size of tensor b (512) at non-singleton dimension 1))

  •  발생 에러
    • RuntimeError: The size of tensor a (1185) must match the size of tensor b (512) at non-singleton dimension 1
    • input이 model input size보다 더커서 발생하는 문제
    • tokenizer 선언히 truncate 설정해줬지만, pipeline 사용할 때는, pipeline 호출 할때, 다시 truncate를 설정해줘야 함

  • 해결 방법

from transformers import pipeline
model_name = "test_trainer/checkpoint-423"
# load model and tokenizer
model = AutoModelForSequenceClassification.from_pretrained(model_name)
tokenizer = AutoTokenizer.from_pretrained("klue/bert-base", padding=True, truncation=True, max_length=512)

classifier = pipeline("text-classification", model=model, tokenizer=tokenizer, device=0)
classifier(text, padding=True, truncation=True)

2022년 11월 3일 목요일

[파이썬] 두개의 리스트가 각 index끼리 매칭된 상태로 shuffle 하는 방법

  •  상황: 각각 리스트 형태로 된 데이터와 라벨 데이터를 셔플링하고자 할때
    • 데이터와 라벨이 매칭된 상태에서 셔플링이 되어야 함
  • 방법
    • random과 zip을 이용한 방법
    • source: https://stackoverflow.com/questions/23289547/shuffle-two-list-at-once-with-same-order

import random

a = ['a', 'b', 'c']
b = [1, 2, 3]

c = list(zip(a, b))

random.shuffle(c)

a, b = zip(*c)

print a
print b

[OUTPUT]
['a', 'c', 'b']
[1, 3, 2]

2022년 10월 24일 월요일

python pickle로 저장하고 불러오기

import pickle

data = {
    'a': [1, 2.0, 3, 4+6j],
    'b': ("character string", b"byte string"),
    'c': {None, True, False}
}

# save
with open('data.pickle', 'wb') as f:
    pickle.dump(data, f, pickle.HIGHEST_PROTOCOL)

# load
with open('data.pickle', 'rb') as f:
    data = pickle.load(f)

# sources: https://wikidocs.net/8929

2022년 10월 23일 일요일

2022년 10월 21일 금요일

[ubuntu에서 unzip 갑자기 안될때, 대용량 압축 해제의 경우] End-of-central-directory signature not found. Either this file is not a zipfile, or it constitutes one disk of a multi-part archive

  • 에러 발생한 커맨드
    • unzip abc.zip
  • 에러 메세지
    • Archive: abc.zip End-of-central-directory signature not found. Either this file is not a zipfile, or it constitutes one disk of a multi-part archive. In the latter case the central directory and zipfile comment will be found on the last disk(s) of this archive. unzip: cannot find zipfile directory in one of DIETClassifier-openlab.zip or DIETClassifier-openlab.zip.zip, and cannot find abc.zip.ZIP, period
  • 해결방법
    • jar 패키지 설치
      • sudo apt-get install fastjar
    • jar 이용해서 압축 풀기
      • jar xvf abc.zip

python 코드 상에서 사용하는 gpu 설정법

  •  python 코드 상에서 사용하는 gpu 설정법



# 파이썬 사용 GPU 설정하기



```python

import os

os.environ["CUDA_VISIBLE_DEVICES"]= "1"  # Set the GPU 1 to use

```

2022년 10월 20일 목요일

[내장 함수의 명을 사용하는 경우 혹은 동일한 변수명으로 잘못 명명하는 경우] TypeError: '_io.TextIOWrapper' object is not callable

  •  에러 발생
    • TypeError: '_io.TextIOWrapper' object is not callable
  • 이유
    • list와 같은 내장 함수를 변수명으로 사용
    • f = open('./path','w') 와 f.write("hi") 사이에 f = lambda x: x in exclusion_tags 를 선언하였음
    • 변수명 조심 + 변수명은 대충 짓지 말기

[konlpy import시 발생하는 JVM 문제] "JVMNotFoundException: No JVM shared library file (libjvm.so) found. Try setting up the JAVA_HOME environment variable properly"

  •  문제
    • konply import시 아래와 같은 에러가 발생
      • "JVMNotFoundException: No JVM shared library file (libjvm.so) found. Try setting up the JAVA_HOME environment variable properly"
  • 해결방법
    • sudo apt install default-jdk

[tweepy 패키지 버전 문제] konlpy 패키지 import 에러 해결 (AttributeError: module 'tweepy' has no attribute 'StreamListener')

 

  • 문제

    • konlpy import 시 발생하는 tweepy 패키지 버전 문제

  • 해결방안
    • pip install tweepy==3.10.0
    • tweepy를 downgrade하고 3.10.0 으로 재설치하면 해결됨.

2021년 6월 21일 월요일

Do it! (GPT-2부터 자동 신경만 구성까지) 강화학습 입문 서평

 역시 Do it! 시리즈!

Do it 시리즈로 하둡을 처음 접하고, 오랜만에 접한 Do it 시리즈는 그간 관심이 있었던, 강화학습이었다.

 

1. 인공지능 입문(X) 강화학습 인문(O)

책의 제목은 강화학습 입문이지만, 완전 인공지능 분야 입문자에게는 이 책이 조금 많이 어려울 수 있을 것으로 생각된다. 만약 강화학습을 제외한 다른 딥러닝 분야를 많이 접해본 사람이라면 이 책의 독자로서 가장 적합하다고 할 수 있다. CNN 기반으로 모델도 만들어보고, BERTNLP 모델 기반으로 자연어 문제도 해결해 보는 등, 강화학습을 제외한 인공지능 타 분야에 대해서 깊이 알고 있으면 알고 있을수록 이책을 빛을 바란다. 나 또한 이미지, 텍스트 분야에 지도학습, 비지도학습 여러 딥러닝 모델을 개발하고 연구한 경험은 있지만, 강화학습을 거의 처음이었다. 여러 워크샵에서 강화학습 이론을 간단히 접했던 적은 있지만, 익숙하지 않은 이론과 수식의 압박에 포기하고만 말았다. 하지만 이 책은 쉽게 예제를 통해 개념은 쉽게 설명하고, 실제 예제를 통해서 강화학습을 쉽게 접할 수 있게 하였다.

 

2. 강화학습 인문서(X) 강화학습 쿡북(O)

GPT-2기반 응답봇, 자율 주행 자동차, NAS 등 강화학습이 적용된 다양한 분야별로 실제 예제를 접할 수 있다. 각 분야별로 깊은 이해보다는 실제로 코드를 돌려보면서 강화학습을 실행해 볼 수 있다. 나는 입문서라기보다는 쿡북 개념인 듯하다. 이 책을 읽으면서 모르는 개념은 구글링을 통해 이론이 잘 정리된 블로그나 논문을 참고하면 더 큰 도움이 될 듯하다. Do it 시리즈 하둡을 할 때도 미리 간단한 개념을 공부하고 Do it 시리즈로 실습을 했던 기억이 있다. 이 책도 강화학습에 대한 간단한 개념을 미리 익히고 이 책을 읽으면서 실습을 한다면 더 큰 도움이 될 듯하다.

 

3. NAS에 대한 완전 친절한 실습서

AutoML을 공부하면서, NAS를 제대로 정리한 자료나, 특히 튜토리얼을 잘 접할 수가 없었다. 하지만 이 책에서는 가벼운(?) NAS에 속하는 ENAS 실습을 통해서, NAS에 대해서 친절하게 실습할 수 있도록 하였다. 이 책을 읽고나면 ENAS를 활용해서 내 데이터에 가장 적합한 딥러닝 모델을 찾을 수 있게 될 것이다. 이 책을 읽기 전에 대략적으로나마 NAS, AutoML 관련 개념을 알고 있었기에, 이 부분을 쉽게 읽을 수 있었다. 인공지능 분야 초급자라면 이책은 어려울 수 있으나, 인공지능 분야 배경지식이 있는 사람에게 바로 NAS를 자신의 문제 해결에 적용할 수 있게 만들어 주는 책이다.

 

세줄 요약

- 인공지능 입문자가 아닌 (인공지능에 익숙하지만 강화학습은) 입문인 사람들에게 적합

- 강화학습 이론 관련 블로그나 논문을 함께 보면서 이 책을 읽으면 실력이 향상되면서 실습도 할 수 있는 책

- 자기 원하는 분야에 강화학습을 적용하고 싶을 때, 이 책의 특정 챕터만 봐도 도움이 되는 책 

2019년 6월 25일 화요일

FastText

* 본 내용은 (가제)'글로벌 기업과 한전의 인공지능 이야기. 들어볼래?' 책 작성 중 자연어 처리 개요에 대한 부분이다. 저작권자의 허락 없이 무단 복제를 금한다.

FastText
FastText 모델은 Word2Vec 모델의 확장 및 개선을 목적으로 2016 Facebook에서 처음 소개되었다. Word2Vec은 단어를 가장 작은 단위로 생각하고 단어 자체를 임베딩한 것과는 달리 FastText는 하나의 단어도 여러개로 쪼갤 수 있는 단위로 간주한다. 한글의 경우 한국전력공사" 2 글자 단위로 쪼갠다고 한다면, ‘한국', ’국전', ‘전력', ‘력공', ‘공사'로 쪼갤 수 있다. 또한 자음과 모음 단위로 쪼갤 수도 있다. “ㅎ ㅏ ㄴ ㄱ ㅜ ㄱ ㅈ ㅓ ㄴ ㄹ ㅕ ㄱ ㄱ ㅗ ㅇ ㅅ ㅏ"로 분리할 수 있다. 자음과 모음으로 쪼개면 오타도 반영할 수 있는 장점이 있다. 이렇게 단어를 쪼갠 단위로 워드 임베딩 모델을 학습한다는 점에서 Word2Vec과 차이를 보인다. Word2Vec는 전체 코퍼스에서 단어의 등장빈도에 따라서 임베딩 정확도가 달라진다. 고빈도의 단어는 정확하게 임베딩이 되지만, 저빈도의 단어는 임베딩이 정확히 되지 않는다. 이와 달리 FastText는 저빈도의 단어라고 할지라도 여러 개로 쪼깬 뒤 임베딩 모델을 학습하기 때문에 빈도수가 낮은 단어에 대해 가지는 Word2Vec의 임베딩 정확도 문제를 해결할 수 있다.
FastText의 경우 영어뿐만 아니라 한국어 포함 157개의 언어에 대해서 단어 벡터와 사전학습된 FastText 모델을 제공하고 있다. 모든 단어 벡터는 위키피디아를 크롤링 하여 수집하였다. FastText에서 제공하는 한국어 단어벡터로 개인 노트북에서 FastText 모델을 2-3분내외로 학습을 완료될 만큼 빠른 학습 속도를 제공한다.
또한 학습 데이터에 빈도수가 적은 전문용어도 사용되는 경우가 빈번한 한국전력공사에서는 FastText 모델을 활용하는 것이 단기적으로는 적합하다고 생각한다

글로브 (Glove)

* 본 내용은 (가제)'글로벌 기업과 한전의 인공지능 이야기. 들어볼래?' 책 작성 중 자연어 처리 개요에 대한 부분이다. 저작권자의 허락 없이 무단 복제를 금한다.

글로브
CBOWSkip-Gram은 주변의 단어들(Local Context)만 고려한다는 점에서 예측 기반 모델이다. Word2Vec은 전체 단어들과의 유사도 관계 및 전체 텍스트에서 비중(Global Context)을 이용하지 않는다.
LSA와 같은 카운트 기반의 전통적인 방법은 전체 코퍼스의 통계 정보를 효율적으로 활용하지만 주변 단어와의 관계를 포함하지 않기 때문에 의미론적으로 비슷한 단어를 발견하는 것과 같은 유추 작업에 상대적으로 적절하지 않다. CBOWskip-gram과 같은 Word2Vec 메소드는 유추 작업에서 더 잘할 수 있지만 전역 수준에서 코퍼스 통계를 제대로 활용하지 못하기 때문에 코퍼스 전체의 특성을 반영하지는 못한다.
Glove의 경우 Local contextGlobal context를 모두 사용한다. GloVe의 아이디어를 한 줄로 요약하면 '임베딩 된 중심 단어와 주변 단어 벡터의 내적이 전체 코퍼스에서의 동시 등장 확률이 되도록 만드는 것'이다. Local Context 관련 값(임베딩된 중심 단어와 주변 단어 벡터의 내적)Global Context(전체 코퍼스에서의 동시 등장 확률)을 같게 학습함으로써, Local ContextGlobal Context 모두의 특성을 포함하는 임베딩 벡터를 생성할 수 있다.

Word2Vec (워드투벡터) 모델

* 본 내용은 (가제)'글로벌 기업과 한전의 인공지능 이야기. 들어볼래?' 책 작성 중 자연어 처리 개요에 대한 부분이다. 저작권자의 허락 없이 무단 복제를 금한다.

Word2Vec 모델
Word2Vec 모델은 Google에서 2013 년에 발표한 워드 임베딩 모델로서 예측 학습을 기반으로 하여 단어 표현 벡터에 문맥 및 단어 간 의미 유사성을 포함시킨 워드 임베딩 모델이다. 단어의 개수만큼 벡터의 크기가 증가하는 Bag of Words와는 달리 Word2Vec의 경우 생성되는 벡터의 크기를 조절할 수 있다. 단어수 만큼 벡터의 크기가 증가하고 새로운 단어가 들어올 때마다 벡터를 바꿔야 하는
Bag of Words의 비효율성을 해결하기 위하여, Word2Vec의 벡터 크기는 Bag of Words 벡터의 크기보다 작게 설정된다. Word2Vec의 벡터의 크기가 포함하고자 하는 단어의 수보다 작다면 어떻게 표현할 수 있을까. 앞서 설명한 Distributed Embedding이라는 기술이 Word2Vec의 기저가 된다.
Word2Vec 방식에는 크게 CBOW 방식과 Skip-gram 방식 2가지 아키텍처가 있다. 각 방식은 단어를 Distributed Embedding의 일환으로 단어수보다 적은 크기의 벡터를 생성하는 것은 동일하지만, 벡터를 학습(Training)하는 방식에서 차이를 보인다.
 
CBOW
CBOWContinuous Bag of Words 모델의 약자이다. CBOW 모델 아키텍처는 어떤 단어를 문맥 안의 주변 단어를 통해 예측하는 방법을 통하여 단어 임베딩 모델을 학습한다.
1.각 주변 단어들을 원-핫벡터로 만들어 입력 값으로 사용한다(입력층 벡터)
2.가중치행렬을 각 원-핫 벡터에 곱해서 n-차원 벡터를 만든다(은닉층)
3.만들어진 n차원 벡터를 모두 더한 후 개수로 나눠 평균 n차원 벡터를 만든다(출력층 벡터)
4.n차원 벡터에 다시 가중치 행렬을 곱해서 원-핫 벡터와 같은 차원의 벡터로 만든다
5.만들어진 벡터를 실제 예측하려고 하는 단어의 원-핫 벡터와 비교해서 학습한다.
6. 실제 단어의 임베딩 벡터는 은닉층n-차원 벡터의 결과를 나타낸다.


Skip-gram
Skip-gram은 어떤 단어를 가지고 특정 문맥 안의 주변 단어들을 예측하는 방법이다
1.하나의 단어를 원-핫 베터로 만들어 입력값으로 사용한다
2.가중치 행렬을 원-핫 벡터에 곱해서 n차원 벡터로 만든다
3. n차원 벡터에 다시 가중치 행렬을 곱해서 원-핫 벡터와 같은 차원의 벡터를 만든다
4. 만들어진 벡터를 실제 예측하려고 하는 주변 단어들의 원-핫벡터와 비교해서 학습한다