jaekeol / fasttextRA

1 stars 0 forks source link

실험진행 #1

Open jaekeol opened 5 years ago

jaekeol commented 5 years ago
jaekeol commented 5 years ago

2019.02.12

jaekeol commented 5 years ago

2019.02.23

jaekeol commented 5 years ago

2019.02.23 input data 구하는 부분이 잘못되어 수정하였다. wikifil.pl 의 맨 마지막 라인에 print $_ . "\n" 으로 변경함

jaekeol commented 5 years ago

2019.02.23 TF-IDF 를 사용해서 품지을 올릴 수 있을지 실험해 보려한다.

jaekeol commented 5 years ago

IDF 구하기

10점 정도가 평균인데, 6번 정도 문서에서 나온것이 평균, 중앙값이다. skew를 보면, 오른쪽으로 치우친 모습임을 알 수 있다.

jaekeol commented 5 years ago

IDF 작은값을 줄여서 vector구하기

jaekeol commented 5 years ago

IDF 결과 분석

jaekeol commented 5 years ago

살짝, shirnk하는 정도에서는 결과가 매우 조금 좋아진다.

./makevec_with_idf_little.py ngrams.idf.sel ngrams.vec > made_idf.vec.little ./sim_eval.sh

affix의 유사도를 좀 더해주면 더 좋아지려나?

jaekeol commented 5 years ago

방향

(1) scarcenss vs rarity ,, corroding vs decay 두 개의 root와 affix 유사도가 함께 높으므로 가점을 한다. 일반적인 cosine쓰지말고,, 다르게 계산하자.

(2) root x root, affix x affix .. 등 4사분면을 모두 살펴서, polluted 인지 아닌지 살피고,, 값을 올려줄지 말지 결정.

jaekeol commented 5 years ago

소스 분석

(1) computeHidden hidden_ vector는 대상 word의 ngram을 모조리 sum해서 normalize한 vector이다. ( wi 이용 - ngram matrix )

(2) computeLoss - binaryLogistic hidden_과 주변 word 의 내적을 하고 sigmoid한게 score이다. ( wo 이용 - word 의 matrix ) alpha = ( 1-score ) * learnigRate 만큼 조정하려고 한다.

wo 는 hidden ( 즉 ngram의 합) 에 alpha를 곱한 즉, 작은 hidden 방향으로 움직여 준다.

(3) update grad 는 vector로 wo 에 있는 word 값에다가 alpha 곱한값 즉,, word의 작은 vector 방향으로, ngram을 움직이려고 하는것이다. wi ( ngram)을 grad 방향으로 움직여 준다.


그러므로, score를 idf 를 weight로 곱해서 사용하는 방식으로 바꾸려면, 첫째, hidden을 만들때 idf 곱해서 만들어야 한다. 둘째, update할때, word가 바뀌는 것은 상관없다. hidden을 이용하기 때문이다. 셋째, update할때, ngram을 바꾸려 할때는,, hidden을 바꾸려는 것이기 때문에, hidden을 다시 ngram으로 내릴때는 weight를 가지고 내려와야 할것같다. 이 부분은 확인 필요하다.

jaekeol commented 5 years ago

idf 만들기

probabilistic inverse document frequency 를 이용하기로 한다. 마이너스 부터 양수까지 펼쳐지기때문에, sigmoid함수랑 잘 어울린다. idf-value = sigmoid ( probablistic idf ) = sigmoid ( log ( ( n - freq) / freq ) )

jaekeol commented 5 years ago

weight를 이용하는 fasttext로 수정하기

(0) idf 값을 모델이 알도록 initialize 하기

(1) Hidden 만들때 weight사용하기

(2) wi 업데이트할때 weight사용하기

jaekeol commented 5 years ago

fast text 1차 수정완료

(1) idf값을 읽어드릴 수 있도록 fasttext.cc 를 수정하였다. readIdf 라는 함수를 추가했다. 이때, ngram의 index를 구하는 부분이 어려웠고, 한번확인하였으나, 재차 확인이 필요하다.

(2) hidden을 만들때, weight 를 참조하도록, model.cc를 변경하였다.

(3) wi 업데이트할때 weight만큼 업데이트 하도록 model을 변경하였다.

(4) output vector만들때도 weight를 참조하도록 main.cc를 변경하였고, vector.cc도 변경하였다. const 함수여서 생긴문제가 있었다. ( getWordVector : const제거한 함수로 해결하였다)

jaekeol commented 5 years ago

idf 값의 편차가 더 크게 하여, ( 제곱햇다.) 실험을 진행

idf에 변형없이 사용하는 것이 결과가 더 좋았다.

jaekeol commented 5 years ago

Analogy test. Semantic & Syntactic

(1) origianl 에서 ./word-anal.sh > result/lt 19544.0 10193 9351.0 이므로, 대략 52%

(2) idf 에서 ./word-anal.sh > result/lt 19544.0 9895 9649.0 이므로 대략 50.6%

뭔가 실험을 잘못했을 수도 있다.

jaekeol commented 5 years ago

wikien 2019.03.12 버젼 전체로 사용하는 실험 진행

(1) original version 실험진행중

jaekeol commented 5 years ago

논문따라, 입력데이터, dimension 바꾸면서 실험하기

(1) 논문에 보면, 780M 데이터로 640 디멘션일때 성능이 좋다고 나와있다. 이것을 확인하려고 한다.

(2) 그 다음 idf사용한 버젼을 그대로 따라 해보려고 함. 이때 성능이 올라야함,

maygodwithu commented 5 years ago

multisense p-fastText 에도 idf 를 적용할 수 있어 보인다.

git clone "https://github.com/benathi/multisense-prob-fasttext" 로 코드 받아서 수정시작한다.

jaekeol commented 5 years ago

p-fastText 1차 실험

./train_text8_multi.sh 이용해서 모델만들고 python eval_model_wordsim.py --modelname ./modelfiles/multi_text8_e10_d300_vs2e-4_lr1e-5_margin1 이렇게 sim test 하였다.

결과는 Result DataFrame Dataset sub sub2 sub-maxsim 0 SL 27.116255 9.231124 27.014270 1 WS 60.322466 34.320081 64.150658 2 WS-S 65.194663 36.573338 66.196390 3 WS-R 57.189281 34.223905 61.065991 4 MEN 66.296172 30.443716 68.652553 5 MC 55.095684 39.430353 58.878506 6 RG 58.202839 37.967021 56.548393 7 YP 34.560108 -1.322934 38.716567 8 MT-287 64.634530 42.245588 64.285414 9 MT-771 56.891606 25.814161 56.541948 10 RW 36.858887 0.064312 34.685984

maygodwithu commented 5 years ago

weight learning

웨이트를 idf로 fix하지 않고, learning하기로 한다. grad_를 이용하여 ngram_vector를 업데이트 하는 부분에서 weight도 dimension으로 나눈값으로 gradient descent 하기로한다.