LingPipe-TextClassification(テキスト分類)
12831 ワード
What is Text Classification?
Text classification typically involves assigning a document to a category by automated or human means. LingPipe provides a classification facility that takes examples of text classifications--typically generated by a human--and learns how to classify further documents using what it learned with language models. There are many other ways to construct classifiers, but language models are particularly good at some versions of this task.
テキスト分類とは?
テキスト分類とは、通常、ドキュメントを自動的に分類したり、人の意思に従って分類したりすることを指します.LingPipeは,人為的に分類されたテキストに基づいて言語モデルに基づいて自動分類を学習することを提供する.分類器を構築する方法はたくさんありますが、言語モデルは分類器の構築に役立ちます.
20 Newsgroups Demo(20個のニュースパックの例)
A publicly available data set to work with is the 20 newsgroups data available from the 20 Newsgroups Home Page
20個のニュースパッケージを含む公開データセットをダウンロードできます.
4 Newsgroups Sample(4つのニュースパッケージの例)
We have included a sample of 4 newsgroups with the LingPipe distribution in order to allow you to run the tutorial out of the box. You may also download and run over the entire 20 newsgroup dataset. LingPipe's performance over the whole data set is state of the art.
このチュートリアルのLingPipeのリリースバージョンをユーザーがスムーズに見ることができるように、私たちの例には4つのニュースパッケージが含まれています.また、完全なニュースパッケージ(20個)をダウンロードし、完全なデータセットでLingPipeを実行することもできます.LingPipeは、完全なデータセットで実行するとより効果的です.
Quick Start(クイックスタート)
Once you have downloaded and installed LingPipe, change directories to the one containing this read-me:
LingPipeをダウンロードしてインストールした場合は、ReadMeを含むディレクトリにアクセスします.
cd demos/tutorial/classify
You may then run the demo from the command line (placing all of the code on one line):
コマンドラインの下で例を実行できます(改行はありません):
On Windows:(windowsの下)
java
-cp "../../../lingpipe-4.1.0.jar;
classifyNews.jar"
ClassifyNews
or through Ant:(または端末経由)
ant classifyNews
The demo will then train on the data in
demos/fourNewsGroups/4news-train/
and evaluate on demos/4newsgroups/4news-test
. The results of scoring are printed to the command line and explained in the rest of this tutorial. 持参した例はdemos/fourNewsGroup/4 news-train/の4つのトレーニングセットで
demos/4newsgroups/4news-test 。 , 。
でトレーニングされます.Theコード
The entire source for the example is ClassifyNews.java . We will be using the API from Classifier and its subclasses to train the classifier, and Classifcation to evaluate it. The code should be pretty self explanatory in terms of how training and evaluation are done. Below I go over the API calls.
ClassifyNews.javaは、分類全体のソースファイルです.Classifierおよびそのサブクラスを用いて評価分類器を訓練する.私たちが提供した仕様のコードを読むことで、どのように訓練と評価分類器を実現するかを知ることができます.次に分類器のAPIを学び始めます.
Training
We are going to train up a set of character based language models (one per newsgroup as named in the static array
CATEGORIES
) that processes data in 6 character sequences as specified by the NGRAM_SIZE
constant. 言語モデルに基づいて特徴値のセット(各ニュースセットは静的配列CATEGORIESと命名される)that processes data in 6 character sequences as specified by the
NGRAM_SIZE
constantを訓練する.private static String[] CATEGORIES
= { "soc.religion.christian",
"talk.religion.misc",
"alt.atheism",
"misc.forsale" };
private static int NGRAM_SIZE = 6;
The smaller your data generally the smaller the n-gram sample, but you can play around with different values--reasonable ranges are from 1 to 16 with 6 being a good general starting place.
通常、トレーニングデータセットが小さいほど、1次マルコフチェーン(n-gram)サンプルセットが小さくなりますが、1~16の範囲で開始値を選択することができます.6は良い開始値です.
The actual classifier involves one language model per classifier. In this case, we are going to use process language models ( LanguageModel.Process ). There is a factory method in
DynamicLMClassifier
to construct actual models. 実際には各分類器に言語分類モデルがあります.この場合、言語モデルを処理することができます.
DynamicLMClassifier 。
DynamicLMClassifier classifier
= DynamicLMClassifier
.createNGramBoundary(CATEGORIES,
NGRAM_SIZE);
There are two other kinds of language model classifiers that may be constructed, for bounded character language models and tokenized language models.
他の2種類の分類器、境界フィーチャーセット言語モデル、タグ言語モデルを構築することもできます.
Training a classifier simply involves providing examples of text of the various categories. This is called through the
handle
method after first constructing a classification from the category and a classified object from the classification and text: 各分類のサンプルテキストを提供することによって、分類器を簡単に訓練します.
Classification classification
= new Classification(CATEGORIES[i]);
Classified<CharSequence> classified
= new Classified<CharSequence>(text,classification);
classifier.handle(classified);
That's all you need to train up a language model classifier. Now we can see what it can do with some evaluation data.
これで言語モデルの分類器の訓練が完了した.今どのようにテストデータを利用して分類器をテストしますか.
Classifying News Articles(ニュースを分類)
The DynamicLMClassifier is pretty slow when doing classification so it is generally worth going through a compile step to produce the more efficient compiled version, which will classify character sequences into joint classification results. A simple way to do that is in the code as:
DynamicLMClassifierという動的クラスは分類を行う際にかなり遅いので,分類器を統合してコンパイルする必要がある.コードに示すように、
JointClassifier<CharSequence> compiledClassifier
= (JointClassifier<CharSequence>)
AbstractExternalizable.compile(classifier);
Now the rubber hits the road and we can can see how well the machine learning is doing. The example code both reports classifications to the console and evaluates the performance. The crucial lines of code are:
今すべての準備ができているので、機械がどのように自動的に勉強しているかを見てみましょう.サンプルコードには、分類情報の出力と評価テストが含まれます.キーコードは次のとおりです.
JointClassification jc = compiledClassifier.classifyJoint(text);
String bestCategory = jc.bestCategory();
String details = jc.toString();
The text is an article that was not trained on and the JointClassification is the result of evaluating the text against all the language models. Contained in it is a
bestCategory()
method that returns the highest scoring language model name for the text. Just to be sure that some statistics are involved the toString()
method dumps out all the results and they are presented as: 訓練されていない文章を探して、JointClassificationを通じてこの文章をすべての言語モデルで評価テストします.このクラスのbestCategory()メソッドは,この文書に対して最も得点の高い分類言語モデルを返すことができる.統計結果は、次のようにtoString()メソッドで出力されます.
Testing on soc.religion.christian/21417
Best Cat: soc.religion.christian
Rank Cat Score P(Cat|In) log2 P(Cat,In)
0=soc.religion.christian -1.56 0.45 -1.56
1=talk.religion.misc -2.68 0.20 -2.68
2=alt.atheism -2.70 0.20 -2.70
3=misc.forsale -3.25 0.13 -3.25
Scoring Accuracy(得点精度)
The remaining API of note is how the system is scored against a gold standard. In this case our testing data. Since we know what newsgroup the article came from we can evaluate how well the software is doing with the JointClassifierEvaluator class.
残りのAPIは主にシステムのゴールド基準がどのように得点されたかを説明している.テストデータでは、ニュースセットの分類とソースを知っていますが、ソフトウェアはどのようにしていますか.
boolean storeInputs = true;
JointClassifierEvaluator<CharSequence> evaluator
= new JointClassifierEvaluator<CharSequence>(compiledClassifier,
CATEGORIES,
storeInputs);
This class wraps the
compiledClassifier
in an evaluation framework that provide very rich reporting of how well the system is doing. Later in the code it is populated with data points with the method addCase()
, after first constructing a classified object as for training: このクラスパッケージは、非常に豊富なシステムがどのようにレポートを作成するかを提供する分類評価フレームワークに組み込まれています.後のコードは埋め込み方法addCase(データポイント)で、分類オブジェクトのトレーニングを構築します.
Classification classification
= new Classification(CATEGORIES[i]);
Classified<CharSequence> classified
= new Classified<CharSequence>(text,classification);
evaluator.handle(classified);
This will get a JointClassification for the text and then keep track of the results for reporting later. After all the data is run, then many methods exist to see how well the software did. In the demo code we just print out the total accuracy via the ConfusionMatrix class, but it is well worth looking at the relevant Javadoc for what reporting is available.
Cross-Validation(クロス検証)
Running Cross-Validation(クロス検証)
There's an ant target
crossValidateNews
which cross-validates the news classifier over 10 folds. Here's what a run looks like: antの目標は,10倍以上のニュースをクロス検証することである.実行結果は次のとおりです.
> cd $LINGPIPE/demos/tutorial/classify
> ant crossValidateNews
Reading data.
Num instances=250.
Permuting corpus.
FOLD ACCU
0 1.00 +/- 0.00
1 0.96 +/- 0.08
2 0.84 +/- 0.14
3 0.92 +/- 0.11
4 1.00 +/- 0.00
5 0.96 +/- 0.08
6 0.88 +/- 0.13
7 0.84 +/- 0.14
8 0.88 +/- 0.13
9 0.84 +/- 0.14
原文:http://alias-i.com/lingpipe/demos/tutorial/classify/read-me.html
英語が下手で、これからは骨が折れる.