Kerasライブラリを使用して、以下の手順に従って(広く)感情分類子モデルをトレーニングしました。
このモデルを使用してスコアリングするために、モデルをファイルに保存し、ファイルからロードすることができました。ただし、Tokenizerオブジェクトをファイルに保存する方法が見つかりませんでした。これがなければ、一文でも採点する必要があるたびにコーパスを処理する必要があります。これを回避する方法はありますか?
最も一般的な方法は、 pickle
または joblib
を使用することです。 pickle
を保存するためにTokenizer
を使用する方法の例を示します。
import pickle
# saving
with open('tokenizer.pickle', 'wb') as handle:
pickle.dump(tokenizer, handle, protocol=pickle.HIGHEST_PROTOCOL)
# loading
with open('tokenizer.pickle', 'rb') as handle:
tokenizer = pickle.load(handle)
受け入れられた答えは、トークナイザーの保存方法を明確に示しています。以下は、(一般的に)スコアリングの問題に関するコメントですafterフィッティングまたは保存。リストtexts
が2つのリストTrain_text
とTest_text
で構成されているとします。ここで、Test_text
のトークンのセットはTrain_text
のトークンのセットのサブセットです(楽観的仮定)。 fit_on_texts(Train_text)
は、最初にtexts_to_sequences(Test_text)
を呼び出してからfit_on_texts(texts)
を呼び出す場合と比較して、text_to_sequences(Test_text)
に対して異なる結果を返します。
具体例:
from keras.preprocessing.text import Tokenizer
docs = ["A heart that",
"full up like",
"a landfill",
"no surprises",
"and no alarms"
"a job that slowly"
"Bruises that",
"You look so",
"tired happy",
"no alarms",
"and no surprises"]
docs_train = docs[:7]
docs_test = docs[7:]
# EXPERIMENT 1: FIT TOKENIZER ONLY ON TRAIN
T_1 = Tokenizer()
T_1.fit_on_texts(docs_train) # only train set
encoded_train_1 = T_1.texts_to_sequences(docs_train)
encoded_test_1 = T_1.texts_to_sequences(docs_test)
print("result for test 1:\n%s" %(encoded_test_1,))
# EXPERIMENT 2: FIT TOKENIZER ON BOTH TRAIN + TEST
T_2 = Tokenizer()
T_2.fit_on_texts(docs) # both train and test set
encoded_train_2 = T_2.texts_to_sequences(docs_train)
encoded_test_2 = T_2.texts_to_sequences(docs_test)
print("result for test 2:\n%s" %(encoded_test_2,))
結果:
result for test 1:
[[3], [10, 3, 9]]
result for test 2:
[[1, 19], [5, 1, 4]]
もちろん、上記の楽観的な仮定が満たされておらず、Test_textのトークンのセットがTrain_testのトークンの集合とは素である場合、テスト1は空のブラケットのリストになります[].
Tokenizerクラスには、日付をJSON形式に保存する機能があります。
tokenizer_json = tokenizer.to_json()
with io.open('tokenizer.json', 'w', encoding='utf-8') as f:
f.write(json.dumps(tokenizer_json, ensure_ascii=False))
データは、tokenizer_from_json
からkeras_preprocessing.text
関数を使用してロードできます。
with open('tokenizer.json') as f:
data = json.load(f)
tokenizer = tokenizer_from_json(data)
私は問題を作成しました https://github.com/keras-team/keras/issues/9289 kerasリポジトリで。 APIが変更されるまで、この問題には、トークナイザーが適合する元のドキュメントを持たずにトークナイザーを保存および復元する方法を示すコードを持つGistへのリンクがあります。私はすべてのモデル情報をJSONファイルに保存することを好みます(理由はありますが、主にJS/Python環境が混在しているため)。これにより、sort_keys = Trueでも可能