人間のためのNLP。迅速で使いやすい自然言語処理(NLP)ツールキットで、NLPについての想像力を満たしています。
→英語版

基本的な紹介•インストール•開始ガイド•詳細なチュートリアル•名誉•コードの貢献方法•引用符•謝辞
Fancy-NLPは、 Tencentの製品広告戦略チームによって構築された製品のポートレートを構築するためのテキストナレッジマイニングツールです。エンティティの抽出、テキスト分類、テキストの類似性マッチングなど、さまざまな一般的なNLPタスクをサポートしています。業界で現在使用されている現在に使用されているフレームワークと比較して、ユーザーをサポートして高速な機能実装を実装できます。上級ユーザーによるモデルの深いカスタマイズを満たすだけでなく、通常のユーザーが事前に訓練されたモデルを迅速に使用して機能的な実践を迅速に実践できるようにすることができます。現在の製品広告ビジネスシナリオでは、このツールを使用して、大量の製品データの特性をすばやく探索し、それにより製品の推奨事項などのモジュールをサポートします。
プロジェクトの当初の意図は、使用シナリオを直接目指し、NLPタスクのユーザーのニーズを満たす簡単なNLPツールのセットを提供することです。そのため、ユーザーは複雑な前処理やその他の中間プロセスに対処する必要がなく、入力自然言語の複数のNLPタスクを直接完了する必要がありません。
ファンシーとは何ですか?名前付きエンティティ認識(NER)、テキスト分類、テキストの類似性マッチング(文ペアマッチング(SPM)などの多くの現在のNLPタスクでは、ほとんどのツールはモデルトレーニングと評価を優先するように設計されています。これらのモデルを実際のビジネスシナリオに適用したい場合、したがって、補足を実行することはできます。 Fancy-NLPでのNLPタスクのリンクは、モデルを実際の需要シナリオに効率的に適用します。
Fancy-NLPは現在、Python 3環境で使用するためにサポートされており、Python 3.6で完全にテストされています。 Tensorflow 2.xは、現在のバージョンに完全に依存しています。モジュールの互換性について懸念がある場合は、VirtualEnvを使用して仮想環境を作成してこのツールを使用することをお勧めします。
Fancy-NLPは、 pipを使用してワンクリックインストールをサポートしています。
pip install fancy-nlpGetting Guideでは、事前に訓練されたモデルを使用して、Fancy-NLPの基本的な機能を迅速に理解して体験します。
注:ユーザーが直接使用できる複数のシナリオ(異なる注釈付きデータ)のエンティティ認識モデルを最適化し続けます。関連するデータセットがある場合は、この問題で肯定的なフィードバックを提供することもできます。
Fancy-NLPの現在のバージョンは、MSRA NERサブセットデータを使用してデフォルトでトレーニングされたNERモデルをロードできます。中国のテキストの組織構造(org)、場所(loc)、および人(あたり)エンティティを識別できます。デフォルトで読み込まれた基本モデルは、ユーザーが直接体験できることです。独自のカスタマイズされたモデルを直接使用する場合は、その後の詳細なチュートリアルの紹介を参照して、エンティティ抽出システムを構築できます。
> >> from fancy_nlp . applications import NER
> >> ner_app = NER ()上記のコードを初めて実行すると、事前に訓練されたNERモデルがクラウドからダウンロードされます。
> >> ner_app . analyze ( '同济大学位于上海市杨浦区,校长为陈杰' )
{ 'text' : '同济大学位于上海市杨浦区,校长为陈杰' ,
'entities' : [
{ 'name' : '同济大学' ,
'type' : 'ORG' ,
'score' : 1.0 ,
'beginOffset' : 0 ,
'endOffset' : 4 },
{ 'name' : '上海市' ,
'type' : 'LOC' ,
'score' : 1.0 ,
'beginOffset' : 6 ,
'endOffset' : 9 },
{ 'name' : '杨浦区' ,
'type' : 'LOC' ,
'score' : 1.0 ,
'beginOffset' : 9 ,
'endOffset' : 12 },
{ 'name' : '陈杰' ,
'type' : 'PER' ,
'score' : 1.0 ,
'beginOffset' : 16 ,
'endOffset' : 18 }]} > >> ner_app . restrict_analyze ( '同济大学位于上海市杨浦区,校长为陈杰' )
{ 'text' : '同济大学位于上海市杨浦区,校长为陈杰' ,
'entities' : [
{ 'name' : '同济大学' ,
'type' : 'ORG' ,
'score' : 1.0 ,
'beginOffset' : 0 ,
'endOffset' : 4 },
{ 'name' : '杨浦区' ,
'type' : 'LOC' ,
'score' : 1.0 ,
'beginOffset' : 9 ,
'endOffset' : 12 },
{ 'name' : '陈杰' ,
'type' : 'PER' ,
'score' : 1.0 ,
'beginOffset' : 16 ,
'endOffset' : 18 }]} >>> ner_app.predict('同济大学位于上海市杨浦区,校长为陈杰')
['B-ORG',
'I-ORG',
'I-ORG',
'I-ORG',
'O',
'O',
'B-LOC',
'I-LOC',
'I-LOC',
'B-LOC',
'I-LOC',
'I-LOC',
'O',
'O',
'O',
'O',
'B-PER',
'I-PER']
Fancy-NLPは、現在公開されている中国のニュースタイトル分類データセットで訓練されたテキスト分類モデルでデフォルトでロードされます。これは、ニュースタイトルテキストに属するニュースカテゴリを予測できます。
> >> from fancy_nlp . applications import TextClassification
> >> text_classification_app = TextClassification ()上記のプログラムを初めて実行すると、事前に訓練されたモデルがクラウドからダウンロードされます。
> >> text_classification_app . predict ( '苹果iOS占移动互联网流量份额逾65% 位居第一' )
'科技' > >> text_classification_app . analyze ( '苹果iOS占移动互联网流量份额逾65% 位居第一' )
( '科技' , 0.9996544 )Fancy-NLPは、現在公開されているWebankカスタマーサービスの質問データセットでトレーニングされたテキストの類似性マッチングモデルにデフォルトでロードされます。これは、提供されたテキストペアに対して同じ意図を表すかどうかを予測できます。
> >> from fancy_nlp . applications import SPM
> >> spm_app = SPM ()上記のプログラムを初めて実行すると、事前に訓練されたテキストの類似性マッチングモデルがクラウドからダウンロードされます。
> >> spm_app . predict (( '未满足微众银行审批是什么意思' , '为什么我未满足微众银行审批' ))
'1'予測結果では、 1同じ意図または類似のテキストを表し、 0異なる意図または異なるテキストを表します。
> >> spm_app . analyze (( '未满足微众银行审批是什么意思' , '为什么我未满足微众银行审批' ))
( '1' , array ([ 1.6599501e-09 , 1.0000000e+00 ], dtype = float32 ))詳細なチュートリアルでは、Fancy-NLPを使用して独自のデータセットを使用してカスタムシナリオを満たすカスタムモデルを構築する方法を学び、Fancy-NLPのインターフェイスをより包括的に理解する方法を学ぶことができます。
次のチュートリアルを完全に体験するには、使用するデータセットとBERTモデルをダウンロードする必要があります。
86geqk7e6rb7ダウンロードしたデータをexamplesディレクトリと同じレベルに移動できます。最終的なディレクトリ構造は次のとおりです。
.
├── datasets
│ ├── ner
│ │ └── msra
│ │ ├── test_data
│ │ └── train_data
│ ├── spm
│ │ └── webank
│ │ ├── BQ_dev.txt
│ │ ├── BQ_test.txt
│ │ └── BQ_train.txt
│ └── text_classification
│ └── toutiao
│ ├── toutiao_cat_data.txt
│ └── toutiao_label_dict.txt
├── examples
│ ├── bert_combination.py
│ ├── bert_fine_tuning.py
│ ├── bert_single.py
│ ├── ner_example.py
│ ├── spm_example.py
│ └── text_classification_example.py
└── pretrained_embeddings
└── chinese_L-12_H-768_A-12
├── bert_config.json
├── bert_model.ckpt.data-00000-of-00001
├── bert_model.ckpt.index
├── bert_model.ckpt.meta
└── vocab.txt
したがって、サンプルプログラムを直接実行できます。たとえば、 python examples/ner_example.py 。
上記のMSRA NERサブセットデータを例として使用して、既存のデータセットを使用して独自のエンティティ認識モデルをトレーニングする方法を紹介しています。次のすべてのコードスニペットの完全なバージョンについては、 examples/ner_example.pyを参照してください。
Fancy-NLPでは、エンティティ認識アプリケーションは標準のNERデータセット形式の使用をサポートし、各文字を識別することをサポートし、対応するタグはtで区切られ、文は空白線で区切られています。タグの形式はBIOやBIOESなどの一般的な標準形式にすることができます。
Fancy-NLPが提供するインターフェイスを使用して、データセットを直接読み込み、モデルが必要とする形式に処理できます。
from fancy_nlp . applications import NER
ner_app = NER ( use_pretrained = False )
from fancy_nlp . utils import load_ner_data_and_labels
train_data , train_labels = load_ner_data_and_labels ( 'datasets/ner/msra/train_data' )
valid_data , valid_labels = load_ner_data_and_labels ( 'datasets/ner/msra/test_data' ) load_ner_data_and_labels 、NERデータセットの効果的な負荷を実装します。データのファイルパス(トレーニングセット、検証セット、またはテストセット)のファイルパスを使用して、パラメーターとしてロードできます。テストセットは、検証セットとして使用されます。実際のタスクでは、貴重なテスト評価結果を得るために、独自の独立した検証セットとテストセットが必要です。
有効なデータを取得した後、NERアプリケーションはモデルの直接トレーニングを開始できます。
checkpoint_dir = 'pretrained_models'
model_name = 'msra_ner_bilstm_cnn_crf'
ner_app . fit ( train_data , train_labels , valid_data , valid_labels ,
ner_model_type = 'bilstm_cnn' ,
char_embed_trainable = True ,
callback_list = [ 'modelcheckpoint' , 'earlystopping' , 'swa' ],
checkpoint_dir = checkpoint_dir ,
model_name = model_name ,
load_swa_model = True ) NERアプリケーションのfitインターフェイスの場合、以前に処理されたトレーニングセットと検証セットサンプルに渡す必要があります。残りのパラメーターの意味は次のとおりです。
ner_model_type :使用するモデル名を示します。この例では、 bilstm_cnnモデルが使用されます。char_embed_trainable :単語ベクトル層が微調整できるかどうか。この例では、微調整を実行できることを示しているTrueを示しています。callback_list :使用する必要があるコールバック関数の名前。この例で使用されるコールバック関数は次のとおりです。modelcheckpoint :モデルチェックポイント関数を使用します。反復ごとに、訓練されたモデルを保存します。earlystopping :早期停止機能を使用します。 nラウンドイテレーション(デフォルトn = 5)の後にモデルのパフォーマンスが改善されない場合、トレーニングは終了します。swa : SWAは、モデルのパフォーマンスを効果的に改善できる一般的なモデル統合戦略である確率的重量平均化を意味します。詳細については、元の論文の紹介を参照してください。checkpoint_dir :モデルファイルを保存するディレクトリパス。model_name :モデルファイルのファイル名。load_swa_model :モデルのトレーニング後にSWAモデルの重量をロードするかどうか。ここでTrueに設定し、SWAモデルの使用を示します。 test_data , test_labels = load_ner_data_and_labels ( 'datasets/ner/msra/test_data' )
ner_app . score ( test_data , test_labels )ここでは、 load_ner_data_and_labels 、テストセットデータの処理にまだ使用されています。有効なデータ形式を取得した後、NERアプリケーションのscoreインターフェイスを使用して、テストセットでモデルのスコアを取得します。
モデルをトレーニングした後、タスクに必要なすべてのモデル関連ファイルを保存する必要があります。
import os
ner_app . save (
preprocessor_file = os . path . join ( checkpoint_dir , f' { model_name } _preprocessor.pkl' ),
json_file = os . path . join ( checkpoint_dir , f' { model_name } .json' )) NERアプリケーションのsaveインターフェイスを使用して、モデルの構造ファイル(JSON)、Weightファイル(HDF5)、および前処理関連の結果(Pickle)を持続できます。
modelcheckpoint関数を通じて重量ファイルが保存されているため、仕様を表示する必要はありません。 ner_app . load (
preprocessor_file = os . path . join ( checkpoint_dir , f' { model_name } _preprocessor.pkl' ),
json_file = os . path . join ( checkpoint_dir , f' { model_name } .json' ),
weights_file = os . path . join ( checkpoint_dir , f' { model_name } _swa.hdf5' ))現時点では、 ner_appはすでにサンプルを予測する機能があり、入門ガイドに記載されている関連予測関数を完了できます。たとえば、 analyze 、 restrict_analyze 。
上記の中国のニュースタイトル分類データセットを例として使用して、既存のデータセットを使用して独自のテキスト分類モデルをトレーニングする方法を紹介しています。次のすべてのコードスニペットの完全なバージョンについては、 examples/text_classification_example.pyを参照してください。
Fancy-NLPでは、テキスト分類アプリケーションは、元のテキストを使用して固定区切り文字によって区切られたデータセット形式をサポートしています。テキスト分類タスクに依存しない冗長な列を持つことができます。ラベル列と入力テキスト列の両方が統一された固定位置にあることを確認する必要があります。
さらに、分類タグの場合、タグとタグIDのマッピングファイルも必要です。これは2つの列で構成されています。最初の列は、データセットのタグの元の名前、通常はエンコードされたIDです。 2番目の列は、タグの元の名前に対応する読み取り可能な名前です。このファイルの対応は、モデルが予測されたときに読み取り可能なラベル名を直接出力するために使用されます。
Fancy-NLPが提供するインターフェイスを使用して、データセットを直接読み込み、モデルが必要とする形式に処理できます。
from fancy_nlp . applications import TextClassification
text_classification_app = TextClassification ( use_pretrained = False )
data_file = 'datasets/text_classification/toutiao/toutiao_cat_data.txt'
from fancy_nlp . utils import load_text_classification_data_and_labels
train_data , train_labels , valid_data , valid_labels , test_data , test_labels =
load_text_classification_data_and_labels ( data_file ,
label_index = 1 ,
text_index = 3 ,
delimiter = '_!_' ,
split_mode = 2 ,
split_size = 0.3 ) load_ner_data_and_labels 、テキスト分類データセットの効果的な負荷を実装します。データのファイルパス(トレーニングセット、検証セット、またはテストセット)のファイルパスを使用して、パラメーターとしてロードできます。ここでは、完全なデータを使用して、トレーニングセット、検証セット、テストセットを分割します。データファイルに加えて、上記の残りのパラメーターの特定の意味は次のとおりです。
label_index :データファイルの分類タグの位置(位置番号は0から始まります)。text_index :データファイルに分類されるテキストの場所。delimiter :データファイルの列間のセパレーター。split_mode :パラメーターを変更して元のデータを分割する方法を示します。で:split_size :データ分割比率。 split_mode=1の場合、 split_size比を元のデータから分割するデータが検証セットとして使用されることを意味します。 split_mode=2の場合、 split_size比を元のデータから分割するデータが、検証セットとテストセットの合計として、検証セットの割合と各アカウントの割合の割合が半分にわたって使用されることを意味します。 有効なデータを取得した後、テキスト分類アプリケーションはモデルのトレーニングを直接開始できます。
dict_file = 'datasets/text_classification/toutiao/toutiao_label_dict.txt'
model_name = 'toutiao_text_classification_cnn'
checkpoint_dir = 'pretrained_models'
text_classification_app . fit (
train_data , train_labels , valid_data , valid_labels ,
text_classification_model_type = 'cnn' ,
char_embed_trainable = True ,
callback_list = [ 'modelcheckpoint' , 'earlystopping' , 'swa' ],
checkpoint_dir = checkpoint_dir ,
model_name = model_name ,
label_dict_file = dict_file ,
max_len = 60 ,
load_swa_model = True )テキスト分類アプリケーションのfitインターフェイスの場合、以前に処理されたトレーニングセットと検証セットサンプルに渡す必要があります。残りのパラメーターの意味は次のとおりです。
text_classification_model_type :使用するモデル名を示します。この例では、 cnnモデルが使用されます。char_embed_trainable :単語ベクトル層が微調整できるかどうか。この例では、微調整を実行できることを示しているTrueを示しています。callback_list :使用する必要があるコールバック関数の名前。この例で使用されるコールバック関数は次のとおりです。modelcheckpoint :モデルチェックポイント関数を使用します。反復ごとに、訓練されたモデルを保存します。earlystopping :早期停止機能を使用します。 nラウンドイテレーション(デフォルトn = 5)の後にモデルのパフォーマンスが改善されない場合、トレーニングは終了します。swa : SWAは、モデルのパフォーマンスを効果的に改善できる一般的なモデル統合戦略である確率的重量平均化を意味します。詳細については、元の論文の紹介を参照してください。checkpoint_dir :モデルファイルを保存するディレクトリパス。model_name :モデルファイルのファイル名。label_dict_file :2つの列で構成されるラベル辞書ファイル:最初の列は、データセットのラベルの元の名前、通常はいくつかのエンコードされたIDです。 2番目の列は、ラベルの元の名前に対応する読み取り可能な名前です。max_len :入力テキストによって保持される最大長の場合、その長さを超えるテキストは切り捨てられます。load_swa_model :モデルのトレーニング後にSWAモデルの重量をロードするかどうか。ここでTrueに設定し、SWAモデルの使用を示します。 text_classification_app . score ( test_data , test_labels )ここでは、テキスト分類アプリケーションのscoreインターフェイスを使用して、テストセットでモデルのスコアを取得できます。
モデルをトレーニングした後、タスクに必要なすべてのモデル関連ファイルを保存する必要があります。
import os
text_classification_app . save (
preprocessor_file = os . path . join ( checkpoint_dir , f' { model_name } _preprocessor.pkl' ),
json_file = os . path . join ( checkpoint_dir , f' { model_name } .json' ))テキスト分類アプリケーションのsaveインターフェイスを使用して、モデルの構造ファイル(JSON)、Weightファイル(HDF5)、および前処理関連の結果(Pickle)を持続できます。
modelcheckpoint関数を通じて重量ファイルが保存されているため、仕様を表示する必要はありません。 text_classification_app . load (
preprocessor_file = os . path . join ( checkpoint_dir , f' { model_name } _preprocessor.pkl' ),
json_file = os . path . join ( checkpoint_dir , f' { model_name } .json' ),
weights_file = os . path . join ( checkpoint_dir , f' { model_name } _swa.hdf5' ))現時点では、 text_classification_appすでにサンプルを予測する機能を備えており、入門ガイドに記載されている関連予測関数を完了することができます。たとえば、 predict 、 analyze 。
既存のデータセットを使用して独自のテキストの類似性マッチングモデルをトレーニングする方法を紹介するための例として、上記のWebankカスタマーサービスの質問マッチングデータセットを使用しています。次のすべてのコードスニペットの完全なバージョンについては、 examples/spm_example.pyを参照してください。
Fancy-NLPでは、テキストの類似性を一致するタスクアプリケーションは、3つの列で構成されるデータt形式での元のテキストの使用をサポートします。最初の列と2番目の列は、それぞれテキストペアのセットです。 3番目の列はサンプルラベル、 1テキストセマンティクスが類似していることを意味し、 0異なることを意味します。
Fancy-NLPが提供するインターフェイスを使用して、データセットを直接読み込み、モデルが必要とする形式に処理できます。
from fancy_nlp . applications import SPM
spm_app = applications . SPM ( use_pretrained = False )
train_file = 'datasets/spm/webank/BQ_train.txt'
valid_file = 'datasets/spm/webank/BQ_dev.txt'
from fancy_nlp . utils import load_spm_data_and_labels
train_data , train_labels = load_spm_data_and_labels ( train_file )
valid_data , valid_labels = load_spm_data_and_labels ( valid_file ) load_spm_data_and_labels 、テキストの類似性の効果的な負荷を実装します。データセットを一致させます。データのファイルパス(トレーニングセット、検証セット、またはテストセット)のファイルパスを使用して、パラメーターとしてロードできます。
有効なデータを取得した後、テキストの類似性マッチングアプリケーションは、モデルのトレーニングを直接開始できます。
model_name = 'spm_siamese_cnn'
checkpoint_dir = 'pretrained_models'
spm_app . fit ( train_data , train_labels , valid_data , valid_labels ,
spm_model_type = 'siamese_cnn' ,
word_embed_trainable = True ,
callback_list = [ 'modelcheckpoint' , 'earlystopping' , 'swa' ],
checkpoint_dir = checkpoint_dir ,
model_name = model_name ,
max_len = 60 ,
load_swa_model = True )テキストの類似性マッチングアプリケーションのfitインターフェイスの場合、以前に処理されたトレーニングと検証セットのサンプルを渡す必要があります。残りのパラメーターの意味は次のとおりです。
spm_model_type :使用するモデル名を示します。この例では、 siamese_cnnモデルが使用されます。word_embed_trainable :単語ベクトルレイヤーが微調整できるかどうか。この例では、微調整を実行できることを示しているTrueを示しています。callback_list :使用する必要があるコールバック関数の名前。この例で使用されるコールバック関数は次のとおりです。modelcheckpoint :モデルチェックポイント関数を使用します。反復ごとに、訓練されたモデルを保存します。earlystopping :早期停止機能を使用します。 nラウンドイテレーション(デフォルトn = 5)の後にモデルのパフォーマンスが改善されない場合、トレーニングは終了します。swa : SWAは、モデルのパフォーマンスを効果的に改善できる一般的なモデル統合戦略である確率的重量平均化を意味します。詳細については、元の論文の紹介を参照してください。checkpoint_dir :モデルファイルを保存するディレクトリパス。model_name :モデルファイルのファイル名。max_len :入力テキストによって保持される最大長の場合、その長さを超えるテキストは切り捨てられます。load_swa_model :モデルのトレーニング後にSWAモデルの重量をロードするかどうか。ここでTrueに設定し、SWAモデルの使用を示します。 test_file = 'datasets/spm/webank/BQ_test.txt'
test_data , test_labels = load_spm_data_and_labels ( test_file )
spm_app . score ( test_data , test_labels )ここでは、テキストの類似性マッチングアプリケーションscoreインターフェイスを直接使用して、テストセットでモデルのスコアを取得できます。
モデルをトレーニングした後、タスクに必要なすべてのモデル関連ファイルを保存する必要があります。
import os
spm_app . save (
preprocessor_file = os . path . join ( checkpoint_dir , f' { model_name } _preprocessor.pkl' ),
json_file = os . path . join ( checkpoint_dir , f' { model_name } .json' ))テキストの類似性マッチングアプリケーションのsaveインターフェイスを使用して、モデルの構造ファイル(JSON)、重量ファイル(HDF5)、および前処理関連の結果(Pickle)を持続できます。
modelcheckpoint関数を通じて重量ファイルが保存されているため、仕様を表示する必要はありません。 spm_app . load (
preprocessor_file = os . path . join ( checkpoint_dir , f' { model_name } _preprocessor.pkl' ),
json_file = os . path . join ( checkpoint_dir , f' { model_name } .json' ),
weights_file = os . path . join ( checkpoint_dir , f' { model_name } _swa.hdf5' ))現時点では、 spm_appはすでにサンプルを予測する機能があり、紹介ガイドに記載されている関連予測関数を完了し続けることができます。たとえば、 predict 、 analyze 。
FACNY-NLPは、 BERTモデルを使用するためのさまざまな方法を提供します。
Fancy-NLPでBERTを使用するには、事前に訓練されたBERTモデル(Googleが提供する中国のBertモデル、Baiduが提供するErnieモデル(抽出コード:IQ74)、およびHarbin Institut of Technologyが提供するBert-WWMモデルなど)をダウンロードするだけです。その後、BERTモデルの語彙ファイル、構成ファイル、およびモデルファイルのパスを、関連するアプリケーションのfitメソッドに渡すことができます。以下は、エンティティ認識アプリケーションの例です。完全な例コードについては、 examples/bert_fine_tuning.py 、 examples/bert_single.py 、およびexamples/bert_combination.pyを参照してください。
BERTモデルは、単語ベクトルではなく、文字ベクトルでのみ使用できることに注意してください。
import tensorflow as tf
from fancy_nlp . applications import NER
ner_app = NER ( use_pretrained = False )
from fancy_nlp . utils import load_ner_data_and_labels
train_data , train_labels = load_ner_data_and_labels ( 'datasets/ner/msra/train_data' )
valid_data , valid_labels = load_ner_data_and_labels ( 'datasets/ner/msra/test_data' )
ner_app . fit ( train_data , train_labels , valid_data , valid_labels ,
ner_model_type = 'bert' ,
use_char = False ,
use_word = False ,
use_bert = True ,
bert_vocab_file = 'pretrained_embeddings/chinese_L-12_H-768_A-12/vocab.txt' ,
bert_config_file = 'pretrained_embeddings/chinese_L-12_H-768_A-12/bert_config.json' ,
bert_checkpoint_file = 'pretrained_embeddings/chinese_L-12_H-768_A-12/bert_model.ckpt' ,
bert_trainable = True ,
optimizer = tf . keras . optimizers . Adam ( 1e-5 ),
callback_list = [ 'modelcheckpoint' , 'earlystopping' , 'swa' ],
checkpoint_dir = 'pretrained_models' ,
model_name = 'msra_ner_bert_crf' ,
load_swa_model = True )上記のコードスニペットでは、注意することが重要です。
ner_model_type :モデルタイプをbertに設定します。use_char :文字レベルのベクトルを使用しないように設定します。use_word :単語レベルのベクトルを補助入力として使用しないように設定します。use_bert :bertモデルを微調整する場合、bert inputのみを使用するように設定されています。bert_vocab_file 、 bert_config_file 、 bert_checkpoint_file :bertモデル関連ファイルへのパスbert_trainable :BERTモデルパラメーターを訓練可能な状態、つまり微調整できるように設定します。optimizer :BERTモデルのオプティマイザーを設定します。 BERTモデルの微調整では、オプティマイザーの学習率をより小さなレベルに調整する必要があります。 from fancy_nlp . applications import NER
ner_app = NER ( use_pretrained = False )
from fancy_nlp . utils import load_ner_data_and_labels
train_data , train_labels = load_ner_data_and_labels ( 'datasets/ner/msra/train_data' )
valid_data , valid_labels = load_ner_data_and_labels ( 'datasets/ner/msra/test_data' )
ner_app . fit ( train_data , train_labels , valid_data , valid_labels ,
ner_model_type = 'bilstm_cnn' ,
use_char = False ,
use_word = False ,
use_bert = True ,
bert_vocab_file = 'pretrained_embeddings/chinese_L-12_H-768_A-12/vocab.txt' ,
bert_config_file = 'pretrained_embeddings/chinese_L-12_H-768_A-12/bert_config.json' ,
bert_checkpoint_file = 'pretrained_embeddings/chinese_L-12_H-768_A-12/bert_model.ckpt' ,
bert_trainable = False ,
optimizer = 'adam' ,
callback_list = [ 'modelcheckpoint' , 'earlystopping' , 'swa' ],
checkpoint_dir = 'pretrained_models' ,
model_name = 'msra_ner_bilstm_cnn_bert_crf' ,
load_swa_model = True )上記のコードスニペットでは、注意することが重要です。
ner_model_type :モデルタイプをbilstm_cnnに設定すると、ここでは非バートモデルを使用する必要があります。use_char :文字レベルのベクトルを使用しないように設定します。use_word :単語レベルのベクトルを補助入力として使用しないように設定します。use_bert :機能入力としてbertベクターのみを使用するように設定します。bert_vocab_file 、 bert_config_file 、 bert_checkpoint_file :bertモデル関連ファイルへのパスbert_trainable :BERTモデルパラメーターを訓練不可能な状態に設定すると、ここでTrueに設定することもできます。optimizer :オプティマイザーを設定します。 BETモデルがトレーニング可能な場合は、オプティマイザーの学習率をより小さなものに調整することをお勧めします。 import tensorflow as tf
from fancy_nlp . applications import NER
ner_app = NER ( use_pretrained = False )
from fancy_nlp . utils import load_ner_data_and_labels
train_data , train_labels = load_ner_data_and_labels ( 'datasets/ner/msra/train_data' )
valid_data , valid_labels = load_ner_data_and_labels ( 'datasets/ner/msra/test_data' )
ner_app . fit ( train_data , train_labels , valid_data , valid_labels ,
ner_model_type = 'bilstm_cnn' ,
use_char = True ,
use_word = False ,
use_bert = True ,
bert_vocab_file = 'pretrained_embeddings/chinese_L-12_H-768_A-12/vocab.txt' ,
bert_config_file = 'pretrained_embeddings/chinese_L-12_H-768_A-12/bert_config.json' ,
bert_checkpoint_file = 'pretrained_embeddings/chinese_L-12_H-768_A-12/bert_model.ckpt' ,
bert_trainable = True ,
optimizer = tf . keras . optimizers . Adam ( 1e-5 ),
callback_list = [ 'modelcheckpoint' , 'earlystopping' , 'swa' ],
checkpoint_dir = 'pretrained_models' ,
model_name = 'msra_ner_bilstm_cnn_char_bert_crf' ,
load_swa_model = True )上記のコードスニペットでは、注意することが重要です。
ner_model_type :モデルタイプをbilstm_cnnに設定すると、ここでは非バートモデルを使用する必要があります。use_char :使用権レベルのベクトルを設定します。use_word :単語レベルのベクトルを補助入力として使用しないように設定します。use_bert :単語ベクトルとbertベクターを特徴入力として組み合わせたBert Vectorの使用を設定します。bert_vocab_file 、 bert_config_file 、 bert_checkpoint_file :bertモデル関連ファイルへのパスbert_trainable :BERTモデルパラメーターを訓練可能な状態に設定すると、ここでFalseに設定することもできます。optimizer :オプティマイザーを設定します。 BETモデルがトレーニング可能な場合は、オプティマイザーの学習率をより小さなものに調整することをお勧めします。 派手なNLPコードの改善に関心のある開発者は、次の仕様に従ってプルリクエストを送信する必要があります。
関連する研究プロセス中に派手なNLPを使用する場合、引用リストに次のことを追加できます
@misc{tencent2019fancynlp,
title={Fancy-NLP},
author={Li Yang and Shiyao Xu and Shijia E},
howpublished={ url {https://github.com/boat-group/fancy-nlp}},
year={2019}
}topに戻ります
このプロジェクトは、多くの優れたオープンソースプロジェクト、特にケラスに触発されています。ケラスのスローガン:人間のための深い学習が言ったように、特に中国の分野では、派手なNLPが人間にとってNLPであることを願っています。