61 KiB
61 KiB
import glob
import pandas as pd
import re
import tensorflow as tf
from collections import Counter
import numpy as np
count = Counter()
filenames1 = []
for filename in glob.glob('Systemy_dialogowe/data/*.tsv'):
filenames1.append(filename)
def prep(filenames):
df = pd.DataFrame(columns=['Rola', 'Wypowiedź', 'Act'])
for filename in filenames:
temp = pd.read_csv(filename, sep='\t', names=["Rola", "Wypowiedź", "Act"])
df = pd.concat([df, temp], ignore_index=True)
return df
df = prep(filenames1)
df = df.loc[df['Rola'] == 'user']
df = df.fillna('null')
df
Rola | Wypowiedź | Act | |
---|---|---|---|
1 | user | Witam | hello() |
3 | user | Co możesz dla mnie zrobić? | help() |
5 | user | Jakie są moje repozytoria? | request(repos) |
7 | user | ok. co nowego w Zajęcia AI? | affirm() & request(repo = Zajecia AI) |
9 | user | Tylko tyle? | reqmore() |
... | ... | ... | ... |
1409 | user | upewniam się | null |
1411 | user | pokaż mi raport | request(repo) |
1414 | user | zmienić | null |
1416 | user | Tak | ack |
1466 | user | elo | hello() |
585 rows × 3 columns
df['Act'].unique()
array(['hello()', 'help()', 'request(repos)',
'affirm() & request(repo = Zajecia AI)', 'reqmore()',
'request(notifications)', 'request(notification = 1)',
'request(link)', 'affirm() & reqmore()',
'request(repo = Projekt – Sklep)', 'request(issues)', 'ack()',
'request(commits = mattyl34)', 'request(commits = -5)',
'affirm() & request(repo = Gra - kółko i krzyżyk)', 'thankyou()',
'inform()', 'helpresponse()', 'request(repo = Zajecia AI)',
'request(delete)', 'ack() & inform()',
'request(repo = Projekt-sklep)', 'request(files = 1:3)',
'request()', 'bye()', 'request(file)',
'helpresponse() & request(repo)', 'request(command)',
'request(repo = Projekt - Sklep)', 'request(authors)',
'request(Bob)', 'request(repo = system)',
'request(repo = super_stronka_internetowa)',
'request(date, pr = 2)', 'request(repo = nazwaRepozytorium)',
'request(repo = zadania)', 'request(author, pr = 1)',
'request(deny, pr = 1)', 'request(rollback, commit = last)',
'request(repo = zajecia)', 'request(newPR)', 'inform(branches)',
'inform(title)', 'request(repo = pizza)', 'request(bilet)',
'request(repo)', 'inform(capriciosa)', 'inform(gGphJD)', 'affirm',
'help', 'hello', 'inform(qgphjd)', 'null', 'bye',
'inform(qwdqwdqaswdaqdfqfwqwfq)', 'inform(qGphJs)',
'inform(qgphid)', 'inform(pGphJD)', 'thankyou', 'inform(qGphJ0)',
'inform(qGphJ)', 'inform(DJhpGq)', 'inform(phgdj)',
'inform(QgPHjd)', 'ack'], dtype=object)
split by &
ignore args and ()
{'request', 'inform', 'bye', 'reqmore', 'help', 'ack', 'affirm', 'hello', 'thankyou', 'null'}
new = pd.DataFrame(columns=['Wypowiedź', 'Act'])
values = set()
for index, row in df.iterrows():
act = row[2].split('&')
act = [re.sub('\(.*\)', '', x) for x in act]
act = [re.sub(' ', '', x) for x in act]
act = [re.sub('helpresponse', 'help', x) for x in act]
[values.add(x) for x in act]
temp = pd.DataFrame({'Wypowiedź':row[1], 'Act': act})
new = pd.concat([new, temp], ignore_index=True)
new.head(10)
print(values)
{'help', 'reqmore', 'bye', 'thankyou', 'hello', 'affirm', 'ack', 'inform', 'request', 'null'}
unique = ['request', 'inform', 'bye', 'reqmore', 'help', 'ack', 'affirm', 'hello', 'thankyou', 'null']
sorted_values = {}
for item in unique:
temp = new.loc[new['Act'] == item]
# print(new.loc[new['Act'] == item])
sorted_values[item] = temp
temp.to_csv(f'data_sorted//{item}', sep='\t', index=False)
sorted_values
{'request': Wypowiedź Act 2 Jakie są moje repozytoria? request 4 ok. co nowego w Zajęcia AI? request 6 Mam jakieś nowe powiadomienia? request 8 Opowiedz mi o powiadomieniu 1 request 9 Podaj mi linka do tego powiadomienia request .. ... ... 571 Próbuję ponownie request 573 próbuję request 577 pokaż mi raport projektu request 584 pokaż mi raport projektu request 587 pokaż mi raport request [130 rows x 2 columns], 'inform': Wypowiedź Act 26 to wszystko inform 33 Oki, to będzie tyle inform 76 To nie, to już wszystko inform 103 moja gałąź, "master" inform 104 moja PR inform .. ... ... 535 gGphJD inform 545 qGphJ inform 552 DJhpGq inform 578 phgdj inform 579 QgPHjd inform [68 rows x 2 columns], 'bye': Wypowiedź Act 50 Do widzenia bye 56 Dziękuję, do widzenia bye 77 Papa bye 141 exit bye 164 exit bye 172 Nic z tych komend mnie nie interesuje bye 195 exit bye 203 Nic z tych komend mnie nie interesuje bye 234 exit bye 242 Nic z tych komend mnie nie interesuje bye 284 exit bye 292 Nic z tych komend mnie nie interesuje bye 322 Nie chcę bye 345 exit bye 353 Nic z tych komend mnie nie interesuje bye 383 Nie chcę bye 393 To wszystko, dziękuje bye 416 exit bye 424 Nic z tych komend mnie nie interesuje bye 454 Nie chcę bye 464 To wszystko, dziękuje bye 471 Do widzenia bye 494 exit bye 502 Nic z tych komend mnie nie interesuje bye 532 Nie chcę bye 542 To wszystko, dziękuje bye 549 Do widzenia bye, 'reqmore': Wypowiedź Act 5 Tylko tyle? reqmore 7 Jakie? reqmore 11 okej. jakie jeszcze informacje możesz mi przek... reqmore 12 O tym samym reqmore 15 Co jeszcze możesz dla mnie zrobić? reqmore 18 Jakie? reqmore 20 A pozostałe dwa? reqmore 24 ok; A jakby były to powiedziałbyś mi o nich? reqmore, 'help': Wypowiedź Act 1 Co możesz dla mnie zrobić? help 28 Jakie są dostępne funkcje? help 35 Chciałabym się dowiedzieć jakie usługi oferujecie help 42 Chciałbym poznać funkcję systemu help 58 Jak mi możesz pomóc; Chcę nowe repo help .. ... ... 567 pokaż listę komend help 568 pokaż listę komend help 581 pokaż help 582 pokaż help 583 wyjaśnij mi komendę pokaż mi listę komend help [140 rows x 2 columns], 'ack': Wypowiedź Act 16 Tak ack 32 Oki, to będzie tyle ack 39 tak ack 48 Rozumiem ack 73 tak ack 80 Tak ack 85 Tak ack 91 tak ack 94 Tak, poproszę ack 101 tak ack 107 tak ack 110 tak ack 113 tak ack 589 Tak ack, 'affirm': Wypowiedź Act 3 ok. co nowego w Zajęcia AI? affirm 10 okej. jakie jeszcze informacje możesz mi przek... affirm 21 ok. Są jakieś failujące testy w tym repo? affirm 23 ok; A jakby były to powiedziałbyś mi o nich? affirm 117 kontynuuj affirm 122 kontynuuj affirm 137 chcę kontynuować affirm 145 kontynuuj affirm 160 chcę kontynuować affirm 169 kontynuować affirm 176 kontynuuj affirm 191 chcę kontynuować affirm 200 kontynuować affirm 211 Chcę kontynuować affirm 215 kontynuuj affirm 230 chcę kontynuować affirm 239 kontynuować affirm 250 Chcę kontynuować affirm 259 to nie chce zmieniać konfiguracji affirm 265 kontynuuj affirm 280 chcę kontynuować affirm 289 kontynuować affirm 300 Chcę kontynuować affirm 309 to nie chce zmieniać konfiguracji affirm 316 kontynuuj affirm 326 kontynuuj affirm 341 chcę kontynuować affirm 350 kontynuować affirm 361 Chcę kontynuować affirm 370 to nie chce zmieniać konfiguracji affirm 377 kontynuuj affirm 388 kontynuuj affirm 397 kontynuuj affirm 412 chcę kontynuować affirm 421 kontynuować affirm 432 Chcę kontynuować affirm 441 to nie chce zmieniać konfiguracji affirm 448 kontynuuj affirm 459 kontynuuj affirm 475 kontynuuj affirm 490 chcę kontynuować affirm 499 kontynuować affirm 510 Chcę kontynuować affirm 519 to nie chce zmieniać konfiguracji affirm 526 kontynuuj affirm 537 kontynuuj affirm 566 No dobra, to kontynuujemy affirm 570 kontynuować affirm 572 Kontynuować affirm 585 kontynuujmy affirm, 'hello': Wypowiedź Act 0 Witam hello 27 Dzień dobry! hello 34 Dzień dobry hello 41 Cześć hello 51 Dzień dobry panie bocie hello 57 Elo hello 78 Dzień dobry hello 82 Witam hello 88 Dzień dobry hello 92 Dzień dobry hello 99 Dzień dobry hello 105 Dzień dobry hello 111 Dzień dobry hello 124 Widam hello 147 Widam hello 165 Witam hello 178 Widam hello 196 Witam hello 204 Dzień dobry! hello 217 Widam hello 235 Witam hello 243 Dzień dobry! hello 252 Dzień dobry hello 267 Widam hello 285 Witam hello 293 Dzień dobry! hello 302 Dzień dobry hello 312 Dzień dobry hello 328 Widam hello 346 Witam hello 354 Dzień dobry! hello 363 Dzień dobry hello 373 Dzień dobry hello 384 Cześć hello 399 Widam hello 417 Witam hello 425 Dzień dobry! hello 434 Dzień dobry hello 444 Dzień dobry hello 455 Cześć hello 465 Cześć hello 477 Widam hello 495 Witam hello 503 Dzień dobry! hello 512 Dzień dobry hello 522 Dzień dobry hello 533 Cześć hello 543 Cześć hello 550 Elo hello 576 Dzień dobry hello 590 elo hello, 'thankyou': Wypowiedź Act 25 dziękuję thankyou 40 dziękuję za informację thankyou 49 To wszystko, dziękuje thankyou 74 Dzięki thankyou 81 Nie thankyou 87 Rozumiem, to wszystko thankyou 98 Nie thankyou 108 Nie thankyou 260 Dziękuje thankyou 310 Dziękuje thankyou 371 Dziękuje thankyou 389 podoba mi się raport thankyou 392 Dobrze thankyou 442 Dziękuje thankyou 460 podoba mi się raport thankyou 463 Dobrze thankyou 520 Dziękuje thankyou 538 podoba mi się raport thankyou 541 Dobrze thankyou 575 Dzięki za pomoc thankyou, 'null': Wypowiedź Act 128 chcę zmienić projekt null 130 A jak mogę zmienić konfigurację? null 131 CHCĘ INNY PROJEKT null 132 zgłoś błąd null 135 Chcę zmienić konfigurację null .. ... ... 562 Chcę zmienić null 574 zmienić null 580 zmienic null 586 upewniam się null 588 zmienić null [83 rows x 2 columns]}
def preprocess(line):
txt = line
txt = re.sub(
"(£|§|!|@|#|\$|%|\^|&|\*|\(|\)|_|-|\+|=|\\{|\[|\\}|\]|:|;|\"|'|\|\\\\|\<|,|\>|\.|\?|/|~|`|\|–|–|)",
"",
txt,
)
txt = txt.lower()
txt = re.sub("[0-9]", "", txt)
txt = re.sub("[ \t]+", " ", txt)
txt = re.sub(" +$", "", txt)
txt = re.sub("ą", "a", txt)
txt = re.sub("ć", "c", txt)
txt = re.sub("ę", "e", txt)
txt = re.sub("ł", "l", txt)
txt = re.sub("ń", "n", txt)
txt = re.sub("ó", "o", txt)
txt = re.sub("ś", "s", txt)
txt = re.sub("ź", "z", txt)
txt = re.sub("ż", "z", txt)
words = txt.split()
words = [w[:6] if len(w) > 6 else w for w in words]
out = []
for word in words:
# if word not in stopwords:
out.append(word)
for stem in out:
count[stem] += 1
text = " ".join(out)
# print(text)
return text
from tensorflow.keras.utils import to_categorical
from numpy import argmax
acts = ['inform', 'reqmore', 'thankyou', 'ack', 'affirm', 'hello', 'request', 'help', 'null', 'bye']
to_num = {act: idx for idx, act in enumerate(acts)}
prep = pd.DataFrame(columns=['Wypowiedź', 'Act'])
values = set()
max_len = 0
for index, row in new.iterrows():
temp = preprocess(row[0])
one_hot_encode = to_categorical(to_num[row[1]], num_classes=len(acts))
# one_hot_encode = np.asarray(one_hot_encode).astype('float32')
max_len = max(max_len, len(temp))
frame = pd.DataFrame({'Wypowiedź': temp, 'Act': [np.asarray(one_hot_encode).astype('float32')]})
prep = pd.concat([prep, frame], ignore_index=True)
# print(prep)
max_len
53
prep = prep.sample(frac=1).reset_index(drop=True)
prep
Wypowiedź | Act | |
---|---|---|
0 | czesc | [0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, ... |
1 | chcial odrzuc pr | [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, ... |
2 | capric | [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, ... |
3 | oki to bedzie tyle | [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, ... |
4 | qgphjd | [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, ... |
... | ... | ... |
586 | wyjasn mi komend pokaz mi liste komend | [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, ... |
587 | wyjasn mi komend | [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, ... |
588 | zmieni konfig | [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, ... |
589 | ggphjd | [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, ... |
590 | chce zmieni konfig | [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, ... |
591 rows × 2 columns
num_words = 130
for item in count.most_common(num_words):
print(item)
('mi', 219) ('pokaz', 133) ('komend', 124) ('projek', 97) ('raport', 84) ('wyjasn', 68) ('chce', 61) ('zmieni', 57) ('konfig', 45) ('jakie', 43) ('kontyn', 41) ('liste', 41) ('sa', 31) ('w', 27) ('funkcj', 26) ('dzien', 25) ('dobry', 25) ('dostep', 25) ('to', 24) ('mozesz', 22) ('repozy', 21) ('nie', 21) ('pomoc', 19) ('tak', 17) ('a', 16) ('czym', 16) ('moge', 15) ('chcial', 14) ('jeszcz', 12) ('dzieku', 12) ('ggphjd', 12) ('o', 11) ('jak', 10) ('witam', 9) ('co', 9) ('mnie', 9) ('repo', 9) ('wszyst', 9) ('z', 9) ('capric', 9) ('qgphjd', 9) ('lista', 9) ('sie', 8) ('system', 8) ('widam', 8) ('inny', 8) ('zglos', 8) ('blad', 8) ('exit', 8) ('inform', 7) ('adawda', 7) ('qwdqwd', 7) ('qgphjs', 7) ('nic', 7) ('tych', 7) ('intere', 7) ('ok', 6) ('mam', 6) ('nowe', 6) ('podaj', 6) ('do', 6) ('powied', 6) ('czesc', 6) ('qgphid', 6) ('dialog', 6) ('qgphj', 6) ('zajeci', 5) ('issue', 5) ('jest', 5) ('pr', 5) ('pgphjd', 5) ('napraw', 5) ('bylem', 5) ('botem', 5) ('i', 5) ('zle', 5) ('przepi', 5) ('kod', 5) ('moje', 4) ('ai', 4) ('powiad', 4) ('ostatn', 4) ('uslugi', 4) ('oferuj', 4) ('zobacz', 4) ('widzen', 4) ('no', 4) ('zrobic', 3) ('tyle', 3) ('jakies', 3) ('tym', 3) ('sklep', 3) ('pierws', 3) ('elo', 3) ('help', 3) ('status', 3) ('podoba', 3) ('dobrze', 3) ('dla', 2) ('nowego', 2) ('opowie', 2) ('okej', 2) ('przeka', 2) ('commit', 2) ('failuj', 2) ('testy', 2) ('jakby', 2) ('byly', 2) ('nich', 2) ('powiaz', 2) ('oki', 2) ('bedzie', 2) ('moich', 2) ('za', 2) ('na', 2) ('temat', 2) ('pliku', 2) ('rozumi', 2) ('zatem', 2) ('dzieki', 2) ('potraf', 2) ('moim', 2) ('moja', 2) ('pizza', 2) ('github', 2) ('briefi', 2) ('poka', 2) ('probuj', 2) ('tylko', 1) ('linka', 1)
train_size = int(prep.shape[0] * 0.70)
validation_size = int(prep.shape[0] * 0.85)
train_sentences = prep.Wypowiedź[:train_size]
train_labels = prep.Act[:train_size]
test_sentences = prep.Wypowiedź[train_size:validation_size]
test_labels = prep.Act[train_size:validation_size]
validation_sentences = prep.Wypowiedź[validation_size:]
validation_labels = prep.Act[validation_size:]
train = pd.concat([train_sentences, train_labels], ignore_index=False, axis=1)
test = pd.concat([test_sentences, test_labels], ignore_index=False, axis=1)
validation = pd.concat([validation_sentences, validation_labels], ignore_index=False, axis=1)
train, test
# pd.Series(array)
( Wypowiedź \ 0 czesc 1 chcial odrzuc pr 2 capric 3 oki to bedzie tyle 4 qgphjd .. ... 408 o tym samym 409 pgphjd 410 pokaz mi raport projek adawda 411 w czym jeszcz mozesz mi pomoc 412 opowie mi o zajeci ai Act 0 [0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, ... 1 [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, ... 2 [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, ... 3 [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, ... 4 [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, ... .. ... 408 [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, ... 409 [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, ... 410 [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, ... 411 [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, ... 412 [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, ... [413 rows x 2 columns], Wypowiedź Act 413 pokaz mi lista komend [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, ... 414 qgphjd [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, ... 415 pokaz mi liste komend [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, ... 416 qgphjs [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, ... 417 jakie sa dostep funkcj [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, ... .. ... ... 497 kontyn [0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, ... 498 chce kontyn [0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, ... 499 czesc [0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, ... 500 kontyn [0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, ... 501 chce kontyn [0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, ... [89 rows x 2 columns])
from keras.preprocessing.text import Tokenizer
tokenizer = Tokenizer(num_words=num_words)
tokenizer.fit_on_texts(train['Wypowiedź'])
word_index = tokenizer.word_index
test['Wypowiedź']
413 pokaz mi lista komend 414 qgphjd 415 pokaz mi liste komend 416 qgphjs 417 jakie sa dostep funkcj ... 497 kontyn 498 chce kontyn 499 czesc 500 kontyn 501 chce kontyn Name: Wypowiedź, Length: 89, dtype: object
# train['Wypowiedź'] = train['Wypowiedź'].apply(func = lambda row : tokenizer.texts_to_matrix(tokenizer.texts_to_sequences(row)))
# test['Wypowiedź'] = test['Wypowiedź'].apply(func = lambda row : tokenizer.texts_to_matrix(tokenizer.texts_to_sequences(row)))
# train['Wypowiedź'] = train['Wypowiedź'].apply(tokenizer.texts_to_matrix(train['Wypowiedź']))#.apply(func = lambda row : tokenizer.texts_to_matrix(tokenizer.texts_to_sequences(row)))
# test['Wypowiedź'] = test['Wypowiedź'].apply(func = lambda row : tokenizer.texts_to_matrix(tokenizer.texts_to_sequences(row)))
train['Wypowiedź'] = (tokenizer.texts_to_sequences(train['Wypowiedź']))
test['Wypowiedź'] = (tokenizer.texts_to_sequences(test['Wypowiedź']))
validation['Wypowiedź'] = (tokenizer.texts_to_sequences(validation['Wypowiedź']))
# train[train['Wypowiedź'].str.len() == 1]
train['Wypowiedź'][5]
[69]
len(train['Wypowiedź'][5]), len(train['Wypowiedź'][200])
(1, 4)
# type(train['Wypowiedź'][0]),type(test['Wypowiedź'][588]),type(train['Act'][0]),type(test['Act'][588])
from keras.preprocessing.sequence import pad_sequences
temp_a = pad_sequences(
train['Wypowiedź'].tolist(), maxlen=max_len, padding="post", truncating="post"
)
temp_b = pad_sequences(
test['Wypowiedź'].tolist(), maxlen=max_len, padding="post", truncating="post"
)
temp_c = pad_sequences(
validation['Wypowiedź'].tolist(), maxlen=max_len, padding="post", truncating="post"
)
train['Wypowiedź'] = temp_a.tolist()
test['Wypowiedź'] = temp_b.tolist()
validation['Wypowiedź'] = temp_c.tolist()
# train=train.reshape(1,train.shape[0])
# mel=mel.reshape(1,mel.shape[0])
# train['Wypowiedź'] = train['Wypowiedź'].apply(lambda row : pad_sequences(
# row, maxlen=max_len, padding="post", truncating="post"
# ))
# test['Wypowiedź'] = test['Wypowiedź'].apply(lambda row : pad_sequences(
# row, maxlen=max_len, padding="post", truncating="post"
# ))
test['Wypowiedź']
413 [2, 1, 34, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,... 414 [40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,... 415 [2, 1, 12, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,... 416 [67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,... 417 [10, 13, 17, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,... ... 497 [9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... 498 [7, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... 499 [58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,... 500 [9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... 501 [7, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... Name: Wypowiedź, Length: 89, dtype: object
import keras
early_stopping = keras.callbacks.EarlyStopping(
monitor="val_loss", patience=5, restore_best_weights=True, verbose=0
)
# checkpoint_callback = keras.callbacks.ModelCheckpoint(
# filepath='.', monitor='val_loss', verbose=0, save_weights_only=True,
# save_freq='epoch', mode='auto', save_best_only=True)
reduce_lr_on_plateau = keras.callbacks.ReduceLROnPlateau(
monitor="acc", factor=0.1, patience=2, verbose=0
)
callbacks_list = [early_stopping, reduce_lr_on_plateau]
test
Wypowiedź | Act | |
---|---|---|
413 | [2, 1, 34, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,... | [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, ... |
414 | [40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,... | [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, ... |
415 | [2, 1, 12, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,... | [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, ... |
416 | [67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,... | [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, ... |
417 | [10, 13, 17, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,... | [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, ... |
... | ... | ... |
497 | [9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... | [0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, ... |
498 | [7, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... | [0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, ... |
499 | [58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,... | [0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, ... |
500 | [9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... | [0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, ... |
501 | [7, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... | [0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, ... |
89 rows × 2 columns
# train['Wypowiedź'] = train['Wypowiedź'].tolist()
# test['Wypowiedź'] = test['Wypowiedź'].tolist()
train['Wypowiedź'] = train['Wypowiedź'].apply(lambda row: np.asarray(row).astype('float32'))
test['Wypowiedź'] = test['Wypowiedź'].apply(lambda row : np.asarray(row).astype('float32'))
validation['Wypowiedź'] = validation['Wypowiedź'].apply(lambda row : np.asarray(row).astype('float32'))
train['Act'] = train['Act'].apply(lambda row : np.asarray(row).astype('float32'))
test['Act'] = test['Act'].apply(lambda row : np.asarray(row).astype('float32'))
validation['Act'] = validation['Act'].apply(lambda row : np.asarray(row).astype('float32'))
# train['Wypowiedź'] = train['Wypowiedź'].apply(lambda row: tf.convert_to_tensor(np.asarray(row).astype('float32')))
# test['Wypowiedź'] = test['Wypowiedź'].apply(lambda row : tf.convert_to_tensor(np.asarray(row).astype('float32')))
# train['Act'] = train['Act'].apply(lambda row : tf.convert_to_tensor(np.asarray(row).astype('float32')))
# test['Act'] = test['Act'].apply(lambda row : tf.convert_to_tensor(np.asarray(row).astype('float32')))
train['Wypowiedź'][2]
array([60., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.], dtype=float32)
type(train['Wypowiedź']),type(test['Wypowiedź']),type(train['Act']),type(test['Act'])
(pandas.core.series.Series, pandas.core.series.Series, pandas.core.series.Series, pandas.core.series.Series)
train_x = tf.convert_to_tensor(train['Wypowiedź'].tolist())
train_y = tf.convert_to_tensor(train['Act'].tolist())
test_x = tf.convert_to_tensor(test['Wypowiedź'].tolist())
test_y = tf.convert_to_tensor(test['Act'].tolist())
validation_x = tf.convert_to_tensor(validation['Wypowiedź'].tolist())
validation_y = tf.convert_to_tensor(validation['Act'].tolist())
len(validation_y)
89
train_x[0]
<tf.Tensor: shape=(53,), dtype=float32, numpy= array([58., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.], dtype=float32)>
# # import keras_tuner as kt
# from tensorflow.keras.models import Sequential
# from tensorflow.keras.layers import (
# Flatten,
# Dense,
# Embedding,
# Conv1D,
# GlobalMaxPooling1D,
# MaxPooling1D,
# )
# model = Sequential()
# model.add(
# Embedding(
# num_words,
# output_dim=128,
# input_length=max_len,
# )
# )
# model.add(
# Conv1D(
# filters=64,
# kernel_size=3,
# padding="same",
# activation="relu",
# strides=1,
# )
# )
# model.add(MaxPooling1D(pool_size=2, padding='same'))
# model.add(Flatten())
# model.add(
# Dense(
# units=128,
# activation="relu",
# )
# )
# model.add(
# Dense(
# units=128,
# activation="relu",
# )
# )
# model.add(Dense(10, activation="softmax"))
# model.compile(optimizer="rmsprop", loss="categorical_crossentropy", metrics=["acc"])
# ########################################units????
# model.summary()
# # build_model(kt.HyperParameters())
tf.shape(train_x[0]), tf.shape(train_y[0]), tf.shape(test_x[0]), tf.shape(test_y[0]),
(<tf.Tensor: shape=(1,), dtype=int32, numpy=array([53])>, <tf.Tensor: shape=(1,), dtype=int32, numpy=array([10])>, <tf.Tensor: shape=(1,), dtype=int32, numpy=array([53])>, <tf.Tensor: shape=(1,), dtype=int32, numpy=array([10])>)
# model.fit(train_x, train_y, validation_data=(test_x, test_y), callbacks=callbacks_list, verbose=1, epochs=100)
import keras_tuner as kt
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import (
Flatten,
Dense,
Embedding,
Conv1D,
GlobalMaxPooling1D,
MaxPooling1D,
)
def build_model(hp):
model = Sequential()
model.add(
Embedding(
num_words,
output_dim=hp.Int("output_dim", min_value=128, max_value=1024, step=128),
input_length=max_len,
)
)
model.add(
Conv1D(
filters=hp.Int("filters0", min_value=64, max_value=512, step=64),
kernel_size=hp.Int("kernel_size0", min_value=1, max_value=3, step=1),
padding="same",
activation="relu",
strides=hp.Int("strides0", min_value=1, max_value=4, step=1),
)
)
model.add(MaxPooling1D(pool_size=2, padding='same'))
if hp.Boolean("conv1"):
model.add(
Conv1D(
filters=hp.Int("filters1", min_value=32, max_value=256, step=32),
kernel_size=hp.Int("kernel_size1", min_value=1, max_value=3, step=1),
padding="same",
activation="relu",
strides=hp.Int("strides1", min_value=1, max_value=4, step=1),
)
)
model.add(MaxPooling1D(pool_size=2, padding='same'))
model.add(Flatten())
model.add(
Dense(
units=hp.Int("units0", min_value=128, max_value=512, step=64),
activation="relu",
)
)
# if hp.Boolean("dense1"):
model.add(
Dense(
units=hp.Int("units1", min_value=64, max_value=512, step=64),
activation="relu",
)
)
if hp.Boolean("dense2"):
model.add(
Dense(
units=hp.Int("units2", min_value=64, max_value=256, step=32),
activation="relu",
)
)
model.add(Dense(10, activation="softmax"))
model.compile(optimizer="rmsprop", loss="binary_crossentropy", metrics=["acc"])
return model
########################################units????
# model.add(GlobalMaxPooling1D())
# model.compile(optimizer="rmsprop", loss="binary_crossentropy", metrics=["acc"])
# model.summary()
build_model(kt.HyperParameters())
tuner = kt.Hyperband(
build_model,
"val_loss",
30,
factor=3,
hyperband_iterations=3,
)
tuner.search(train_x, train_y, validation_data=(test_x, test_y), callbacks=callbacks_list, verbose=1)
Trial 270 Complete [00h 00m 05s] val_loss: 0.045697689056396484 Best val_loss So Far: 0.03326363489031792 Total elapsed time: 00h 20m 11s INFO:tensorflow:Oracle triggered exit
best_hps=tuner.get_best_models(num_models=1)
# model = tuner.hypermodel.build(best_hps)
best_hps[0]
<keras.engine.sequential.Sequential at 0x2034189a530>
best_hps[0].evaluate(validation_x, validation_y, batch_size=128)
1/1 [==============================] - 0s 30ms/step - loss: 0.2305 - acc: 0.8315
[0.23047222197055817, 0.8314606547355652]
# model.save(classification.h5)