Print

Print


Eric Morgan wrote:

>> [I also put this on AUTOCAT. Apologies if you also follow that. This
>> falls at the intersection of hand-cataloging, data processing and
>> simple AI.]...
> 
> Tim, your's is a perfect example of a supervised machine learning classification process. The process works very much like your computer's spam filter. Here's how:
> 
>   1. collect a set of data that you know is
>      library-written
> 
>   2. collect a set of data that you know is
>      publisher-sourced
> 
>   3. count, tabulate, and vectorize the
>      features of your data -- measure the data's
>      characteristics and associate them with
>      a collection
> 
>   4. model the data -- use any one of a number
>      of clustering algorithms to associate
>      the data with one collection or another,
>      such as Naive Bayes
> 
>   5. optionally, test the accuracy of the model
> 
>   6. save the model


The crucial part of a supervised machine learning process is the training step, and each sub-step can (and probably should) be tweaked given one's particular situation. There are a number of things to consider:

  * Identifying correct & accurate sets of training data is difficult. First, many times data does not fall neatly into one or more distinct categories. While a book may be written by a single individual, the book may fall into a number of different subjects or genres. Second, the distinction between one category and another may be so subtle, that even a computer, given a very large set of sample data, may not be able to consistently choose between one category and another. Third, binary classification is easy (spam versus ham). Classification into a flat list of categories is not too difficult. But hierarchal classification is very difficult.

 * Measuring the data -- counting, tabulating, and vectorizing -- is fraught with nuance. For example, what are you going to count? Individual words? Phrases? Numbers? Will you exclude stop words? Are you going to stemmatize the features? Maybe you will lemmatize the words? Maybe you will do neither. Will you merely count and tabulate the words, or maybe you will use something like an algorithm called TFIDF to create a more "relevant" list of words and scores? To what degree will you test the accuracy of the data, and if to a high degree, then what technique will you use?

  * Modeling the data - This is the "magic happen here" step. What algorithm are you going to use, and how are you going to parameterize it? Your choices will depend on many things, such as: the size & scope of the data, whether the data is numeric or not, the desire for a true/false classification or a degree of certainty, the size & scope of your computer(s), the degree of real distinctiveness of the different data sets, etc. Entire dissertations are written on this topic.

Not ironically, there are computer processes that help with the writing of these sorts of computer programs; there are techniques used to determine which of the various combinations -- "turning the knobs" -- are the most efficient. Computer programs used to create... machine learning programs. Yikes!!

When it comes to the use case alluded to in the original posting, this is what I would do:

  1) Identify a "large" set of library-written MARC
     records, at least 50.

  2) Identify a similarly large set of publisher
     -sourced MARC records.

  3) Loop through each MARC record, read the 520
     field, and save the result as a file in a
     directory named "library" or a directory named
     "publisher", accordingly.

  4) Run train.py against the directories.

  5) Identify a set of MARC records which contain
     values in the 520 field.

  6) Loop through each of these additional records,
     read the 520 field, and save the result as a
     file in a directory, called, say "unclassified"

  7) Run classify.py against the unclassified
     directory.

  8) The result will be a list of labels/filenames
     -- classifications.

You will then want to repeat the whole process for the purposes of "turning the knobs". For example:

  * increase the size of your datasets but keep
    them similarly sized; not as easy as you might
    think

  * use different techniques to measure your data

  * use different modeling algorithms

What is really cool about this whole process is that it is immensely scalable. For example, one could classify a whole set of documents, and one could feel okay about the result. Then, a year later, given more expertise and additional sets of data, the process could be tweaked, and the whole lot could be re-classified. The computer doesn't care about touching each item more than once. It will touch it as many times as you tell it. Yes, there is a lot of work up front, the work requires additional skills, but the result can definitely supplement & enhance the work that is already being done. 

We, as a profession, need to go beyond the use of computers to merely automate things. We need -- ought -- to learn how to exploit computers to really & truly take advantage of their ability to store vast amounts of data, organize it into information, widely share the information, consume ("read") the information, analyze the information, and output knowledge which is then verified by a person as true, useful, relevant, understandable, etc.

(Again, the whole lot of this posting has been saved in a tarball temporarily accessible at http://dh.crc.nd.edu/tmp/classification.zip)

--
Eric Lease Morgan, Librarian