Monthly Archives: 1월 2022

우분투(Ubuntu)에 Neovim + Copilot 설치

우분투 리눅스(Ubuntu)를 터미널로 접속해서 Copilot을 사용하려면 Neovim을 사용해야 합니다.

귀찮게 설치하지 않고 Copilot을 안쓰면 되겠지만 Copilot을 사용하면 생산성이 너무 좋기 때문에 도저히 포기할 수 없습니다.

그래서 Neovim과 Copilt을 Ubuntu에 설치하려고 하면 간단하게 되지 안고 몇가지 문제가 생깁니다.

서버 마다 이걸 반복해서 하다보니 귀찮아서 설치법을 정리했습니다.

설치순서 요약

다음은 설치 순서요약입니다.

  • Node.js 12 이상 설치하기
  • Neovim 0.6 이상 설치하기
  • copilot.vim 설치하기
  • copilot.vim 활성화하기

우선 Copilot을 쓰려면 Github 계정이 있어야 하므로 계정을 먼저 준비하세요.

그 다음의 문제가 있는데 apt로 설치를 할 수 없는 것이 Node js 12와 Neovim 0.6입니다.

apt로 설치하면 Node.js와 Neovim이 상당히 낮은 구버전이 설치됩니다. 그래서 Copilot을 쓸 수 없습니다.

다음과 같이 하면 됩니다.

설치 방법

Node.js 12 설치

먼저 Node.js 12는 다음과 같이 설치합니다.

Snap을 설치하고 Snap으로 Neovim 설치

Neovim를 설치하기 위해 snap을 설치합니다. apt로 설치하면 0.6 보다 낮은 구버전이 설치되는데 그 버전으로는 Copilot을 쓸 수 없습니다.

Copilot Neovim 확장 설치

이제 Copilot 확장을 설치합니다. Github 레파지토리에서 그대로 클로닝을 해서 ~/.config 아래에 넣어주는 것이 전부입니다.

Copilot 활성화

이제 Neovim을 실행해서 Copilot을 활성화해야 합니다.

Neovim에서 “:Copilot setup‘ 을 입력합니다.

원타임 인증 코드를 보여줍니다.

하이픈을 포함해서 9개의 글자를마우스로 드래그해서 복사하세요.

웹브라우저를 열고 https://github.com/login/device 주소를 입력해서 인증 페이지로 이동합니다.

인증페이지에서 위에서 복사한 코드를 그대로 붙여넣으세요.

문제가 없다면 인증이 완료됩니다.

Neovim으로 돌아오면 인증이 완료된 것을 볼 수 있습니다.

Copilot이 작동하는것을 볼 수 있습니다.

이제 터미널에서도 Copilot를 쓰면서 편하게 작업할 수 있겠습니다.

JetBrains IDE에서 오류메세지 보는 단축키

젯브레인 툴(JetBrains IDE)에서 소스 코드에 빨간 밑줄이 쳐지면 오류가 있다는 표시입니다.

빨간 줄 위에 마우스를 올리고 조금 기다리면 툴팁(풍선 처럼 뜨는 작은 팝업)으로 오류 메세지를 보여줍니다.

오류를 쉽게 인지하고 수정할 수 있게 해주기 때문에 상당히 유용한 기능입니다.

이걸 Error Description Tooltip 이라고 부르는데

그런데 마우스 올리고 시간이 조금 지나야 보이기 때문에 빨리 보려면 기다리는 시간이 답답할 때가 있습니다.

화면 예시

Error Description shortcut

단축키를 기억하고 있으면 툴팁을 바로 나오게 할 수 있습니다.

Error Description 툴팁을 바로 나오게 하는 단축키 입니다.

  • 윈도우 Windows: CTRL + F1
  • 맥 Mac: CMD + F1

MeCab 형태소 분석기

MeCab 형태소분석기에 대해서 간단히 설명하려고 합니다.

MeCab은 이제 우리나라에서 상당히 유명한 형태소 분석기가 되었지만 Mecab(메카부)는 일본어 형태소 분석기입니다.

영어로는 “미캡”이라고 읽어야 하는 것이 맞겠지만 원래 프로젝트 페이지에 카타가나 일본어 표기로 “메카부”라고 되어 있고 일본인들도 대부분 메카부라고 읽기 때문에 “메카부”라고 읽는 것이 맞습니다.

이 포스트에서도 메카부로 읽고 쓰겠습니다.

원래 NTT(일본 통신)에서 배포하는 오픈소스 일본어 형태소분석기이고 제작자는 구글로 이직한 것으로 알려져 있습니다.

상당히 좋은 성능으로 오랫동안 일본에서 가장 많이 쓰이는 오픈소스 형태소분석기 중 하나였습니다.

한국에는 변변한 오픈소스 형태소분석기가 없었던 시절 일본어와 문법체계가 비슷한 한국어를 위해 Mecab를 한국어 용으로 포팅한 은전한닢이라는 프로젝트가 생겨 Mecab를 한국어 용으로 사용하면서 한글 및 한국어 자연어처리 발전에 상당히 기여했습니다.

원본 Mecab를 한국어에서 사용할 수 있는가?

없습니다. 일본어는 한국어와 다르고 일본어에는 필요 없는 것과 한국어에만 있는 것을 적용하는 작업이 필요한데 그 작업을 해놓은 것이 은전한닢입니다.

은전한닢의 학습 데이터는 어떤 것을 사용했는가?

세종계획 말뭉치와 다른 소스를 사용하고 있다고 알려져 있고 세종계획말뭉치로 학습을 해서 사용해보면 거의 같습니다.

기타 자료

현재는 여러곳에서 파생된 패키지와 소스를 받을 수 있습니다.

Mecab 위키피디아 설명

https://en.wikipedia.org/wiki/MeCab

Mecab 일본어 웹버전

https://fasiha.github.io/mecab-emscripten/

https://github.com/fasiha/mecab-emscripten#mecab-on-the-web

은전한닢 프로젝트 페이지

https://eunjeon.blogspot.com/

ElasticSearch7 형태소분석기

은전한닢을 ElasticSearch7에서 쓸 수 있게 해놓은 것이 있습니다.

https://github.com/likejazz/seunjeon-elasticsearch-7

Go언어 cron 처럼 스케줄링 하기

cron과 같은 유형의 스케줄러는 데이터 처리를 할 때 반드시 필요합니다.

데이터과학자들은 주로 젠킨스(Jenkins)나 airflow를 사용하겠지만 Python이나 Go로 직접 작성해야 하는 경우도 종종 생깁니다.

패키지 “github.com/jasonlvhit/gocron” 를 사용하는 방법입니다.

sudo에서 http_proxy 환경변수 적용받기su

일반 계정에서 http_proxy 환경변수를 설정해서 작업을 하다가 sudo를 사용해서 root 권한을 사용할 때 http_proxy 설정이 적용되지 않아 힘들때가 있습니다.

sudo visudo를 하거나 sudo vim /etc/sudoers을 해서 sudoers 파일에 다음의 줄을 추가해 주면 됩니다.

http_proxy 뿐만 아니라 다른 환경변수도 동일한 방법으로 넘겨주는 것이 가능합니다.

혼동행렬 Confusion Matrix

기계학습 모델 평가지표

기계학습으로 생성한 분류 모델, 예측 모델에서 빠지지 않고 나오는 혼동 행렬 (confusion matrix) 입니다.

이름이 혼동행렬(Confusion matrix)인 이유?

기계가 얼마나 참과 거짓을 혼동하는지 확인하는데 사용하는 표이기 때문입니다.

간단하죠.

5개의 주요 성능 지표

혼동행렬에서는 특이도, 정확도, 민감도, 정밀도, 재현율 다섯개의 값은 외워야 합니다.

이중에서 가장 많이 쓰는 것은 정밀도(precision)재현율(recall)입니다.

기계학습 모델의 성능을 한 지표로만 설명하라고 할 때 쓰는 것은 정확도(Accuracy)와 혼동행렬에는 없지만 F1-measure (F1 값)이 있습니다.

F1값은 정밀도화 재현율의 조화평균입니다.

AUROC와 Precision-Recall 그래프

여기서 특이도와 민감도는 ROC 및 AUC 를 계산할 때 쓰고

정밀도와 재현율은 AP 와 Precision-Recall 그래프를 계산할 때 씁니다.

혼동행렬 confusion matrix

아래는 혼동행렬(Confusion Matrix)입니다. 표가 좀 안 이쁘지만 힘들게 그렸으니 알아서 잘 봐주세요.

예측값 Forecast
참 TRUE거짓 FALSE
실제값 Actual참 TRUETP (True Positive)FN (False Negative)
거짓 FALSE FP (False Positive)TN (True Negative)

지표 설명 및 계산법

각 지표값의 정의적 설명과 계산법입니다.

민감도 (Sensitivity)(TP / (TP + FN)) 양성 중 맞춘 양성의 수
특이도 (Specificity)(TN / (FP + TN)) 음성 중 맞춘 음성의 수
정밀도 (Precision)(TP / (TP + FP)) 양성이라고 판정 한 것 중에 실제 양성 수
재현율 (Recall)(TP / (TP + FN)) 전체 양성 수에서 검출 양성 수
정확도 (accuracy)((TP + TN) / (TP + FN + FP + TN)) 전체 개수 중에서 양성과 음성을 맞춘 수

풀어쓴 설명

민감도: 기계가 양성. 즉, positive를 얼마나 잘 꺼내서 맞췄는가를 봅니다.

특이도: 기계가 음성. 즉, Negative인 것을 양성이 아니라고 했는지를 봅니다.

민감도와 특이도는 보통 질병이나 의료에서 많이 쓰는 평가 지표입니다.

정밀도: 기계가 참이라고 했는데 실제 참인 것의 비율입니다. 기계가 얼마나 참을 순도 높게 찍어 내는지 보는 것입니다. 많이 맞추고 아니고는 별로 의미가 없이 기계가 참이라고 한 것 중에 참을 본 것이기 때문에 민감도와 헷갈리면 안됩니다.

재현율: 전체의 실제 참들 중에서 얼마나 기계가 참이라고 골라낸 비율입니다.

정확도: 전체 개수 중에서 기계가 실제 참을 참이라고 하고 실제 거짓을 거짓이라고 한 비율입니다.

습득 요령

처음에 보면 무척 헷갈리는데 외우는 것 보다는 이름과 계산법을 잘 기억하고 의미와 용도를 기억하는 것이 좋습니다. 기억이 안나면 그때 그때 찾아봐도 되지만 매우 빈번하게 쓰이는 것이므로 데이터과학을 공부한다면 그냥 암기해버리는 것이 효율적입니다.

Go언어 csv.gz 한줄씩 읽어오기

Go언어로 CSV파일을 한줄씩 읽어오는 방법입니다.

파일을 메모리에 올려서 한 번에 처리하면 파일이 큰 경우에는 메모리를 다 쓰기 때문에 스왑을 사용해서 문제를 만듭니다.

조금 느리더라도 파일은 1줄씩 읽거나 조금씩 읽어야 합니다.

Nvidia의 각종 AI 데모 사이트 – Nvidia AI demo site

Nvidia의 AI 데모를 볼 수 있는 사이트입니다.

굉장히 재밌는 것들이 많습니다.

사이트주소: https://www.nvidia.com/en-us/research/ai-demos/

NVIDIA GAUGAN2

텍스트를 입력받아서 사진을 생성해줍니다.

단순한 그래픽이 아닌 실사와 다름없는 사실상 실사인 사진를 생성해줍니다.

NVIDIA AI Playground GAUGAN2

LYRICSTUDIO

노래의 가사를 만들어줍니다.

몇개의 단어와 노래를 입력받아 쓸만한 가사를 만들어줍니다.

LyricStudio

NVIDIA VID2VID CAMEO

2D사진을 넣으면 3D 동영상으로 가상의 아바타를 만들어줍니다.

NVIDIA Vid2Vid Cameo

NVIDIA IMAGE INPAINTING

이미지를 강화합니다. 이미지에서 피사체 중 하나를 지우거나 배경을 지울 수 있습니다.

이미지 강화는 여러 용도로 이용할 수 있습니다. 특히 상업용으로 사진을 사용하기 위해서 사진에서 상표나 인물 보기 싫은 대상체를 제거할 수 있습니다.

Image Inpainting

NVIDIA GANIMAL

애완동물의 표정을 다른 동물에게 입힙니다.

재미삼아 만든 것으로 보입니다만 어떤 용도로 쓸 수 있을지 고민을 해봐야 겠습니다.

NVIDIA AI Playground Ganimal

NVIDIA GAMEGAN

스스로 게임하는 인공지능을 만듭니다.

강화학습이라고 부르는 이 인공지능으로 유명한 것은 알파고가 있습니다.

NVIDIA AI Playground GameGAN

Go언어 csv.gz 파일 만들기 – Go writing of csv.gz file

Go언어로 csv.gz 파일을 만드는 코드입니다.

csv는 단순한 텍스트 파일이기 때문에 공간 절약을 위해서 요즘은 데이터 플랫폼들이 csv를 gzip으로 압축한 것을 바로 처리할 수 있도록 지원합니다.

그래서 파일을 만들때 단순한 csv를 만들지 않고 csv를 gzip으로 압축하는 것이 더 유리합니다.