2009-07-08 9 views
4

J'essaie de concevoir une méthode qui permettra de classer un nombre donné de mots anglais en 2 ensembles - "rare" et "commun" - la référence étant de savoir combien ils sont utilisé dans la langue. Le nombre de mots que je voudrais classer est limité - actuellement autour de 10 000, et inclut tout des articles, aux noms propres qui pourraient être empruntés d'autres langues (et seraient ainsi classés comme «rares»). J'ai fait une analyse de fréquence à l'intérieur du corpus, et j'ai une distribution de ces mots (allant d'une utilisation à environ 100). Mon intuition pour un tel système était d'utiliser des listes de mots (tels que le corpus de fréquence de mots BNC, wordnet, fréquence de corpus interne), et assigner des poids à son apparition dans l'un d'entre eux. Par exemple, un mot qui a une fréquence moyenne dans le corpus (disons 50), mais qui apparaît dans une liste de mots W - peut être considéré comme commun car c'est l'un des plus fréquents dans la langue entière. Ma question était - quelle est la meilleure façon de créer un score pondéré pour quelque chose comme ça? Devrais-je aller discret ou continu? Dans les deux cas, quel genre de système de classification fonctionnerait le mieux pour cela?Classer les mots anglais en rares et communs

Ou recommandez-vous une autre méthode?

Merci!


EDIT:

Pour répondre à la question de Vinko sur l'utilisation prévue de la classification -

Ces mots sont tokenizés d'une phrase (par exemple: le titre du livre) - et l'intention est de comprendre une stratégie pour générer une chaîne de requête de recherche pour la phrase, en cherchant un corpus de texte. La chaîne de requête peut prendre en charge plusieurs paramètres tels que la proximité, etc. - donc si un mot est commun, ces paramètres peuvent être modifiés.

Pour répondre à la question de Igor -

(1) Quelle est la taille de votre corps? Actuellement, la liste est limitée à 10k jetons, mais ce n'est qu'un ensemble d'entraînement. Il pourrait aller jusqu'à 100k une fois que je commence à le tester sur l'ensemble de test.

2) avez-vous une sorte de proportion attendue de mots communs/rares dans le corpus? Hmm, je ne sais pas.

+1

Je pense que l'utilisation prévue de la classification aidera à définir quels sont les meilleurs critères pour peser les scores. –

+0

Deux questions: (1) quelle est la taille de votre corpus? Est-ce juste 10 000 mots que vous aimeriez classer, ou est-il plus grand/indépendant des 10 000 mots? (2) avez-vous une sorte de proportion attendue de mots communs/rares dans le corpus? –

+0

Répondez à vos questions ci-dessus! Vous ne savez pas si SO informe les utilisateurs des modifications effectuées. – viksit

Répondre

2

En supposant que vous ayez un moyen d'évaluer la classification, vous pouvez utiliser l'approche «boosting» de l'apprentissage automatique. Les classificateurs stimulants utilisent un ensemble de classificateurs faibles combinés à un classificateur fort.

Dites, vous avez votre corpus et K listes de mots externes que vous pouvez utiliser. Sélectionnez N seuils de fréquence. Par exemple, vous pouvez avoir 10 seuils: 0,1%, 0,2%, ..., 1,0%. Pour votre corpus et chacune des listes de mots externes, créez N "experts", un expert par seuil par liste de mots/corpus, total de N * (K + 1) experts. Chaque expert est un classificateur faible, avec une règle très simple: si la fréquence du mot est supérieure à son seuil, ils considèrent le mot comme «commun». Chaque expert a un poids.

Le processus d'apprentissage est le suivant: attribuer le poids 1 à chaque expert. Pour chaque mot de votre corpus, faites voter les experts. Additionnez leurs votes: 1 * poids (i) pour les votes «ordinaires» et (-1) * poids (i) pour les votes «rares». Si le résultat est positif, marquez le mot comme commun.Maintenant, l'idée générale est d'évaluer la classification et d'augmenter le poids des experts qui étaient justes et de diminuer le poids des experts qui se sont trompés. Puis répétez le processus encore et encore, jusqu'à ce que votre évaluation est assez bonne.

Les spécificités du réglage du poids dépendent de la façon dont vous évaluez la classification. Par exemple, si vous n'avez pas d'évaluation par mot, vous pouvez toujours évaluer la classification comme étant «trop nombreux» ou «trop nombreux». Dans le premier cas, promouvoir tous les experts "rares" et rétrograder tous les experts "communs", ou vice-versa.

+1

Le PO ne semble pas avoir d'idées préconçues sur un travail particulier étant "rare" ou "commun", donc je ne pense pas que l'hypothèse d'un moyen d'évaluer le classificateur soit valide. Avoir l'OP main-classifier un sous-ensemble aléatoire des mots pourrait être un bon moyen de le retourner dans un problème supervisé afin que votre cadre d'amplification puisse être utilisé. Cela résoudrait également naturellement le problème de la définition d'un seuil. – othercriteria

+0

@othercriteria - bon point - Je pensais en fait à faire quelque chose de similaire (re: la classification de sous-ensembles étant utilisée comme un ensemble d'entraînement, afin de s'assurer que les seuils de boost seraient faciles à comprendre). – viksit

1

Votre distribution est probablement un Pareto distribution (un surensemble de la loi de Zipf comme mentionné ci-dessus). Je suis choqué que le mot le plus commun est utilisé seulement 100 fois - cela comprend "un" et "le" et des mots comme ça? Vous devez avoir un petit corpus si c'est pareil.

De toute façon, vous devrez choisir un seuil pour "rare" et "commun". Un choix potentiel est le nombre moyen attendu d'apparences (voir l'article wiki ci-dessus pour calculer la moyenne). En raison de la «grosse queue» de la distribution, un nombre relativement faible de mots aura des apparences au-dessus de la moyenne - ce sont les «communs». Le reste est "rare". Cela aura pour effet que beaucoup plus de mots sont rares que commun. Vous ne savez pas si c'est ce que vous recherchez, mais vous pouvez simplement déplacer le seuil vers le haut et vers le bas pour obtenir la distribution souhaitée (par exemple, tous les mots dont la valeur attendue est supérieure à 50% sont communs).

+0

Lien intéressant, merci - Je suis toujours à la recherche de la meilleure façon de l'intégrer dans mon modèle! – viksit

0

Bien que ce ne soit pas une réponse à votre question, sachez que vous êtes en train d'inventer une roue ici. Information Les experts en récupération ont conçu des moyens de pondérer les mots de recherche en fonction de leur fréquence. Un poids très populaire est TF-IDF, qui utilise la fréquence d'un mot dans un document et sa fréquence dans un corpus. TF-IDF est également expliqué here.

Un score alternatif est le Okapi BM25, qui utilise des facteurs similaires.

Voir aussi le Lucene Similarity documentation pour savoir comment TF-IDF est implémenté dans une bibliothèque de recherche populaire.

Questions connexes