[PYTHON] L'histoire de vouloir afficher des annonces liées à des articles sur Jubatus

introduction

En parlant de cela, j'ai participé au Jubatus Hackathon # 1 en octobre dernier.

http://connpass.com/event/8233/

Les diapositives au moment de l'annonce sont soigneusement résumées ici, veuillez donc vous y référer.

http://blog.jubat.us/2014/10/jubatus.html

Même si je l'ai fait passer de la planification à la mise en œuvre en une journée, je regrette que ce soit beaucoup de travail. J'ajouterai donc un peu.

Ce que j'ai fait

Peu de temps avant le hackathon, je suis allé à l'un des plus grands événements publicitaires au Japon. Inspiré par cela, faisons une publicité! Quand j'ai dit à un junior de la même équipe, j'ai obtenu un OK, alors j'ai réussi.

Les spécifications et hypothèses spécifiques sont les suivantes:

――J'ai ce que l'on appelle des médias (article) et je souhaite afficher des publicités qui y correspondent. ――La correspondance signifie que le contenu de l'article et le contenu de la publicité sont similaires.

L'état du fond est particulièrement important, qui a un poids très important.

Si vous donnez une petite raison sérieuse, il y a une auto-admonition pour rendre la structure aussi simple que possible si vous vous perdez. En effet, les systèmes complexes augmentent les coûts de maintenance. Surtout lors de l'utilisation de l'apprentissage automatique, s'il y a un bogue (ou un comportement désagréable) dans le système

--Bogue du middleware --Correct comportement par algorithme

Il y a beaucoup de choses à considérer, par exemple, je ne veux plus travailler (sérieusement). En gros, les ingénieurs font de l'automatisation pour faciliter les choses, donc si le nombre d'emplois augmente, ce sera écrasant (?).

Au fait, le code ne fonctionnera probablement pas tel quel, mais il est sur github.

https://github.com/chase0213/jubatus-hackathon-01

Voici la diapositive au moment de l'annonce.

http://www.slideshare.net/chisatohasegawa370/jubatus-hackathon-1hiyoshi

Construction du système

Comme vous l'avez peut-être remarqué sur github, nous essayions initialement d'obtenir une configuration à 3 serveurs de Rails + Elasticsearch + Jubatus. Cependant, la partie Elasticsearch n'était pas essentielle et a été rejetée. Je voulais l'utiliser. .. ..

Le déroulement de la demande est le suivant.

Donc après tout, vous ne faites que creuser dans le recommandateur.

Ensuite, le lieu pour juger de la similitude entre l'article et l'annonce est conservé en tant que quantité de caractéristiques en utilisant le convertisseur vectoriel de Jubatus, qui est l'analyse morphologique utilisant mecab + ipadic.

http://jubat.us/ja/fv_convert.html

Ce convertisseur est si bon qu'il ne fait pas grand-chose pour pétrir les fonctionnalités. C'est donc couvert de bruit et ce n'est pas très précis, mais j'en parlerai plus tard.

démo

Je l'ai déployé sur AWS et l'ai démontré. Je viens d'utiliser une machine avec des spécifications raisonnables, je l'ai donc arrêtée maintenant (pour des raisons financières). Si vous manipulez correctement le code, il fonctionnera localement, alors veuillez le modifier.

Concept

La partie apprentissage de l'apprentissage consistait à ajouter des publicités de manière dynamique, et le goût du dispositif d'apprentissage n'était pas si bon. Habituellement, beaucoup de gens imaginent que l'apprentissage automatique devient plus intelligent à chaque fois qu'il est utilisé, alors je vais brièvement commenter cette partie (je n'écrirai pas de code, pas mal).

Tout d'abord, quand il s'agit d'utiliser un apprenant dans un système publicitaire, je pense qu'il s'agit de faire une différence dans le taux d'impression entre ce qui a été réellement cliqué et ce qui ne l'a pas été. En d'autres termes, pour une combinaison d'articles et d'annonces sur lesquels on clique souvent, nous aurons plus d'impressions, et pour celles qui ne le sont pas, nous les afficherons occasionnellement sur un coup de tête.

Je ne l'ai pas vraiment fait, mais je pense que cela peut être fait en utilisant un classificateur. Plus précisément, prenez l'union du contenu de l'article réduit par le système de recherche et le contenu de la publicité cliquée, et plongez-la dans le classificateur avec l'étiquette sur laquelle il a été cliqué. De même, si vous ne cliquez pas, vous enregistrerez l'article et l'annonce UNION avec le libellé sur lequel il n'a pas été cliqué, mais une chose à noter ici.

Même si un lien n'est pas cliqué, il est prématuré de déterminer que l'utilisateur n'est pas intéressé par celui-ci.
Parce que, dans de nombreux cas, les utilisateurs se voient proposer de nombreuses autres options,
Cela n'indiquait pas activement qu'il n'était pas intéressé par le lien.

Je l'ai fait ressembler à une citation, mais c'est mon opinion personnelle. D'un autre côté, les informations cliquées doivent être traitées plus fortement que les informations non cliquées.

Donc, si vous réglez bien cette zone statistiquement et plongez dans classfier pour la classification binaire, vous pouvez prédire si l'utilisateur est susceptible de cliquer sur cette combinaison. Si vous renvoyez la valeur à la ligne supérieure (recommandation) et la reflétez correctement en tant que coefficient, plus de combinaisons sur lesquelles on clique beaucoup seront affichées.

À la fin

Le dernier paragraphe est une théorie de bureau, donc je pense que les pièges sont éparpillés partout. Ensuite, je l'ai décrit comme "bruyant" au sommet, mais cela devrait être toléré dans une certaine mesure. En effet, les publicités sans bruit peuvent être ennuyeuses pour les utilisateurs (les publicités ne sont pas professionnelles et ne doivent pas être mentionnées trop profondément).

Recommended Posts

L'histoire de vouloir afficher des annonces liées à des articles sur Jubatus
Une histoire sur l'exécution de Python sur PHP sur Heroku
Une histoire sur un débutant Linux mettant Linux sur une tablette Windows
Une histoire sur un débutant de GCP essayant de créer un serveur Micra avec GCE
Une histoire rafraîchissante sur Slice en Python
Une histoire de mauvaise humeur sur Slice en Python
L'histoire de l'utilisation de la réduction de Python
Une histoire sur le fait de vouloir penser à des personnages déformés dans GAE / P
Une histoire d'essayer d'exécuter JavaScripthon sur Windows et d'abandonner.
Une histoire sur un remodelage magique qui met Lubuntu dans un Chromebook
Une histoire sur la création d'une chaîne anonyme avec Slack à partir de zéro connaissance
Une histoire sur Python pop and append
Une histoire d'essayer d'installer uwsgi sur une instance EC2 et d'échouer
Une histoire sur la création d'un environnement IDE avec WinPython sur un ancien système d'exploitation Windows.
Une histoire addictive lors de l'utilisation de tensorflow sur Android
Une histoire sur l'apprentissage automatique simple avec TensorFlow
Une histoire sur l'exploitation d'une instance GCP à partir de Discord
Une histoire accro aux variables globales et à la portée de Go
Une histoire sur l'implémentation d'un écran de connexion avec django
Une histoire sur la modification de Python et l'ajout de fonctions
Histoire de l'analyse de données par apprentissage automatique
Une histoire sur un ingénieur venu uniquement du côté serveur a créé un portfolio
Histoire de l'utilisation du jeton logiciel de Resona avec 1Password
Une histoire de prédiction du taux de change avec Deep Learning
L'histoire de la migration de l'intégralité du disque Linux via SSH
L'histoire de la création d'une partition de type Hanon avec Python
Une histoire d'essayer un monorepo (Golang +) Python avec Bazel
Histoire autour de la maternelle, de l'école maternelle, du jardin d'enfants
Une histoire qui reflète l'activité Discord dans Slack Status
Une histoire sur la difficulté à traiter en boucle 3 millions de données d'identification
L'histoire de la gestion de theano avec TSUBAME 2.0
Une histoire sur le changement du nom principal de BlueZ
Une histoire sur un débutant Linux passant LPIC101 en une semaine
Une histoire de trébucher sur PATH après l'installation d'anaconda