# 모델
###### tags: `final-project`
# DART데이터와 뉴스데이터간 STS
## 모델을 도입하는 이유:
- 현재의 접근:
- 뉴스내 키워드(텍스트)를 기반으로한 BM25
- 정의된 사전지식을 기반으로한 지식그래프기반 예측
- 새로운 접근: 단순 텍스트 빈도수 기반 모델과 달리 문맥(contextualized vector)을 통해 관련주를 찾기 위함
## 데이터 수집
네이버증권에서 DART 데이터셋에 존재하는 기업들의
연관뉴스를 수집

### 문맥학습을 위한 기업이름 mask

## 입력 데이터
1. 기업의 이름이 마스킹된 뉴스 데이터 (n개)
- 평균적인 문서 길이 2000
2. Dart 데이터 (약2500개)
- 평균적인 문서 길이 1000
#### 입력 데이터 전처리
- 길이 500, 윈도우 100으로 설정
## 모델

1. 기업단어 빈칸 (DART<->NEWS) STS로 관련주 추출
- 긴 뉴스 문장 해결 방법
- 긴 다트 문장 해결 방법
- xml으로 데이터가 제공 됨. 동일 기업의 사업 보고서에 대해서 `<p>` 태그 단위로 구분해서 여러 데이터를 만든다. 넣어서 soft voting? 등의 방법으로...
2. 사전 학습 모델은 무엇으로?
- KLUE-MRC 대상으로 학습된 모델이 의미가 있을 것 같다.
- domain adaptation은 안필요할까요?
- 경제 뉴스 기사로 사전 학습은 안해도 될까여?
- klue는 위키 기반?이니까 불필요한 학습도 있다면?!
## 모델의 output
(n개 뉴스 * n'(passage 조각 수) x DART 문서의 갯수 * k'(passage 조각 수))
passage 조각 수: BERT 모델의 sequence length limit에 적용하기 위해 잘라서 나오는 passage의 n' = len(n[i])/max_length
-> passage 조각 수 보다 더 좋은 단어 선택 찾습니다 ㅜㅜ
## 사후처리 방법 4가지?
STS 인코더의 output으로 ((n*n')x(k*k'))가 나옴
- n : 뉴스의 갯수
- k : DART의 갯수
- n' : 뉴스를 BERT모델의 입력으로 넣기 위해 자른 갯수
- k' : DART를 BERT모델의 입력으로 넣기 위해 자른 갯수
### k*k' 처리(1개의 뉴스 기사가 입력으로 들어갔을 때 나오는 유사도의 경우의 수)
1. 얻어진 유사도를 같은 기업끼리 평균내서 사용 sum(k)/k'
2. 얻어진 유사도를 같은 기업끼리 합해서 사용
3. 얻어진 유사도를 내림차순 정렬한 뒤 top3개의 기업을 뽑음. 단, 같은 회사가 연속으로 나올 시에는 다른 회사가 나올 때 까지 탐색
### n*n' 처리
먼저 k*k'를 처리한 뒤
1. 여기는 softvoting
## 최종 출력 데이터 형식
뉴스 데이터와 관련된 topk개의 기업