0
votes

Gestion des mots OOV dans Googlenews-Vectors-Négatif300.bin

Je dois calculer le mot vecteurs pour chaque mot d'une phrase qui est togénisée comme suit: xxx

si j'utilisais le prétendu [FastText] [1] embarquage: cc.en .300.bin.gz par Facebook. Je pourrais avoir par ov. Cependant, lorsque j'utilise Google Word2vec de Googlenews-Vectors-Négion300.bin, il renvoie une erreur invalide. Ma question est de savoir comment nous calculons le mot vecteurs qui sont OOV alors? J'ai cherché en ligne je n'ai pu trouver rien. Bien sûr, c'est en train de supprimer toutes les phrases qui ont des mots non répertoriés dans le Word2vec de Google. Cependant, j'ai remarqué que 5550 sur 16134 ont des mots complètement dans l'intégration.

J'ai aussi xxx

Cependant, TENSORFLOW 2 renvoie une erreur.

Toute aide pour l'apprécier grandement.


3 commentaires

Si le vocabulaire n'est pas trouvé, vous pouvez les initialiser avec un vecteur zéro (c'est-à-dire des vecteurs de 300 dimensions, tous 0).


Voulez-vous dire, je crée une classe enfant de gensim.models.keedvectors.word2veckeyedvectors, puis remplissez-la 'get_vec' méthode là-bas? Si oui, avons-je trouvé la mise en œuvre? Merci.


Je pense que vous pouvez simplement faire un essayer et sauf au lieu de créer une classe enfant. Voir ma réponse.


3 Réponses :


1
votes

Si le vocabulaire n'est pas trouvé, les initialisez-les avec un vecteur zéro de la même taille (Google Word2vec doit être un vecteur de 300 dimensions):

try:
    word_vector = model.wv.get_vector('your_word_here')

except KeyError:
    word_vector = np.zeros((300,))


0 commentaires

0
votes

génial! Merci beaucoup.

def get_vectorOOV(s):
  try:
    return np.array(model.wv.get_vector(s))
  except KeyError:
    return np.zeros((300,))


0 commentaires

1
votes

Le fichier googlenews vecteur est une cartographie simple des mots aux vecteurs. Il n'y a pas d'installation dedans (ou les algorithmes qui l'ont créé) pour synthétiser des vecteurs pour des mots inconnus.

(De même, si vous chargez un jeu de vecteur uni dans GENSIM en tant que keedVectors , il n'y a aucune possibilité d'exécuter train () sur L'objet résultant, comme vous le montrez dans votre code de question. Ce n'est pas un modèle formable complet, juste une collection de vecteurs.)

Vous pouvez vérifier si un mot est disponible, en utilisant le mot-clé dans . Comme d'autres réponses ont été notées, vous pouvez ensuite choisir d'utiliser une valeur de bouchon (telle qu'un vecteur de Zeros) pour de tels mots.

Mais il est souvent préférable de simplement ignorer de tels mots entièrement - prétendre qu'ils ne sont même pas dans votre texte. (Utilisant un vecteur zéro à la place, puis vous nourrissez de zéro-vecteur dans d'autres parties de votre système, peut rendre ces mots inconnus essentiellement diluer l'influence des autres mot-vecteurs à proximité - ce qui n'est souvent pas ce que vous voulez.)


1 commentaires

Merci pour le récapitulatif. Je pense que dans mon cas tout 0 vecteur, était la voie à suivre et j'ai eu une précision de 100% sur mon ensemble de test invisible! Maintenant tu m'as fait me demander!