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