본문 바로가기

Ai Study

2022년 9월 서강대학교 인공지능학과 음성대화연구실 학부연구생 개인 공부 내용

# ISDS 공부

# 220906

1. **Git 사용법**
- git에서 권장하는 메시지 형식
1번째 줄 : 커밋 내의 변경 내용을 요약
2번째 줄 : 빈 칸
3번째 줄 : 변경한 이유
- 작업트리(Work Tree) = 폴더
인덱스 = 커밋 실행하기 전의 저장소의 작업 트리 공간. 작업 트리에서 파일 수정하고 사이 공간인 인덱스에 파일 상태 기록(stage)하고 저장소로 커밋.

1. **Batch Normalization**

일반적인 Gradient Descent: gradient를 한 번 업데이트 하기 위해 모든 학습 데이터를 사용. 즉, 학습 데이터 전부를 넣어서 gradient를 다 구하고 그 모든 gradient를 평균해서 한 번에 모델 업데이트.

→ 대용량 데이터를 한 번에 처리하기 어렵기 때문에 데이터를 batch 단위로 나눠서 학습해야.

Stochastic gradient descent 방법: gradient를 한 번 업데이트 하기 위해 일부의 데이터만을 사용. 즉, batch size만큼 사용. 평균을 낼 때도 배치 사이즈만큼 나누어 줌.

(Epoch = 학습 데이터 전체를 한 번 학습하는 것, Batch = Gradient를 구하는 단위)

- Batch 단위 학습의 문제점: Internal Covariant Shift = 학습 과정에서 계층별로 입력의 데이터의 분포가 달라지는 현상. 이를 해결하기 위해 Batch Normalization 적용!
- Batch Normalization: 각 배치별로 평균과 분산을 이용해 정규화(분포를 zero mean gaussian 형태로. 평균은 0, 표준편차는 1로)하는 것.
- Batch Normalization은 학습 <-> 추론 단계에서 다르게 적용되어야!

학습: 배치별로 계산됨.

추론: B.N.에 적용할 평균과 분산에 고정값 사용. 왜냐하면 test 단계에서는 B.N.에 적용할 평균과 분산을 구하기 어렵. 고정값은 학습 과정에서 이동 평균(M.A.) 또는 지수 평균(exponential average)을 통해 계산한 값. 이동 평균은 N개 이전의 평균과 분산은 미반영되지만 지수 평균을 사용하면 전체 데이터가 반영.

B.N.은 weight에 따른 가중치의 변화를 줄이는 것을 목표로 함. 즉, activation function에 들어가기 전 값의 변화를 줄이는 것이 목표!
B.N.이 적용 된 것과 안된 것의 차이는 새로운 layer들이 추가되면 벌어지게 됨! B.N을 사용X면 변화 값들이 가중되면서 기존에 학습한 분포와는 다른 분포를 가짐!
B.N.의 출력값은 activation func에 입력되는데, 우리가 사용하는 ReLu나 sigmoid함수 등의 활성화 함수는 평균이 0 근처에서 0 또는 1로 변화하기 때문에 평균이 0이 되도록 하는 것이 좋음.
시그모이드도 평균이 0이고 그 근처에 유의미한 값의 variance 갖는 것이 유의미함!

# 220907

1. Legal Mind (리걸 마인드)

법적인 문제상황을 해결할 때, 갖추어야 하는 일정한 체계나 원리.

AI가 리걸마인드를 학습할 수 있도록 하려면?

:MRC 데이터와 비슷하게 3단으로 구성. 사실관계(본문) - 질문 - 응답

1. MRC(Machine Reading Comprehension)

기계독해. 주어진 문서에서 사용자가 던진 질문에 대한 답을 추출하여 보여주는 기술.

기존 MRC 알고리즘이 법률 도메인에서 유의미하게 작동하는지 확인하려면??

: korquad 데이터셋으로 알고리즘이 작동하는지 먼저 확인. 그리고 코메이크 정관 검토 dataset 활용, 법률 도메인에서 MRC 알고리즘의 작동 확인.

1. 토큰화
- 주어진 코퍼스에서 토큰이라 불리는 단위로 나누는 작업. 토큰의 기준이 단어인 경우, 단어 토큰화. 문장인 경우, 문장 토큰화.

- 한국어의 단점:

한국어는 영어와는 달리 띄어쓰기만으로는 토큰화를 하기에 부족함. 왜냐하면 

1) 한국어는 조사, 어미 등을 붙여서 말을 만드는 교착어이기 때문. 형태소도 이해해야!

예를 들어 다음과 같은 문장이 있다고 합시다.

- 문장 : 에디가 책을 읽었다

이 문장을 띄어쓰기 단위 토큰화를 수행한다면 다음과 같은 결과를 얻습니다.

- ['에디가', '책을', '읽었다']

하지만 이를 형태소 단위로 분해하면 다음과 같습니다.

자립 형태소 : 에디, 책의존 형태소 : -가, -을, 읽-, -었, -다

어절 토큰화가 아닌, 형태소 토큰화를 해야 함!

2) 한국어는 띄어쓰기가 잘 지켜지지 않는 경우가 많음.

→ 이건 혹시 맞춤법 검사기에 자동으로 돌아가게 해놓으면 안되려나??

- 품사 태깅: 단어 토큰화 과정에서 각 단어가 어떤 품사로 쓰였는지 구분하는 것.

1. 정제 & 정규화

토큰화 작업 전, 후에는 text 데이터를 용도에 맞게 정제 및 졍규화하는 일이 항상 있음. 정제는 노이즈를 제거하는 목적, 정규화는 표현법이 다른 단어들을 통합해 같은 단어로 만들어주는 목적.

- 규칙에 기반한 표기가 다른 단어들의 통합
- 대, 소문자 통합
- 불필요한 단어 제거

등장 빈도 적은 단어

길이 짧은 단어(특히 영어)

- 정규 표현식

# 220908

1. 어간 추출 & 표제어 추출

단어의 개수를 줄일 수 있는 기법. 눈으로 봤을 때는 서로 다른 단어들이지만 하나의 단어로 일반화시킬 수 있다면 일반화 시켜서 단어 수를 줄이는 것. 자연어 처리에서 전처리, 더 정확히 정규화의 지향점은 언제나 갖고 있는 코퍼스로부터 복잡성을 줄이는 일.

- 표제어 추출(Lemmatization)

표제어(Lemma)는 ‘기본 사전형 단어’. **am, is, are의 표제어는 be**.

표제어 추출의 방법은 형태학적 파싱을 먼저 진행하는 것. 형태소는 의미를 가진 가장 작은 단위. 형태학은 형태소로부터 단어들을 만들어가는 학문. 형태소의 종류는 어간(stem), 접사(affix).

어간 - 단어의 의미를 담고 있는 단어의 핵심 부분.

접사 - 단어에 추가적인 의미를 주는 부분.

cats에서 cat(어간), -s(접사)

- 어간 추출

어간을 추출. 어간 추출 후에 나오는 결과 단어는 사전에 존재하지 않는 단어일 수 있음.

**규칙 기반**의 접근임. formalize → formal. allowance → allow 등등

EX)

**Stemming**

am → am

the going → the go

having → hav

**Lemmatization**

am → be

the going → the going

having → have

- 한국어에서의 어간 추출

체언: 명사, 대명사, 수사. 수식언: 관형사, 부사. 관계언: 조사. 독립언: 감탄사. 용언(어간+어미): 동사, 형용사.

활용(conjugation): 용언의 어간이 어미를 갖는 것.

규칙활용: 어간이 어미를 취할 때 어간의 모습이 일정.

불규칙활용: 어간이 어미를 취할 때 어간의 모습이 바뀌거나 취하는 어미가 특수한 어미일 경우

1. 불용어(stopword)

I, my, me, 조사, 접미사 같이 큰 의미가 없는 단어(제거해야). 직접 정의할 수도 있음.

1. 정규 표현식

정규 표현식 모듈 re.

# 220922

- Pycharm - 원격 서버 연결 및 python interpreter 설정

설정→Python Interpreter에서 add 선택

→ on ssh 선택 → IP랑 아이디, 비밀번호 입력

~~→ 접속 후에, Location: 사용할 내 컴퓨터의 local 폴더. C:\Users\~~로 주소 입력하면 에러 발생하니까 ‘C:\’ 이렇게 앞에 세 글자 제거하고 붙여넣기 해야 함!~~

→ Base Interpreter: 서버 내의 내가 만든 프로젝트 폴더(git clone했으면 그 clone한 폴더) 안에 내가 만든 가상환경(myenv) 안에 bin/python 까지 선택

→ sync folder: 내 로컬 폴더와 싱크로나이즈 할 서버상의 폴더 선택하는 것. 서버 내의 프로젝트 폴더(진행할 프로젝트의 최상위 폴더. 지금은 KoELECTRA.)

# 220923

위에서 Local 저렇게 하면 안됨..

sync folders 클릭하면 왼쪽에 local directory가 있음. 여기서 어짜피 동기화가 일어나기 때문에 ‘Location’부분에서는 로컬 디렉토리를 넣는게 아니라 

(지금으로서는) /home/firefpswl/.virtualenvs/pythonProject1

이라고, 자동으로 생성되는 저거 그대로 놔둬야 함! 파이썬 코드 실행 시킬 때 22일에 했던 방식대로 하면 ‘Users/Samsug/…./bin/python’ 이라는 디렉토리가 없다는 오류(오류넘버 127)가 뜨는데, 아마 파이썬을 돌리려 하는데 User/samsung/…어쩌고 로컬에서는 그런게 없어서 나는 오류 같음. 

그럼 Location을 “base interpreter에서 설정해준 python이 서버 상에서 돌아갈 Location(?)”이라고 이해해도 되려나 싶네요..?!

돌려볼 것: **KoELECTRA-Base-v3.** `config_file` 이 이 모델인듯? `task` 가 데이터셋.

그리고 지금 깃헙 상에 ‘finetune’ 돌리려고 하는건데, 그럴려면 로컬에도 그 똑같은 finetune 폴더를 다운로드 받아서 해야 한다고 함. → ??? 왜그러지

# 220926

내가 사용할 gpu는 1번이므로

**CUDA_VISIBLE_DEVICES=1** python3 run_squad.py --task korquad --config_file xlm-roberta.json

이렇게 코드 실행!!

그리고 발생한 에러

“****RuntimeError: CUDA error: no kernel image is available for execution on the device”****

는 깃허브에서 requirement.txt로 다운받은 torch의 버전이 우리 연구실 서버의 gpu와 맞지 않아서 생기는 문제로, [https://bluecolorsky.tistory.com/71](https://bluecolorsky.tistory.com/71) 처럼 compute capability 바꾸어놓고

pip uninstall torch 한 뒤에

nvcc -V 로 쿠다 버전(나는 11.3) 확인한 후 그 쿠다 버전에 맞는 pytorch를 깔아야 함! 

나는 [https://pytorch.org/](https://pytorch.org/) 여기서 pip으로 쿠다 11.3에 맞는 코드 실행ㅇㅇ.

주의: pip3 말고 pip 쓰기!

# 220927

코드 실행 중에 컴퓨터가 꺼지는 등의 상황이 발생해도 계속해서 서버를 사용할 수 있도록 하려면 ‘screen’ 기능 사용해야. 한 스크린 위에 여러 개의 window 만들고 사용하는 것도 가능함!

명령어는 [https://hyeonnii.tistory.com/295](https://hyeonnii.tistory.com/295) 나는 이 사이트에서 참고 많이 했음!

- 법률 XAI 회의

- 민법, 형법, 형사소송법, 상법 등 법의 카테고리에 따라 모델이 달라져야 할 것 같음. 왜냐하면 문제풀이 방법이 조금씩 다르기 때문.

- 형법 먼저 진행될 것 같은데, 1. 사실관계 파악 2. 범죄성립 여부 검토 3. 쟁점별 판단 기준(?) 이 세 단계로 문제 푸는 방식이 구성됨. 2번 ‘범죄성립 여부 검토’에서는 <구성요건해당성>이 중요할 거라 하심!

- 주어진 텍스트를 ‘사실관계’로 먼저 토큰화(?)한 뒤에 그 사실관계들로부터 쟁점을 뽑아내는 게 중요한 것 같다. 이 쟁점이 어떤지에 따라 판례를 푸는 방향이 달라지기 때문. 처음에는 이 쟁점이 주관적인 건가..? 싶었는데 얘기를 들어보니 지금까지 쌓인 과거 데이터&선례에 의해 쟁점이 구해지는 것 같다. 동시에 그 쟁점에 관련된 법 조항도 파악하시는 듯.

- <사실관계↔쟁점↔법 조항&판례> 동시파악 by 암기.

- 판례는 대법원에서 내린 절대적인 판단 기준! 판례에 정답이 있다는 측면에서 ㄱㄱ.

- Q. 조합해서 글만 쓰는 AI를 만들어야? 아니면 무슨.. 구성요건이 성립하는지를 모델이 추론하기까지 하는 AI인지? → 사례 읽고 사실관계랑 쟁점 불러오는게 가장 중요..!

- 실제 사안과 문제의 사실관계 간의 유사도..? 도 중요?