序文
いくつかの作業を行うために、最近の認識意思で、その次のようにfasttext、研究記録とテキスト分類をしよう。
簡単な紹介
まず第一に、私たちはfasttext目的が何であるかでしょうか?テキストの分類は、それはそれが属するカテゴリを指定した単語です。
目標は、1つ以上のカテゴリに(例えば、電子メール、ブログ、SMS、製品レビューなど)テキスト分類文書にあります。これらのカテゴリは、除算にレビュースコア、スパムと非スパムに基づいて、またはドキュメントの言語を記述することができます。今日、そのような機械学習分類器を構築するための主な方法は、サンプルから分類規則を学習することです。このような分類を構築するために、我々は文書および(また、タグやラベルと呼ばれる)その対応するカテゴリのコンポーネントで構成されたデータを、マークする必要があります。
Fasttextそれは何ですか?
FastText Facebookは簡単で、学習の効率的なテキスト分類と特性評価方法が、速く近づい奥行きモデルの精度を提供し、高速なオープンソースのテキスト分類です。
原則
あなたが興味を持っている場合は、特別な、よりオンライン記事の原理は、その後、あなたは会場Google検索やテキストの記事を終了することができますので、原則的にこの部分をスキップします。私はいくつかのリンクをそこに置かれました。
この記事では、共通の利益の原則についての最初のオンラインの記事について。第二に、私は原理の理解の完全レベルのすべての後、私は貧しいエンジニアよ、ここに明確に書かれた私を維持することはできません。それを実装し、私の運命は、ライン上で乾燥しています。
実用化
それは最初fasttextちょうどこのツールキットは、どのようにそれがオプションである達成するためにどのような方法で、それを使用して、理解しなければなりません。ここで私は、Java言語でオンラインサービスを提供した後、モデルを訓練するために、コマンドラインを使用することにしました。もちろん、あなたがパッケージfasttext複数の言語があるため、語学研修や様々なサービスを使用するように選択することができます。
ダウンロードしてインストール
私たちは直接公式リリースのバージョンをダウンロードすることができ、
wget https://github.com/facebookresearch/fastText/archive/v0.1.0.zip
unzip v0.1.0.zip
复制代码
私は個人的に、すなわち実装githubのプロジェクト、上のより直接的なクローンそれをお勧めします:
git clone [email protected]:facebookresearch/fastText.git
复制代码
彼のカタログを入力した後、実行make
することができます。
インストールが完了したら、あなたは、関連するヘルプマニュアルを入手することができ、パラメータを指定せずに直接コマンドを実行することができます。
情報処理
チュートリアルの公式ウェブサイトを使用することであるポータルいるもちろんのことができます、トレーニングのためのデータの一部を、私たちは、中国のいくつかのより多くの訓練サンプルを見たいかもしれないと思います。
まず第一には、学習サンプルのフォーマットをご紹介します。次のとおりです。
__label__name 呼 延 十
__label__name 张 伟
__label__city 北京
__label__city 西安
复制代码
トレーニングサンプルを含むテキストファイルの各行には、適切な書類が続きます。すべてのラベルラベルどのような方法をfastText識別タグやワードそうだプレフィックス始まり、。その後、モデルは、文書与えられたラベルを予測するために訓練されています。
あなたのサンプルを生成するとき、あなたはトレーニングやテストセットを区別する必要があることに注意、我々は一般的な使用训练:测试=8:2
割合を。
私の個人的な学習サンプル、都市名(エリア)、名前(名)、およびその他のラベルの数が含まれています。4つの千万の訓練サンプル、千万バー試験サンプル。一部が生成する辞書を使用して、本質的に決定されています。効果を高めるために、可能な限り正確、およびいくつかの数できるだけとしてサンプル。
トレーニング
以下のコマンドを実行し、次にあなたが完了している実行待ち、次のような出力が表示されます(あなたのトレーニングデータの入力されると、出力は出力ファイルのモデル名です):
./fasttext supervised -input data.train -output model_name
Read 0M words
Number of words: 14598
Number of labels: 734
Progress: 100.0% words/sec/thread: 75109 lr: 0.000000 loss: 5.708354 eta: 0h0m
复制代码
トレーニングが完了したら、あなたは重要な指標の数を確認するために、あなたのテストスイートを実行することができます:
すぐにあなたのモデルファイルとテスト・データ・セットでテストした後。以下の指標が正確でリコールされています。これは後述します。
./fasttext test model_name.bin data.test
N 3000
P@5 0.0668
R@5 0.146
Number of examples: 3000
复制代码
一般的な例いくつかの直接のテスト結果に、我々は、いくつかのインタラクティブなテストをコマンドを実行することができます。次のように私のテストのいくつかは以下のとおりです。
。チューニング
これは、精度と再現率の最初の定義です。
精确度是由 fastText 所预测标签中正确标签的数量。 召回率是所有真实标签中被成功预测出的标签数量。 我们举一个例子来说明这一点:
Why not put knives in the dishwasher?
在 Stack Exchange 上,这句话标有三个标签:equipment,cleaning 和 knives。 模型预测出的标签前五名可以通过以下方式获得:
>> ./fasttext predict model_cooking.bin - 5
前五名是 food-safety, baking, equipment, substitutions and bread.
因此,模型预测的五个标签中有一个是正确的,精确度为 0.20。 在三个真实标签中,只有 equipment 标签被该模型预测出,召回率为 0.33。
复制代码
疑いの余地は関係なく、私たちの目的は、複数のタグを識別することはないではありません、があり、これら2つの値、我々は可能な限り高いとして持っています。
サンプルの最適化
私たちのサンプルは、その理論的に正しい保証することはできません、それは、我々は、少なくともサンプルなどの単語を削除するなど、いくつかの基本的なクリーンアップ、シンボルべき、データの手動注釈万人のレベルはより困難、当然のことながら、最高の人工的なマークである、プログラムによって生成されます小文字、削除、およびので統一操作。限り、あなたのデータ分類のいずれも理論的に削除する必要があります。
より多くの反復と、より良い学習率
要するに、運転パラメータの一部を変更、我々はトレーニングプログラムをより円形にすると、より最適な学習率、プラスこれら2つのパラメータ-lr 1.0 -epoch 25
、もちろん、あなたが実際の状況を調整し、テストを継続することができます。
nグラムを使用して
これは、以前のモデルでは、追加の増加、何のプラスが存在しないトレーニングでn-gram
語順の要因とみなされていない機能は、。ここでは、できるだけであるN-グラムは理解します。
これは、トレーニングコマンドの最後の実行です。
./fasttext supervised -input data.train -output ft_model -epoch 25 -lr 1.0 -wordNgrams 2 -bucket 200000 -dim 50 -loss hs
复制代码
これは私のテスト・セットで私の精度と再現率です。
N 10997060
P@1 0.985
R@1 0.985
复制代码
私は最適化を継続していなかった後に98.5%にそう、実際にプログラムを使用するかどうかを判断する必要がないため、より多くのいくつかの簡単な手順よりも後に、認識精度は、実際に良い効果で98.5%に達していますその後の最適化があれば、私はこの記事を更新します。レコードで使用される最適化方法。
デモ
まず、我々はPOMファイルを導入しました:
<dependency>
<groupId>com.github.vinhkhuc</groupId>
<artifactId>jfasttext</artifactId>
<version>0.4</version>
</dependency>
复制代码
そして、単純に罰金を記述します。
import com.github.jfasttext.JFastText;
/**
* Created by pfliu on 2019/11/17.
*/
public class FastTextDemo {
public static void main(String [] args){
JFastText jt = new JFastText();
jt.loadModel("/tmp/ft_model_5.bin");
String ret = jt.predict("呼 延 十");
System.out.println(ret);
}
}
复制代码
もっと簡単なPythonコード:
もちろん、それをインストールすることを忘れないでください:pip3 install fasttext
。
関連記事
仕上がり。
変更履歴
完成2019年11月17日上記のすべての個人の所得であり、間違ったが、コメント欄を歓迎している場合、正しい私を考えます。
転載へようこそ、サインインし、元のリンクを保持してください。
連絡先Eメール:[email protected]
より多くの研究ノートは、個々のブログやマイクロチャネルの社会的関心番号を参照してください。<Huyan 10> ------> Huyan 10