systemy_dialogowe/NLU.ipynb

34 KiB

import pandas as pd
import numpy as np
import tokenization

import tensorflow as tf
import tensorflow_hub as hub
import tensorflow_addons as tfa

import sklearn
from sklearn.model_selection import train_test_split
c:\Users\macty\AppData\Local\Programs\Python\Python311\Lib\site-packages\tensorflow_addons\utils\tfa_eol_msg.py:23: UserWarning: 

TensorFlow Addons (TFA) has ended development and introduction of new features.
TFA has entered a minimal maintenance and release mode until a planned end of life in May 2024.
Please modify downstream libraries to take dependencies from other repositories in our TensorFlow community (e.g. Keras, Keras-CV, and Keras-NLP). 

For more information see: https://github.com/tensorflow/addons/issues/2807 

  warnings.warn(
acts=pd.read_csv('data-only_dialogue_acts/user_acts.csv',index_col=None)
acts.head()
Agent text Act ack affirm bye hello help negate null repeat reqalts reqmore restart silence thankyou confirm deny inform request
0 user W jakim kraju mogę zarezerwować hotel? help NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
1 user Przedstaw proszę oferty z obszaru Górnego Kara... request NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2 user 3 inform NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
3 user 1000 USD na osobę inform NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
4 user Ostatni tydzień maja 2023 na 6 dni inform NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
for column in acts.columns[3:]:
    acts[column]=acts["Act"].str.contains(column).astype(int)
acts.to_csv('user_acts_one_hot.csv')
acts=acts.drop(["Agent"],axis=1)
acts=acts.drop(["Act"],axis=1)
text = acts["text"]
labels = acts.drop(["text"],axis=1)
label_cols=labels.columns
labels=labels[labels.columns].values
text = np.array(text)
text
array(['W jakim kraju mogę zarezerwować hotel?',
       'Przedstaw proszę oferty z obszaru Górnego Karabachu', '3',
       '1000 USD na osobę', 'Ostatni tydzień maja 2023 na 6 dni',
       'Gorąca woda i bezpieczna okolica',
       'Podaj proszę kosztorys dla hotelu YY',
       'Czy jest to cena łączna dla 3 osób?',
       'Czy oferta zawiera ubezpieczenie?',
       'Ile wynosi łączna cena z ubezpieczeniem dla 3 osób?',
       'Rezygnuję z rezerwacji. Potrzebuję więcej czasu do namysłu.',
       'chciałbym zwiedzić coś egzotycznego. Co możesz mi zaproponować?',
       'tam jest trochę za zimno',
       'brzmi bardzo fajnie! Jakie są ceny hoteli w Brazylii?',
       'Chciałbym aby to był pokój dla 2 osób i doga',
       'Dzień dobry. Chciałbym wybrać się do warszawy na przyszły weekend. Szukam pokoi dla dwóch osób w cenie do 500 zł za noc.',
       'Zależałoby mi na śniadaniu oraz na tym żeby hotel był blisko centrum miasta. Miło by było jakby był dostępny basen.',
       'Poproszę w takim wypadku o rezerwację w hotelu YY.',
       '31.03-02.04', 'Tak,  dziękuję', 'Dziękuję!',
       'Dzień dobry, szukam ofert wycieczek wakacyjnych last minute, czy mają państwo jakieś w ofercie?',
       'Interesowałaby mnie Chorwacja, Grecja lub Cypr. Czy któryś z tych krajów wchodzi w grę?',
       'Szukam pokoju dla dwóch osób. Proszę o polecenie kilku z powyższych krajów',
       'Hotel w zabytkowym centrum miasta położonego nad morzem',
       'Maksymalna cena za jedną dobę to 300 złotych',
       'Znalazłaby się jakaś alternatywa dla hotelu na Cyprze z wycieczką w cenie?',
       'A co z wycieczką?', 'Hmmm, to może ten ze szpitalem jednak',
       'Od przyszłego poniedziałku do piątku', 'na 9',
       'jeśli jest możliwość to 1 osobowe, a jak nie to 2',
       'budżet to nie problem',
       'chciałbym żeby był all inclusive i przede wszystkim był blisko kasyna',
       'Poproszę zarezerwować pokój xxx w takim razie',
       'Dziękuję! Pobyt na pewno będzie miły',
       'Dzień dobry, chciałbym zarezerwować nocleg w jakimś tanim hotelu we Włoskich Alpach',
       '1 osoba',
       'Chciałbym mieć nocleg na 5 dni, maksymalnie 200 euro za noc.',
       'Przydała by się sauna oraz jacuzzi.',
       'Czy w cenę hotelu wchodzą może skipassy?',
       'O super! Który by Pani hotel wybrała? Wolę miejsca gdzie wieczorem jest się gdzie pobawić...',
       'Super! Proszę o rezerwację i życzę miłego dnia',
       'A no tak, to też ważna kwestia... interesuje mnie pierwszy tydzień grudnia tego roku.',
       'tak,  czy sa wolne pokoje z ładnym widokiem dla 2 osob w przyszły weekend?',
       'Warszawa', 'a mozna troche dalej, na rynku straszne halasy sa',
       'tak, to jest to', 'potwierdzam',
       'chciałbym zarezerwować pokój dwuosobowy na dni 25-28 marca 2023',
       'w Poznaniu', 'balkon w pokoju, bar w hotelu',
       'zależy ile kosztuje', 'brzmi dobrze', 'dziękuję',
       'Chciałbym zarezerowować pokój w jakimś hotelu w Warszawie, możliwie jak najbliżej lotniska.',
       'To zależy od tego jaka jest cena. Mogę poprosić o szerszy wybór hoteli?',
       'W tej sytuacji jestem zainteresowany rezerwacją tego hotelu, który jest najbliżej',
       '31.03.2023 - 02.04.2023', 'Tak, dla jednej', 'dziękuję bardzo',
       'Witam, chcialbym zarezerwowac pokoj dla 3 osob, 2 os na jeden pokoj a ta trzecia osobno',
       'W Sosnowcu, na 9-11 września', 'Poproszę',
       'Dziękuję, kiedy mogę zapłacić?',
       'Ok, to zapłacę przy odebraniu kluczy', 'Do zobaczenia',
       'Chciałabym zamówić pokój dla dwóch osób. ',
       'Sopot. Czy jest możliwość z widokiem na molo? ', 'Nie mam ',
       'od 1 do 3 maja tego roku ', 'piękna sprawa ', 'Dziękuję pięknie ',
       'Do zobaczenia! ', 'podaj menu, dań głównych',
       'tak jaki hotel jest najbliżej Poznania', 'czy w zxy jest basen?',
       'a xyz?', 'czy sa wolne 2 osobowe pokoje na 25.03?',
       'tak, o której zaczyna się doba hotelowa?',
       'potwierdzam rezerwację',
       'chcialabym dokonac rezerwacji pokoju w warszawie',
       'wazny jest dla mnie jedyny parking oraz sniadania w formie bufetu',
       'w jakiej cenie jest hotel yzx',
       'dobrze to chcialabym zarezerwowac ten hotel',
       'na DD.MM.RR do DD.MM.RR', 'dla 2', 'dziekuje',
       'Chciałbym zarezerwować hotel w Zakopanem na najbliższy weekend.',
       'Czy hotel posiada przynajmniej 3 gwiazdki oraz basen?',
       'Poproszę o znalezienie hotelu z basenem.',
       'Tak proszę o dokonanie rezerwacji pokoju dla trzech osób.',
       'Dziękuję bardzo',
       'Chciałbym zarezerwować pokój na dwie doby, najlepiej z widokiem na miasto. Rezerwacja od 25.03 do 27.03. Czy jest może u Państwa dostępny pokój?',
       'Tak, to ten hotel w Poznaniu', 'Tak, poproszę dla dwóch osób',
       'Bardzo dziękuję, będziemy za 3 dni o godzinie 15',
       'Do zobaczenia', '8976098',
       'Bardzo dziękuję za sprawne załatwienie tematu. Powodem jest choroba mojej żony i niestety nie jesteśmy w stanie udać się w podróż ze względu na jej stan fizyczny.',
       'Jeszcze raz bardzo dziękuję',
       'chiałem zarezerwować dwa pokoje na dni 28-30 kwiecień',
       'w karpaczu, oba pokoje dwuosobowe',
       'czy w ofercie jest wyżywienie?',
       'czy jest opcja samego śniadania? obiad zjemy gdzieś na mieście',
       'tak proszę tak zrobić',
       'mam jeszcze takie pytanie na koniec, czy hotel zapewnia swoje miejsca parkingowe dla gości?',
       'dziękuję to chyba wszystko',
       'Czy mają Państwo wolny pokój 2-osobowy w terminie od 10 do 12 kwietnia?',
       'Prosze podac dostepne lokalizacje', 'Kraków', 'Tak',
       'To wszystko dziękuję.', 'Czy dostanę potwierdzenie mailem?',
       'xyz@gmail.com', 'Dziękuję', 'To wszystko', 'Pozdrawiam',
       'chciałbym zwiedzić coś egoztycznego. Co możesz mi polecić?',
       'Lokalizacja jest ok, a jak to wygląda cenowo?',
       'Interesuje mnie dwuosobowy pokój', 'Tak, to super cena. Poproszę',
       'Dziękuję to wszystko.',
       'Dzień dobry. Ile kosztuje u was wynajęcie pokoju dla dwóch osób?',
       'Chciałbym wynająć pokój na przyszły weekend w Poznaniu', 'Tak',
       'Płatność kartą na miejscu. To wszystko, dziękuję.',
       'Chciałbym zarezerwować pokój na jutro',
       'jakie pokoje są dostępne?',
       'Poznań Wilda, koło rynku wildeckiego',
       'poproszę pokój 1 osobowy, najlepiej byłoby na jak najwyższym piętrze',
       'Tak jestem zainteresowany.  Czy w hotelu jest restauracja?',
       'Tak poproszę pokój + posiłki,  W jakich porach mogę się zakwaterować?',
       'Tak, proszę o rezerwację', 'To wszystko, dziękuję za pomoc ',
       'Szukam noclegu w Pieninach',
       'Chodzi o koniec lipca lub początek sierpnia',
       '5 nocy od poniedziałku do soboty', 'Nocleg dla 6 osób',
       'Znalazłby się jeden pokój sześcioosobowy?',
       'Wrócę do wersji z 2 pokojami. Proszę o rezerwację',
       'Kiedy mogę dokonać płatności?', 'To wszystko. Dziękuję bardzo.',
       'A jaki jest najbliższy hotel 5 gwiazdkowy?', 'Tak poproszę.',
       'poproszę zarezerwować na 02.07.27',
       'chciałbym zamówić dwa pokoje 4 osobowe', 'Tak poproszę',
       'Nie, bo będzie wszystko', 'dzięki',
       'Chciałbym zarezerwować apartament dla dwóch osób na najbliższy weekend.',
       'W warszawie, centrum', 'Tak jak najbardziej, brzmi świetnie',
       'NIe, dziękuję bardzo',
       'Chciałbym wybrać się nad polskie morze, tak na 7 dni. Najlepiej by hotel znajdował się w 1 linii brzegowej, jak również by było tam jak najmniej Januszostwa.',
       'A no i żeby było tanio!', 'Wie Pan, ale ja chce jechać w lipcu.',
       'Jak najbardziej. Proszę o zarezerwowanie tego pokoju.',
       'Nie, dziękuję i życzę miłego dnia'], dtype=object)
from transformers import *
tokenizer = BertTokenizer.from_pretrained("dkleczek/bert-base-polish-uncased-v1")
model = TFBertForSequenceClassification.from_pretrained("dkleczek/bert-base-polish-uncased-v1", from_pt=True, num_labels=17)

c:\Users\macty\AppData\Local\Programs\Python\Python311\Lib\site-packages\tqdm\auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html
  from .autonotebook import tqdm as notebook_tqdm
c:\Users\macty\AppData\Local\Programs\Python\Python311\Lib\site-packages\transformers\generation_utils.py:24: FutureWarning: Importing `GenerationMixin` from `src/transformers/generation_utils.py` is deprecated and will be removed in Transformers v5. Import as `from transformers import GenerationMixin` instead.
  warnings.warn(
c:\Users\macty\AppData\Local\Programs\Python\Python311\Lib\site-packages\transformers\generation_tf_utils.py:24: FutureWarning: Importing `TFGenerationMixin` from `src/transformers/generation_tf_utils.py` is deprecated and will be removed in Transformers v5. Import as `from transformers import TFGenerationMixin` instead.
  warnings.warn(
loading file vocab.txt from cache at C:\Users\macty/.cache\huggingface\hub\models--dkleczek--bert-base-polish-uncased-v1\snapshots\62be9821055981deafb23f217b68cc41f38cdb76\vocab.txt
loading file added_tokens.json from cache at None
loading file special_tokens_map.json from cache at C:\Users\macty/.cache\huggingface\hub\models--dkleczek--bert-base-polish-uncased-v1\snapshots\62be9821055981deafb23f217b68cc41f38cdb76\special_tokens_map.json
loading file tokenizer_config.json from cache at C:\Users\macty/.cache\huggingface\hub\models--dkleczek--bert-base-polish-uncased-v1\snapshots\62be9821055981deafb23f217b68cc41f38cdb76\tokenizer_config.json
loading configuration file config.json from cache at C:\Users\macty/.cache\huggingface\hub\models--dkleczek--bert-base-polish-uncased-v1\snapshots\62be9821055981deafb23f217b68cc41f38cdb76\config.json
Model config BertConfig {
  "_name_or_path": "dkleczek/bert-base-polish-uncased-v1",
  "architectures": [
    "BertForMaskedLM",
    "BertForPreTraining"
  ],
  "attention_probs_dropout_prob": 0.1,
  "classifier_dropout": null,
  "hidden_act": "gelu",
  "hidden_dropout_prob": 0.1,
  "hidden_size": 768,
  "initializer_range": 0.02,
  "intermediate_size": 3072,
  "layer_norm_eps": 1e-12,
  "max_position_embeddings": 512,
  "model_type": "bert",
  "num_attention_heads": 12,
  "num_hidden_layers": 12,
  "output_past": true,
  "pad_token_id": 0,
  "position_embedding_type": "absolute",
  "transformers_version": "4.28.1",
  "type_vocab_size": 2,
  "use_cache": true,
  "vocab_size": 60000
}

loading configuration file config.json from cache at C:\Users\macty/.cache\huggingface\hub\models--dkleczek--bert-base-polish-uncased-v1\snapshots\62be9821055981deafb23f217b68cc41f38cdb76\config.json
Model config BertConfig {
  "architectures": [
    "BertForMaskedLM",
    "BertForPreTraining"
  ],
  "attention_probs_dropout_prob": 0.1,
  "classifier_dropout": null,
  "hidden_act": "gelu",
  "hidden_dropout_prob": 0.1,
  "hidden_size": 768,
  "id2label": {
    "0": "LABEL_0",
    "1": "LABEL_1",
    "2": "LABEL_2",
    "3": "LABEL_3",
    "4": "LABEL_4",
    "5": "LABEL_5",
    "6": "LABEL_6",
    "7": "LABEL_7",
    "8": "LABEL_8",
    "9": "LABEL_9",
    "10": "LABEL_10",
    "11": "LABEL_11",
    "12": "LABEL_12",
    "13": "LABEL_13",
    "14": "LABEL_14",
    "15": "LABEL_15",
    "16": "LABEL_16"
  },
  "initializer_range": 0.02,
  "intermediate_size": 3072,
  "label2id": {
    "LABEL_0": 0,
    "LABEL_1": 1,
    "LABEL_10": 10,
    "LABEL_11": 11,
    "LABEL_12": 12,
    "LABEL_13": 13,
    "LABEL_14": 14,
    "LABEL_15": 15,
    "LABEL_16": 16,
    "LABEL_2": 2,
    "LABEL_3": 3,
    "LABEL_4": 4,
    "LABEL_5": 5,
    "LABEL_6": 6,
    "LABEL_7": 7,
    "LABEL_8": 8,
    "LABEL_9": 9
  },
  "layer_norm_eps": 1e-12,
  "max_position_embeddings": 512,
  "model_type": "bert",
  "num_attention_heads": 12,
  "num_hidden_layers": 12,
  "output_past": true,
  "pad_token_id": 0,
  "position_embedding_type": "absolute",
  "transformers_version": "4.28.1",
  "type_vocab_size": 2,
  "use_cache": true,
  "vocab_size": 60000
}

loading weights file pytorch_model.bin from cache at C:\Users\macty/.cache\huggingface\hub\models--dkleczek--bert-base-polish-uncased-v1\snapshots\62be9821055981deafb23f217b68cc41f38cdb76\pytorch_model.bin
Loading PyTorch weights from C:\Users\macty\.cache\huggingface\hub\models--dkleczek--bert-base-polish-uncased-v1\snapshots\62be9821055981deafb23f217b68cc41f38cdb76\pytorch_model.bin
PyTorch checkpoint contains 178,915,010 parameters
Loaded 132,121,344 parameters in the TF 2.0 model.
All PyTorch model weights were used when initializing TFBertForSequenceClassification.

Some weights or buffers of the TF 2.0 model TFBertForSequenceClassification were not initialized from the PyTorch model and are newly initialized: ['classifier.weight', 'classifier.bias']
You should probably TRAIN this model on a down-stream task to be able to use it for predictions and inference.
acts_text= [tokenizer.encode(text, add_special_tokens=True, max_length=128, padding='max_length', truncation=True) for text in acts["text"]]
input_ids = np.array(acts_text)
attention_masks = np.where(input_ids != 0, 1, 0) # checks for existing words
train_inputs, test_inputs, train_labels, test_labels = train_test_split(input_ids, labels, test_size=0.2, random_state=42)
train_masks, test_masks, _, _ = train_test_split(attention_masks, input_ids, test_size=0.2, random_state=42)
optimizer = tf.keras.optimizers.Adam(learning_rate=2e-5)
loss = tf.keras.losses.BinaryCrossentropy(from_logits=True)
metrics = tfa.metrics.F1Score(num_classes=17, threshold=0.5)
model.layers[-1].activation = tf.keras.activations.sigmoid
model.compile(optimizer=optimizer, loss=loss, metrics=metrics)
history = model.fit(
    [train_inputs, train_masks],
    train_labels,
    validation_data=([test_inputs, test_masks], test_labels),
    batch_size=32,
    epochs=30
)
Epoch 1/30
4/4 [==============================] - 63s 15s/step - loss: 0.1764 - f1_score: 0.1641 - val_loss: 0.1709 - val_f1_score: 0.1149
Epoch 2/30
4/4 [==============================] - 59s 15s/step - loss: 0.1712 - f1_score: 0.1957 - val_loss: 0.1672 - val_f1_score: 0.1280
Epoch 3/30
4/4 [==============================] - 59s 15s/step - loss: 0.1636 - f1_score: 0.1932 - val_loss: 0.1633 - val_f1_score: 0.1385
Epoch 4/30
4/4 [==============================] - 59s 15s/step - loss: 0.1574 - f1_score: 0.2331 - val_loss: 0.1592 - val_f1_score: 0.1627
Epoch 5/30
4/4 [==============================] - 59s 15s/step - loss: 0.1519 - f1_score: 0.2435 - val_loss: 0.1554 - val_f1_score: 0.1627
Epoch 6/30
4/4 [==============================] - 60s 15s/step - loss: 0.1471 - f1_score: 0.2603 - val_loss: 0.1516 - val_f1_score: 0.1646
Epoch 7/30
4/4 [==============================] - 59s 15s/step - loss: 0.1417 - f1_score: 0.2654 - val_loss: 0.1494 - val_f1_score: 0.1627
Epoch 8/30
4/4 [==============================] - 59s 15s/step - loss: 0.1371 - f1_score: 0.2688 - val_loss: 0.1476 - val_f1_score: 0.1627
Epoch 9/30
4/4 [==============================] - 58s 15s/step - loss: 0.1328 - f1_score: 0.2728 - val_loss: 0.1449 - val_f1_score: 0.1627
Epoch 10/30
4/4 [==============================] - 58s 15s/step - loss: 0.1291 - f1_score: 0.2818 - val_loss: 0.1422 - val_f1_score: 0.1627
Epoch 11/30
4/4 [==============================] - 59s 15s/step - loss: 0.1246 - f1_score: 0.2808 - val_loss: 0.1392 - val_f1_score: 0.1646
Epoch 12/30
4/4 [==============================] - 58s 15s/step - loss: 0.1215 - f1_score: 0.2781 - val_loss: 0.1387 - val_f1_score: 0.1605
Epoch 13/30
4/4 [==============================] - 58s 15s/step - loss: 0.1185 - f1_score: 0.2846 - val_loss: 0.1352 - val_f1_score: 0.1646
Epoch 14/30
4/4 [==============================] - 58s 15s/step - loss: 0.1139 - f1_score: 0.2856 - val_loss: 0.1343 - val_f1_score: 0.1649
Epoch 15/30
4/4 [==============================] - 58s 15s/step - loss: 0.1111 - f1_score: 0.2957 - val_loss: 0.1307 - val_f1_score: 0.1669
Epoch 16/30
4/4 [==============================] - 58s 15s/step - loss: 0.1085 - f1_score: 0.2878 - val_loss: 0.1289 - val_f1_score: 0.1588
Epoch 17/30
4/4 [==============================] - 58s 15s/step - loss: 0.1055 - f1_score: 0.3281 - val_loss: 0.1306 - val_f1_score: 0.1628
Epoch 18/30
4/4 [==============================] - 58s 15s/step - loss: 0.1020 - f1_score: 0.3212 - val_loss: 0.1273 - val_f1_score: 0.1588
Epoch 19/30
4/4 [==============================] - 58s 15s/step - loss: 0.0991 - f1_score: 0.3294 - val_loss: 0.1269 - val_f1_score: 0.1568
Epoch 20/30
4/4 [==============================] - 58s 15s/step - loss: 0.0978 - f1_score: 0.3272 - val_loss: 0.1272 - val_f1_score: 0.1568
Epoch 21/30
4/4 [==============================] - 58s 15s/step - loss: 0.0950 - f1_score: 0.3490 - val_loss: 0.1257 - val_f1_score: 0.1649
Epoch 22/30
4/4 [==============================] - 58s 15s/step - loss: 0.0922 - f1_score: 0.3481 - val_loss: 0.1233 - val_f1_score: 0.1669
Epoch 23/30
4/4 [==============================] - 58s 15s/step - loss: 0.0902 - f1_score: 0.3516 - val_loss: 0.1236 - val_f1_score: 0.1597
Epoch 24/30
4/4 [==============================] - 58s 15s/step - loss: 0.0883 - f1_score: 0.3704 - val_loss: 0.1208 - val_f1_score: 0.1669
Epoch 25/30
4/4 [==============================] - 58s 15s/step - loss: 0.0865 - f1_score: 0.3499 - val_loss: 0.1195 - val_f1_score: 0.2414
Epoch 26/30
4/4 [==============================] - 61s 15s/step - loss: 0.0841 - f1_score: 0.3725 - val_loss: 0.1199 - val_f1_score: 0.1649
Epoch 27/30
4/4 [==============================] - 59s 15s/step - loss: 0.0829 - f1_score: 0.3943 - val_loss: 0.1180 - val_f1_score: 0.1697
Epoch 28/30
4/4 [==============================] - 59s 15s/step - loss: 0.0803 - f1_score: 0.4423 - val_loss: 0.1164 - val_f1_score: 0.1669
Epoch 29/30
4/4 [==============================] - 58s 15s/step - loss: 0.0784 - f1_score: 0.3961 - val_loss: 0.1167 - val_f1_score: 0.1669
Epoch 30/30
4/4 [==============================] - 58s 15s/step - loss: 0.0774 - f1_score: 0.4275 - val_loss: 0.1177 - val_f1_score: 0.1625
input_sentence = "do widzenia"
inputs = tokenizer.encode_plus(input_sentence, add_special_tokens=True, return_tensors='tf')
predictions = model.predict([inputs['input_ids'], inputs['attention_mask']])
print(predictions)
1/1 [==============================] - 0s 64ms/step
TFSequenceClassifierOutput(loss=None, logits=array([[0.06025698, 0.04095593, 0.7684139 , 0.04259768, 0.05270579,
        0.10895084, 0.03345573, 0.03596378, 0.0508336 , 0.05108728,
        0.04185295, 0.06173437, 0.21573795, 0.10289352, 0.05192397,
        0.07420129, 0.08625325]], dtype=float32), hidden_states=None, attentions=None)
model.save('model', save_format='tf')
WARNING:absl:Found untraced functions such as _update_step_xla, embeddings_layer_call_fn, embeddings_layer_call_and_return_conditional_losses, encoder_layer_call_fn, encoder_layer_call_and_return_conditional_losses while saving (showing 5 of 421). These functions will not be directly callable after loading.
INFO:tensorflow:Assets written to: model\assets
INFO:tensorflow:Assets written to: model\assets