I’m trying to devise a method that will be able to classify a given number of english words into 2 sets – “rare” and “common” – the reference being to how much they are used in the language.
The number of words I would like to classify is bounded – currently at around 10,000, and include everything from articles, to proper nouns that could be borrowed from other languages (and would thus be classified as “rare”). I’ve done some frequency analysis from within the corpus, and I have a distribution of these words (ranging from 1 use, to tops about 100).
My intuition for such a system was to use word lists (such as the BNC word frequency corpus, wordnet, internal corpus frequency), and assign weights to its occurrence in one of them.
For instance, a word that has a mid level frequency in the corpus, (say 50), but appears in a word list W – can be regarded as common since its one of the most frequent in the entire language. My question was – whats the best way to create a weighted score for something like this? Should I go discrete or continuous? In either case, what kind of a classification system would work best for this?
Or do you recommend an alternative method?
Thanks!
EDIT:
To answer Vinko’s question on the intended use of the classification –
These words are tokenized from a phrase (eg: book title) – and the intent is to figure out a strategy to generate a search query string for the phrase, searching a text corpus. The query string can support multiple parameters such as proximity, etc – so if a word is common, these params can be tweaked.
To answer Igor’s question –
(1) how big is your corpus?
Currently, the list is limited to 10k tokens, but this is just a training set. It could go up to a few 100k once I start testing it on the test set.
2) do you have some kind of expected proportion of common/rare words in the corpus?
Hmm, I do not.
Assuming you have a way to evaluate the classification, you can use the “boosting” approach to machine learning. Boosting classifiers use a set of weak classifiers combined to a strong classifier.
Say, you have your corpus and K external wordlists you can use.
Pick N frequency thresholds. For example, you may have 10 thresholds: 0.1%, 0.2%, …, 1.0%.
For your corpus and each of the external word lists, create N “experts”, one expert per threshold per wordlist/corpus, total of N*(K+1) experts. Each expert is a weak classifier, with a very simple rule: if the frequency of the word is higher than its threshold, they consider the word to be “common”. Each expert has a weight.
The learning process is as follows: assign the weight 1 to each expert. For each word in your corpus, make the experts vote. Sum their votes: 1 * weight(i) for “common” votes and (-1) * weight(i) for “rare” votes. If the result is positive, mark the word as common.
Now, the overall idea is to evaluate the classification and increase the weight of experts that were right and decrease the weight of the experts that were wrong. Then repeat the process again and again, until your evaluation is good enough.
The specifics of the weight adjustment depends on the way how you evaluate the classification. For example, if you don’t have per-word evaluation, you may still evaluate the classification as “too many common” or “too many rare” words. In the first case, promote all the pro-“rare” experts and demote all pro-“common” experts, or vice-versa.