Question

Supposons que j'avais une liste de mots d'ordre (phrases courtes, plusieurs mots), et les gens avaient voté pour ceux qu'ils aimaient mieux, et je voulais déterminer quels mots, le cas échéant, fait quelques slogans plus populaires que d'autres. Quelle serait la meilleure façon d'y parvenir? Ma première pensée était de trouver tous les mots uniques dans l'ensemble des slogans et marquer chacun comme le nombre moyen de votes de tous les slogans qui contiennent ledit mot, mais la fréquence devrait également entrer en jeu d'une certaine façon, je pense, donc que les éléments suivants devraient être vrai:

  • Si Word A se produit que dans le slogan qui a obtenu le plus de votes et Word B ne se produit que dans le slogan qui a obtenu le deuxième plus, Word A est plus « popularité de génération »
  • Cependant, si Word A ne se produit que dans le slogan et le mot B classé haut se produit dans les slogans de deuxième et troisième rang, Word B devrait gagner, car il a poussé plus des slogans vers le haut.
  • Cependant, une seule occurrence de la Parole A dans le slogan haut devrait encore l'emporter sur trois aspects de la Parole B dans d'autres slogans s'ils sont, par exemple, au milieu, ou la moitié inférieure, du pack (c'est-à-dire, dans la notation) il doit y avoir un équilibre des voix-faire et de la fréquence.

Je veux aussi éliminer les mots qui sont généralement communs (par exemple, « le » ou « de »). C'est un peu liée à des questions sur l'identification des mots de tendance qui ont été posées dans le passé, mais différent parce que le changement au fil du temps ne sont pas un facteur. Je serais heureux d'être pointé dans la bonne direction sur ce pour autant que la littérature concerne, mais je ne suis pas vraiment sûr de ce qu'il faut chercher. Est-ce une classe de problèmes que les autres traitent?

Était-ce utile?

La solution

Ceci est une question d'apprentissage de la machine. Vous essayez d'apprendre un modèle à partir des données surveillées. Pour ce faire, vous pouvez exécuter un algorithme simple qui est comme Perceptron ou SampleRank ( pdf ):

Tout d'abord, vous définissez les caractéristiques applicables aux mots dans un slogan. Les fonctionnalités peuvent être partagées entre les mots, par exemple Caractéristiques du mot « paix » pourrait être:

  • "paix",
  • "nom",
  • "abstrait nom",
  • "court nom",
  • "commence par p",
  • "se termine par « s'-son",
  • ...

La première caractéristique de « paix » est une caractéristique unique qui ne sur les incendies « paix », alors que les autres caractéristiques peuvent également le feu sur d'autres mots.

Chaque fonction a un poids (est mieux élevé). Vous avez donc un vecteur de caractéristique et un vecteur de poids. Cela vous permettra d'attribuer un poids (score) à un slogan (la somme de toutes les fonctions pondérées que le feu sur les mots du slogan). Tous les poids sont initialisés à 0,0.

Maintenant, vous commencez la formation:

boucle Vous sur toutes les paires de slogans. Pour chaque paire, vous connaissez le vrai classement (selon les votes que vous avez déjà). Ensuite, vous établir le classement en fonction des caractéristiques et de leurs poids actuels. Si le vrai classement et le classement en fonction de vos poids de caractéristiques actuelles (à savoir, selon votre modèle actuel) est le même que vous venez de passer à la prochaine paire. Si votre modèle attribué le mauvais classement que vous corriger les poids de fonction: Vous ajoutez 1.0 aux poids des caractéristiques que le feu sur le meilleur slogan (celui qui est mieux selon le vote des personnes) et soustraire 1,0 à partir des poids des caractéristiques que le feu le pire slogan (son score était évidemment trop élevé, donc vous l'abaisser maintenant). Ces mises à jour de poids auront une incidence sur les scores que vos ayants modèle aux prochaines paires, et ainsi de suite.

Vous exécutez cette boucle plusieurs fois, jusqu'à ce que votre modèle a obtenu la plupart des paires de droite (ou un autre critère de convergence).

En règle générale, vous ne vraiment pas d'ajouter ou de soustraire 1,0, mais les temps de eta 1.0, où eta est le taux d'apprentissage, que vous pouvez définir expérimentalement. En général, il est plus élevé au début de la formation et diminue progressivement pendant l'entraînement, comme votre poids se déplacent dans la bonne direction. (Voir aussi la descente de gradient stochastique.) Pour commencer, vous pouvez simplement le mettre à 0,1 comme une constante.

Cette procédure prend en charge les mots d'arrêt ( « le », « de », ...) comme ils devraient se produire aussi souvent en bon et en mauvais mots d'ordre (et si elles ne vraiment pas vous apprendre que trop) .

Après la formation, vous pouvez calculer le score de chaque mot en fonction des poids de caractéristiques apprises.

Autres conseils

Que diriez-vous bayésienne inférence ?

Je pense que j'utiliser un algorithme qui fait ces choses:

  1. Elimine les mots d'arrêt (mots communs) ( http://en.wikipedia.org/wiki/Stop_word )
  2. Normaliser et les mots souches ( http://en.wikipedia.org/wiki/Stemming )
  3. Calculer la fréquence des mots normalisés et votes
  4. Commander normalisé par mots votes / fréquence
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top