Devinez le groupe

Dans cet article, je décrirai l’utilisation du classificateur de texte fasttext.

Fasttext – bibliothèque d’apprentissage automatique pour la classification de texte. Essayons de lui apprendre à identifier un groupe de métal par le titre de la chanson. Pour ce faire, nous utilisons l’apprentissage supervisé à l’aide d’un ensemble de données.

Créons un ensemble de données de chansons avec des noms de groupe :

__label__metallica fuel
__label__metallica escape
__label__black_sabbath gypsy
__label__black_sabbath snowblind
__label__black_sabbath am i going insane
__label__anthrax anthrax
__label__anthrax i'm alive
__label__anthrax antisocial
[и т.д.]

Формат обучающей выборки:

Обучим fasttext и сохраним модель:

model.save_model("model.bin")

Chargez le modèle entraîné et demandez à identifier le groupe par le nom de la chanson :

predictResult = model.predict("Bleed")
print(predictResult)

В результате мы получим список классов на которые похож данный пример, с указанием уровня похожести цифрой, в нашем случае похожесть названия песни Bleed на одну из групп датасета.
Для того чтобы модель fasttext умела работать с датасетом выходящим за границы обучающей выборки, используют режим autotune с использованием файла валидации (файл тест). Во время автотюна fasttext подбирает оптимальные гиперпараметры модели, проводя валидацию результата на выборке из тест файла. Время автотюна ограничивается пользователем в самостоятельно, с помощью передачи аргумента autotuneDuration.
Пример создания модели с использованием файла тест:

Exemple simple de TensorFlow

Je présente à votre attention un exemple simple de travail avec un framework pour travailler avec le Deep Learning – TensorFlow. Dans cet exemple, nous allons apprendre à un réseau de neurones à détecter les nombres positifs, négatifs et zéro. Installation de TensorFlow et CUDA Je vous informe, cette tâche n’est vraiment pas facile)

Pour résoudre les problèmes de classification, classificateurs. TensorFlow dispose de plusieurs classificateurs de haut niveau prêts à l’emploi qui nécessitent une configuration minimale pour fonctionner. Nous allons d’abord entraîner DNNClassifier en utilisant ensemble de données avec des nombres positifs, négatifs et zéro – avec les « étiquettes » correctes. Au niveau humain, un ensemble de données est un ensemble de nombres avec des résultats de classification (étiquettes) :

10 – positif
-22 – négatif
0 – zéro
42 – positif
… autres numéros avec classification

Ensuite, la formation commence, après quoi vous pouvez saisir des nombres qui n’étaient même pas inclus dans l’ensemble de données – c’est à dire. le réseau de neurones doit les identifier correctement.
Vous trouverez ci-dessous le code complet du classificateur avec un générateur d’ensembles de données pour la formation et les données d’entrée :

import tensorflowimporter itertoolsimporter aléatoirede heure heure d'importationclasse ClassifiedNumber :__number = 0__classifiedAs = 3def __init__(soi, nombre) :soi.__numéro =numéroif numéro == 0 :soi.__classifiedAs = 0 # zéroNuméro elif > 0 :soi.__classifiedAs = 1 # positifNuméro elif < 0 :soi.__classifiedAs = 2 # négatifdef number(soi) :return self.__numérodef classifiedAs(soi) :return self.__classifiedAsdef classifiedAsString(classifiedAs) :if classé comme == 0 :retour "Zéro"elif classéAs == 1 :retour "Positif"elif classéAs == 2 :return "Negative"def trainDatasetFunction() :trainNumbers = []trainNumberLabels = []pour i in plage(-1000, 1001) :numéro = ClassifiedNumber(i)trainNumbers.append(number.number())trainNumberLabels.append(number.classifiedAs())return ( {"number" : trainNumbers } , trainNumberÉtiquettes)def inputDatasetFunction() :global randomSeedrandom.seed(randomSeed) # pour obtenir le même résultatnombres = []pour i in plage(0, 4) :nombres.append(random.randint(-9999999, 9999999))return {"number" : nombres }def main() :print("Test de classificateur de nombres TensorFlow Positif-Négatif-Zéro par demensdeum 2017 (demensdeum@gmail. com)")maximalClassesCount = len(set< /span>(trainDatasetFunction()[1])) + 1numberFeature = tensorflow.feature_column. numeric_column("numéro")classificateur = tensorflow.estimateur. DNNClassifier(feature_columns = [numberFeature], Hidden_units = [10, 20, 10], n_classes = maximalClassesCount)générateur = classificateur.train(input_fn = trainDatasetFunction, étapes = 1000).predict(input_fn =  inputDatasetFunction)inputDataset = inputDatasetFunction()résultats = list(itertools. islice(générateur, len(inputDatasetFunction()["numéro"])))je = 0pour résultat dans résultats :imprimer("numéro : %d classé comme %s" % (inputDataset["number"][i], classifiéAsString(result["class_ids"][0 ])))je += 1randomSeed = time()principal()

Tout commence dans la méthode main(), nous définissons la colonne numérique avec laquelle le classificateur fonctionnera – tensorflow.feature_column.numeric_column(“number”) Ensuite, les paramètres du classificateur sont définis. Il est inutile de décrire les arguments d’initialisation actuels, car l’API change chaque jour, et vous devez absolument consulter la documentation de la version installée de TensorFlow et ne pas vous fier à des manuels obsolètes.

Ensuite, la formation est lancée en indiquant une fonction qui renvoie un ensemble de données de nombres de -1 000 à 1 000 (trainDatasetFunction), avec la classification correcte de ces nombres en fonction du positif, du négatif ou du zéro. Ensuite, nous soumettons en entrée les nombres qui ne figuraient pas dans l’ensemble de données de formation – ; aléatoire de -9999999 à 9999999 (inputDatasetFunction) pour les classer.

Enfin, nous lançons des itérations en fonction du nombre de données d’entrée (itertools.islice), imprimons le résultat, l’exécutons et sommes surpris :

numéro : 4063470 classé comme positifnuméro : 6006715 classé Positifnuméro : -5367127 classé comme négatifnuméro : -7834276 classé comme négatif

IL EST VIVANT

Pour être honnête, je suis toujours un peu surpris que le classificateur *comprenne* même les nombres que je ne lui ai pas enseignés. J’espère qu’à l’avenir je comprendrai le sujet de l’apprentissage automatique plus en détail et qu’il y aura plus de tutoriels.

GitLab :
https://gitlab.com/demensdeum/MachineLearning

Liens :
https://developers.googleblog.com/2017/09/introducing-tensorflow-datasets.html
https://www.tensorflow.org/versions/master/api_docs/python/tf/estimator/DNNClassifier