umbum / stock-prediction-using-news

Stock Prediction with Deep Learning System Using Technical Indicators and Financial News
1 stars 1 forks source link

한글 뉴스 문장에서 주어/목적어/서술어 분리하기 #1

Closed umbum closed 5 years ago

umbum commented 5 years ago

https://github.com/lovit/soynlp http://konlpy.org/en/latest/ 위 오픈소스를 이용하면 굳이 번역을 이용하지 않아도 단어 단위로 잘라낼 수 있음.
문제는 NTN에 집어넣기 위해서는 단순 단어의 나열이 아니라, OPO(주어, 목적어, 서술어) 형태로 문장을 잘라야 한다.
오픈소스를 이용해서 한글 OPO를 뽑아낼 수 있으면, 굳이 번역할 필요가 없다.
(Word2Vec은 어차피 학습 시킬거라 여기서 한글을 쓰면, Word2Vec도 한글로 학습시키면 되니까 상관 없음.)

soynlp와 konlpy의 차이

umbum commented 5 years ago

OpenIE의 문제점은 번역 뿐만아니라 또 있는데, 하나의 뉴스에서 추출되는 event가 여러개라는 점이다.
이 문제는 KoNLPy를 써도 동일하다... Noun, Verb, Noun 이렇게 자를 수는 있는데, 한 문장에서 Verb가 여러개 등장하거나 Noun이 여러개 등장하면 조합할 수 있는 event 수가 여러개가 된다.
이러한 이벤트 중에서 하나만 써야하나? 아니면 모든 이벤트를 다 써야 하나? 이벤트 하나만 쓰면 또 너무 간단해지는게 아닌가 싶고, 이벤트를 다 쓰면 각 뉴스마다 추출되는 이벤트의 수가 다른데, 그 영향이 과연 자동으로 조절될 것인가? 싶다.

이벤트를 다 쓰고 평균을 내는 것으로 해결!
한 뉴스에서 10개의 이벤트가 추출되었다고 가정하자.

  1. 이벤트 10개에 대해서 각각 U벡터를 계산한다.
  2. 이 U벡터들을 평균내어 U_news를 계산한다.
  3. 하루동안 있었던 U_news들을 평균내어 U_day를 계산한다.

그리고 복잡한 문장에서 수식어를 다 제거하고 Noun, Verb만 봤을 때 과연 얼마나 효과가 있을 것인가.. 하는 문제도 있다.
OpenIE를 사용했을 때 input으로 들어가는건 수식어구를 포함한 "해외 여행객이 반입하는 축산물"이라면, KoNLPy를 잘라서 나온 결과는 Noun "축산물" 한 단어이기 때문에, 훨씬 간단한 모델이다. 학습하는데 문제는 없겠지만 이 정도 단순한 정보를 가지고 얼마나 주가를 잘 예측할지는 좀 의문이긴 하다.

OpenIE처럼 복잡한 수식어구를 사용하는 방식은 Word embedding이 어렵다는 문제점이 있고,
KoNLPy처럼 단순한 단어를 사용하는 방식은 너무 간단해 prediction이 잘 될까? 하는 문제점이 있다.

아무튼, 이번에는 KoNLPy로 해본다.

umbum commented 5 years ago

word2Vec은 필요한가??

OpenIE를 쓰면 각 주어, 서술어, 목적어가 여러 단어의 조합으로 매우 긴 "구"가 된다.

이러한 "구"는 정말 다양할 수 있다. 예를 들어 "해외 여행객이 반입하는 축산물"과 "외국 여행자가 국내에 들여오는 축산물"과 같이 의미는 동일해도 전혀 다른 구가 될 수 있단 말이지...

그래서 word2vec으로 비슷한 "구"끼리는 비슷한 space에 mapping을 해서 비슷한 vector값을 가지도록 해서 "구"끼리 너무 sparse하다는 문제점을 해결하겠다. 라는 아이디어인데

word2vec으로 비슷한 "구"끼리 비슷한 space에 mapping을 하는게 제대로 되는가?

여러 단어로 이루어진 "구"를 vector로 바꾸려면, word2vec은 말그대로 word 기반이라서 most_similar([])를 이용해 단어를 반환받아야 한다.

생각해보니까 비슷한 space에 있는 vector를 반환할 것 같기는 하네...

그러면 KoNLPy를 써서 "구"가 아니라 한 단어로 넣는건...
이 것도 어쨌든 embedding을 하긴 해야하니까, word2vec에 돌리는게 나쁘지는 않아보인다.