Je suis en train de résoudre un problème de comparaison de phrases en utilisant l'approche naïve de résumer des vecteurs de mots et de comparer les résultats. Mon but est de faire correspondre les gens par intérêt, de sorte que l'ensemble de données se compose de noms et de courtes phrases décrivant leurs passe-temps. Les lots sont assez petits, quelques centaines de personnes, donc je voulais essayer avant de chercher dans doc2vec.phrase correspondant à gensim word2vec: modèle manuellement peuplé ne fonctionne pas
I préparer les données en le nettoyant complètement, en enlevant des mots d'arrêt, de jetons et lemmatizing. J'utilise un modèle pré-entraîné pour les vecteurs de mots qui renvoie des résultats adéquats lorsque je trouve des similitudes pour certains mots d'essai. Également essayé de résumer les mots de la phrase pour trouver des similitudes dans le modèle original - les correspondances ont un sens. Les similitudes seraient autour du sens général de l'expression.
Pour une correspondance de phrase que je suis en train de ce qui suit: créer un modèle vide
b = gs.models.Word2Vec(min_count=1, size=300, sample=0, hs=0)
vocab aménageons des noms (ou personne id), aucune formation
#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)
Summ vecteurs de mot de chaque phrase et stocker les résultats dans le modèle pour un id correspondant
#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
Je comprends que je ne devrait pas s'attendre à beaucoup de précision ici, mais l'impression t-SNE ne montre aucun regroupement que ce soit. Trouver des similitudes méthode ne parvient pas non plus à trouver des correspondances (< 0,2 coefficient de similitude essentiellement pour tout). [
Vous vous demandez si quelqu'un a une idée de l'endroit où je ne me trompe? Est-ce que mon approche est valide?
merci pour votre réponse! J'ai été confus au sujet de la fonctionnalité syn0 parce que j'ai vu cette recommandation de mise à jour dans certaines discussions sur les groupes de google. J'ai eu un conseil pour essayer scipy.spatial.distance.cosine() pour le calcul de similarité et cela a fonctionné très bien pour moi. – Nick