Un article que vous lisez avec un WaveNet: assistant Google synthétiseur sonore

Cet article est une compilation de technologie blog AI Yanxishe, le titre original:

WaveNet: synthétiseur vocal de Google assistant

Auteur | Janvijay Singh

Traduction | Fan sauce poire, le poisson Wang Li, Mo vert Yau, Désillusion

Relecture, finition | soeur d'ananas

Lien original:

https://towardsdatascience.com/wavenet-google-assistants-voice-synthesizer-a168e9af13b1

Un article que vous lisez avec un WaveNet: assistant Google synthétiseur sonore

Avez-vous jamais pensé possible de faire la machine synthétisée voix humaine et de la voix humaine elle-même est presque aussi naturel? WaveNet permet.

La synthèse vocale. synthèse couture Boeing. paramètres étude approfondie de synthèse.

discours anthropomorphique de la machine idée (TTS) a été autour depuis longtemps. Avant l'apprentissage en profondeur se produit, il y a la mise en place d'un système de synthèse vocale sont deux moyens principaux, à savoir Boeing paramètres de synthèse et de synthèse couture.

Boeing épissage de texte à la synthèse de la parole, et il est à travers l'idée de recueillir un enregistrement sonore d'une longue liste d'une personne de phrases, ces enregistrements seront coupés en unités phonétiques, essayez ceux récemment fourni l'unité vocale et texte correspondant seront la couture du fil de suture, générant de ce fait un discours énoncé correspondant à ce texte. Boeing produit par épissage synthèse vocale pour les enregistrements vocaux après une partie parmi celles déjà présentes dans le texte de la collection initiale, le texte aux sons de la parole plus naturelle, mais le texte de ces première rencontre, il sonnera un peu étrange. De plus, le son modifié nous oblige à enregistrer une nouvelle série d'instructions. A l'inverse des paramètres texte à la synthèse de la parole, l'idée est, (qui est essentiellement une fonction) pour simuler un modèle de tractus vocal humain et le paramètre physique utilisé pour enregistrer le paramètre de réglage du son. Généré en convertissant le texte aux paramètres de la parole retenti combinaison non pas naturelles TTS les sons générés par les ondes sonores, mais cette manière est plus facile de modifier le son en ajustant certains paramètres dans le modèle.

Récemment, avec le lancement de WavNet pour nous de bout en bout (du son lui-même l'enregistrement) pour générer le son échantillon non traité possible, vous pouvez simplement modifier le son, et plus important encore, le traitement de la voix existante par rapport moyen d'obtenir un son plus naturel évident. Tout semblait grâce à la profondeur de l'apprentissage.

Pourquoi WaveNet va rendre les gens si excités?

Afin de décrire les différences existantes WaveNet et la méthode de la parole en utilisant une statistique de test subjective Mean Opinion Score méthode 5 points (MOS). Dans le son de test de Mean Opinion Score est fourni à l'objet de l'échantillon (personne) à partir de chacun du système de synthèse de la parole synthétisée, et les exigences de l'environnement naturel (1 sur 5 échantillons évalués: très faible 2: faible 3: General 4 : bon 5: excellent).

Un échantillon sonore subjective Mean Opinion Score 5 points du procédé sont basés sur la mémoire à long terme - paramètres du cycle de synthèse réseau neuronal (LSTM-RNN), l'ensemble de synthèse d'épissage en fonction des unités vocales modèle de Markov caché (HMM) de Boeing, et WaveNet synthèse vocale à base obtenu.

Vous pouvez voir clairement de l'histogramme, WaveNet obtenir dans une échelle de 5 points probablement environ 4,0, il est nettement supérieur aux autres systèmes de base de, et très proche de la voix humaine réelle. Consultez le blog de l'DeepMind peut être apprécié en termes de naturalité de la différence de synthèse vocale entre ces mensonges méthodes. En plus des échantillons de la synthèse vocale de sortie, WaveNet peut facilement adapter à une large gamme de fonctions vocales telles que: le texte, les caractéristiques des haut-parleurs, etc., pour générer un son pour répondre à nos besoins. Cela rend les gens se sentent plus heureux.

WaveNet. Modèle génératif.

modèle génératif. Qu'est-ce que cela signifie? points de données générales non-étiquetés, une formule de modèle va essayer d'apprendre ce type de données peut générer un point de distribution de probabilité, en utilisant l'objet d'apprentissage pour produire un nouveau point de distribution de données (similaire aux points de données d'entrée) . modèle de probabilité modélisée formule peut être distribuée de manière différente, implicite (ayant une densité approximative ou transformation) ou de façon explicite. Quand nous disons qu'un modèle génératif est le modèle de modélisation explicite, cela signifie que nous distributions de probabilité clairement définies et essayer d'adapter chaque point de données non marquées saisies. En revanche avec elle, un apprentissage génératif implicite modéliser une distribution de probabilité, échantillonnage directement les nouveaux points de données sans la nécessité d'une définition claire. (GAN générés contre le réseau), le Graal actuel de la profondeur de champ de l'étude, appartient au modèle génératif implicite. Cependant, WaveNet et ses cousines modèle Pixel CNNs / RNNs (pixel modèle de réseau de neurones convolutionnel / Recurrent Neural Network) formule sont tous affichés.

Comment WAVENET établir un modèle de distribution de probabilité claire? WaveNet essayer de construire un modèle de la distribution de probabilité conjointe du flux de données X, les conditions Xt pour chaque élément dans le flux de données demande de produits X de probabilité. Par conséquent, pour une période de sonique non traité X = {X1, X2, X3 ... XT}, la fonction de probabilité conjointe est construit comme suit:

Chaque échantillon Xt donc limité à l'étape précédente de temps tous les échantillons. Observations dans une étape de temps dépend de l'observation du temps étape précédente (ce qui est ce que nous essayons d'utiliser un modèle de distribution conditionnelle pour chaque élément de construction), qui ne semble pas être un modèle de prévision de séries chronologiques font? En fait, WaveNet est un modèle de régression automatisé.

Comment pouvons-nous aller modéliser ces conditions la distribution d'articles il? IA (Recurrent Neural Réseau modèle) ou LSTMs (longueur de mémoire modèle de réseau) comme série temporelle non linéaire puissante est le choix le plus évident. En fait, le pixel récurrent des réseaux neuronaux utilisent les mêmes idées pour générer une image composite similaire à l'image d'entrée. Nous pouvons utiliser cette idée pour générer la synthèse vocale il? La voix est la fréquence d'échantillonnage à partir d'au moins 16 kHz, ce qui signifie, audio par seconde, au moins 16.000 échantillons. RNNs (réseau neuronal récurrent) ou (LSTMs mémoires de longueur) ont été moins longue (environ 10000 séquence de pas de temps) de modélisation en fonction du temps, ils peuvent présenter la modélisation en fonction du temps maximal est de 100 pas de temps série, de sorte que ces deux modèles ne sont pas bien adaptés pour la synthèse de la parole. Peut-on appliquer CNN (réseaux de neurones convolution) pour y faire face? Attendre une minute, CNNs (convolution modèle de réseau neuronal)? Comment faire? Des idées similaires ont été utilisées dans la convolution des pixels dans un modèle de réseau de neurones.

modèle réseau de neurones circonvolution convolution de cause à effet. circonvolution d'expansion.

Pourquoi devrions-nous essayer d'utiliser CNNs (convolution modèle de réseau de neurones)? CNNs (réseau neuronal convolutif) et la vitesse de train (RNNs réseau neuronal récurrent) ou LSTMs (longueur de la mémoire de modèle de réseau) est typiquement plus rapide par rapport, notamment appliqué à la longue séquence à une dimension, en tant que masque avec chaque opérations de convolution associées à l'emplacement ou le filtre peut être d'une manière parallèle et indépendante. Une plus grande vitesse de formation. Sonne bien! Comment autorégression (pas de temps de la production ne dépend que de la sortie du pas de temps précédent quelle que soit la sortie étape la prochaine fois) la performance? Dans cette convolution de cause à effet dans l'action. séquence de causalité à une dimension de convolution unidimensionnelle peut être facilement rempli à travers l'entrée gauche est réalisée, où le volume disponible pour obtenir une machine par la quantité ajoutée 0 convolution. Par rapport à RNNs (réseau de neurones récurrents) et LSTMs (la longueur du modèle de réseau de mémoire), la convolution de cause à effet peut nous permettre d'aller beaucoup plus en fonction du temps (nous permet également de regarder en arrière à la longueur spécifiée) la modélisation.

Causales convolution veiller à ce que le modèle ne viole pas nos règles intégrées modèle de données

Bon! Nous pouvons déjà facilement faire face aux violations de autorégression problème. Mais revenons sur la gestion des milliers de regard de séquence échantillon à la question de la durée de celui-ci (par exemple, avant notre modèle dans la machine de dessin de pas de temps en cours sur une sortie de volume, en regardant en arrière au moins une seconde audio)? La meilleure façon d'y parvenir peut penser est aux spécifications de filtre ont augmenté suffisamment pour revenir sur la bonne longueur, mais cette approche vraiment? Je crois que cette approche permettra de réduire le modèle non-linéaire, ce qui peut conduire à des difficultés à apprendre des modèles complexes dépendant, ce qui limite la performance du modèle. La prochaine idée que vous pensiez peut-être d'augmenter le nombre de couches de réseaux de neurones. Cette approche peut être efficace. Mais le calcul est impossible, en raison de la taille des domaines acceptés dans la sortie d'un pas de temps ou de retour à la longueur, avec le nombre de couches cachées du modèle de croissance linéaire, et pour le calcul est que nous ne voulons pas avoir un pays avec peu un millier de modèle de couche cachée. Maintenant, nous devons considérer est la limite du nombre de couches cachées, et d'augmenter la taille du dos du filtre à longueur? Comment allons-nous le faire? l'expansion de Convolution nous aidera.

A titre de tentatives d'expansion filtre à convolution est appliqué sur une région de plus de sa propre longueur et une valeur de saut d'une étape d'entrée spécifique, pour augmenter la longueur ou regarder en arrière accepté la taille de domaine. Cela équivaut à une convolution de 0 originale en utilisant l'extension du filtre filtre plus, mais apparemment plus efficace de cette façon. Dans WaveNet, la convolution de plusieurs couches superposées extensible à celui obtenu par le maximum domaine accepté quelques couches.

Convolution motif empilement de couches d'expansion: chaque doublement du facteur d'expansion acceptera la multiplication de domaine O (2 ^ n).

SoftMax profil (fonction de transfert souple au maximum). de compression Mu-law.

Afin de répondre à la probabilité conditionnelle, en utilisant la distribution softmax de WaveNet (distribution de classement) au lieu d'un autre modèle hybride, sa forme ne sont pas des hypothèses de distribution classées, et donc plus souple, plus facile à modéliser les distributions arbitraires. audio non traitée est la valeur entière 16 bits (32767 -32768 ...) est stockée, en utilisant une sortie de la couche de distribution de probabilité softmax nous avons besoin de sorties de modèles numériques 65,5535 dans une étape de temps. Ce modèle va tirer un ralentissement des performances? Il fait. Que pouvons-nous faire pour l'améliorer? Réduire la profondeur de bits jouera un rôle. L'impact des échantillons de faible amplitude si l'on utilise une réduction de la profondeur de bits linéaire (divisé par 256) sera plus grande que l'impact sur l'échantillon de grande amplitude. Considérons une valeur initiale de 16 bits est 32,767 échantillons, de préférence la valeur positive maximale. conversion 8-bit, la valeur de l'échantillon devient 127 (= 32767/256127 I 255), l'erreur d'arrondi est 255/32768. C'est moins de 1% de l'erreur de quantification. Toutefois, cette erreur est de l'ordre de 16 et l'échantillon de minimum, par rapport aux valeurs d'une erreur de quantification entre 0 et 255 échantillons obtenus. Lorsque l'ordre de minimum de l'échantillon réduit à 16 fois 8 bits, la valeur de conversion sera proche de zéro, l'erreur est de 100%. Ainsi, la profondeur de bits réduite en utilisant un procédé linéaire de l'arrondi, l'incidence des échantillons de faible amplitude sera supérieure à l'incidence sur l'échantillon de grande amplitude. Si nous pouvons réallouer des exemples de valeurs, plus de niveaux de quantification à moindre amplitude, un petit nombre de niveaux de quantification de l'amplitude plus élevée, il est possible de réduire l'erreur de quantification. Ce utilise la distribution Mu-droit (quantification non linéaire) au lieu d'utiliser une simple raison de quantification linéaire dans le WaveNet.

compression loi Mu que sur PerForms d'expression linéaire quantification peut être préférable d'attendre la sortie reconstruite (plus proche de l'audio d'origine).

Dans l'expression ci-dessus, -1

Déclenchement de la fonction d'activation. Hop connexion et une connexion résiduelle.

fonction d'activation non linéaire pour le modèle d'apprentissage profond relations complexes entre toute entrée et la sortie d'une étude à la fois pour l'un des éléments. RELU (éléments linéaires) utilisé à l'origine dans le WaveNet, mais après avoir effectué des expériences, il a été constaté WaveNet, en utilisant une fonction d'activation de la fonction sigmoïde fonction d'échantillonnage (S-type) tan-hyperbolique non linéaire (tanh) un meilleur .

Gating expressions de fonction d'activation utilisés dans le WaveNet

Dans l'expression ci-dessus, W représente un grand nombre filtre Assi, * représente l'opérateur de convolution, indique les opérateurs mêmes ou mathématiques. connexion résiduelle, son recouvrement supérieure et inférieure de sortie en continu, connecté pour accéder directement aux couches superposées de sortie de niveau de sortie, a été démontrée à la fois pour réduire le temps de convergence et l'apprentissage du réseau de neurones est efficace réseau profond. Par conséquent, comme indiqué ci-dessous, il a été utilisé dans l'architecture WaveNet résiduelle de connexion.

WaveNet Architecture: fonction d'activation déclenchement, le connecteur de saut, reliant le résidu

Règlement. Localement. Global.

Je ne l'ai pas encore parlé de la façon dont nous devons réguler la voix de sortie de différentes fonctions de l'identité du locuteur, le texte correspondant et ainsi de suite. WaveNet parole de sortie peut être réglée de deux manières: (1) l'ajustement global, (2) toutes les fonctions individuelles étape de temps de sortie de polarisation, telles que l'identité du locuteur ou de réglage local, comportant une pluralité de caractéristiques, est en fait différents moments séquence qui comprend l'étape de sortie de polarisation à des moments différents, tels que la parole de texte de base. Si nous exprimons formellement cela, alors cela signifie l'introduction de nouveaux paramètres dans les conditions de distribution conditionnelle (conditions locales et Ht la régulation du H global) dans le modèle actuel.

Modifier la répartition des éléments dans l'état après l'entrée de condition de mise en place

Un ajustement local, le temps de réglage de la séquence d'entrée peut avoir une longueur plus courte que l'audio et pour la régulation locale, nécessite deux séries temporelles doivent avoir la même longueur. Pour longueur match, nous pouvons utiliser la transposée de CNN (Une étude sur le plan d'échantillonnage), ou d'autres systèmes pour augmenter l'entrée de réglage de la longueur d'échantillonnage

Expression après l'introduction de biais terme h

Dans l'expression ci-dessus, V est la projection linéaire peut apprendre, essentiellement utilisé à deux fins, afin de convertir correct h apprendre la bonne taille et poids lourds sortie de polarisation.

excellent modèle pour la formation rapide. raisonnement lent?

l'architecture WaveNet, peu importe ce que nous avons discuté jusqu'à présent, très bon travail de capturer les conditions complexes et en fonction du temps. En outre, la formation parallèle très très rapidement. Mais le raisonnement il? Depuis pas de temps dépend de la sortie avant la sortie d'un pas de temps, de sorte que la nature du nouvel échantillon audio est continue. Sorties généré un seconde nécessite environ une minute de temps de GPU. Si Google va déployer ce modèle à leurs assistants, afin de penser à comme « Hey Google! Comment est le climat? » Cette simple question doivent passer quelques heures. Alors, comment ils raccourcissent le temps raisonnement? IAF est la réponse.

processus de normalisation IAF

Quel est le processus de normalisation? processus de normalisation est une série de processus de conversion, nous pouvons apprendre de la cartographie de la simple densité de probabilité (comme gaussienne) la répartition de la richesse du complexe (double shot). Imaginez, si vous la distribution q (z) de la probabilité et la distribution de probabilité q (x) d'échantillonnage pour obtenir suffisamment de points, le processus de normalisation peut être utilisé pour étudier le processus de conversion, qui est le point d'échantillons de cartographie de q (x) correspondant au procédé de la distribution de la carte q (Z) est. Comment ce processus est terminé? Considérons d'abord un f de conversion, f est réversible et une cartographie lisse. Si nous utilisons ce mappage pour convertir des variables aléatoires a une q de distribution (z) est Z, nous obtenons la variable aléatoire z '= f (z) a une q de distribution (z'):

Afin de vous présenter de manière plus intuitive, comment nous sommes arrivés à cette expression pour la distribution de la variable aléatoire transformé, consultez Eric Jang de ce billet de blog. Une conversion est suffisant? En fait, nous pouvons combiner plusieurs simple transformation, et en appliquant de façon continue l'expression ci-dessus à la densité de la structure complexe de façon arbitraire. En convertissant la distribution continue de la variable aléatoire q0 z0 par conversion de la chaîne K Fk obtenu par densité qK (z) est la suivante:

Chacune de ces transformations peuvent utiliser la multiplication matricielle (ayant des valeurs apprises) la modélisation simple et non linéaire, par exemple RELU. Puis, en optimisant la répartition de la probabilité de la probabilité de conversion qK (z) sous (x) échantillonné à partir du point de q (log-vraisemblance), tout algorithme d'optimisation vous compléter apprentissage transformation des paramètres. Cela fera la distribution qK (z) et q (x) est très similaire, et d'apprendre les correspondances appropriées de q (z) q (x).

Après une série de transformation réversible de distribution d'écoulement

Comment l'idée de processus de normalisation pour nous aider rapidement raisonnement? Rappelez-vous, WaveNet est un modèle génératif, en plus de ses tentatives pour étudier la distribution de probabilité des données de formation possible, ne rien faire. Parce que le modèle généré (avec une tractable densité) Il est que nous pouvons bien définie, facilement apprendre une simple conversion de point peut être mis en correspondance, comme la distribution gaussienne pour apprendre la classification complexe de la distribution WaveNet. Si le processus de normalisation de l'apprentissage au programme avec le raisonnement rapide, nous pouvons facilement ralentir le raisonnement WaveNet à trier. IAF (écoulement inverse à partir de la régression) peut être bien adapté à cette idée. Dans l'AIF, l'idée est de premier échantillon aléatoire tiré de la z ~ logistique (0, I), puis la transformation suivante est appliquée pour aspirer l'échantillon.

Zt sur mise à l'échelle simple et conversion de changement de vitesse, dans lequel le facteur d'échelle (s) et le facteur de décalage ([mu]) en utilisant un paramètre d'apprentissage ([theta]) et de la valeur des échantillons d'entrée de pas de temps précédents en z est calculée

Afin de sortie distribution correcte de l'étape temporelle xt, un courant inverse autorégressive sur la base de l'entrée de bruit dans la séquence z1 zt-1 peut être déduit implicitement avant son x1 pas de temps à la séquence xt-1. séquence d'entrée parallèle sortie sonore en tout xt zt est donné. L'image ci-dessous fera les choses plus claires (note notation de changement).

Dans le flux autorégressif inverse, calcul parallèle de sortie de boîte, un intervalle de temps différent, pas de temps parce que la sortie ne dépend pas de la sortie du pas de temps précédent

Grands amis! IAF a rapide schéma de raisonnement (ou même calcul parallèle des probabilités conditionnelles), mais ils sont une formation plus lente. Pourquoi est-il plus lent? Parce que si vous nous donnez un nouveau point de données et a demandé d'évaluer la densité, nous avons besoin de récupérer u, l'ordre naturel de ce processus est très lent. Parallèle WaveNet utilise ce fait, le concept est facile à utiliser WaveNet (professeur WaveNet) Formation IAF (étudiant WaveNet) est.

Parallèle plus rapide. WaveNet.

Et WaveNet presque, notre idée est d'utiliser un raisonnement rapide programme IAF dispose. Ainsi, dans la première phase, nous formons un modèle simple WaveNet (que nous appelons la formation des enseignants). Droit à la deuxième étape, on gèle les enseignants WaveNet poids, et l'utiliser pour former IAF (Distillation étudiants). L'idée est de commencer par le z ~ Logistique (0, I) un échantillon aléatoire tiré, est ensuite transmis en parallèle à l'IAF. Cela nous donnera des points clés liés à la conversion et la distribution de probabilité conditionnelle. L'idée est de convertir ces petits la distribution convertie par un simple professeur WaveNet, qui produira l'enseignant de probabilité conditionnelle a été formé sur le WaveNet. Ensuite, nous essayons différence KL- entre probabilité conditionnelle est réduite au minimum reçue d'un modèle. Cela permettra à la probabilité de l'IAF (étudiant WaveNet) et leurs enseignants apprennent la distribution presque similaire, et les résultats valident le fait que, depuis 5 scores MOS entre la sortie reçue des enseignants et des étudiants WAVENET presque négligeable.

Parallèlement programme de formation WaveNet

Que ce soit la vitesse de déploiement assez de rapide? Oui. En fait, il peut être 20 fois plus rapide que la vitesse en temps réel générés échantillons vocaux. Mais il y a encore un problème, chaque fois que nous devons recycler nos modèles, nous avons d'abord formés puis former les enseignants étudiants WaveNet WaveNet. De plus, les étudiants la performance WaveNet dépend en grande partie de la formation des enseignants WaveNet. Mais en général, le déploiement est une bonne chose.

« La théorie est pas cher, s'il vous plaît me donner le code. (La pratique rend parfait). »

Il y a beaucoup de pratiques en ligne concernant WaveNet simples peuvent être utilisés, mais sur une pratique parallèle n'a pas encore trouvé.

1.Keras pratique

2.PyTorch pratique

3.TensorFlow pratique (qui est actuellement cité pratique en ligne peut être utilisé dans l'élaboration)

références:

  • Audio Companding.

  • Couches convolutifs dans les tâches PNL.

  • Dilatées Convolutions.

  • Flux normalisant: Tutorial par Eric Jang - Partie 1, Partie 2. Variational avec Inference normalisant flux (papier).

  • Voix profonde: en temps réel Neural Text-to-Speech (papier): Annexe est assez utile pour comprendre WaveNet.

  • WaveNet: Un modèle génératif pour l'audio brut (papier).

  • Parallèle WaveNet: rapide synthèse vocale haute fidélité (papier).

  • PixelCNN, WAVENET & Variational Autoencoders - Santiago Pascual - UPC 2017.

  • Je veux continuer à voir les articles liens et références connexes?

    Appuyez et cliquez sur le lien pour ouvrir un fichier ou cliquez sur [vous prenez lire WaveNet: Google synthétiseur vocal assistant]:

    https://ai.yanxishe.com/page/TextTranslation/1228

    AI Yanxishe contenu passionnant mis à jour quotidiennement, la visualisation de contenu plus excitant: Lei Feng Lei Feng Lei réseau de réseau de réseau Feng

    Raspberry Pi mise en oeuvre en utilisant python et détection de cible

    Quelles sont les compétences clés sont scientifique des données en cours?

    Comment les débutants étude sur la migration Keras

    Si vous voulez apprendre les données scientifiques, qui ne doit pas manquer sept catégories de ressources

    En attendant vous interprétez:

    Objectifs d'apprentissage en profondeur de l'algorithme de détection

    Comment voulez-vous construire un RCNN plus rapide culturel et éducatif avec PyTorch

    DQNs seniors: profitez de la profondeur de l'apprentissage de renforcement pour jouer au jeu Pac-Man

    réseau de contrôle structuré pour la profondeur de l'apprentissage de renforcement (papiers ICML expliquent)

    jeu « Chicken » du cycle, « Tour à la main » et la « fin de la tournée » arc en ciel d'interprétation nuit
    Précédent
    « Made in China » comment envisagez-vous? Feng Chen Wang nouvelle série "Made in China" pour briser les préjugés!
    Prochain
    nouveau brevet de recharge sans fil d'Apple: Let MacBook charge iPhone
    « Pacific Rim: Tonnerre renouvelé »: plus les attentes, plus la déception!
    De l'histoire à l'avenir de l'enseignement de l'ingénierie pour recommencer
    Jingdong faire mars rapide IPv6
    Les ventes de voitures juin Hideo premier, TOP10 marque pas indépendante
    En amont de l'enquête: 16 ans Gansu « mariée » marié oncle âgé de 24 ans
    Les villes du BAPE ne notent la série de frappes aériennes! invasion britannique d'apporter des éléments de votre cerveau!
    [Voir] pour recruter film d'horreur domestique de haute réputation « Bewitched » a commencé à attraper voix!
    Liu Xiang fait récemment, un pantalon d'exposition, séchage des aliments? Écoutez son ami « maître de pain » comment dire
    Luoyang enseignants du secondaire sont morts de combien d'enseignants dur avant sous le poids?
    Samsung évaluation S10 +: « le roi » pour que ce n'est pas seulement vedette de conversation
    produits à base de farine de mil sur festival aveugle a officiellement pris fin huit nouveaux produits ont leurs propres caractéristiques