Word2vec 모델을 사용하여 단어 예측


20

"나는 열 때 ?? 문을 자동으로 가열 시작을"

가능한 단어 목록을 얻고 싶습니다 ?? ?? 확률로.

word2vec 모델에 사용 된 기본 개념은 주변 문맥에서 단어를 "예측"하는 것입니다.

모델이 구축되면 새로운 문장에 대한 예측 작업을 수행하는 올바른 컨텍스트 벡터 작업은 무엇입니까?

단순히 선형 합계입니까?

model.most_similar(positive=['When','I','open','the','door','it','starts' ,'heating','automatically'])

위의 알고리즘을 구현하고 질문이 발생했습니다. softmax는 왜 사용됩니까? 두 가지 정규화 함수의 예를 보여 드리겠습니다. def softmax (w, t = 1.0) : # 출처 : gist.github.com/stober/1946926 e = np.exp (w / t) return e / np.sum ( e) def 정규화 (w) : return w / np.sum (w) a = np.array ([. 0002, .0001, .01, .03]) 인쇄 정규화 (a) print softmax (a, t = 1 ) 출력을 비교해 보자 : [0.00496278 0.00248139 0.24813896 0.74441687] [0.24752496 0.24750021 0.24996263 0.25501221] 우리가 볼 수 있듯이, softmax는 .03과 .0001과 거의 같은 확률을 .03으로 나타냅니다 (

답변:


9

Word2vec는 두 가지 모델 CBOW와 스킵 그램에서 작동합니다. 질문이 주변 단어를 고려할 때 대상 단어를 예측하는 것과 같은 방식으로 진행되므로 CBOW 모델을 사용하겠습니다.

기본적으로이 모델은 입력 및 출력 가중치 매트릭스를 개발하는데, 입력 매트릭스 및 출력 대상 단어에 따라 숨겨진 레이어를 사용합니다. 따라서 역전 파는 예측 된 출력 벡터와 현재 출력 행렬 사이의 오차 차이가있을 때 가중치를 업데이트하는 데 사용됩니다.

기본적으로, 주어진 문맥 단어로부터 목표 단어를 예측하는 것은 주어진 데이터에 대한 최적의 가중치 행렬을 얻기위한 방정식으로 사용됩니다.

두 번째 부분에 답하면 선형 합계보다 약간 복잡해 보입니다.

  1. 문맥 단어의 모든 단어 벡터를 구합니다
  2. h크기 의 숨겨진 레이어 벡터를 찾기 위해 평균화Nx1
  3. 크기가 큰 출력 행렬 syn1( word2vec.c또는 gensim)을 구합니다.VxN
  4. 곱하기 syn1하여 h, 그 결과 벡터가 될 것입니다 z크기Vx1
  5. y = softmax(z)size를 사용 하여 확률 벡터 를 계산하십시오 Vx1. 여기서 가장 높은 확률은 어휘로 대상 단어의 원-핫 표현을 나타냅니다. V는 어휘의 크기를 N나타내며 삽입 벡터의 크기를 나타냅니다.

출처 : http://cs224d.stanford.edu/lecture_notes/LectureNotes1.pdf

업데이트 : 장기 단기 메모리 모델은 현재 다음 단어를 예측하는 데 큰 노력을 기울이고 있습니다. seq2seq 모델은 tensorflow tutorial 에서 설명 합니다. 텍스트 생성에 관한 블로그 게시물 도 있습니다 .


고맙습니다 ! 이 구현에 대해 알고 있습니까? (예를 들어 gensim의 일부로). 그렇지 않으면 계산하기가 너무 복잡해 보이지 않습니다.
DED

안녕하세요, 훈련 된 w2v 임베딩 모델에서 출력 행렬 (예 : syn1)을 검색하는 방법에 대한 자세한 내용을 알려 주시겠습니까? 훈련이 끝나면 w2v가 출력 행렬을 떨어 뜨렸다 고 생각합니다.
Charles Chow

내 이해를 바탕으로 두 번째 질문에 대한 대답은 출력 행렬을 재구성하는 것입니다. 맞습니까?
Charles Chow

1
이것이 시퀀스 분류기처럼 작동하지 않는다는 점에 주목할 가치가 있다고 생각합니다. 단어의 순서는 무시됩니다.
표시 이름

syn1모델을 저장하여 출력 행렬 을 얻을 수 있습니다 . 예, 순서는 무시됩니다. 응용 프로그램에서는 실제로 LSTM 기반 seq2seq 모델을 사용할 수 있습니다.
yazhi

4

누락 된 단어 예측은 최신 버전의 Word2Vec에서 기능으로 추가되었습니다. 물론 문장은 모델 학습에 사용되는 Word2Vec 모델 입력 구문 (소문자, 정지 단어 등)과 일치해야합니다.

"언제 열 때?"에 대한 상위 3 개의 단어를 예측하는 사용법 :

print(model.predict_output_word(['When','I','open','door']), topn = 3)

center단어가 세 번째 단어와 네 번째 단어 사이에 있다는 것을 어떻게 알 수 있습니까? 그건 말이되지 않습니다. 난 단지 짝수 상황에 맞는 단어에 넣어 수 상상과는 사이에 단어를 선택 것 floor(len(n)/2))하고floor(len(n)/2))+1
BMC
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.