2017-08-17 96 views
9

Wyszkoliłem model klasyfikatora sentencji przy użyciu biblioteki Keras, wykonując poniższe czynności (ogólnie).Keras Text Preprocessing - Zapisywanie obiektu Tokenizer do pliku w celu uzyskania oceny

  1. Konwersja tekstu corpus w sekwencji z wykorzystaniem Tokenizer obiektu/klasy
  2. zbudować model stosując metodę model.fit()
  3. ocenić temu modelowi

Teraz do punktacji przy użyciu tego modelu, I był w stanie zapisać model do pliku i załadować go z pliku. Jednak nie znalazłem sposobu na zapisanie obiektu Tokenizer do pliku. Bez tego będę musiał przetworzyć korpus za każdym razem, gdy muszę zdobyć choć jedno zdanie. Czy istnieje sposób obejścia tego?

Odpowiedz

17

Najpopularniejszym sposobem jest użycie pickle lub joblib. Tu masz przykład jak używać pickle aby zaoszczędzić 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) 
+0

Czy wywołasz tokenizer.fit_on_texts ponownie w zestawie testowym ? – cgl

+0

Nie. Jeśli ponownie sprawdzisz dopasowanie *, może zmienić indeks. Tryskacz załadowany piklerem jest gotowy do użycia. –

1

Mam utworzoną problem https://github.com/keras-team/keras/issues/9289 w Keras repo. Dopóki interfejs API nie zostanie zmieniony, problem ma link do istoty, która ma kod demonstrujący sposób zapisywania i przywracania tokenizera bez oryginalnych dokumentów, w których tokenizer był dopasowany. Wolę przechowywać wszystkie informacje o moim modelu w pliku JSON (z powodów, ale głównie z mieszanego środowiska JS/Python), a to pozwoli na to, nawet z sort_keys = True