520 paquets | algorithme d'analyse de sentiment du principe de la solution tout au combat PaddlePaddle

Temple Yun dans le fond de la non concave

rapports Qubit | Numéro public QbitAI

Dans le traitement du langage naturel, l'analyse des sentiments se réfère généralement à l'état émotionnel exprimé juge un morceau de texte. Parmi eux, un morceau de texte peut être une phrase, un paragraphe ou un document. L'état émotionnel peut être deux catégories, telles que (positif, négatif), (heureux, triste), également trois catégories, comme (positif, négatif, neutre), et ainsi de suite.

Les scénarios d'analyse de sentiment est très large, car l'utilisateur des sites commerciaux (Amazon, Lynx, Taobao, etc.), les sites de voyage, publié sur le site Critique du film des commentaires dans les commentaires positifs et des commentaires négatifs, ou d'analyser l'utilisateur d'un produit expérience globale d'utilisation, saisir les commentaires des utilisateurs des produits et l'analyse des sentiments et ainsi de suite.

Aujourd'hui est le 20 mai, vous enseigner PaddlePaddle d'apprécier les algorithmes d'analyse de l'esprit déesse avec émotion.

Dans ce qui suit, nous allons l'analyse des sentiments, par exemple, introduire l'utilisation de courte étude approfondie de la classification de bout en texte et l'utilisation PaddlePaddle complète toutes les expériences connexes.

Adresse du projet:

https://github.com/PaddlePaddle/book/blob/develop/06.understand_sentiment/README.cn.md

fond d'application

Dans le traitement du langage naturel, Sentiment Analysis Il est un problème de classification texte typique, à savoir la nécessité d'une division d'analyse de sentiment de texte de leurs catégories respectives. Catégorisation Texte impliqué Représentation textuelle et classification Deux questions.

Avant l'apparition de la méthode d'apprentissage en profondeur, le courant dominant du texte comme un sac de modèle de représentation de mots BOW (sac de mots), et ainsi le modèle de sujet, les méthodes de classification SVM (support de la machine vectorielle), LR (de régression logistique) et ainsi de suite.

Pour un texte, BOW dit qu'ils ignoreraient leur ordre des mots, la grammaire et la syntaxe, ce texte ne sera vu comme un ensemble de mots, méthode BOW ne représente pas adéquatement l'information sémantique du texte.

Par exemple, la phrase « Le film Terrible » et « un ennuyeux, vide, aucune connotation de travail » a un degré élevé de similitude dans l'analyse sémantique émotionnelle, mais leur ressemblance BOW représentée par 0. BOW un autre exemple, la phrase « un vide, aucune connotation de travail » et « pas vide et il y a une connotation de travail » similitude très élevé, mais ils sont en fait très différents sens.

Dans ce tutoriel, le modèle d'apprentissage en profondeur que nous voulons présenter remédier aux inconvénients précités BOW représenté, il est considéré sur la base de l'ordre des mots du texte est mis en correspondance à l'espace sémantique faible dimension, et Bout à bout (bout à bout) représentation texte Way et la performance de classification par rapport aux méthodes conventionnelles d'améliorer de manière significative .

Présentation du modèle

Tel qu'il est utilisé dans ce modèle de représentation de texte tutoriel est le réseau de neurones convolutionnel (convolutifs Neural Networks) et Recurrent Neural Networks (récurrents Neural Networks) et son extension. Cela introduit plusieurs modèles ci-dessous.

Texte d'introduction convolutionnel réseau de neurones (CNN)

les réseaux de neurones de convolution, en utilisant le premier mot de processus séquence vecteur d'entrée de convolution, générant une carte de fonction (fonction de la carte), l'utilisation maximale des caractéristiques de la figure rassemblées (mise en commun max au fil du temps), obtenu sur la dimension temporelle de cette opération de convolution vérifier les caractéristiques de la phrase entière devrait, enfin, tout le noyau de convolution vecteurs de caractéristiques obtenus épissées est la représentation de longueur fixe du texte pour le problème de classification texte, à savoir, connectez-le à la construction softmax le modèle complet.

Dans la pratique, nous utilisons un noyau de convolution pour traiter la pluralité de phrases, la même pile noyau de convolution taille de la fenêtre pour former une matrice, qui peut plus efficacement compléter l'opération. De plus, nous pouvons utiliser différents noyaux de convolution de fenêtre pour traiter une phrase, la figure. 1 montre un modèle de réseau de neurones convolutionnel pour la classification de texte, différentes couleurs de différentes tailles fonctionnement du noyau de convolution.

Pour le classement général court texte, le texte ci-dessus réseau simple, convolutionnel peut obtenir une grande précision de . Pour obtenir une des caractéristiques plus abstraites représentent le texte plus avancé, le texte peut être construit réseau de neurones profond convolutionnel .

Recurrent Neural Network (RNN de)

Les réseaux de neurones sont de puissants outils de circulation qui peut modéliser avec précision les données de séquence. En effet, la capacité théorique est récurrente Neural Networks Turing-complet . Le langage naturel est une séquence typique de données (une séquence de mots), au cours des dernières années, les réseaux de neurones récurrents et des variantes de celui-ci (par exemple, la mémoire à long court terme , etc.) dans les domaines de traitement du langage naturel, comme le modèle de langage, l'analyse syntaxique étiquetage rôle sémantique (ou l'étiquetage de séquence générale), les représentations sémantiques, génération graphique, le dialogue, la traduction automatique et d'autres tâches sur toutes les performances exceptionnelles même devenir la meilleure façon d'effet.

Comme le montre le temps de cycle étendu réseau neuronal représenté sur la figure 2: A l'instant t, le réseau lit le t-ième entrée Xt (représentation vectorielle) et le temps précédent la valeur d'état cachée ht-1 (représentation vectorielle, typiquement initialisée à H00 vecteur), calculé le temps de ht valeur d'état caché, cette étape est répétée jusqu'à ce que toutes les entrées lues. Si la fonction est appelée réseaux de neurones représentés cycle est F, elle peut être exprimée comme la formule:

Dans lequel x H est entré dans les paramètres de la matrice de couche cachée, est WHH couche cachée au paramètre des paramètres de la matrice de couche cachée, bh vecteur de décalage pour la couche cachée (BIAS), est la fonction sigmoïde.

Dans le traitement du langage naturel, serait premier mot (one-hot représenté) pour mettre en correspondance le mot représentation vectorielle, puis à chaque fois un cycle du réseau de neurones entrées Xt. En outre, d'autres couches peuvent être fixées sur le cycle du réseau de neurones de couche cachée, selon les besoins réels des différentes. Comme, peut être couche cachée réseau neuronal délivre une boucle reliée à l'entrée du prochain cycle du réseau de neurones pour construire profonde (profondeur ou empilés) réseau neuronal récurrent, l'état de la dernière couche cachée ou extraire un temps comme une phrase en utilisant le modèle de classification indique en outre comme .

Court et réseau de la mémoire à long terme (LSTM)

Pour les données de la séquence plus longue, le cycle de processus de formation de réseau de neurones susceptibles de disparaître ou explosions gradient . LSTM être en mesure de résoudre ce problème. Par rapport au réseau de neurones à boucle simple, LSTM augmenter l'unité de mémoire c, la porte de I i, f grille oublié et une porte de sortie o. Ces portes et des cellules de mémoire à cycle combiné améliorent grandement la capacité de traiter les données de séquence de longueur du réseau de neurones. Si le cycle de LSTM base d'une fonction représentée par le réseau neuronal appelé F, la formule est la suivante:

Composition faite par l'équation suivante F :

Dans lequel, it, ft, ct, ot, respectivement, la porte d'entrée à la grille valeur oubliée, une unité de mémoire et une porte de sortie, le W angulaire cible et b sont des paramètres modèles, tanh est une fonction tangente hyperbolique, désigne élément par élément (do élément par élément ) les opérations de multiplication. Entrée dans l'entrée de commande de grille d'une nouvelle intensité de c de l'unité de mémoire, l'unité de commande de porte de mémoire en oubliant de maintenir la force, la valeur de la temporisation de sortie d'une porte contrôlant l'intensité de la sortie de la cellule de mémoire. calcul similaire de trois types de porte, mais avec des paramètres différents de différentes manières leur unité de commande de mémoire respective C, représenté sur la figure 3:

LSTM par une simple augmentation du cycle de mémoire du réseau de neurones et une grille de commande, et en augmentant la capacité de gérer les dépendances à longue distance. Des principes similaires, ainsi que l'amélioration Gated unité récurrente (GRU) , qui est conçu pour être plus concis. Bien que ces améliorations sont différentes, mais leur description est tout aussi réseaux de neurones simple boucle macro (Fig. 2), à savoir, l'état de changement en fonction de l'état caché caché et l'entrée de courant du temps précédent, le processus continu cycles jusqu'à entrée traité:

Dans laquelle Recrurent peut représenter un simple réseau de neurones récurrents, ou GRU LSTM.

Stack LSTM dans les deux sens (Stacked Bidirectionnelle LSTM)

Récurrentes Neural Networks pour une commande normale, ht contient des informations d'entrée avant le temps t, à savoir les informations ci-dessus. De même, afin d'obtenir les informations suivantes, nous pouvons utiliser le sens inverse (le processus d'entrée inverse) Recurrent Neural Networks. Méthode de reliure cycle profond pour la construction de réseaux de neurones (DNN être souvent des caractéristiques plus abstraites et avancées montré), nous pouvons , les données de séries chronologiques est assurée par la construction LSTM à base de pile plus puissante bidirectionnelle des réseaux de neurones récurrents la modélisation.

4 (trois dans l'exemple), des couches impaires LSTM avant, LSTM inverse couches même, une couche de faible LSTM élevée couche LSTM et toutes les couches avant que les informations en entrée, en utilisant le niveau le plus élevé de la séquence LSTM la plus grande piscine de la dimension du temps pour obtenir un texte de longueur fixe représentation vectorielle (ce qui représente l'intégration complète du texte d'information contextuelle, et le texte du niveau profond de l'abstraction), et enfin nous allons construire une représentation de texte modèle de classification connecté à SOFTMAX.

Sur la base PaddlePaddle réelle

profil PaddlePaddle

PaddlePaddle (paddlepaddle.org) est développé Baidu cadre d'apprentissage profond. En plus du cadre de base, PaddlePaddle fournit également une multitude de composants de l'outil. modèle open source officiel un certain nombre d'applications industrielles, couvrant le traitement du langage naturel, les champs de vision par ordinateur, les moteurs de recommandation, et a ouvert un certain nombre de grands modèle chinois pré-formé. Le 23 Avril la profondeur de l'apprentissage Sommet Developer, PaddlePaddle a publié une série de nouvelles fonctionnalités et des cas d'application.

Dataset Présentation

Nous ensemble de données d'analyse de sentiment IMDB décrit comme un exemple. Formation et ensembles de test ensembles de données IMDB contenant chacun 25000 a été annotée critiques de films. Dans lequel les commentaires en négatif score à 4 ou moins, un plus grand score supérieur ou égal commentaires positifs 7, 10 points.

aclImdb | - Test | - neg | - pos | - Train | - neg | - pos

PaddlePaddle obtenir ensemble de données / imdb.py dans le téléchargement automatique et lire des ensembles de données et fournit imdb lire le dictionnaire, les données de formation, les données d'essai et d'autres API.

Modèle de configuration

Dans cet exemple, nous avons mis deux algorithmes de classification texte, convolution texte réseau de neurones, et la pile LSTM dans les deux sens. Nous avons d'abord présenté à la bibliothèque et utiliser la définition des variables globales:

de __future__ print_function d'importation paddle importation paddle.fluid d'importation comme fluide importer numpy comme np import sys mathématiques d'importation CLASS_DIM = 2 # nombre de catégories de classification sentiment EMB_DIM = 128 dimension # mot vecteur HID_DIM = 512 # dimension couche cachée STACKED_NUM = pile bidirectionnelle de couches 3 #LSTM Batch_size = 128 taille #BATCH

convolution Text réseau de neurones

Nous construisons convolution_net réseaux de neurones, le code exemple suivant. On notera que: la couche fluid.nets.sequence_conv_pool comprenant une mise en commun de deux opérations de convolution.

# Convolution Texte réseau de neurones def convolution_net (données, input_dim, class_dim, emb_dim, hid_dim): emb = fluid.layers.embedding ( = entrée de données, taille = , Is_sparse = Vrai) conv_3 = fluid.nets.sequence_conv_pool ( entrée = emb, num_filters = hid_dim, filter_size = 3, agir = "tanh", pool_type = "sqrt") conv_4 = fluid.nets.sequence_conv_pool ( entrée = emb, num_filters = hid_dim, filter_size = 4, agir = "tanh", pool_type = "sqrt") prédiction = fluid.layers.fc ( = entrée , Taille = class_dim, act = "softmax") prévision retour

Entrez réseau input_dim représente la taille du dictionnaire, class_dim représente le nombre de catégories. Ici, nous utilisons l'API sequence_conv_pool met en uvre convolution et les opérations de mise en commun.

Stack deux voies LSTM

Fragment stacked_lstm_net bidirectionnel de pile de réseau neuronal suivant:

# Stack voies LSTM def stacked_lstm_net (données, input_dim, class_dim, emb_dim, hid_dim, stacked_num): affirmer stacked_num% 2 == 1 # Calculer vecteur de mot emb = fluid.layers.embedding ( = entrée de données, taille = , Is_sparse = Vrai) # La première pile de couches # Couche entièrement connecté FC1 = fluid.layers.fc (entrée = emb, size = hid_dim) couche de #lstm lstm1, cell1 = fluid.layers.dynamic_lstm (entrée = FC1, size = hid_dim) entrées = # Tout le reste de la structure de la pile pour i dans la plage (2, stacked_num + 1): fc = fluid.layers.fc (entrée = entrée, size = hid_dim) LSTM, cell = fluid.layers.dynamic_lstm ( input = fc, size = hid_dim, is_reverse = (i% 2) == 0) entrées = # Couche Pooling fc_last = fluid.layers.sequence_pool (entrée = entrée , pool_type = 'max') lstm_last = fluid.layers.sequence_pool (INPUT = entrées , pool_type = 'max') # Couches entièrement connectées, la prédiction softmax prédiction = fluid.layers.fc ( = entrée , Taille = class_dim, act = 'softmax') prévision retour

Plus de deux voies pile LSMC abstraites fonctionnalités avancées et les cartes pour la classification et le nombre de classes du même vecteur de taille. Enfin, un « softmax » fonctions d'activation utilisée pour calculer la probabilité de la classification de la couche de liaison est une catégorie.

Encore une fois, ici nous pouvons appeler convolution_net ou toute structure réseau stacked_lstm_net de formation pour apprendre. Nous convolution_net exemple.

Ensuite, nous définir le programme de prédiction (inference_program). programme de prévision à l'entrée de l'utilisation convolution_net fluid.layer.data prédire.

def inference_program (word_dict): data = fluid.layers.data ( name = "mots", forme = , DTYPE = "int64", lod_level = 1) dict_dim = len (word_dict) net = convolution_net (données, dict_dim, CLASS_DIM, EMB_DIM, HID_DIM) # Net = stacked_lstm_net (données, dict_dim, CLASS_DIM, EMB_DIM, HID_DIM, STACKED_NUM) net retour

Ici, nous définissons training_program. Il utilise les résultats pour inference_program calculate retour de l'erreur. Nous définissons également la fonction d'optimisation optimizer_func.

Parce qu'il est un apprentissage supervisé, un ensemble de formation des balises aussi fluid.layers.data il défini. Dans le processus de formation, la croix-entropie utilisé en fonction de la perte fluid.layer.cross_entropy.

Pendant l'essai, la classification calcule la probabilité de chaque sortie. La première valeur prédéterminée est le coût retourné.

def train_program (prédiction): label = fluid.layers.data (name = "label", forme = , DTYPE = "int64") = coût fluid.layers.cross_entropy (entrée = prédiction, label = étiquette) avg_cost = fluid.layers.mean (coût) précision = fluid.layers.accuracy (entrée = prédiction, label = étiquette) retour  # Renvoie le coût moyen et la précision selon # Fonction d'optimisation def optimizer_func (): retour fluid.optimizer.Adagrad (learning_rate = 0,002)

entraîneur

Définition de l'environnement de formation

Définir votre formation est sur le CPU ou sur le GPU:

use_cuda = formation Faux # sur cpu = lieu fluid.CUDAPlace (0) si use_cuda autre fluid.CPUPlace ()

Définition fournisseur de données

La prochaine étape pour la formation des fournisseurs et de tester les définitions de données. Un fournisseur lit le batch_size de données de taille. paddle.dataset.imdb.word_dict fournissent chacun une taille de données après batch_size de brouillée, la taille brouillée de la taille du cache buf_size.

Remarque: Les données Lire IMDB peut prendre quelques minutes, s'il vous plaît soyez patient.

print ( "mot Loading IMDB dict ....") word_dict = paddle.dataset.imdb.word_dict () print ( "données de formation de lecture ....") train_reader = paddle.batch ( paddle.reader.shuffle ( paddle.dataset.imdb.train (word_dict), buf_size = 25000), batch_size = batch_size) print ( "Lecture des données test ....") test_reader = paddle.batch ( paddle.dataset.imdb.test (word_dict), batch_size = batch_size) feed_order = pass_num = 1

dictionnaire word_dict est une séquence, la correspondance entre les mots et l'étiquette, exécutez la ligne suivante vous pouvez voir les détails:

word_dict

Comme chaque ligne est ( « limitée »: 1726) une correspondance entre la ligne de mot indique l'étiquette correspondante est limitée 1726.

formateur construction

La formation exige un programme de formation et une fonction d'optimisation de la formation.

main_program = fluid.default_main_program () star_program = fluid.default_startup_program () prédiction = inference_program (word_dict) train_func_outputs = train_program (prédiction) avg_cost = train_func_outputs test_program = main_program.clone (for_test = True) sgd_optimizer = optimizer_func () sgd_optimizer.minimize (avg_cost) exe = fluid.Executor (place)

Cette fonction est utilisée pour calculer les résultats des tests de modèle sur l'ensemble des données de formation

def train_test (programme, lecteur): count = 0 feed_var_list = feeder_test = fluid.DataFeeder (feed_list = feed_var_list, place = endroit) test_exe = fluid.Executor (place) accumulé = len ( ) * pour test_data au lecteur (): avg_cost_np = test_exe.run ( programme = programme, feed = feeder_test.feed (test_data), fetch_list = ) accumulé = compter + = 1 retour

Fournir des données et de construire le cycle de formation principal

feed_order utilisé pour définir la correspondance entre les données et le fluid.layers.data générés chacun. Par exemple, la première colonne de données correspondant aux mots générés imdb.train est cette fonction.

# Indiquez le chemin du répertoire pour enregistrer les paramètres params_dirname = "understand_sentiment_conv.inference.model" feed_order = pass_num = 1 Nombre de tours de cycle de formation # Section de boucle principale def train_loop (): # Dispositif de formation de démarrage construit au-dessus feed_var_list_loop = chargeur = fluid.DataFeeder (feed_list = feed_var_list_loop, place = endroit) exe.run (star_program) # Cycle de formation pour epoch_id dans la plage (pass_num): pour step_id, les données enumerateQ (train_reader ()): # Run formateur métriques = exe.run (main_program, feed = feeder.feed (données), fetch_list = ) # Résultats du test print ( "étape: {0}, {1} Metrics" Format (. step_id, liste (carte (np.array, métriques)))) if (step_id + 1)% 10 == 0: avg_cost_test, acc_test = train_test (test_program, test_reader) print ( 'étape {0}, {1 banc de test: 0,2}, {Acc 2: 0,2} Format (. step_id, avg_cost_test, acc_test)) print ( "étape {0}, {1} Epoch Metrics {2}" format. ( step_id, epoch_id, liste (carte (np.array, métriques)))) si math.isnan (float (paramètres )): sys.exit ( "a perte NaN, la formation a échoué.") si params_dirname est None: fluid.io.save_inference_model (params_dirname, , prédiction, exe) # Enregistrer le modèle train_loop ()

processus de formation de traitement

Nous imprimons la sortie de chaque étape dans la formation de la boucle principale, vous pouvez observer la formation.

Commencer la formation

Enfin, nous commençons la formation de la boucle principale pour commencer la formation. Plus le temps de formation, si le résultat est retourné pour accélérer, le temps de formation peut être raccourcie en ajustant une plage de valeurs de perte ou le nombre d'étapes de formation, afin de réduire le coût de précision.

train_loop (fluid.default_main_program ())

Modèle d'application

Construction de Predictor

Et processus de formation, nous avons besoin de créer un processus de prévision et l'utilisation des modèles formés et paramètres pour prédire, params_dirname utilisé pour stocker divers paramètres pendant la formation.

= lieu fluid.CUDAPlace (0) si use_cuda autre fluid.CPUPlace () exe = fluid.Executor (place) inference_scope = fluid.core.Scope ()

Génération d'entrée de données de test

Afin de prévoir, nous avons choisi arbitrairement trois commentaires. S'il vous plaît sélectionnez votre favorisaient trois au hasard. Nous passons en revue chaque mot correspond à l'word_dict id. Si le dictionnaire n'est pas le mot, l'état INCONNU. Ensuite, nous utilisons create_lod_tensor pour créer un niveau de détail du tenseur

reviews_str = critiques = UNK = word_dict Lod = pour c dans les revues: lod.append ( ) base_shape = tensor_words = fluid.create_lod_tensor (lod, base_shape, lieu)

modèle d'application et prévoir

Maintenant, nous pouvons être amis prédictifs positifs ou négatifs à chaque commentaire.

avec fluid.scope_guard (inference_scope):  = Fluid.io.load_inference_model (params_dirname, exe) reviews_str = critiques = UNK = word_dict Lod = pour c dans les revues: lod.append ( ) base_shape = tensor_words = fluid.create_lod_tensor (lod, base_shape, lieu) assert feed_target_names == "mots" Résultats = exe.run (inferencer, alimentation = {feed_target_names : tensor_words}, fetch_list = fetch_targets, return_numpy = False) np_data = np.array (résultats ) pour i, r à énumérer (np_data): print ( "Prédire la probabilité de", r , "être positif et", r , « Pour être négatif pour examen \ « », reviews_str "\ « ")

partenaire junior intéressé peut lire le contenu d'autres documents sur le site officiel PaddlePaddle: http: //www.paddlepaddle.org/

références:

  • Kim Y. convolutifs réseaux de neurones pour la classification des phrases . ArXiv prépublication arXiv: 1408.5882, 2014.
  • Kalchbrenner N, Grefenstette E, Blunsom P. Un réseau de neurones à convolution pour des phrases de modélisation . ArXiv prépublication arXiv: 1404.2188, 2014.
  • Yann N. Dauphin, et al. Modeling Language avec Gated Convolutif Réseaux  arXiv prépublication arXiv: 1612,080832016.
  • Siegelmann H T, Sontag E D. Sur la puissance de calcul des réseaux neuronaux . // Actes du cinquième atelier annuel sur la théorie d'apprentissage informatique ACM, 1992: 440-449.
  • Hochreiter S, Schmidhuber J. Long mémoire à court terme . Calcul Neural, 1997, 9 (8): 1735-1780.
  • Bengio Y, Simard P, P. Frasconi dépendances d'apprentissage à long terme avec descente de gradient est difficile . IEEE transactions sur les réseaux de neurones, 1994, 5 (2): 157-166.
  • Graves A. Génération de séquences avec des réseaux de neurones récurrents . ArXiv prépublication arXiv: 1308.08502013.
  • Cho K, Van Merriënboer B, Gulcehre C, et al. Représentations de phrase d'apprentissage à l'aide de RNN codeur-décodeur pour la traduction automatique statistique . ArXiv prépublication arXiv: 1406.1078, 2014.
  • Zhou J, Xu W. apprentissage de bout en bout de l'étiquetage rôle sémantique en utilisant les réseaux de neurones récurrents // Compte rendu de l'assemblée annuelle de l'Association pour la linguistique computationnelle. 2015.
  • - 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

    Wang a grandi à la fois l'environnement source de grandir, mais ce point, il n'a pas oublié!
    Précédent
    Wang Yuan comme Chongqing, est vraiment très bon, et son frère a juste aussi une caractéristique super clair!
    Prochain
    « Légende Hearthstone » groupe de cartes de cancer: Rogue mer / chasse vitesse moyenne / voleur de rythme / voleurs de lapin pré-construction / miracle
    Wang Junkai fans zoom astuce, trois être ensemble et a donné aux fans un privilège!
    « Street Dance 2 » est trop forte, le score est de 9,7 lancement, des milliers de Xi cette saison est complètement différent!
    « Mon monde » pour construire un ordinateur à quel point? Le grand Dieu a pris une année de dur labeur
    Nouvelle version de "Machine Learning Foundation" est venu, les manuels PDF, PPT télécharger | Ressources
    Un millier d'exposition Xi grand scènes de spectacle, danse de rue sera l'envie de fans sur le peuple, pour cette raison?
    De 1976, Hinton premier feu de papier: réseau capsule, il est une capsule il y a 40 ans?
    "Hearthstone légende" HearthPwn Hearthstone Card Design Competition uvres remarquables: Cérémonie d'appel rideau
    Un millier de Xi pour la première fois de montrer son équipe a été satisfaite de la première phase de la mauvaise humeur!
    Numéro de construction sera en mesure de percer à travers tous les chiffres! Arche de demain détaillée interprétation des nouvelles activités
    Wang Junkai retour "un restaurant 3" Les fans déplacé pour que les fans!
    des sorties nettes au nord de 4.494.000.000 au fonds en une seule journée! L'ouverture de ces plaques