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 = [intent.strip() for intent in intents]
|
||||||
intents = ' '.join(intents)
|
intents = ' '.join(intents)
|
||||||
return intents
|
return intents
|
||||||
|
"""
|
||||||
def get_slots(intent_row):
|
def get_slots(intent_row):
|
||||||
intent_row = intent_row.split('&')
|
intent_row = intent_row.split('&')
|
||||||
intent_row = [intent.strip() for intent in intent_row]
|
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.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] # ?
|
slots = [[slot[0].split()[-1], slot[1]] if ',' in slot[0] else slot for slot in slots] # ?
|
||||||
return 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 get_tokens(text, intents, slots):
|
||||||
def tokenize(text):
|
def tokenize(text):
|
||||||
email = re.search("[^ ]+@[^ ]+", text)
|
email = re.search("[^ ]+@[^ ,]+", text)
|
||||||
if email:
|
if email:
|
||||||
email_address = email.group()
|
email_address = email.group()
|
||||||
text = text.replace(email_address, '@')
|
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