Marrons du fond de la non-évidées Temple
Qubit produit | Numéro public QbitAI
word2vec Google en 2013 est un outil de langage open source.
réseau à deux niveaux, sera en mesure de devenir un mot vecteur important dans le domaine de la PNL, il est à la base de nombreuses fonctionnalités mises en uvre.
Mais maintenant, il est appelé un bollu (appelé ananas ) Programmeur, dire haut et fort au monde:
« A propos de word2vec, tout ce que vous savez est faux. »
Selon lui, L'explication de thèse, et le code pour obtenir un rapport parle est totalement différent.
N'est pas code open source, les papiers d'écriture ne pas écrire clairement pas d'importance?
Une exposition attention a attiré beaucoup de gens pour discuter et résonance, pas de chaleur demi-journée près de 300 points Hacker Nouvelles:
Alors, comment est la vision du monde d'ananas effondré, ses vrais yeux word2vec est comme?
Pas le même ciel
genre word2vec interprétation classique (Skip-Gram, le type d'échantillons négatifs), les papiers et le blog d'innombrables est écrit comme ceci:
Il ne peut y voir deux vecteurs.
Les programmeurs peuvent dire, je regardais le plus original word2vec langue Code de mise en uvre C , Vous trouverez complètement différent.
(La plupart avec des mots humains intégrés word2vec, soit appeler directement la mise en uvre C, soit l'appel gensim obtenir .gensim est une traduction de C pour obtenir plus, même les noms des variables sont les mêmes.)
C obtenir un long chemin
Chaque mot a deux vecteurs, chacun ayant un rôle différent:
En tant que représentation du mot mot-clé Regardez (Word Focus) quand.
Un centre exprimé comme un autre mot contexte Look (contexte Word) quand.
Ananas dit: il familier, Glove est emprunté des idées ici Il suffit de ne savez pas qui le dire.
Dans le code source en langage C, le réglage a été très bien, ces deux vecteurs tableau (Array) sont responsables de:
syn0 Array, comme responsable d'un mot mot-clé Lorsque le vecteur. il est initialisation aléatoire A.
syn1neg Array, comme responsable du mot contexte Lorsque le vecteur. il est Zéro initialisé A.
https://github.com/tmikolov/word2vec/blob/20c129af10659f7c50e86e3be406df663beff438/word2vec.c#L369 pour (a = 0; un < vocab_size; a ++) pour (b = 0; b < layer1_size; b ++) { next_random = next_random * (unsigned long long) 25214903917 + 11; syn0 = (((Next_random & 0xFFFF) / (réel) 65536) - 0,5) / layer1_size; }La formation, vous devez d'abord élire un mot-clé . Dans les échantillons positifs et négatifs du temps de formation, le centre du mot reste inchangé (Constant) a.
Le mot de gradient de centre de vecteur (Gradients), est accumulée dans le tampon (buffer) dans. Après l'effet positif et négatif de l'échantillon, ces gradients sont appliqués au centre du mot:
1 Si (négatif > 0) pour (d = 0; d < négatif + 1; d ++) { 2 // si nous effectuons un échantillonnage de négatif, dans la 1ère itération, 3 // choisir un mot du contexte et de définir la cible de produit scalaire à 14 si (d == 0) { 5 target = mot; 6 label = 1; 7} else { 8 // pour toutes les autres itérations, choisir un mot au hasard et mettre le point 9 // cible de produits à 010 next_random = next_random * (unsigned long long) 25214903917 + 11; 11 target = tableau ; 12 if (cible == 0) target = next_random% (vocab_size - 1) + 1; 13 si (cible == mot) continuer; 14 label = 0; 15} 16 L2 = cible * layer1_size; 17 f = 0; 1819 // trouver le produit scalaire du vecteur d'origine avec le vecteur négatif de l'échantillon 20 // magasin à f 21 pour (c = 0; c < layer1_size; c ++) f + = syn0 * Syn1neg ; 2223 // g = ensemble sigmoïde (f) (à peu près, la formule réelle est un peu plus complexe) 24 if (f > MAX_EXP) = g (label - 1) * alpha; 25 else if (f < -MAX_EXP) = g (label - 0) * alpha; 26 g = autre (label - expTable ) * alpha; 2728 // 1. Mise à jour le vecteur syn1neg, 29 // 2. NE PAS MISE À JOUR syn030 // 3. MAGASIN Le gradient de neu1e dans un tampon temporaire 31 pour (c = 0; c < layer1_size; c ++) neu1e + = G * syn1neg ; 32 pour (c = 0; c < layer1_size; c ++) syn1neg + = G * syn0 ; 33} 34 // Enfin, après tous les échantillons, la mise à jour de syn1 neu1e 35https: //github.com/tmikolov/word2vec/blob/20c129af10659f7c50e86e3be406df663beff438/word2vec.c#L54136 // En savoir entrée de poids - > caché 37Pour (c = 0; c < layer1_size; c ++) syn0 + = Neu1e ;La question est, pourquoi initialisation aléatoire Pourquoi Zéro initialisé ?
initialisation A propos de
Ces choses n'ont pas vu les journaux et parlé dans le blog, ananas notre seule spéculer pour un moment:
Étant donné que des échantillons négatifs (échantillon négatif) du texte vers le haut et vers le bas, de sorte imitèrent la fréquence de mot pour définir les poids, afin de choisir quel mot peut mot habituellement vectoriel encore combien par la formation.
Si ce vecteur a déjà une valeur, il peut être déplacé (Déplacement aléatoire) mot central.
La solution est de mettre tous les échantillons négatifs est fixé à zéro, de sorte que seuls ceux qui comptent comparer haute fréquence Vector se produit, il aura une incidence sur la caractérisation d'un autre vecteur.
Il a dit le programmeur, si oui, vraiment intelligent. Il a également jamais pensé avoir une telle stratégie importante pour initialiser, lire le journal ne peut pas voir.
regard direct sur le code, ne crois pas que les papiers
Avant cela, l'ananas a passé deux mois se reproduisent word2vec, lu de nombreux articles, échoue.
Peu importe combien de fois essayé ou non selon le document scores. Je ne peux pas croire que le score est compilé auteurs.
Enfin, il a décidé de lire attentivement le code source. Ouvrez la première lecture, je pensais que mal, parce que, avant et vu l'information ne sont pas les mêmes:
Je ne comprends pas pourquoi les documents originaux et blog en ligne, pour écrire word2vec pas vraiment comment cela fonctionne. Et donc je veux écrire votre propre.De plus dans ce processus, il était comme mentionné ci-dessus, a trouvé gant Pour le contexte (contexte) un vecteur unique de cette approche, d'où word2vec.
Le GANT l'auteur ne mentionne pas.
La pensée de ce fait, le programmeur a une nouvelle question:
Ce n'est pas La malhonnêteté académique (Academic Malhonnêteté) Pourquoi? Je ne sais pas le nombre, mais au moins c'est un problème très grave.En dehors triste, ananas a pris une décision pleine d'esprit: ne regardez pas le papier pour expliquer l'algorithme, Lire directement le code source .
Pourquoi cette habitude?
Discussion des documents et des incohérences réalisées, utilisez un compilateur Lire le journal pendant 40 ans Programmeur senior (DannyBee), occupe le rez-de-haut de la Hacker Nouvelles zone de commentaire.
Il a détaillé les années, les auteurs changement d'habitude :
Un grand nombre de la réalisation rapide de l'algorithme, et les principes sont description cohérente, la performance et match de description. Les documents seront utilisés seule différence entre pseudo-code (pseudo-code), avec une partie du pseudo-code, et la mise en uvre Où seront décrits en détail. Plus tard, les gens ont commencé disparu. Certains algorithmes papier, soit des uvres décrivent pas comme étant soit inefficace de ne pas utiliser. Regardez le code source va trouver le temps, le papier ne veut pas dire qu'il était. SSAPRE Est-ce un classique. Aujourd'hui, je l'ai lu des papiers se sentent encore difficile à comprendre. Le code source du compilateur en Open64 lu et papiers trouvés très différents (très différentes). Plus tard encore Avec GitHub ces communautés, les choses semblaient en bonne santé direction vers le développement précoce. Dans un tel environnement, word2vec considéré comme un contre-exemple, ils peuvent avoir l'impression que le code a été ouvert source, papiers à écrire effacer il n'a pas d'importance .Ensuite, il était en bas (nullwasamistake), ledit contre-exemple que celui-ci:
Quand j'ai réalisé un algorithme de tri table de hachage, nous avons trouvé un article récent a un problème similaire. Thèse jamais mentionné, la taille de la table doit être 2 ^ n. La pleine signification de cette recherche, il semble que, plus que tout autre algorithmes existants l'efficacité de la mémoire. Je l'ai fait un 2/3 trouvé, il n'y a pas plus efficace que les méthodes existantes, mais pire encore, à moins que la taille de la table dans un 2 ^ n. Bien que pas un mensonge carrément, Mais cette omission soit très créatif .Toutefois, lorsque le papier a indiqué que ta traîner, des amis qui Tucao aussi solide, il a dit:
Maintenant, il y a le risque de géants de la technologie de la critique, l'avenir peut aussi vouloir le travailler.Dans cette perspective, l'ananas est un garçon courageux.
portail
commentaires ananas word2vec intacts publiés sur github, sont intéressés peuvent aller voir:
https://github.com/bollu/bollu.github.io
De plus, Hacker Nouvelles section commentaire, plus facile de trouver le même sentiment:
https://news.ycombinator.com/item?id=20089515
- FIN -
recrutement sincère
Qubits recrutent éditeur / journaliste, basé à Zhongguancun de Beijing. Nous attendons de talent, des étudiants enthousiastes de nous rejoindre! Détails, s'il vous plaît interface de dialogue qubit numéro public (QbitAI), réponse mot "recrutement".
Qubit QbitAI · manchettes sur la signature de
' « suivre les nouvelles technologies AI dynamiques et de produits