NLU, DST updates, directory structurization
This commit is contained in:
parent
5baf6c3c7a
commit
bbe7a6853d
@ -1,51 +0,0 @@
|
||||
from dialogue_state import default_state
|
||||
|
||||
|
||||
# Monitor stanu dialogu
|
||||
class DST:
|
||||
def __init__(self):
|
||||
self.state = default_state()
|
||||
|
||||
def update(self, user_act=None):
|
||||
for intent, domain, slot, value in user_act:
|
||||
domain = domain.lower()
|
||||
intent = intent.lower()
|
||||
slot = slot.lower()
|
||||
|
||||
k = slot
|
||||
|
||||
if 'inform' in intent:
|
||||
|
||||
if k is None:
|
||||
continue
|
||||
|
||||
domain_dic = self.state['belief_state'][domain]
|
||||
|
||||
if k in domain_dic['semi']:
|
||||
self.state['belief_state'][domain]['semi'][k] = value
|
||||
elif k in domain_dic['book']:
|
||||
self.state['belief_state'][domain]['book'][k] = value
|
||||
|
||||
if 'request' in intent:
|
||||
|
||||
if domain not in self.state['request_state']:
|
||||
self.state['request_state'][domain] = {}
|
||||
if k not in self.state['request_state'][domain]:
|
||||
self.state['request_state'][domain][k] = 0
|
||||
|
||||
self.state['user_action'].append([intent, domain, slot, value])
|
||||
|
||||
return self.state
|
||||
|
||||
def init_session(self):
|
||||
self.state = default_state()
|
||||
|
||||
|
||||
# Przykładowe uruchomienie dla kodu w izolacji
|
||||
"""
|
||||
dst = DST()
|
||||
print(dst.state)
|
||||
|
||||
dst.update([['hello_inform', 'Cinema', 'Price', '15 zł'], ['Inform', 'Cinema', 'Movie', 'Batman']])
|
||||
print(dst.state)
|
||||
"""
|
Binary file not shown.
@ -1,115 +0,0 @@
|
||||
from conllu import parse_incr
|
||||
from flair.data import Corpus, Sentence, Token
|
||||
from flair.datasets import SentenceDataset
|
||||
from flair.embeddings import StackedEmbeddings
|
||||
from flair.embeddings import WordEmbeddings
|
||||
from flair.embeddings import CharacterEmbeddings
|
||||
from flair.embeddings import FlairEmbeddings
|
||||
from flair.models import SequenceTagger
|
||||
from flair.trainers import ModelTrainer
|
||||
import random
|
||||
import torch
|
||||
import os
|
||||
|
||||
|
||||
class NLU:
|
||||
def __init__(self):
|
||||
self.model = None
|
||||
|
||||
def nolabel2o(self, line, i):
|
||||
return 'O' if line[i] == 'NoLabel' else line[i]
|
||||
|
||||
def conllu2flair(self, sentences, label=None):
|
||||
fsentences = []
|
||||
for sentence in sentences:
|
||||
fsentence = Sentence()
|
||||
for token in sentence:
|
||||
ftoken = Token(token['form'])
|
||||
if label:
|
||||
ftoken.add_tag(label, token[label])
|
||||
fsentence.add_token(ftoken)
|
||||
fsentences.append(fsentence)
|
||||
return SentenceDataset(fsentences)
|
||||
|
||||
def load_model(self, model_path):
|
||||
self.model = SequenceTagger.load(model_path)
|
||||
|
||||
def train_model(self, train_path, test_path):
|
||||
fields = ['id', 'form', 'frame', 'slot']
|
||||
|
||||
with open(train_path, encoding='utf-8') as trainfile:
|
||||
trainset = list(parse_incr(trainfile, fields=fields, field_parsers={'slot': self.nolabel2o}))
|
||||
with open(test_path, encoding='utf-8') as testfile:
|
||||
testset = list(parse_incr(testfile, fields=fields, field_parsers={'slot': self.nolabel2o}))
|
||||
|
||||
random.seed(42)
|
||||
torch.manual_seed(42)
|
||||
|
||||
if torch.cuda.is_available():
|
||||
torch.cuda.manual_seed(0)
|
||||
torch.cuda.manual_seed_all(0)
|
||||
torch.backends.cudnn.enabled = False
|
||||
torch.backends.cudnn.benchmark = False
|
||||
torch.backends.cudnn.deterministic = True
|
||||
|
||||
corpus = Corpus(train=self.conllu2flair(trainset, 'slot'), test=self.conllu2flair(testset, 'slot'))
|
||||
|
||||
tag_dictionary = corpus.make_tag_dictionary(tag_type='slot')
|
||||
|
||||
embedding_types = [
|
||||
WordEmbeddings('pl'),
|
||||
FlairEmbeddings('pl-forward'),
|
||||
FlairEmbeddings('pl-backward'),
|
||||
CharacterEmbeddings(),
|
||||
]
|
||||
|
||||
embeddings = StackedEmbeddings(embeddings=embedding_types)
|
||||
tagger = SequenceTagger(hidden_size=256, embeddings=embeddings,
|
||||
tag_dictionary=tag_dictionary,
|
||||
tag_type='slot', use_crf=True)
|
||||
|
||||
if not os.path.isdir('slot-model-pl'):
|
||||
trainer = ModelTrainer(tagger, corpus)
|
||||
trainer.train('slot-model-pl',
|
||||
learning_rate=0.1,
|
||||
mini_batch_size=32,
|
||||
max_epochs=10,
|
||||
train_with_dev=True)
|
||||
|
||||
try:
|
||||
self.load_model('slot-model-pl/best-model.pt')
|
||||
except:
|
||||
self.load_model('slot-model-pl/final-model.pt')
|
||||
|
||||
# Tworzenie osobnego pliku z metrykami dla modelu
|
||||
log_file = open('slot-model-pl/training.log', encoding='utf-8')
|
||||
log_lines = log_file.readlines()
|
||||
log_file.close()
|
||||
with open('slot-model-pl/training.log', encoding='utf-8') as log_file, open('evaluation.txt', 'w',
|
||||
encoding='utf-8') \
|
||||
as eval_file:
|
||||
for num, line in enumerate(log_file):
|
||||
if line == 'Results:\n':
|
||||
lines_to_write_start = num
|
||||
eval_file.write('*** This evaluation file was generated automatically by the training script ***\n\n')
|
||||
for line in log_lines[lines_to_write_start:]:
|
||||
eval_file.write(line)
|
||||
|
||||
def predict(self, sentence):
|
||||
sentence = sentence.split()
|
||||
csentence = [{'form': word} for word in sentence]
|
||||
fsentence = self.conllu2flair([csentence])[0]
|
||||
self.model.predict(fsentence)
|
||||
return [(token, ftoken.get_tag('slot').value) for token, ftoken in zip(sentence, fsentence)]
|
||||
|
||||
|
||||
# Można przetestować...
|
||||
# nlu = NLU()
|
||||
# nlu.train_model('train-pl.conllu', 'test-pl.conllu')
|
||||
# lub
|
||||
# nlu.load_model('slot-model-pl/final-model.pt')
|
||||
# print(nlu.predict("Poproszę jeden bilet na film Batman na imię Jan Kowalski"))
|
||||
|
||||
# Zwrócone:
|
||||
# [('Poproszę', 'O'), ('jeden', 'O'), ('bilet', 'O'), ('na', 'O'), ('film', 'O'), ('Batman', 'B-movie'),
|
||||
# ('na', 'O'), ('imię', 'O'), ('Jan', 'B-name'), ('Kowalski', 'I-name')]
|
@ -1,32 +0,0 @@
|
||||
*** This evaluation file was generated automatically by the training script ***
|
||||
|
||||
Results:
|
||||
- F-score (micro) 0.2609
|
||||
- F-score (macro) 0.1489
|
||||
- Accuracy 0.1538
|
||||
|
||||
By class:
|
||||
precision recall f1-score support
|
||||
|
||||
name 0.1429 0.2000 0.1667 5
|
||||
ticketnumber 0.5000 1.0000 0.6667 3
|
||||
movie 0.3333 0.5000 0.4000 2
|
||||
seat 0.0000 0.0000 0.0000 3
|
||||
e-mail 0.0000 0.0000 0.0000 3
|
||||
phone 1.0000 1.0000 1.0000 1
|
||||
title 0.0000 0.0000 0.0000 2
|
||||
row 0.0000 0.0000 0.0000 2
|
||||
reducedQuantity 0.0000 0.0000 0.0000 2
|
||||
purchaseType 0.0000 0.0000 0.0000 1
|
||||
bankAccountNumber 0.0000 0.0000 0.0000 1
|
||||
email 0.0000 0.0000 0.0000 1
|
||||
hour 0.0000 0.0000 0.0000 1
|
||||
time 0.0000 0.0000 0.0000 1
|
||||
seatPlacement 0.0000 0.0000 0.0000 1
|
||||
|
||||
micro avg 0.3529 0.2069 0.2609 29
|
||||
macro avg 0.1317 0.1800 0.1489 29
|
||||
weighted avg 0.1338 0.2069 0.1598 29
|
||||
samples avg 0.1538 0.1538 0.1538 29
|
||||
|
||||
2022-05-06 21:01:49,500 ----------------------------------------------------------------------------------------------------
|
@ -1,545 +0,0 @@
|
||||
# text: Dzień dobry
|
||||
# intent: hello
|
||||
# slots:
|
||||
1 Dzień hello NoLabel
|
||||
2 dobry hello NoLabel
|
||||
|
||||
# text: wybieram 18:00
|
||||
# intent: inform
|
||||
# slots: 18:00:hour
|
||||
1 wybieram inform NoLabel
|
||||
2 18:00 inform B-hour
|
||||
|
||||
# text: Tak
|
||||
# intent: act
|
||||
# slots:
|
||||
1 Tak act NoLabel
|
||||
|
||||
# text: 1
|
||||
# intent: inform
|
||||
# slots: 1:rowplacement
|
||||
1 1 inform B-rowplacement
|
||||
|
||||
# text: 16.03
|
||||
# intent: inform
|
||||
# slots: 16.03:date
|
||||
1 16.03 inform B-date
|
||||
|
||||
# text: przez internet
|
||||
# intent: inform
|
||||
# slots: przezinternet:purchaseType
|
||||
1 przez inform B-purchaseType
|
||||
2 internet inform I-purchaseType
|
||||
|
||||
# text: 485554893
|
||||
# intent: inform
|
||||
# slots: 485554893:phone
|
||||
1 485554893 inform B-phone
|
||||
|
||||
# text: Ile kosztują bielty na Sing 2?
|
||||
# intent: request
|
||||
# slots:
|
||||
1 Ile request NoLabel
|
||||
2 kosztują request NoLabel
|
||||
3 bielty request NoLabel
|
||||
4 na request NoLabel
|
||||
5 Sing request NoLabel
|
||||
6 2 request NoLabel
|
||||
7 ? request NoLabel
|
||||
|
||||
# text: Rozumiem. Dziękuję
|
||||
# intent: ack thankyou
|
||||
# slots:
|
||||
1 Rozumiem ack_thankyou NoLabel
|
||||
2 . ack_thankyou NoLabel
|
||||
3 Dziękuję ack_thankyou NoLabel
|
||||
|
||||
# text: emkarcinos42069@buziaczek.pl 123123123
|
||||
# intent: inform inform
|
||||
# slots: 123123123:phone
|
||||
1 emkarcinos42069@buziaczek.pl inform_inform NoLabel
|
||||
2 123123123 inform_inform B-phone
|
||||
|
||||
# text: Dzień dobry
|
||||
# intent: hello
|
||||
# slots:
|
||||
1 Dzień hello NoLabel
|
||||
2 dobry hello NoLabel
|
||||
|
||||
# text: Chcialbym bilet na Batman
|
||||
# intent: request request
|
||||
# slots: Batman:movie
|
||||
1 Chcialbym request_request NoLabel
|
||||
2 bilet request_request NoLabel
|
||||
3 na request_request NoLabel
|
||||
4 Batman request_request B-movie
|
||||
|
||||
# text: lalalalili@gmai.com, 111222111
|
||||
# intent: inform inform
|
||||
# slots: 111222111:phone
|
||||
1 lalalalili@gmai.com, inform_inform NoLabel
|
||||
2 111222111 inform_inform B-phone
|
||||
|
||||
# text: Co w przypadku gdy się spóźnie?
|
||||
# intent: reqmore
|
||||
# slots:
|
||||
1 Co reqmore NoLabel
|
||||
2 w reqmore NoLabel
|
||||
3 przypadku reqmore NoLabel
|
||||
4 gdy reqmore NoLabel
|
||||
5 się reqmore NoLabel
|
||||
6 spóźnie reqmore NoLabel
|
||||
7 ? reqmore NoLabel
|
||||
|
||||
# text: Cześć
|
||||
# intent: hello
|
||||
# slots:
|
||||
1 Cześć hello NoLabel
|
||||
|
||||
# text: Poproszę bilet na ostatni seans Batmana
|
||||
# intent: inform inform
|
||||
# slots: ostatni:time
|
||||
1 Poproszę inform_inform NoLabel
|
||||
2 bilet inform_inform NoLabel
|
||||
3 na inform_inform NoLabel
|
||||
4 ostatni inform_inform B-time
|
||||
5 seans inform_inform NoLabel
|
||||
6 Batmana inform_inform NoLabel
|
||||
|
||||
# text: Chciałbym kupić seans
|
||||
# intent: request
|
||||
# slots:
|
||||
1 Chciałbym request NoLabel
|
||||
2 kupić request NoLabel
|
||||
3 seans request NoLabel
|
||||
|
||||
# text: chciałbym się dowiedzieć co będzie 25 marca
|
||||
# intent: request
|
||||
# slots:
|
||||
1 chciałbym request NoLabel
|
||||
2 się request NoLabel
|
||||
3 dowiedzieć request NoLabel
|
||||
4 co request NoLabel
|
||||
5 będzie request NoLabel
|
||||
6 25 request NoLabel
|
||||
7 marca request NoLabel
|
||||
|
||||
# text: Jan Kowalski
|
||||
# intent: inform
|
||||
# slots: JanKowalski:name
|
||||
1 Jan inform B-name
|
||||
2 Kowalski inform I-name
|
||||
|
||||
# text: Jakie są godziny tych seansów?
|
||||
# intent: request
|
||||
# slots:
|
||||
1 Jakie request NoLabel
|
||||
2 są request NoLabel
|
||||
3 godziny request NoLabel
|
||||
4 tych request NoLabel
|
||||
5 seansów request NoLabel
|
||||
6 ? request NoLabel
|
||||
|
||||
# text: Tak
|
||||
# intent: affirm
|
||||
# slots:
|
||||
1 Tak affirm NoLabel
|
||||
|
||||
# text: Jeden ulgowy jeden senior
|
||||
# intent: inform
|
||||
# slots: senior:tickettype
|
||||
1 Jeden inform_ NoLabel
|
||||
2 ulgowy inform_ NoLabel
|
||||
3 jeden inform_ NoLabel
|
||||
4 senior inform_ B-tickettype
|
||||
|
||||
# text: Tak
|
||||
# intent: affirm
|
||||
# slots:
|
||||
1 Tak affirm NoLabel
|
||||
|
||||
# text: poproszę o miejsce 5 w rzędzie 10
|
||||
# intent: inform
|
||||
# slots: 5:seat,10:row
|
||||
1 poproszę inform NoLabel
|
||||
2 o inform NoLabel
|
||||
3 miejsce inform NoLabel
|
||||
4 5 inform B-seat
|
||||
5 w inform NoLabel
|
||||
6 rzędzie inform NoLabel
|
||||
7 10 inform B-row
|
||||
|
||||
# text: Nie wiem czy masz jakieś propozycję na dziś ?
|
||||
# intent: request
|
||||
# slots:
|
||||
1 Nie request NoLabel
|
||||
2 wiem request NoLabel
|
||||
3 czy request NoLabel
|
||||
4 masz request NoLabel
|
||||
5 jakieś request NoLabel
|
||||
6 propozycję request NoLabel
|
||||
7 na request NoLabel
|
||||
8 dziś request NoLabel
|
||||
9 ? request NoLabel
|
||||
|
||||
# text: chciałbym kupić bilet ale nie wiem na co
|
||||
# intent: help
|
||||
# slots:
|
||||
1 chciałbym help NoLabel
|
||||
2 kupić help NoLabel
|
||||
3 bilet help NoLabel
|
||||
4 ale help NoLabel
|
||||
5 nie help NoLabel
|
||||
6 wiem help NoLabel
|
||||
7 na help NoLabel
|
||||
8 co help NoLabel
|
||||
|
||||
# text: 30 marca o godzinie 12:10
|
||||
# intent: inform inform
|
||||
# slots: 12:10:hour
|
||||
1 30 inform_inform NoLabel
|
||||
2 marca inform_inform NoLabel
|
||||
3 o inform_inform NoLabel
|
||||
4 godzinie inform_inform NoLabel
|
||||
5 12:10 inform_inform B-hour
|
||||
|
||||
# text: Chciałbym kupić bilet na NajlepszaNAzwaFilmu
|
||||
# intent: request inform
|
||||
# slots: NajlepszaNAzwaFilmu:movie
|
||||
1 Chciałbym request_inform NoLabel
|
||||
2 kupić request_inform NoLabel
|
||||
3 bilet request_inform NoLabel
|
||||
4 na request_inform NoLabel
|
||||
5 NajlepszaNAzwaFilmu request_inform B-movie
|
||||
|
||||
# text: Chciałbym zarezerwować film
|
||||
# intent: null
|
||||
# slots:
|
||||
1 Chciałbym null NoLabel
|
||||
2 zarezerwować null NoLabel
|
||||
3 film null NoLabel
|
||||
|
||||
# text: A później nie ma?
|
||||
# intent: reqmore
|
||||
# slots:
|
||||
1 A reqmore NoLabel
|
||||
2 później reqmore NoLabel
|
||||
3 nie reqmore NoLabel
|
||||
4 ma reqmore NoLabel
|
||||
5 ? reqmore NoLabel
|
||||
|
||||
# text: Jedno dla mnie, drugie dla kota
|
||||
# intent: infrom
|
||||
# slots: 2:quantity
|
||||
1 Jedno infrom NoLabel
|
||||
2 dla infrom NoLabel
|
||||
3 mnie infrom NoLabel
|
||||
4 , infrom NoLabel
|
||||
5 drugie infrom NoLabel
|
||||
6 dla infrom NoLabel
|
||||
7 kota infrom NoLabel
|
||||
|
||||
# text: To jeden tylko dla mnie proszę
|
||||
# intent: inform
|
||||
# slots: jeden:quantity
|
||||
1 To inform NoLabel
|
||||
2 jeden inform B-quantity
|
||||
3 tylko inform NoLabel
|
||||
4 dla inform NoLabel
|
||||
5 mnie inform NoLabel
|
||||
6 proszę inform NoLabel
|
||||
|
||||
# text: A gdzie się znajduje?
|
||||
# intent: reqmore
|
||||
# slots:
|
||||
1 A reqmore NoLabel
|
||||
2 gdzie reqmore NoLabel
|
||||
3 się reqmore NoLabel
|
||||
4 znajduje reqmore NoLabel
|
||||
5 ? reqmore NoLabel
|
||||
|
||||
# text: na moje
|
||||
# intent: null
|
||||
# slots:
|
||||
1 na null NoLabel
|
||||
2 moje null NoLabel
|
||||
|
||||
# text: Chciałbym kupić bilet
|
||||
# intent: inform
|
||||
# slots: book:task
|
||||
1 Chciałbym inform NoLabel
|
||||
2 kupić inform NoLabel
|
||||
3 bilet inform NoLabel
|
||||
|
||||
# text: nie jestem pewien, za ile jest bilet?
|
||||
# intent: reqmore
|
||||
# slots:
|
||||
1 nie reqmore NoLabel
|
||||
2 jestem reqmore NoLabel
|
||||
3 pewien reqmore NoLabel
|
||||
4 , reqmore NoLabel
|
||||
5 za reqmore NoLabel
|
||||
6 ile reqmore NoLabel
|
||||
7 jest reqmore NoLabel
|
||||
8 bilet reqmore NoLabel
|
||||
9 ? reqmore NoLabel
|
||||
|
||||
# text: A Uncharted
|
||||
# intent: inform request
|
||||
# slots: Uncharted:title
|
||||
1 A inform_request NoLabel
|
||||
2 Uncharted inform_request B-title
|
||||
|
||||
# text: Jakie płatności przyjmujecie?
|
||||
# intent: request
|
||||
# slots:
|
||||
1 Jakie request NoLabel
|
||||
2 płatności request NoLabel
|
||||
3 przyjmujecie request NoLabel
|
||||
4 ? request NoLabel
|
||||
|
||||
# text: Dzień dobry.
|
||||
# intent: hello
|
||||
# slots:
|
||||
1 Dzień hello NoLabel
|
||||
2 dobry hello NoLabel
|
||||
3 . hello NoLabel
|
||||
|
||||
# text: pierwszy rząd
|
||||
# intent: inform
|
||||
# slots: pierwszy:row
|
||||
1 pierwszy inform B-row
|
||||
2 rząd inform NoLabel
|
||||
|
||||
# text: Chcę dokonać zakupu
|
||||
# intent: inform
|
||||
# slots: buy:task
|
||||
1 Chcę inform NoLabel
|
||||
2 dokonać inform NoLabel
|
||||
3 zakupu inform NoLabel
|
||||
|
||||
# text: dowidzenia
|
||||
# intent: bye
|
||||
# slots:
|
||||
1 dowidzenia bye NoLabel
|
||||
|
||||
# text: Jakub Kaczmarek
|
||||
# intent: inform
|
||||
# slots: JanKaczmarek:name
|
||||
1 Jakub inform NoLabel
|
||||
2 Kaczmarek inform NoLabel
|
||||
|
||||
# text: Dzień dobry
|
||||
# intent: hello
|
||||
# slots:
|
||||
1 Dzień hello NoLabel
|
||||
2 dobry hello NoLabel
|
||||
|
||||
# text: Nie dostałam potwierdzenia
|
||||
# intent: help
|
||||
# slots: Niedostałampotwierdzenia:issue
|
||||
1 Nie help B-issue
|
||||
2 dostałam help I-issue
|
||||
3 potwierdzenia help I-issue
|
||||
|
||||
# text: Dzień dobry
|
||||
# intent: hello
|
||||
# slots:
|
||||
1 Dzień hello NoLabel
|
||||
2 dobry hello NoLabel
|
||||
|
||||
# text: z tyłu, na środku (aby ekran był centralnie widoczny)
|
||||
# intent: inform
|
||||
# slots:
|
||||
1 z inform NoLabel
|
||||
2 tyłu inform NoLabel
|
||||
3 , inform NoLabel
|
||||
4 na inform NoLabel
|
||||
5 środku inform NoLabel
|
||||
6 ( inform NoLabel
|
||||
7 aby inform NoLabel
|
||||
8 ekran inform NoLabel
|
||||
9 był inform NoLabel
|
||||
10 centralnie inform NoLabel
|
||||
11 widoczny inform NoLabel
|
||||
12 ) inform NoLabel
|
||||
|
||||
# text: Poproszę miejsce 11 w przedostatnim rzędzie. I 7 w ostatnim rzędzie
|
||||
# intent: inform inform
|
||||
# slots: 7wostatnimrzędzie:seat
|
||||
1 Poproszę inform_inform NoLabel
|
||||
2 miejsce inform_inform NoLabel
|
||||
3 11 inform_inform NoLabel
|
||||
4 w inform_inform NoLabel
|
||||
5 przedostatnim inform_inform NoLabel
|
||||
6 rzędzie inform_inform NoLabel
|
||||
7 . inform_inform NoLabel
|
||||
8 I inform_inform NoLabel
|
||||
9 7 inform_inform B-seat
|
||||
10 w inform_inform I-seat
|
||||
11 ostatnim inform_inform I-seat
|
||||
12 rzędzie inform_inform I-seat
|
||||
|
||||
# text: Chciałbym anulować rezerwację
|
||||
# intent: deny inform
|
||||
# slots: reservation:task
|
||||
1 Chciałbym deny_inform NoLabel
|
||||
2 anulować deny_inform NoLabel
|
||||
3 rezerwację deny_inform NoLabel
|
||||
|
||||
# text: Chciałbym zarezerwować bilety na Batman i zemsta Muminków jutro o 21:00
|
||||
# intent: request request request request
|
||||
# slots: 21:00:hour
|
||||
1 Chciałbym request_request_request_request NoLabel
|
||||
2 zarezerwować request_request_request_request NoLabel
|
||||
3 bilety request_request_request_request NoLabel
|
||||
4 na request_request_request_request NoLabel
|
||||
5 Batman request_request_request_request NoLabel
|
||||
6 i request_request_request_request NoLabel
|
||||
7 zemsta request_request_request_request NoLabel
|
||||
8 Muminków request_request_request_request NoLabel
|
||||
9 jutro request_request_request_request NoLabel
|
||||
10 o request_request_request_request NoLabel
|
||||
11 21:00 request_request_request_request B-hour
|
||||
|
||||
# text: Nie, rozmyśliłam się.
|
||||
# intent: deny
|
||||
# slots: cancelbook:task
|
||||
1 Nie deny NoLabel
|
||||
2 , deny NoLabel
|
||||
3 rozmyśliłam deny NoLabel
|
||||
4 się deny NoLabel
|
||||
5 . deny NoLabel
|
||||
|
||||
# text: To 12 i 13 w J proszę
|
||||
# intent: inform inform inform
|
||||
# slots: 13:seat
|
||||
1 To inform_inform_inform NoLabel
|
||||
2 12 inform_inform_inform NoLabel
|
||||
3 i inform_inform_inform NoLabel
|
||||
4 13 inform_inform_inform B-seat
|
||||
5 w inform_inform_inform NoLabel
|
||||
6 J inform_inform_inform NoLabel
|
||||
7 proszę inform_inform_inform NoLabel
|
||||
|
||||
# text: Jeden dla mnie, drugi dla kota
|
||||
# intent: inform
|
||||
# slots: 2:ticketnumber
|
||||
1 Jeden inform NoLabel
|
||||
2 dla inform NoLabel
|
||||
3 mnie inform NoLabel
|
||||
4 , inform NoLabel
|
||||
5 drugi inform NoLabel
|
||||
6 dla inform NoLabel
|
||||
7 kota inform NoLabel
|
||||
|
||||
# text: O, super. O której?
|
||||
# intent: request
|
||||
# slots: Uncharted:movie
|
||||
1 O request NoLabel
|
||||
2 , request NoLabel
|
||||
3 super request NoLabel
|
||||
4 . request NoLabel
|
||||
5 O request NoLabel
|
||||
6 której request NoLabel
|
||||
7 ? request NoLabel
|
||||
|
||||
# text: Wybieram wszystkie
|
||||
# intent: inform
|
||||
# slots: all:seat
|
||||
1 Wybieram inform NoLabel
|
||||
2 wszystkie inform NoLabel
|
||||
|
||||
# text: 7 normalnych i 4 ulgowe
|
||||
# intent: inform inform
|
||||
# slots: 4:ticketnumber,ulgowe:tickettype
|
||||
1 7 inform_inform NoLabel
|
||||
2 normalnych inform_inform NoLabel
|
||||
3 i inform_inform NoLabel
|
||||
4 4 inform_inform B-ticketnumber
|
||||
5 ulgowe inform_inform B-tickettype
|
||||
|
||||
# text: rząd 10
|
||||
# intent: inform
|
||||
# slots: 10:row
|
||||
1 rząd inform NoLabel
|
||||
2 10 inform B-row
|
||||
|
||||
# text: Chcę kupić bilety na film
|
||||
# intent: inform
|
||||
# slots: buy:task
|
||||
1 Chcę inform NoLabel
|
||||
2 kupić inform NoLabel
|
||||
3 bilety inform NoLabel
|
||||
4 na inform NoLabel
|
||||
5 film inform NoLabel
|
||||
|
||||
# text: Kupić
|
||||
# intent: inform
|
||||
# slots: buy:task
|
||||
1 Kupić inform NoLabel
|
||||
|
||||
# text: Najlepiej rzędy na górze
|
||||
# intent: null
|
||||
# slots:
|
||||
1 Najlepiej null NoLabel
|
||||
2 rzędy null NoLabel
|
||||
3 na null NoLabel
|
||||
4 górze null NoLabel
|
||||
|
||||
# text: Wybieram 6-7
|
||||
# intent: inform inform
|
||||
# slots: 7:seat
|
||||
1 Wybieram inform_inform NoLabel
|
||||
2 6-7 inform_inform NoLabel
|
||||
|
||||
# text: 123@132.pl
|
||||
# intent: inform
|
||||
# slots: 123@132.pl:e-mail
|
||||
1 123@132.pl inform B-e-mail
|
||||
|
||||
# text: Chciał bym zamówić bilet na film Minionki dzisiaj o 18.30
|
||||
# intent: inform inform inform
|
||||
# slots: 18.30:time
|
||||
1 Chciał inform_inform_inform NoLabel
|
||||
2 bym inform_inform_inform NoLabel
|
||||
3 zamówić inform_inform_inform NoLabel
|
||||
4 bilet inform_inform_inform NoLabel
|
||||
5 na inform_inform_inform NoLabel
|
||||
6 film inform_inform_inform NoLabel
|
||||
7 Minionki inform_inform_inform NoLabel
|
||||
8 dzisiaj inform_inform_inform NoLabel
|
||||
9 o inform_inform_inform NoLabel
|
||||
10 18.30 inform_inform_inform B-time
|
||||
|
||||
# text: Czy na 'batman i zemsta muminków' w ten dzień dostępne są miejsca w ostatnim rzędzie?
|
||||
# intent: request
|
||||
# slots: sit:task,Batmanizemstamuminków:movie
|
||||
1 Czy request NoLabel
|
||||
2 na request NoLabel
|
||||
3 batman request B-movie
|
||||
4 i request I-movie
|
||||
5 zemsta request I-movie
|
||||
6 muminków request I-movie
|
||||
7 w request NoLabel
|
||||
8 ten request NoLabel
|
||||
9 dzień request NoLabel
|
||||
10 dostępne request NoLabel
|
||||
11 są request NoLabel
|
||||
12 miejsca request NoLabel
|
||||
13 w request NoLabel
|
||||
14 ostatnim request NoLabel
|
||||
15 rzędzie request NoLabel
|
||||
16 ? request NoLabel
|
||||
|
||||
# text: Chciałbym dowiedzieć się czegoś o aktualnym repertuarze
|
||||
# intent: request
|
||||
# slots: closestscreenings:task
|
||||
1 Chciałbym request NoLabel
|
||||
2 dowiedzieć request NoLabel
|
||||
3 się request NoLabel
|
||||
4 czegoś request NoLabel
|
||||
5 o request NoLabel
|
||||
6 aktualnym request NoLabel
|
||||
7 repertuarze request NoLabel
|
||||
|
BIN
__pycache__/dialogue_state.cpython-38.pyc
Normal file
BIN
__pycache__/dialogue_state.cpython-38.pyc
Normal file
Binary file not shown.
285
data/NLU_data_intent/train.tsv
Normal file
285
data/NLU_data_intent/train.tsv
Normal file
@ -0,0 +1,285 @@
|
||||
Dzień dobry hello
|
||||
Chciałbym kupić bilet na Batman w środę. request
|
||||
A jakie są dostępne request
|
||||
wybieram 18:00 inform
|
||||
jakie dane muszę podać? reqmore
|
||||
ok, Adam Nowak aaanowak@mail.com inform
|
||||
miejsca w tylnych rzędach inform
|
||||
poproszę miejsca od 10 do 12 w ostatnim rzędzie inform
|
||||
Tak act
|
||||
teraz inform
|
||||
dziękuję, do widzenia bye
|
||||
Cześć hello
|
||||
chciałbym zarezerwować bilet na batmana help
|
||||
16.03 inform
|
||||
17:00 inform
|
||||
1 inform
|
||||
studencki inform
|
||||
ok affirm
|
||||
1 inform
|
||||
2 inform
|
||||
Jan Kowalski inform
|
||||
Dzień dobry hello
|
||||
Dzień dobry, chciałabym złożyć reklamację biletów inform
|
||||
Film miał zacząć się o 19, natomiast pracownicy kina odmówili mi wpuszczenia na seans do godziny 19:30, przez co nie mogłam zobaczyć wszystkich reklam 🙁 inform
|
||||
12093098490832030210334434 inform
|
||||
przez internet inform
|
||||
485554893 inform
|
||||
Dziękuję ack
|
||||
Witam hello
|
||||
Jakie są najbliższe seanse? request
|
||||
W jakim kinie? request
|
||||
Gdzie jest to kino? request
|
||||
Ile kosztują bielty na Sing 2? request
|
||||
W jaki inny dzień bilety kosztują mniej? reqmore
|
||||
Rozumiem. Chcę w takim razie zarezerwować dwa bilety na Sing 2 request
|
||||
Jeden normalny i ulgowy inform
|
||||
emkarcinos42069@buziaczek.pl 123123123 inform
|
||||
A jakie miejsca zostały zarezerwowane? request
|
||||
Chciałbym miejsca najbliżej ekranu request
|
||||
A jakie są miejsca najbliżej ekranu? request
|
||||
A jakie są DOSTĘPNE miejsca najbliżej ekranu? request
|
||||
Rozumiem. Dziękuję ack
|
||||
Dzień dobry hello
|
||||
Chcialbym bilet na Batman request
|
||||
jutro popołudniu inform
|
||||
z przodu inform
|
||||
rząd 2 miejsca 6,7 inform
|
||||
Adrian Charkiewicz, gfasfaf@gmail.com inform
|
||||
tak zgadza się act
|
||||
Cześć hello
|
||||
Chciałbym obejrzeć film help
|
||||
Chce iść na jakoś to będzie inform
|
||||
Wybieram godzinę 20:45 inform
|
||||
20 inform
|
||||
Bilety ulgowe inform
|
||||
Tak affirm
|
||||
Może być ack
|
||||
nie chce podawać numeru telefonu deny
|
||||
lalalalili@gmai.com, 111222111 inform
|
||||
Ile minut przed senansem muszę być na miejscu, aby odebrać bilet? reqmore
|
||||
Co w przypadku gdy się spóźnie? reqmore
|
||||
Rozumiem ack
|
||||
Nie deny
|
||||
Dziękuje za obsługe thankyou
|
||||
Dzień dobry! hello
|
||||
Chciałbym kupić seans request
|
||||
Bilet na seans request
|
||||
Poproszę bilet na ostatni seans Batmana inform
|
||||
test@test.pl inform
|
||||
123456789 inform
|
||||
Dzień dobry hello
|
||||
chciałbym się dowiedzieć jaki jest aktualny repertuar request
|
||||
chciałbym się dowiedzieć co będzie 25 marca request
|
||||
o czym jest straszny film 10? request
|
||||
poproszę 3 bilety request
|
||||
Jan Kowalski inform
|
||||
jan.kowalski@pies.pl inform
|
||||
na tyłach inform
|
||||
poproszę inform
|
||||
Witam hello
|
||||
Jaki jest repertuar na ten tydzień w kinie Rialto? request
|
||||
Jakie są godziny tych seansów? request
|
||||
Cały tydzień inform
|
||||
Witam hello
|
||||
Możesz mi podać jakie są najbliższe seanse? request
|
||||
A w jakim to kinie? null
|
||||
Chcę wiedzieć w jakim kinie podajesz seanse null
|
||||
kino lokalizacja request
|
||||
Ile kosztują bielty na Niewypanda? null
|
||||
Tak affirm
|
||||
A kiedy bilety są najtańsze? request
|
||||
W jaki dzień bilety są najtańsze? reqmore
|
||||
W takim razie chciałbym zarezerować dwa miejsca na film to nie wipanda w niedzielę null
|
||||
Tak affirm
|
||||
Jeden ulgowy jeden senior inform
|
||||
Z tyłu sali null
|
||||
9 i 10 inform
|
||||
Ostatni inform
|
||||
Witam hello
|
||||
chciałbym kupić bilet ale nie wiem na co help
|
||||
Nie wiem czy masz jakieś propozycję na dziś ? request
|
||||
poprosze inni ludzie na 14:1313 null
|
||||
tak dokładnie tak affirm
|
||||
1 inform
|
||||
daleko od ludzi null
|
||||
chciałbym aby nie było ludzi w okół mnie null
|
||||
Czy mogę poznać zatłoczenie aktualne sali ?\ request
|
||||
poproszę o miejsce 5 w rzędzie 10 inform
|
||||
ju tu inform
|
||||
Halo hello
|
||||
Chciałbym kupić bilet na NajlepszaNAzwaFilmu inform
|
||||
30 marca o godzinie 12:10 inform
|
||||
W okolicach środka, środkowego rzędu inform
|
||||
7 rząd miejce 11 inform
|
||||
Emil Kowalski inform
|
||||
xyz@gmail.com inform
|
||||
Tak act
|
||||
Teraz inform
|
||||
Dziękuję bye
|
||||
Dzień dobry! hello
|
||||
Chciałbym zarezerwować film null
|
||||
Bilet na film inform
|
||||
To nie wypanda i Batman inform
|
||||
Poproszę bilet na Batmana jutro o 15:00 i pande w sobotę na 17:00 inform
|
||||
Elo hello
|
||||
Chcę iść do kina request
|
||||
CHCĘ IŚĆ DO KINA repeat
|
||||
A co macie request
|
||||
No pewnie jakoś będzie. Na fanstaczne zernęta proszę zatem. inform
|
||||
A co gracie? request
|
||||
A jutro? reqmore
|
||||
to na dzisiaj na śmirc na nilu inform
|
||||
woeczprkem moze inform
|
||||
A później nie ma? reqmore
|
||||
No dobła affirm
|
||||
Jedno dla mnie, drugie dla kota inform
|
||||
A jest ulga dla zwierząt? reqmore
|
||||
To jeden tylko dla mnie proszę inform
|
||||
iwona.christop@gmail.com, 7368507466 inform
|
||||
A gdzie się znajduje? reqmore
|
||||
No dobła, niech będzie ack
|
||||
Dzień dobry hello
|
||||
Chciałbym kupić bilet inform
|
||||
batman inform
|
||||
dzisiaj, teraz inform
|
||||
nie jestem pewien, za ile jest bilet? reqmore
|
||||
podaj mi informacje o bilecie reqmore
|
||||
wszystkie request
|
||||
czy jest to film 2D czy 3D? Z napisami czy z dubbingiem? help
|
||||
zarezerwuj ten bilet inform
|
||||
na moje null
|
||||
karida@st.amu.edu.pl inform
|
||||
wygodne null
|
||||
na końcu sali request
|
||||
miejsce 11 inform
|
||||
przed ostatnim inform
|
||||
Dzień dobry. hello
|
||||
Jakie płatności przyjmujecie? request
|
||||
Cześć bocie hello
|
||||
Co można u was zjeść? request
|
||||
Dobra, czy jutro gracie batman? inform
|
||||
A Uncharted inform
|
||||
19:30 inform
|
||||
6 inform
|
||||
3 normalne i 3 ulgowe inform
|
||||
Ok ack
|
||||
Dziękuję systemie thankyou
|
||||
Cześć systemie hello
|
||||
Czy gracie Batman? request
|
||||
Chciałym 15.04 inform
|
||||
22 null
|
||||
Tak affirm
|
||||
Jakie macie zniżki? request
|
||||
1 weteran i 1 ulgowy inform
|
||||
dól lewo inform
|
||||
pierwszy rząd inform
|
||||
5-6 inform
|
||||
Tak, poproszę null
|
||||
Chcę dokonać zakupu inform
|
||||
jan kowalski inform
|
||||
Cześć hello
|
||||
dowidzenia bye
|
||||
Dzień dobry hello
|
||||
chciał bym zarezerwować bilet na minionki o 18.30 inform
|
||||
poprosze w takim razie To nie wypanda o 18:45 request
|
||||
dzisiaj inform
|
||||
2 inform
|
||||
ulgowe inform
|
||||
12 rząd inform
|
||||
poproszę 1 inform
|
||||
Jakub Kaczmarek inform
|
||||
dzień dobry hello
|
||||
Nie dostałam potwierdzenia help
|
||||
iwona.christop@gmail.com inform
|
||||
Dzięki thankyou
|
||||
Dzień dobry hello
|
||||
Chciałabym zarezerwować bilet do kina request
|
||||
Na wyjdz za mnie inform
|
||||
dzis wieczorem inform
|
||||
Martyna Druminska mdruminska074@gmail.com inform
|
||||
z tyłu, na środku (aby ekran był centralnie widoczny) inform
|
||||
Dzień dobry hello
|
||||
Chciałbym wypożyczyć film null
|
||||
Co obsługujecie? request
|
||||
Chciałbym poznać akltualny repertuar request
|
||||
Chciałbym zarezerwować bilety na Batman i zemsta Muminków jutro o 21:00 request
|
||||
Taki O okita@mail.com inform
|
||||
Wygodne null
|
||||
Na końcu sali inform
|
||||
Poproszę miejsce 11 w przedostatnim rzędzie. I 7 w ostatnim rzędzie inform
|
||||
Zgadza się act
|
||||
Chcę tylko zarezerwować inform
|
||||
Super act
|
||||
Chciałbym anulować rezerwację inform
|
||||
Tak act
|
||||
To wszystko, dziękuję bye
|
||||
Elo hello
|
||||
Chcę do kina się przejść null
|
||||
Anulujmy rezerwację w takim razie inform
|
||||
Nie, rozmyśliłam się. deny
|
||||
Coś bym zjadła null
|
||||
Z j a d ł a b y m c o ś null
|
||||
O, bilet kupię zatem inform
|
||||
Zaskocz mnie request
|
||||
O, super. O której? request
|
||||
Na 21 proszę inform
|
||||
Jeden dla mnie, drugi dla kota inform
|
||||
normalny i ulgowy inform
|
||||
Na środku jakoś null
|
||||
IJ null
|
||||
I J inform
|
||||
To 12 i 13 w J proszę inform
|
||||
Jan Kowalski inform
|
||||
Dzięki ❤️ thankyou
|
||||
Dzień dobry hello
|
||||
Chcę kupić bilety na film inform
|
||||
A jakie filmy gracie? request
|
||||
O czym jest Bunkier Strachu? request
|
||||
Czy gracie jakieś komedie? request
|
||||
W takim razie chcę zarezerwować bilety na film to Niewypanda inform
|
||||
10.04 inform
|
||||
11 inform
|
||||
7 normalnych i 5 ulgowych\ inform
|
||||
7 normalnych i 4 ulgowe inform
|
||||
Które rzędzy są dostępne? null
|
||||
tak affirm
|
||||
rząd 10 inform
|
||||
Dobrze null
|
||||
Wybieram wszystkie inform
|
||||
Tomcio Paluch inform
|
||||
Dziękuję thankyou
|
||||
Cześć hello
|
||||
Jaka jest nazwa kina null
|
||||
Chciałbym sprawdzić repertuar na 23 maja request
|
||||
Jakie są dostępne miejsca na film 'Batman'? request
|
||||
Najlepiej rzędy na górze null
|
||||
Jaki jest zakres rzędów? request
|
||||
To w 12 inform
|
||||
Wybieram 6-7 inform
|
||||
Kupić inform
|
||||
2 bilety inform
|
||||
Jakie są rodzaje biletów? request
|
||||
Dla kogo jest bilet ulgowy? request
|
||||
To poproszę bilet ulgowy inform
|
||||
Już wybrałem miejsca null
|
||||
Dzień dobry hello
|
||||
Chciał bym zamówić bilet na film Minionki dzisiaj o 18.30 inform
|
||||
jakie są dostępne ulgi? reqmore
|
||||
poprosze bilet ulgowy inform
|
||||
tak, daleko od ekranu inform
|
||||
dobrze affirm
|
||||
123@132.pl inform
|
||||
123456789 inform
|
||||
czy na miejscu mozna kupić popcorn? request
|
||||
dziękuje thankyou
|
||||
Cześć hello
|
||||
Chciałbym dowiedzieć się czegoś o aktualnym repertuarze request
|
||||
Tak ack
|
||||
W sumie tak. Interesuje mnie najbliższa sobota request
|
||||
Czy na 'batman i zemsta muminków' w ten dzień dostępne są miejsca w ostatnim rzędzie? request
|
||||
A przedostatni? Interesują mnie dwa miejsca koło siebie request
|
||||
W takim razie je poproszę inform
|
||||
Jan Kowalski, kowalski69@gmail.com inform
|
||||
Tak ack
|
||||
Przed filmem inform
|
|
Can't render this file because it contains an unexpected character in line 9 and column 62.
|
21
data/create_intent_dataset.py
Normal file
21
data/create_intent_dataset.py
Normal file
@ -0,0 +1,21 @@
|
||||
from pathlib import Path
|
||||
import sys
|
||||
|
||||
|
||||
def main():
|
||||
with open('intent_data/train.tsv', 'w', encoding='utf-8') as outf:
|
||||
path = sys.argv[1]
|
||||
dir = Path(rf'{path}')
|
||||
for file in dir.glob('*'):
|
||||
with open(file, encoding='utf-8') as inf:
|
||||
for line in inf:
|
||||
line = line.split('\t')
|
||||
if line[0] == 'user':
|
||||
text = line[1]
|
||||
intent = line[2].split('(')[0]
|
||||
outf.write(text + '\t' + intent + '\n')
|
||||
print('Processed: ', file.name)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
@ -21,7 +21,7 @@ def process_file(file):
|
||||
intents = [intent.strip() for intent in intents]
|
||||
intents = ' '.join(intents)
|
||||
return intents
|
||||
|
||||
"""
|
||||
def get_slots(intent_row):
|
||||
intent_row = intent_row.split('&')
|
||||
intent_row = [intent.strip() for intent in intent_row]
|
||||
@ -51,10 +51,26 @@ def process_file(file):
|
||||
slots = [slot.split('=') for slot in slots if len(slot.split('=')) == 2]
|
||||
slots = [[slot[0].split()[-1], slot[1]] if ',' in slot[0] else slot for slot in slots] # ?
|
||||
return slots
|
||||
"""
|
||||
|
||||
def get_slots(intent_row):
|
||||
intent_content = re.search('\(+.*?\)+', intent_row).group()
|
||||
intent_content = intent_content.strip()
|
||||
intent_content = intent_content.replace('(', '')
|
||||
intent_content = intent_content.replace(')', '')
|
||||
intent_content = intent_content.replace("'", '')
|
||||
intent_content = intent_content.replace("\"", '')
|
||||
intent_content_split = intent_content.split('&')
|
||||
slots = []
|
||||
for intent in intent_content_split:
|
||||
if '=' in intent and intent[-1] != '=':
|
||||
intent_value_pair = intent.split('=')
|
||||
slots.append(intent_value_pair)
|
||||
return slots
|
||||
|
||||
def get_tokens(text, intents, slots):
|
||||
def tokenize(text):
|
||||
email = re.search("[^ ]+@[^ ]+", text)
|
||||
email = re.search("[^ ]+@[^ ,]+", text)
|
||||
if email:
|
||||
email_address = email.group()
|
||||
text = text.replace(email_address, '@')
|
Can't render this file because it contains an unexpected character in line 9 and column 62.
|
Can't render this file because it contains an unexpected character in line 5 and column 26.
|
Can't render this file because it contains an unexpected character in line 10 and column 13.
|
Can't render this file because it contains an unexpected character in line 7 and column 33.
|
Can't render this file because it contains an unexpected character in line 4 and column 78.
|
51
data/intent_test_and_train_version/test.tsv
Normal file
51
data/intent_test_and_train_version/test.tsv
Normal file
@ -0,0 +1,51 @@
|
||||
Dzień dobry hello
|
||||
Chcę kupić bilety na film inform
|
||||
A jakie filmy gracie? request
|
||||
O czym jest Bunkier Strachu? request
|
||||
Czy gracie jakieś komedie? request
|
||||
W takim razie chcę zarezerwować bilety na film to Niewypanda inform
|
||||
10.04 inform
|
||||
11 inform
|
||||
7 normalnych i 5 ulgowych\ inform
|
||||
7 normalnych i 4 ulgowe inform
|
||||
Które rzędzy są dostępne? null
|
||||
tak affirm
|
||||
rząd 10 inform
|
||||
Dobrze null
|
||||
Wybieram wszystkie inform
|
||||
Tomcio Paluch inform
|
||||
Dziękuję thankyou
|
||||
Cześć hello
|
||||
Jaka jest nazwa kina null
|
||||
Chciałbym sprawdzić repertuar na 23 maja request
|
||||
Jakie są dostępne miejsca na film 'Batman'? request
|
||||
Najlepiej rzędy na górze null
|
||||
Jaki jest zakres rzędów? request
|
||||
To w 12 inform
|
||||
Wybieram 6-7 inform
|
||||
Kupić inform
|
||||
2 bilety inform
|
||||
Jakie są rodzaje biletów? request
|
||||
Dla kogo jest bilet ulgowy? request
|
||||
To poproszę bilet ulgowy inform
|
||||
Już wybrałem miejsca null
|
||||
Dzień dobry hello
|
||||
Chciał bym zamówić bilet na film Minionki dzisiaj o 18.30 inform
|
||||
jakie są dostępne ulgi? reqmore
|
||||
poprosze bilet ulgowy inform
|
||||
tak, daleko od ekranu inform
|
||||
dobrze affirm
|
||||
123@132.pl inform
|
||||
123456789 inform
|
||||
czy na miejscu mozna kupić popcorn? request
|
||||
dziękuje thankyou
|
||||
Cześć hello
|
||||
Chciałbym dowiedzieć się czegoś o aktualnym repertuarze request
|
||||
Tak ack
|
||||
W sumie tak. Interesuje mnie najbliższa sobota request
|
||||
Czy na 'batman i zemsta muminków' w ten dzień dostępne są miejsca w ostatnim rzędzie? request
|
||||
A przedostatni? Interesują mnie dwa miejsca koło siebie request
|
||||
W takim razie je poproszę inform
|
||||
Jan Kowalski, kowalski69@gmail.com inform
|
||||
Tak ack
|
||||
Przed filmem inform
|
|
234
data/intent_test_and_train_version/train.tsv
Normal file
234
data/intent_test_and_train_version/train.tsv
Normal file
@ -0,0 +1,234 @@
|
||||
Dzień dobry hello
|
||||
Chciałbym kupić bilet na Batman w środę. request
|
||||
A jakie są dostępne request
|
||||
wybieram 18:00 inform
|
||||
jakie dane muszę podać? reqmore
|
||||
ok, Adam Nowak aaanowak@mail.com inform
|
||||
miejsca w tylnych rzędach inform
|
||||
poproszę miejsca od 10 do 12 w ostatnim rzędzie inform
|
||||
Tak act
|
||||
teraz inform
|
||||
dziękuję, do widzenia bye
|
||||
Cześć hello
|
||||
chciałbym zarezerwować bilet na batmana help
|
||||
16.03 inform
|
||||
17:00 inform
|
||||
1 inform
|
||||
studencki inform
|
||||
ok affirm
|
||||
1 inform
|
||||
2 inform
|
||||
Jan Kowalski inform
|
||||
Dzień dobry hello
|
||||
Dzień dobry, chciałabym złożyć reklamację biletów inform
|
||||
Film miał zacząć się o 19, natomiast pracownicy kina odmówili mi wpuszczenia na seans do godziny 19:30, przez co nie mogłam zobaczyć wszystkich reklam 🙁 inform
|
||||
12093098490832030210334434 inform
|
||||
przez internet inform
|
||||
485554893 inform
|
||||
Dziękuję ack
|
||||
Witam hello
|
||||
Jakie są najbliższe seanse? request
|
||||
W jakim kinie? request
|
||||
Gdzie jest to kino? request
|
||||
Ile kosztują bielty na Sing 2? request
|
||||
W jaki inny dzień bilety kosztują mniej? reqmore
|
||||
Rozumiem. Chcę w takim razie zarezerwować dwa bilety na Sing 2 request
|
||||
Jeden normalny i ulgowy inform
|
||||
emkarcinos42069@buziaczek.pl 123123123 inform
|
||||
A jakie miejsca zostały zarezerwowane? request
|
||||
Chciałbym miejsca najbliżej ekranu request
|
||||
A jakie są miejsca najbliżej ekranu? request
|
||||
A jakie są DOSTĘPNE miejsca najbliżej ekranu? request
|
||||
Rozumiem. Dziękuję ack
|
||||
Dzień dobry hello
|
||||
Chcialbym bilet na Batman request
|
||||
jutro popołudniu inform
|
||||
z przodu inform
|
||||
rząd 2 miejsca 6,7 inform
|
||||
Adrian Charkiewicz, gfasfaf@gmail.com inform
|
||||
tak zgadza się act
|
||||
Cześć hello
|
||||
Chciałbym obejrzeć film help
|
||||
Chce iść na jakoś to będzie inform
|
||||
Wybieram godzinę 20:45 inform
|
||||
20 inform
|
||||
Bilety ulgowe inform
|
||||
Tak affirm
|
||||
Może być ack
|
||||
nie chce podawać numeru telefonu deny
|
||||
lalalalili@gmai.com, 111222111 inform
|
||||
Ile minut przed senansem muszę być na miejscu, aby odebrać bilet? reqmore
|
||||
Co w przypadku gdy się spóźnie? reqmore
|
||||
Rozumiem ack
|
||||
Nie deny
|
||||
Dziękuje za obsługe thankyou
|
||||
Dzień dobry! hello
|
||||
Chciałbym kupić seans request
|
||||
Bilet na seans request
|
||||
Poproszę bilet na ostatni seans Batmana inform
|
||||
test@test.pl inform
|
||||
123456789 inform
|
||||
Dzień dobry hello
|
||||
chciałbym się dowiedzieć jaki jest aktualny repertuar request
|
||||
chciałbym się dowiedzieć co będzie 25 marca request
|
||||
o czym jest straszny film 10? request
|
||||
poproszę 3 bilety request
|
||||
Jan Kowalski inform
|
||||
jan.kowalski@pies.pl inform
|
||||
na tyłach inform
|
||||
poproszę inform
|
||||
Witam hello
|
||||
Jaki jest repertuar na ten tydzień w kinie Rialto? request
|
||||
Jakie są godziny tych seansów? request
|
||||
Cały tydzień inform
|
||||
Witam hello
|
||||
Możesz mi podać jakie są najbliższe seanse? request
|
||||
A w jakim to kinie? null
|
||||
Chcę wiedzieć w jakim kinie podajesz seanse null
|
||||
kino lokalizacja request
|
||||
Ile kosztują bielty na Niewypanda? null
|
||||
Tak affirm
|
||||
A kiedy bilety są najtańsze? request
|
||||
W jaki dzień bilety są najtańsze? reqmore
|
||||
W takim razie chciałbym zarezerować dwa miejsca na film to nie wipanda w niedzielę null
|
||||
Tak affirm
|
||||
Jeden ulgowy jeden senior inform
|
||||
Z tyłu sali null
|
||||
9 i 10 inform
|
||||
Ostatni inform
|
||||
Witam hello
|
||||
chciałbym kupić bilet ale nie wiem na co help
|
||||
Nie wiem czy masz jakieś propozycję na dziś ? request
|
||||
poprosze inni ludzie na 14:1313 null
|
||||
tak dokładnie tak affirm
|
||||
1 inform
|
||||
daleko od ludzi null
|
||||
chciałbym aby nie było ludzi w okół mnie null
|
||||
Czy mogę poznać zatłoczenie aktualne sali ?\ request
|
||||
poproszę o miejsce 5 w rzędzie 10 inform
|
||||
ju tu inform
|
||||
Halo hello
|
||||
Chciałbym kupić bilet na NajlepszaNAzwaFilmu inform
|
||||
30 marca o godzinie 12:10 inform
|
||||
W okolicach środka, środkowego rzędu inform
|
||||
7 rząd miejce 11 inform
|
||||
Emil Kowalski inform
|
||||
xyz@gmail.com inform
|
||||
Tak act
|
||||
Teraz inform
|
||||
Dziękuję bye
|
||||
Dzień dobry! hello
|
||||
Chciałbym zarezerwować film null
|
||||
Bilet na film inform
|
||||
To nie wypanda i Batman inform
|
||||
Poproszę bilet na Batmana jutro o 15:00 i pande w sobotę na 17:00 inform
|
||||
Elo hello
|
||||
Chcę iść do kina request
|
||||
CHCĘ IŚĆ DO KINA repeat
|
||||
A co macie request
|
||||
No pewnie jakoś będzie. Na fanstaczne zernęta proszę zatem. inform
|
||||
A co gracie? request
|
||||
A jutro? reqmore
|
||||
to na dzisiaj na śmirc na nilu inform
|
||||
woeczprkem moze inform
|
||||
A później nie ma? reqmore
|
||||
No dobła affirm
|
||||
Jedno dla mnie, drugie dla kota inform
|
||||
A jest ulga dla zwierząt? reqmore
|
||||
To jeden tylko dla mnie proszę inform
|
||||
iwona.christop@gmail.com, 7368507466 inform
|
||||
A gdzie się znajduje? reqmore
|
||||
No dobła, niech będzie ack
|
||||
Dzień dobry hello
|
||||
Chciałbym kupić bilet inform
|
||||
batman inform
|
||||
dzisiaj, teraz inform
|
||||
nie jestem pewien, za ile jest bilet? reqmore
|
||||
podaj mi informacje o bilecie reqmore
|
||||
wszystkie request
|
||||
czy jest to film 2D czy 3D? Z napisami czy z dubbingiem? help
|
||||
zarezerwuj ten bilet inform
|
||||
na moje null
|
||||
karida@st.amu.edu.pl inform
|
||||
wygodne null
|
||||
na końcu sali request
|
||||
miejsce 11 inform
|
||||
przed ostatnim inform
|
||||
Dzień dobry. hello
|
||||
Jakie płatności przyjmujecie? request
|
||||
Cześć bocie hello
|
||||
Co można u was zjeść? request
|
||||
Dobra, czy jutro gracie batman? inform
|
||||
A Uncharted inform
|
||||
19:30 inform
|
||||
6 inform
|
||||
3 normalne i 3 ulgowe inform
|
||||
Ok ack
|
||||
Dziękuję systemie thankyou
|
||||
Cześć systemie hello
|
||||
Czy gracie Batman? request
|
||||
Chciałym 15.04 inform
|
||||
22 null
|
||||
Tak affirm
|
||||
Jakie macie zniżki? request
|
||||
1 weteran i 1 ulgowy inform
|
||||
dól lewo inform
|
||||
pierwszy rząd inform
|
||||
5-6 inform
|
||||
Tak, poproszę null
|
||||
Chcę dokonać zakupu inform
|
||||
jan kowalski inform
|
||||
Cześć hello
|
||||
dowidzenia bye
|
||||
Dzień dobry hello
|
||||
chciał bym zarezerwować bilet na minionki o 18.30 inform
|
||||
poprosze w takim razie To nie wypanda o 18:45 request
|
||||
dzisiaj inform
|
||||
2 inform
|
||||
ulgowe inform
|
||||
12 rząd inform
|
||||
poproszę 1 inform
|
||||
Jakub Kaczmarek inform
|
||||
dzień dobry hello
|
||||
Nie dostałam potwierdzenia help
|
||||
iwona.christop@gmail.com inform
|
||||
Dzięki thankyou
|
||||
Dzień dobry hello
|
||||
Chciałabym zarezerwować bilet do kina request
|
||||
Na wyjdz za mnie inform
|
||||
dzis wieczorem inform
|
||||
Martyna Druminska mdruminska074@gmail.com inform
|
||||
z tyłu, na środku (aby ekran był centralnie widoczny) inform
|
||||
Dzień dobry hello
|
||||
Chciałbym wypożyczyć film null
|
||||
Co obsługujecie? request
|
||||
Chciałbym poznać akltualny repertuar request
|
||||
Chciałbym zarezerwować bilety na Batman i zemsta Muminków jutro o 21:00 request
|
||||
Taki O okita@mail.com inform
|
||||
Wygodne null
|
||||
Na końcu sali inform
|
||||
Poproszę miejsce 11 w przedostatnim rzędzie. I 7 w ostatnim rzędzie inform
|
||||
Zgadza się act
|
||||
Chcę tylko zarezerwować inform
|
||||
Super act
|
||||
Chciałbym anulować rezerwację inform
|
||||
Tak act
|
||||
To wszystko, dziękuję bye
|
||||
Elo hello
|
||||
Chcę do kina się przejść null
|
||||
Anulujmy rezerwację w takim razie inform
|
||||
Nie, rozmyśliłam się. deny
|
||||
Coś bym zjadła null
|
||||
Z j a d ł a b y m c o ś null
|
||||
O, bilet kupię zatem inform
|
||||
Zaskocz mnie request
|
||||
O, super. O której? request
|
||||
Na 21 proszę inform
|
||||
Jeden dla mnie, drugi dla kota inform
|
||||
normalny i ulgowy inform
|
||||
Na środku jakoś null
|
||||
IJ null
|
||||
I J inform
|
||||
To 12 i 13 w J proszę inform
|
||||
Jan Kowalski inform
|
||||
Dzięki ❤️ thankyou
|
|
472
data/test-pl.conllu
Normal file
472
data/test-pl.conllu
Normal file
@ -0,0 +1,472 @@
|
||||
# text: A jakie są dostępne
|
||||
# intent: request
|
||||
# slots:
|
||||
1 A request NoLabel
|
||||
2 jakie request NoLabel
|
||||
3 są request NoLabel
|
||||
4 dostępne request NoLabel
|
||||
|
||||
# text: Dzień dobry
|
||||
# intent: hello
|
||||
# slots:
|
||||
1 Dzień hello NoLabel
|
||||
2 dobry hello NoLabel
|
||||
|
||||
# text: dziękuję, do widzenia
|
||||
# intent: bye
|
||||
# slots:
|
||||
1 dziękuję bye NoLabel
|
||||
2 , bye NoLabel
|
||||
3 do bye NoLabel
|
||||
4 widzenia bye NoLabel
|
||||
|
||||
# text: 16.03
|
||||
# intent: inform
|
||||
# slots: 16.03:date
|
||||
1 16.03 inform B-date
|
||||
|
||||
# text: 2
|
||||
# intent: inform
|
||||
# slots: 2:seat
|
||||
1 2 inform B-seat
|
||||
|
||||
# text: Dziękuję
|
||||
# intent: ack
|
||||
# slots:
|
||||
1 Dziękuję ack NoLabel
|
||||
|
||||
# text: przez internet
|
||||
# intent: inform
|
||||
# slots: przezinternet:purchaseType
|
||||
1 przez inform B-purchaseType
|
||||
2 internet inform I-purchaseType
|
||||
|
||||
# text: A jakie są miejsca najbliżej ekranu?
|
||||
# intent: request
|
||||
# slots: najbliżejekranu:seat
|
||||
1 A request NoLabel
|
||||
2 jakie request NoLabel
|
||||
3 są request NoLabel
|
||||
4 miejsca request NoLabel
|
||||
5 najbliżej request B-seat
|
||||
6 ekranu request I-seat
|
||||
7 ? request NoLabel
|
||||
|
||||
# text: Gdzie jest to kino?
|
||||
# intent: request
|
||||
# slots:
|
||||
1 Gdzie request NoLabel
|
||||
2 jest request NoLabel
|
||||
3 to request NoLabel
|
||||
4 kino request NoLabel
|
||||
5 ? request NoLabel
|
||||
|
||||
# text: Chciałbym miejsca najbliżej ekranu
|
||||
# intent: request
|
||||
# slots: najbliżejekranu:seat
|
||||
1 Chciałbym request NoLabel
|
||||
2 miejsca request NoLabel
|
||||
3 najbliżej request B-seat
|
||||
4 ekranu request I-seat
|
||||
|
||||
# text: tak zgadza się
|
||||
# intent: act
|
||||
# slots:
|
||||
1 tak act NoLabel
|
||||
2 zgadza act NoLabel
|
||||
3 się act NoLabel
|
||||
|
||||
# text: rząd 2 miejsca 6,7
|
||||
# intent: inform
|
||||
# slots: 6,7:seat,2:row
|
||||
1 rząd inform NoLabel
|
||||
2 2 inform B-row
|
||||
3 miejsca inform NoLabel
|
||||
4 6,7 inform B-seat
|
||||
|
||||
# text: Co w przypadku gdy się spóźnie?
|
||||
# intent: reqmore
|
||||
# slots:
|
||||
1 Co reqmore NoLabel
|
||||
2 w reqmore NoLabel
|
||||
3 przypadku reqmore NoLabel
|
||||
4 gdy reqmore NoLabel
|
||||
5 się reqmore NoLabel
|
||||
6 spóźnie reqmore NoLabel
|
||||
7 ? reqmore NoLabel
|
||||
|
||||
# text: Rozumiem
|
||||
# intent: ack
|
||||
# slots:
|
||||
1 Rozumiem ack NoLabel
|
||||
|
||||
# text: Dziękuje za obsługe
|
||||
# intent: thankyou
|
||||
# slots:
|
||||
1 Dziękuje thankyou NoLabel
|
||||
2 za thankyou NoLabel
|
||||
3 obsługe thankyou NoLabel
|
||||
|
||||
# text: test@test.pl
|
||||
# intent: inform
|
||||
# slots: test@test.pl:e-mail
|
||||
1 test@test.pl inform B-e-mail
|
||||
|
||||
# text: Bilet na seans
|
||||
# intent: request
|
||||
# slots:
|
||||
1 Bilet request NoLabel
|
||||
2 na request NoLabel
|
||||
3 seans request NoLabel
|
||||
|
||||
# text: Jan Kowalski
|
||||
# intent: inform
|
||||
# slots: JanKowalski:name
|
||||
1 Jan inform B-name
|
||||
2 Kowalski inform I-name
|
||||
|
||||
# text: o czym jest straszny film 10?
|
||||
# intent: request
|
||||
# slots: movie_detail:task
|
||||
1 o request NoLabel
|
||||
2 czym request NoLabel
|
||||
3 jest request NoLabel
|
||||
4 straszny request NoLabel
|
||||
5 film request NoLabel
|
||||
6 10 request NoLabel
|
||||
7 ? request NoLabel
|
||||
|
||||
# text: Jakie są godziny tych seansów?
|
||||
# intent: request
|
||||
# slots:
|
||||
1 Jakie request NoLabel
|
||||
2 są request NoLabel
|
||||
3 godziny request NoLabel
|
||||
4 tych request NoLabel
|
||||
5 seansów request NoLabel
|
||||
6 ? request NoLabel
|
||||
|
||||
# text: Możesz mi podać jakie są najbliższe seanse?
|
||||
# intent: request
|
||||
# slots:
|
||||
1 Możesz request NoLabel
|
||||
2 mi request NoLabel
|
||||
3 podać request NoLabel
|
||||
4 jakie request NoLabel
|
||||
5 są request NoLabel
|
||||
6 najbliższe request NoLabel
|
||||
7 seanse request NoLabel
|
||||
8 ? request NoLabel
|
||||
|
||||
# text: Ostatni
|
||||
# intent: inform
|
||||
# slots: ostatni:row
|
||||
1 Ostatni inform B-row
|
||||
|
||||
# text: Tak
|
||||
# intent: affirm
|
||||
# slots:
|
||||
1 Tak affirm NoLabel
|
||||
|
||||
# text: 1
|
||||
# intent: inform
|
||||
# slots: 1:quantity
|
||||
1 1 inform B-quantity
|
||||
|
||||
# text: daleko od ludzi
|
||||
# intent: null
|
||||
# slots:
|
||||
1 daleko null NoLabel
|
||||
2 od null NoLabel
|
||||
3 ludzi null NoLabel
|
||||
|
||||
# text: poprosze inni ludzie na 14:1313
|
||||
# intent: null
|
||||
# slots:
|
||||
1 poprosze null NoLabel
|
||||
2 inni null NoLabel
|
||||
3 ludzie null NoLabel
|
||||
4 na null NoLabel
|
||||
5 14:1313 null NoLabel
|
||||
|
||||
# text: Dziękuję
|
||||
# intent: bye
|
||||
# slots:
|
||||
1 Dziękuję bye NoLabel
|
||||
|
||||
# text: Chciałbym kupić bilet na NajlepszaNAzwaFilmu
|
||||
# intent: inform
|
||||
# slots: book:task,NajlepszaNAzwaFilmu:movie
|
||||
1 Chciałbym inform NoLabel
|
||||
2 kupić inform NoLabel
|
||||
3 bilet inform NoLabel
|
||||
4 na inform NoLabel
|
||||
5 NajlepszaNAzwaFilmu inform B-movie
|
||||
|
||||
# text: Dzień dobry!
|
||||
# intent: hello
|
||||
# slots:
|
||||
1 Dzień hello NoLabel
|
||||
2 dobry hello NoLabel
|
||||
3 ! hello NoLabel
|
||||
|
||||
# text: A jest ulga dla zwierząt?
|
||||
# intent: reqmore
|
||||
# slots:
|
||||
1 A reqmore NoLabel
|
||||
2 jest reqmore NoLabel
|
||||
3 ulga reqmore NoLabel
|
||||
4 dla reqmore NoLabel
|
||||
5 zwierząt reqmore NoLabel
|
||||
6 ? reqmore NoLabel
|
||||
|
||||
# text: No dobła, niech będzie
|
||||
# intent: ack affirm
|
||||
# slots:
|
||||
1 No ack_affirm NoLabel
|
||||
2 dobła ack_affirm NoLabel
|
||||
3 , ack_affirm NoLabel
|
||||
4 niech ack_affirm NoLabel
|
||||
5 będzie ack_affirm NoLabel
|
||||
|
||||
# text: A co macie
|
||||
# intent: request
|
||||
# slots:
|
||||
1 A request NoLabel
|
||||
2 co request NoLabel
|
||||
3 macie request NoLabel
|
||||
|
||||
# text: to na dzisiaj na śmirc na nilu
|
||||
# intent: inform
|
||||
# slots: śmircnanilu:movie,dzisiaj:date
|
||||
1 to inform NoLabel
|
||||
2 na inform NoLabel
|
||||
3 dzisiaj inform B-date
|
||||
4 na inform NoLabel
|
||||
5 śmirc inform B-movie
|
||||
6 na inform I-movie
|
||||
7 nilu inform I-movie
|
||||
|
||||
# text: przed ostatnim
|
||||
# intent: inform
|
||||
# slots: 10:seat_row
|
||||
1 przed inform NoLabel
|
||||
2 ostatnim inform NoLabel
|
||||
|
||||
# text: Chciałbym kupić bilet
|
||||
# intent: inform
|
||||
# slots: book:task
|
||||
1 Chciałbym inform NoLabel
|
||||
2 kupić inform NoLabel
|
||||
3 bilet inform NoLabel
|
||||
|
||||
# text: wygodne
|
||||
# intent: null
|
||||
# slots:
|
||||
1 wygodne null NoLabel
|
||||
|
||||
# text: 19:30
|
||||
# intent: inform
|
||||
# slots: 19:30:hour
|
||||
1 19:30 inform B-hour
|
||||
|
||||
# text: Jakie płatności przyjmujecie?
|
||||
# intent: request
|
||||
# slots:
|
||||
1 Jakie request NoLabel
|
||||
2 płatności request NoLabel
|
||||
3 przyjmujecie request NoLabel
|
||||
4 ? request NoLabel
|
||||
|
||||
# text: Dziękuję systemie
|
||||
# intent: thankyou
|
||||
# slots:
|
||||
1 Dziękuję thankyou NoLabel
|
||||
2 systemie thankyou NoLabel
|
||||
|
||||
# text: 22
|
||||
# intent: null
|
||||
# slots:
|
||||
1 22 null NoLabel
|
||||
|
||||
# text: Tak
|
||||
# intent: affirm
|
||||
# slots:
|
||||
1 Tak affirm NoLabel
|
||||
|
||||
# text: pierwszy rząd
|
||||
# intent: inform
|
||||
# slots: pierwszy:row
|
||||
1 pierwszy inform B-row
|
||||
2 rząd inform NoLabel
|
||||
|
||||
# text: 2
|
||||
# intent: inform
|
||||
# slots: 2:quantity
|
||||
1 2 inform B-quantity
|
||||
|
||||
# text: Dzień dobry
|
||||
# intent: hello
|
||||
# slots:
|
||||
1 Dzień hello NoLabel
|
||||
2 dobry hello NoLabel
|
||||
|
||||
# text: dzień dobry
|
||||
# intent: hello
|
||||
# slots:
|
||||
1 dzień hello NoLabel
|
||||
2 dobry hello NoLabel
|
||||
|
||||
# text: z tyłu, na środku (aby ekran był centralnie widoczny)
|
||||
# intent: inform
|
||||
# slots:
|
||||
1 z inform NoLabel
|
||||
2 tyłu inform NoLabel
|
||||
3 , inform NoLabel
|
||||
4 na inform NoLabel
|
||||
5 środku inform NoLabel
|
||||
6 ( inform NoLabel
|
||||
7 aby inform NoLabel
|
||||
8 ekran inform NoLabel
|
||||
9 był inform NoLabel
|
||||
10 centralnie inform NoLabel
|
||||
11 widoczny inform NoLabel
|
||||
12 ) inform NoLabel
|
||||
|
||||
# text: Martyna Druminska mdruminska074@gmail.com
|
||||
# intent: inform
|
||||
# slots: mdruminska074@gmail.com:e-mail,MartynaDruminska:name
|
||||
1 Martyna inform B-name
|
||||
2 Druminska inform I-name
|
||||
3 mdruminska074@gmail.com inform B-e-mail
|
||||
|
||||
# text: Dzień dobry
|
||||
# intent: hello
|
||||
# slots:
|
||||
1 Dzień hello NoLabel
|
||||
2 dobry hello NoLabel
|
||||
|
||||
# text: Chciałbym wypożyczyć film
|
||||
# intent: null
|
||||
# slots:
|
||||
1 Chciałbym null NoLabel
|
||||
2 wypożyczyć null NoLabel
|
||||
3 film null NoLabel
|
||||
|
||||
# text: Zgadza się
|
||||
# intent: act
|
||||
# slots:
|
||||
1 Zgadza act NoLabel
|
||||
2 się act NoLabel
|
||||
|
||||
# text: Nie, rozmyśliłam się.
|
||||
# intent: deny
|
||||
# slots: cancelbook:task
|
||||
1 Nie deny NoLabel
|
||||
2 , deny NoLabel
|
||||
3 rozmyśliłam deny NoLabel
|
||||
4 się deny NoLabel
|
||||
5 . deny NoLabel
|
||||
|
||||
# text: O, bilet kupię zatem
|
||||
# intent: inform
|
||||
# slots: buy:task
|
||||
1 O inform NoLabel
|
||||
2 , inform NoLabel
|
||||
3 bilet inform NoLabel
|
||||
4 kupię inform NoLabel
|
||||
5 zatem inform NoLabel
|
||||
|
||||
# text: I J
|
||||
# intent: inform
|
||||
# slots: IJ:row
|
||||
1 I inform B-row
|
||||
2 J inform I-row
|
||||
|
||||
# text: normalny i ulgowy
|
||||
# intent: inform
|
||||
# slots: normalny:tickettype,ulgowy:tickettype
|
||||
1 normalny inform B-tickettype
|
||||
2 i inform NoLabel
|
||||
3 ulgowy inform B-tickettype
|
||||
|
||||
# text: 7 normalnych i 5 ulgowych\
|
||||
# intent: inform
|
||||
# slots: 7:quantity,normalnych:tickettype,5:quantity,ulgowych:tickettype
|
||||
1 7 inform B-quantity
|
||||
2 normalnych inform B-tickettype
|
||||
3 i inform NoLabel
|
||||
4 5 inform B-quantity
|
||||
5 ulgowych\ inform NoLabel
|
||||
|
||||
# text: Dzień dobry
|
||||
# intent: hello
|
||||
# slots:
|
||||
1 Dzień hello NoLabel
|
||||
2 dobry hello NoLabel
|
||||
|
||||
# text: rząd 10
|
||||
# intent: inform
|
||||
# slots: 10:row
|
||||
1 rząd inform NoLabel
|
||||
2 10 inform B-row
|
||||
|
||||
# text: Czy gracie jakieś komedie?
|
||||
# intent: request
|
||||
# slots: komedie:genre
|
||||
1 Czy request NoLabel
|
||||
2 gracie request NoLabel
|
||||
3 jakieś request NoLabel
|
||||
4 komedie request B-genre
|
||||
5 ? request NoLabel
|
||||
|
||||
# text: Jakie są rodzaje biletów?
|
||||
# intent: request
|
||||
# slots:
|
||||
1 Jakie request NoLabel
|
||||
2 są request NoLabel
|
||||
3 rodzaje request NoLabel
|
||||
4 biletów request NoLabel
|
||||
5 ? request NoLabel
|
||||
|
||||
# text: Cześć
|
||||
# intent: hello
|
||||
# slots:
|
||||
1 Cześć hello NoLabel
|
||||
|
||||
# text: 2 bilety
|
||||
# intent: inform
|
||||
# slots: 2:quantity
|
||||
1 2 inform B-quantity
|
||||
2 bilety inform NoLabel
|
||||
|
||||
# text: Dzień dobry
|
||||
# intent: hello
|
||||
# slots:
|
||||
1 Dzień hello NoLabel
|
||||
2 dobry hello NoLabel
|
||||
|
||||
# text: dobrze
|
||||
# intent: affirm
|
||||
# slots:
|
||||
1 dobrze affirm NoLabel
|
||||
|
||||
# text: Chciałbym dowiedzieć się czegoś o aktualnym repertuarze
|
||||
# intent: request
|
||||
# slots: closestscreenings:task
|
||||
1 Chciałbym request NoLabel
|
||||
2 dowiedzieć request NoLabel
|
||||
3 się request NoLabel
|
||||
4 czegoś request NoLabel
|
||||
5 o request NoLabel
|
||||
6 aktualnym request NoLabel
|
||||
7 repertuarze request NoLabel
|
||||
|
||||
# text: Jan Kowalski, kowalski69@gmail.com
|
||||
# intent: inform
|
||||
# slots: kowalski69@gmail.com:e-mail,JanKowalski:name
|
||||
1 Jan inform B-name
|
||||
2 Kowalski inform I-name
|
||||
3 , inform NoLabel
|
||||
4 kowalski69@gmail.com inform B-e-mail
|
||||
|
2231
data/train+test-pl.conllu
Normal file
2231
data/train+test-pl.conllu
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
58
dialogue_system.py
Normal file
58
dialogue_system.py
Normal file
@ -0,0 +1,58 @@
|
||||
from modules.NLU import NLU
|
||||
from modules.DST import DST
|
||||
#from modules.DP import DP
|
||||
#from modules.NLG import NLG
|
||||
import re
|
||||
|
||||
def format_prediction(prediction, intent):
|
||||
out_list = []
|
||||
for idx, tup in enumerate(prediction):
|
||||
if tup[1][0] == 'B':
|
||||
slot_list = [intent, 'Cinema', tup[1][2:], tup[0]]
|
||||
for tup in prediction[idx + 1:]:
|
||||
if tup[1][0] != 'I':
|
||||
break
|
||||
else:
|
||||
slot_list[3] += ' ' + tup[0]
|
||||
out_list.append(slot_list)
|
||||
for slot in out_list:
|
||||
slot[3] = re.sub("^[!\"#$%&\'()*+,.;:<=>?\[\]^_`{|}~]+", '', slot[3])
|
||||
slot[3] = re.sub("[!\"#$%&\'()*+,.;:<=>?\[\]^_`{|}~]+$", '', slot[3])
|
||||
return out_list
|
||||
|
||||
def main():
|
||||
nlu = NLU()
|
||||
dst = DST()
|
||||
#dp = DP()
|
||||
#nlg = NLG()
|
||||
|
||||
nlu.train_slot_model('data/train+test-pl.conllu', 'data/train+test-pl.conllu')
|
||||
nlu.train_intent_model('data/NLU_data_intent')
|
||||
# nlu.load_slot_model('slot-model-pl')
|
||||
# nlu.load_intent_model('intent-model-pl')
|
||||
|
||||
print('===========================================')
|
||||
print('### By otrzymać pomoc, wpisz /pomoc ###')
|
||||
print('### By zakończyć rozmowę, wpisz /koniec ###')
|
||||
print('Witaj, jestem Usher - system do rezerwacji biletów kinowych. W czym mogę Ci pomóc?')
|
||||
|
||||
# WIP
|
||||
while True:
|
||||
user_input = input('> ')
|
||||
if user_input == '/pomoc':
|
||||
print('TEKST_POMOCY_WIP')
|
||||
elif user_input == '/koniec':
|
||||
print('Dziękuję za skorzystanie z moich usług. Miłego dnia!')
|
||||
break
|
||||
else:
|
||||
slots = nlu.predict_slots(user_input)
|
||||
intent = nlu.predict_intent(user_input)
|
||||
formatted_prediction = format_prediction(slots, intent)
|
||||
print(formatted_prediction) # NLU output
|
||||
dst.update(formatted_prediction)
|
||||
print(dst.state) # DST output
|
||||
#DP, NLG...
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
71
modules/DST.py
Normal file
71
modules/DST.py
Normal file
@ -0,0 +1,71 @@
|
||||
from modules.dialogue_state import default_state
|
||||
import re
|
||||
|
||||
|
||||
# Monitor stanu dialogu
|
||||
class DST:
|
||||
def __init__(self):
|
||||
self.state = default_state()
|
||||
|
||||
def txt2num(self, text):
|
||||
mapping = {'jeden': '1', 'dwa': '2', 'trzy': '3', 'cztery': '4', 'pięć': '5', 'sześć': '6', 'siedem': '7', 'osiem': '8', 'dziewięć': '9', 'dziesięć': '10'}
|
||||
for key in mapping:
|
||||
if key in text:
|
||||
text = text.replace(key, mapping[key])
|
||||
return text
|
||||
|
||||
def update(self, user_act=None):
|
||||
for intent, domain, slot, value in user_act:
|
||||
domain = domain.lower()
|
||||
intent = intent.lower()
|
||||
slot = slot.lower()
|
||||
|
||||
k = slot
|
||||
|
||||
if intent == 'inform':
|
||||
|
||||
if k is None:
|
||||
continue
|
||||
|
||||
domain_dic = self.state['belief_state'][domain]
|
||||
|
||||
if k in domain_dic['semi']:
|
||||
if k == 'quantity':
|
||||
value = self.txt2num(value)
|
||||
try:
|
||||
self.state['belief_state'][domain]['semi'][k] += int(re.sub('[^0-9]', '', value))
|
||||
except:
|
||||
pass
|
||||
elif k == 'tickettype':
|
||||
self.state['belief_state'][domain]['semi'][k] += ' ' + value
|
||||
else:
|
||||
self.state['belief_state'][domain]['semi'][k] = value
|
||||
elif k in domain_dic['book']:
|
||||
if k == 'seat' or k == 'row':
|
||||
self.state['belief_state'][domain]['book'][k] += ' ' + value
|
||||
else:
|
||||
self.state['belief_state'][domain]['book'][k] = value
|
||||
|
||||
if intent == 'request':
|
||||
|
||||
if domain not in self.state['request_state']:
|
||||
self.state['request_state'][domain] = {}
|
||||
if k not in self.state['request_state'][domain]:
|
||||
self.state['request_state'][domain][k] = 0
|
||||
|
||||
self.state['user_action'].append([intent, domain, slot, value])
|
||||
|
||||
return self.state
|
||||
|
||||
def init_session(self):
|
||||
self.state = default_state()
|
||||
|
||||
|
||||
# Przykładowe uruchomienie dla kodu w izolacji
|
||||
"""
|
||||
dst = DST()
|
||||
print(dst.state)
|
||||
|
||||
dst.update([['hello_inform', 'Cinema', 'Price', '15 zł'], ['Inform', 'Cinema', 'Movie', 'Batman']])
|
||||
print(dst.state)
|
||||
"""
|
184
modules/NLU.py
Normal file
184
modules/NLU.py
Normal file
@ -0,0 +1,184 @@
|
||||
import re
|
||||
from conllu import parse_incr
|
||||
from flair.data import Corpus, Sentence, Token
|
||||
from flair.datasets import SentenceDataset
|
||||
from flair.embeddings import StackedEmbeddings
|
||||
from flair.models import SequenceTagger
|
||||
from flair.trainers import ModelTrainer
|
||||
import random
|
||||
import torch
|
||||
from flair.datasets import CSVClassificationCorpus
|
||||
from flair.embeddings import WordEmbeddings, FlairEmbeddings, CharacterEmbeddings, DocumentRNNEmbeddings
|
||||
from flair.models import TextClassifier
|
||||
import os
|
||||
|
||||
|
||||
class NLU:
|
||||
def __init__(self):
|
||||
self.slot_model = None
|
||||
self.intent_model = None
|
||||
|
||||
def nolabel2o(self, line, i):
|
||||
return 'O' if line[i] == 'NoLabel' else line[i]
|
||||
|
||||
def conllu2flair(self, sentences, label=None):
|
||||
fsentences = []
|
||||
for sentence in sentences:
|
||||
fsentence = Sentence()
|
||||
for token in sentence:
|
||||
ftoken = Token(token['form'])
|
||||
if label:
|
||||
ftoken.add_tag(label, token[label])
|
||||
fsentence.add_token(ftoken)
|
||||
fsentences.append(fsentence)
|
||||
return SentenceDataset(fsentences)
|
||||
|
||||
def load_slot_model(self, model_path):
|
||||
try:
|
||||
self.slot_model = SequenceTagger.load(f'{model_path}/best-model.pt')
|
||||
except:
|
||||
self.slot_model = SequenceTagger.load(f'{model_path}/final-model.pt')
|
||||
|
||||
def train_slot_model(self, train_path, test_path):
|
||||
fields = ['id', 'form', 'frame', 'slot']
|
||||
|
||||
with open(train_path, encoding='utf-8') as trainfile:
|
||||
trainset = list(parse_incr(trainfile, fields=fields, field_parsers={'slot': self.nolabel2o}))
|
||||
with open(test_path, encoding='utf-8') as testfile:
|
||||
testset = list(parse_incr(testfile, fields=fields, field_parsers={'slot': self.nolabel2o}))
|
||||
|
||||
random.seed(42)
|
||||
torch.manual_seed(42)
|
||||
|
||||
if torch.cuda.is_available():
|
||||
torch.cuda.manual_seed(0)
|
||||
torch.cuda.manual_seed_all(0)
|
||||
torch.backends.cudnn.enabled = False
|
||||
torch.backends.cudnn.benchmark = False
|
||||
torch.backends.cudnn.deterministic = True
|
||||
|
||||
corpus = Corpus(train=self.conllu2flair(trainset, 'slot'), test=self.conllu2flair(testset, 'slot'))
|
||||
tag_dictionary = corpus.make_tag_dictionary(tag_type='slot')
|
||||
|
||||
embedding_types = [
|
||||
WordEmbeddings('pl'),
|
||||
FlairEmbeddings('pl-forward'),
|
||||
FlairEmbeddings('pl-backward'),
|
||||
CharacterEmbeddings(),
|
||||
]
|
||||
|
||||
embeddings = StackedEmbeddings(embeddings=embedding_types)
|
||||
tagger = SequenceTagger(hidden_size=512, embeddings=embeddings,
|
||||
tag_dictionary=tag_dictionary,
|
||||
tag_type='slot', use_crf=True)
|
||||
trainer = ModelTrainer(tagger, corpus)
|
||||
|
||||
dirpath = 'slot-model-pl'
|
||||
|
||||
if not os.path.isdir(dirpath):
|
||||
trainer.train(dirpath,
|
||||
learning_rate=0.1,
|
||||
mini_batch_size=32,
|
||||
max_epochs=20,
|
||||
train_with_dev=True)
|
||||
|
||||
self.load_slot_model(dirpath)
|
||||
|
||||
# Tworzenie osobnego pliku z metrykami dla modelu
|
||||
log_file = open('slot-model-pl/training.log', encoding='utf-8')
|
||||
log_lines = log_file.readlines()
|
||||
log_file.close()
|
||||
with open('slot-model-pl/training.log', encoding='utf-8') as log_file, open('nlu_evaluation.txt', 'w',
|
||||
encoding='utf-8') \
|
||||
as eval_file:
|
||||
for num, line in enumerate(log_file):
|
||||
if line == 'Results:\n':
|
||||
lines_to_write_start = num
|
||||
eval_file.write('*** This evaluation file was generated automatically by the training script ***\n\n')
|
||||
for line in log_lines[lines_to_write_start:]:
|
||||
eval_file.write(line)
|
||||
|
||||
def predict_slots(self, sentence):
|
||||
sentence = sentence.split()
|
||||
csentence = [{'form': word} for word in sentence]
|
||||
fsentence = self.conllu2flair([csentence])[0]
|
||||
self.slot_model.predict(fsentence)
|
||||
return [(token, ftoken.get_tag('slot').value) for token, ftoken in zip(sentence, fsentence)]
|
||||
|
||||
def load_intent_model(self, model_path):
|
||||
try:
|
||||
self.intent_model = TextClassifier.load(f'{model_path}/best-model.pt')
|
||||
except:
|
||||
self.intent_model = TextClassifier.load(f'{model_path}/final-model.pt')
|
||||
|
||||
def train_intent_model(self, data_path):
|
||||
column_name_map = {0: "text", 1: "label_intent"}
|
||||
corpus = CSVClassificationCorpus(data_path,
|
||||
column_name_map,
|
||||
skip_header=False,
|
||||
delimiter='\t', label_type='label_intent'
|
||||
)
|
||||
label_dict = corpus.make_label_dictionary(label_type='label_intent')
|
||||
|
||||
word_embeddings = [
|
||||
WordEmbeddings('pl'),
|
||||
FlairEmbeddings('polish-forward'),
|
||||
FlairEmbeddings('polish-backward'),
|
||||
CharacterEmbeddings(),
|
||||
]
|
||||
|
||||
document_embeddings = DocumentRNNEmbeddings(word_embeddings, hidden_size=512)
|
||||
classifier = TextClassifier(document_embeddings, label_dictionary=label_dict, label_type='label_intent')
|
||||
trainer = ModelTrainer(classifier, corpus)
|
||||
|
||||
dirpath = 'intent-model-pl'
|
||||
|
||||
if not os.path.isdir(dirpath):
|
||||
trainer.train(dirpath,
|
||||
learning_rate=0.1,
|
||||
mini_batch_size=32,
|
||||
anneal_factor=0.5,
|
||||
patience=5,
|
||||
max_epochs=20)
|
||||
|
||||
self.load_intent_model(dirpath)
|
||||
|
||||
def predict_intent(self, sentence):
|
||||
sentence = Sentence(sentence)
|
||||
self.intent_model.predict(sentence)
|
||||
label_text = sentence.labels[0].value
|
||||
return label_text
|
||||
|
||||
|
||||
def format_prediction(prediction, intent):
|
||||
out_list = []
|
||||
for idx, tup in enumerate(prediction):
|
||||
if tup[1][0] == 'B':
|
||||
slot_list = [intent, 'Cinema', tup[1][2:], tup[0]]
|
||||
for tup in prediction[idx + 1:]:
|
||||
if tup[1][0] != 'I':
|
||||
break
|
||||
else:
|
||||
slot_list[3] += ' ' + tup[0]
|
||||
out_list.append(slot_list)
|
||||
for slot in out_list:
|
||||
slot[3] = re.sub("^[!\"#$%&\'()*+,.;:<=>?\[\]^_`{|}~]+", '', slot[3])
|
||||
slot[3] = re.sub("[!\"#$%&\'()*+,.;:<=>?\[\]^_`{|}~]+$", '', slot[3])
|
||||
return out_list
|
||||
|
||||
|
||||
# Testy
|
||||
"""
|
||||
nlu = NLU()
|
||||
# raz:
|
||||
nlu.train_slot_model('../data/train+test-pl.conllu', '../data/train+test-pl.conllu')
|
||||
nlu.train_intent_model('../data/intent_data')
|
||||
# potem:
|
||||
# nlu.load_slot_model('slot-model-pl')
|
||||
# nlu.load_intent_model('intent-model-pl')
|
||||
sentence = "3 studenckie, miejsca 2-5, rząd 7"
|
||||
slots = nlu.predict_slots(sentence)
|
||||
intent = nlu.predict_intent(sentence)
|
||||
formatted_prediction = format_prediction(slots, intent)
|
||||
print(formatted_prediction)
|
||||
"""
|
BIN
modules/__pycache__/DP.cpython-38.pyc
Normal file
BIN
modules/__pycache__/DP.cpython-38.pyc
Normal file
Binary file not shown.
BIN
modules/__pycache__/DST.cpython-38.pyc
Normal file
BIN
modules/__pycache__/DST.cpython-38.pyc
Normal file
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user