단어 벡터 합계 및 결과 비교라는 순진한 접근 방식을 사용하여 문장 비교 문제를 해결하려고합니다. 내 목표는 사람들을 관심 분야별로 매치시키는 것이므로 데이터 세트는 이름과 취미를 설명하는 짧은 문장으로 구성됩니다. 일괄 처리는 매우 작고 수백 명에 불과하므로 doc2vec를 파헤 치기 전에 시도해보고 싶었습니다.gensim과 문장 일치 word2vec : 수동으로 채워진 모델이 작동하지 않습니다.
데이터를 완전히 청소하고, 중지 단어를 제거하고, 토큰 화하고, lemmatizing하여 데이터를 준비합니다. 일부 테스트 단어에 대해 유사성을 찾을 때 적절한 결과를 반환하는 단어 벡터에 대해 사전 훈련 된 모델을 사용합니다. 또한 원래 모델의 유사점을 찾기 위해 문장 단어를 합산 해 보았습니다. 일치는 의미가 있습니다. 유사점은 문구의 일반적인 의미 주위에있을 것입니다.
는 문장 일치를 위해 나는 다음과 같은 노력하고있어 :b = gs.models.Word2Vec(min_count=1, size=300, sample=0, hs=0)
빌드 Vocab의 이름 (또는 사람 아이디의), 별도의 교육
#first create vocab with an empty vector
test = [['test']]
b.build_vocab(test)
b.wv.syn0[b.wv.vocab['test'].index] = b.wv.syn0[b.wv.vocab['test'].index]*0
#populate vocab from an array
b.build_vocab([personIds], update=True)
써머 각 문장의 단어 벡터에서 빈 모델을 생성 해당 id에 대한 모델에 결과를 저장하십시오.
#sentences are pulled from pandas dataset df. 'a' is a pre-trained model i use to get vectors for each word
def summ(phrase, start_model):
'''
vector addition function
'''
#starting with a vector of 0's
sum_vec = start_model.word_vec("cat_NOUN")*0
for word in phrase:
sum_vec += start_model.word_vec(word)
return sum_vec
for i, row in df.iterrows():
try:
personId = row["ID"]
summVec = summ(df.iloc[i,1],a)
#updating syn0 for each name/id in vocabulary
b.wv.syn0[b.wv.vocab[personId].index] = summVec
except:
pass
여기서 많은 정확성을 기대할 수는 없지만 t-SNE 인쇄에는 클러스터링이 전혀 표시되지 않습니다. 유사성 방법을 찾는 것은 또한 일치를 찾지 못합니다 (기본적으로 모든 것에 대한 유사성 계수는 <입니다). [
어디에서 잘못 됐는지 생각하는 사람이 있습니까? 내 접근법은 전혀 유효합니까?
답변 해 주셔서 감사합니다. syn0 기능과 관련하여 혼란 스러웠습니다. 일부 Google 그룹 토론에서이 업데이트 권장 사항을 보았 기 때문입니다. 나는 유사성 계산을 위해 scipy.spatial.distance.cosine()을 시도하는 조언을 받았고 그것은 저를 위해 잘 작동했습니다. – Nick