« A propos de word2vec est erroné »: papier et mondes de code à part, est un phénomène commun?

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

Roi de gloire: les joueurs préfèrent avoir des points grondé ses coéquipiers, voir le dossier, le conseil reconnaît frère secondes
Précédent
DNF: Moods force 10! Asahi Asahi bébé jeu Prairie seulement 11 secondes plus vite que la vitesse du bouchon
Prochain
La plupart avec impatience cette année drame TVB sera joué mari joué Kenneth Ma Yong Tang et femme triangle amoureux piège de divorce
La nouvelle étude Zhongshan + byte battre etc. | sous-vêtements déesse gilet devient juste une esquisse de quelques
DNF a voulu faire un grand film? évaluation globale IP est classé 37, beaucoup plus que le champion du box-office Avatar
Tony Leung Ka Fai "Chasing the Dragon 2" agissant fondit Louis Koo connu comme successeurs Andy?
La plupart des purs fabricants de jeux intérieurs, ne font pas d'argent, mais aussi prendre l'initiative de rappeler aux joueurs
« Coup de tonnerre » a vendu plus de 1 million de nouvelles cartes, nouveau mortier viendra
Roi de gloire remportant la dernière liste de classement publié, le nuage est au gaspillage roi, et même ne peut pas entrer dans le top 40
Remède nouveau « contrôle » notation publiée: M-classe, un langage vulgaire trop violent
Apple retracée cherche à acquérir Drive.ai: Andrew Ng impliqué dans des opérations, un certain nombre d'investissements en CR chinois
groupe le plus critique des acteurs du réseau, même chef d'uvre 3A, ils peuvent trouver des lacunes
Changsha, un département de projet de chantier de construction pour les travailleurs de la construction d'envoyer des condoléances au Dragon Boat Festival
artistes TVB tout drame rythme continentale dans un rôle de soutien, et non en tant que représentant de la majeure partie du tournage de la série