---
# System prepended metadata

title: 모델
tags: [final-project]

---

# 모델
###### tags: `final-project`

# DART데이터와 뉴스데이터간 STS

## 모델을 도입하는 이유:
- 현재의 접근:
    - 뉴스내 키워드(텍스트)를 기반으로한 BM25
    - 정의된 사전지식을 기반으로한 지식그래프기반 예측
- 새로운 접근: 단순 텍스트 빈도수 기반 모델과 달리 문맥(contextualized vector)을 통해 관련주를 찾기 위함

## 데이터 수집
네이버증권에서 DART 데이터셋에 존재하는 기업들의 
연관뉴스를 수집  
![](https://i.imgur.com/UUfSwGd.png)
### 문맥학습을 위한 기업이름 mask
![](https://i.imgur.com/Uv21qyL.png)


## 입력 데이터
1. 기업의 이름이 마스킹된 뉴스 데이터 (n개) 
    - 평균적인 문서 길이 2000
2. Dart 데이터 (약2500개) 
    - 평균적인 문서 길이 1000


#### 입력 데이터 전처리
    - 길이 500, 윈도우 100으로 설정
    

## 모델
![모델 개요](https://i.imgur.com/ls2Wx7A.png)

    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개의 기업

