add intent classifier
This commit is contained in:
parent
184bc462e0
commit
4dc305507e
4
.gitignore
vendored
4
.gitignore
vendored
@ -215,4 +215,6 @@ fabric.properties
|
|||||||
|
|
||||||
slot-model
|
slot-model
|
||||||
|
|
||||||
ConvLab-2
|
ConvLab-2
|
||||||
|
|
||||||
|
resources
|
@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
- uczenie modelu realizowane jest w zmodyfikowanym pliku z zajęć **lab/08-parsing-semantyczny-uczenie(zmodyfikowany).ipynb**
|
- uczenie modelu realizowane jest w zmodyfikowanym pliku z zajęć **lab/08-parsing-semantyczny-uczenie(zmodyfikowany).ipynb**
|
||||||
|
|
||||||
- dane uczące, wygenerowane są automatycznie, na podstawie zebranych wcześniej dialogów, przez regułowy skrypt **tasks/zad8/pl/annotate.py**, a następnie poprawione ręcznie. Dane znajdują sie w dwóch plikach **tasks/zad8/pl/test.conllu** oraz **tasks/zad8/pl/train.conllu**
|
- dane uczące, generowane są automatycznie, na podstawie zebranych wcześniej dialogów, przez regułowy skrypt **tasks/zad8/pl/annotate.py**, a następnie poprawione ręcznie. Dane znajdują sie w dwóch plikach **tasks/zad8/pl/test.conllu** oraz **tasks/zad8/pl/train.conllu**
|
||||||
|
|
||||||
- model wykorzystywany jest w klasie z pliku **src/components/NLU.py**
|
- model wykorzystywany jest w klasie z pliku **src/components/NLU.py**
|
||||||
|
|
||||||
@ -12,6 +12,8 @@
|
|||||||
|
|
||||||
- aby porozmawiać z systemem należy uruchomić wszystkie komórki pliku **lab/08-parsing-semantyczny-uczenie(zmodyfikowany).ipynb**, w celu nauczenia modelu, po ich wykonaniu należy uruchomić pythonowy skrypt **src/dialogue_system.py**
|
- aby porozmawiać z systemem należy uruchomić wszystkie komórki pliku **lab/08-parsing-semantyczny-uczenie(zmodyfikowany).ipynb**, w celu nauczenia modelu, po ich wykonaniu należy uruchomić pythonowy skrypt **src/dialogue_system.py**
|
||||||
|
|
||||||
|
- dodananie modelu służącego do klasyfikacji wypowiedzi użytkownika, rozdzielenie zadań tagowania slotow oraz klasyfikacji wypowiedzi użytkownika do dwóch niezależnych medeli
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Zadanie 9/10 DST i DP
|
## Zadanie 9/10 DST i DP
|
||||||
|
@ -80,7 +80,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": 1,
|
"execution_count": 7,
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [
|
"outputs": [
|
||||||
{
|
{
|
||||||
@ -249,12 +249,12 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": 5,
|
"execution_count": 29,
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [],
|
"outputs": [],
|
||||||
"source": [
|
"source": [
|
||||||
"from flair.data import Corpus, Sentence, Token\n",
|
"from flair.data import Corpus, Sentence, Token\n",
|
||||||
"from flair.datasets import SentenceDataset\n",
|
"from flair.datasets import SentenceDataset, CSVClassificationCorpus\n",
|
||||||
"from flair.embeddings import StackedEmbeddings\n",
|
"from flair.embeddings import StackedEmbeddings\n",
|
||||||
"from flair.embeddings import WordEmbeddings\n",
|
"from flair.embeddings import WordEmbeddings\n",
|
||||||
"from flair.embeddings import CharacterEmbeddings\n",
|
"from flair.embeddings import CharacterEmbeddings\n",
|
||||||
@ -286,7 +286,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": 6,
|
"execution_count": 30,
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [
|
"outputs": [
|
||||||
{
|
{
|
||||||
@ -294,7 +294,7 @@
|
|||||||
"output_type": "stream",
|
"output_type": "stream",
|
||||||
"text": [
|
"text": [
|
||||||
"Corpus: 346 train + 38 dev + 32 test sentences\n",
|
"Corpus: 346 train + 38 dev + 32 test sentences\n",
|
||||||
"Dictionary with 78 tags: <unk>, O, O/reqmore, B-interval/reqmore, I-interval/reqmore, O/inform, B-title/inform, B-date/inform, I-date/inform, B-time/inform, B-quantity/inform, B-area/inform, I-area/inform, B-goal/inform, O/bye, O/hello, O/reqmore inform, B-goal/reqmore inform, I-goal/reqmore inform, B-date/reqmore inform, B-interval/reqmore inform, O/null, O/help, B-goal/reqmore, I-goal/reqmore, B-title/reqmore, B-title/reqmore inform, I-title/reqmore inform, O/ack, O/reqalts\n"
|
"Dictionary with 20 tags: <unk>, O, B-interval, I-interval, B-title, B-date, I-date, B-time, B-quantity, B-area, I-area, B-goal, I-goal, I-title, I-time, I-quantity, B-seats, I-seats, <START>, <STOP>\n"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
@ -320,7 +320,7 @@
|
|||||||
"\n",
|
"\n",
|
||||||
" return SentenceDataset(fsentences)\n",
|
" return SentenceDataset(fsentences)\n",
|
||||||
"\n",
|
"\n",
|
||||||
"corpus = Corpus(train=conllu2flair(trainset, 'slot', \"frame\"), test=conllu2flair(testset, 'slot', \"frame\"))\n",
|
"corpus = Corpus(train=conllu2flair(trainset, 'slot'), test=conllu2flair(testset, 'slot'))\n",
|
||||||
"print(corpus)\n",
|
"print(corpus)\n",
|
||||||
"tag_dictionary = corpus.make_tag_dictionary(tag_type='slot')\n",
|
"tag_dictionary = corpus.make_tag_dictionary(tag_type='slot')\n",
|
||||||
"print(tag_dictionary)"
|
"print(tag_dictionary)"
|
||||||
@ -335,7 +335,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": 7,
|
"execution_count": 31,
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [],
|
"outputs": [],
|
||||||
"source": [
|
"source": [
|
||||||
@ -418,7 +418,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": 9,
|
"execution_count": 44,
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [],
|
"outputs": [],
|
||||||
"source": [
|
"source": [
|
||||||
@ -480,14 +480,14 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": 10,
|
"execution_count": 45,
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [
|
"outputs": [
|
||||||
{
|
{
|
||||||
"name": "stdout",
|
"name": "stdout",
|
||||||
"output_type": "stream",
|
"output_type": "stream",
|
||||||
"text": [
|
"text": [
|
||||||
"2022-05-22 15:25:19,970 loading file slot-model/final-model.pt\n"
|
"2022-05-30 22:30:48,788 loading file slot-model/final-model.pt\n"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
@ -505,16 +505,16 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": 11,
|
"execution_count": 46,
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [
|
"outputs": [
|
||||||
{
|
{
|
||||||
"data": {
|
"data": {
|
||||||
"text/plain": [
|
"text/plain": [
|
||||||
"[('co', 'O/reqmore'), ('gracie', 'O/reqmore'), ('obecnie', 'O/reqmore')]"
|
"[('co', 'O'), ('gracie', 'O'), ('obecnie', 'O')]"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"execution_count": 11,
|
"execution_count": 46,
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"output_type": "execute_result"
|
"output_type": "execute_result"
|
||||||
}
|
}
|
||||||
@ -526,7 +526,7 @@
|
|||||||
" model.predict(fsentence)\n",
|
" model.predict(fsentence)\n",
|
||||||
" return [(token, ftoken.get_tag('slot').value) for token, ftoken in zip(sentence, fsentence)]\n",
|
" return [(token, ftoken.get_tag('slot').value) for token, ftoken in zip(sentence, fsentence)]\n",
|
||||||
"\n",
|
"\n",
|
||||||
"predict(model, 'co gracie obecnie'.split())"
|
"predict(model, 'poprosze bilet na batman'.split())"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -569,19 +569,16 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": 2,
|
"execution_count": 43,
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [
|
"outputs": [
|
||||||
{
|
{
|
||||||
"ename": "NameError",
|
"name": "stderr",
|
||||||
"evalue": "name 'testset' is not defined",
|
"output_type": "stream",
|
||||||
"output_type": "error",
|
"text": [
|
||||||
"traceback": [
|
"\n",
|
||||||
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
|
"KeyboardInterrupt\n",
|
||||||
"\u001b[1;31mNameError\u001b[0m Traceback (most recent call last)",
|
"\n"
|
||||||
"\u001b[1;32mc:\\Develop\\wmi\\AITECH\\sem1\\Systemy dialogowe\\lab\\08-parsing-semantyczny-uczenie(zmodyfikowany).ipynb Cell 25'\u001b[0m in \u001b[0;36m<cell line: 40>\u001b[1;34m()\u001b[0m\n\u001b[0;32m <a href='vscode-notebook-cell:/c%3A/Develop/wmi/AITECH/sem1/Systemy%20dialogowe/lab/08-parsing-semantyczny-uczenie%28zmodyfikowany%29.ipynb#ch0000024?line=36'>37</a>\u001b[0m \u001b[39mprint\u001b[39m(\u001b[39m\"\u001b[39m\u001b[39mrecall: \u001b[39m\u001b[39m\"\u001b[39m, recallScore)\n\u001b[0;32m <a href='vscode-notebook-cell:/c%3A/Develop/wmi/AITECH/sem1/Systemy%20dialogowe/lab/08-parsing-semantyczny-uczenie%28zmodyfikowany%29.ipynb#ch0000024?line=37'>38</a>\u001b[0m \u001b[39mprint\u001b[39m(\u001b[39m\"\u001b[39m\u001b[39mf1: \u001b[39m\u001b[39m\"\u001b[39m, f1Score)\n\u001b[1;32m---> <a href='vscode-notebook-cell:/c%3A/Develop/wmi/AITECH/sem1/Systemy%20dialogowe/lab/08-parsing-semantyczny-uczenie%28zmodyfikowany%29.ipynb#ch0000024?line=39'>40</a>\u001b[0m \u001b[39meval\u001b[39;49m()\n",
|
|
||||||
"\u001b[1;32mc:\\Develop\\wmi\\AITECH\\sem1\\Systemy dialogowe\\lab\\08-parsing-semantyczny-uczenie(zmodyfikowany).ipynb Cell 25'\u001b[0m in \u001b[0;36meval\u001b[1;34m()\u001b[0m\n\u001b[0;32m <a href='vscode-notebook-cell:/c%3A/Develop/wmi/AITECH/sem1/Systemy%20dialogowe/lab/08-parsing-semantyczny-uczenie%28zmodyfikowany%29.ipynb#ch0000024?line=13'>14</a>\u001b[0m fp \u001b[39m=\u001b[39m \u001b[39m0\u001b[39m\n\u001b[0;32m <a href='vscode-notebook-cell:/c%3A/Develop/wmi/AITECH/sem1/Systemy%20dialogowe/lab/08-parsing-semantyczny-uczenie%28zmodyfikowany%29.ipynb#ch0000024?line=14'>15</a>\u001b[0m fn \u001b[39m=\u001b[39m \u001b[39m0\u001b[39m\n\u001b[1;32m---> <a href='vscode-notebook-cell:/c%3A/Develop/wmi/AITECH/sem1/Systemy%20dialogowe/lab/08-parsing-semantyczny-uczenie%28zmodyfikowany%29.ipynb#ch0000024?line=15'>16</a>\u001b[0m sentences \u001b[39m=\u001b[39m [sentence \u001b[39mfor\u001b[39;00m sentence \u001b[39min\u001b[39;00m testset]\n\u001b[0;32m <a href='vscode-notebook-cell:/c%3A/Develop/wmi/AITECH/sem1/Systemy%20dialogowe/lab/08-parsing-semantyczny-uczenie%28zmodyfikowany%29.ipynb#ch0000024?line=16'>17</a>\u001b[0m \u001b[39mfor\u001b[39;00m sentence \u001b[39min\u001b[39;00m sentences:\n\u001b[0;32m <a href='vscode-notebook-cell:/c%3A/Develop/wmi/AITECH/sem1/Systemy%20dialogowe/lab/08-parsing-semantyczny-uczenie%28zmodyfikowany%29.ipynb#ch0000024?line=17'>18</a>\u001b[0m \u001b[39m# get sentence as terms list\u001b[39;00m\n\u001b[0;32m <a href='vscode-notebook-cell:/c%3A/Develop/wmi/AITECH/sem1/Systemy%20dialogowe/lab/08-parsing-semantyczny-uczenie%28zmodyfikowany%29.ipynb#ch0000024?line=18'>19</a>\u001b[0m termsList \u001b[39m=\u001b[39m [w[\u001b[39m\"\u001b[39m\u001b[39mform\u001b[39m\u001b[39m\"\u001b[39m] \u001b[39mfor\u001b[39;00m w \u001b[39min\u001b[39;00m sentence]\n",
|
|
||||||
"\u001b[1;31mNameError\u001b[0m: name 'testset' is not defined"
|
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
@ -608,7 +605,9 @@
|
|||||||
" # predict tags\n",
|
" # predict tags\n",
|
||||||
" predTags = [tag[1] for tag in predict(model, termsList)]\n",
|
" predTags = [tag[1] for tag in predict(model, termsList)]\n",
|
||||||
" \n",
|
" \n",
|
||||||
" expTags = [token[\"slot\"] + \"/\" + token[\"frame\"] for token in sentence]\n",
|
" # expTags = [token[\"slot\"] + \"/\" + token[\"frame\"] for token in sentence]\n",
|
||||||
|
" expTags = [token[\"slot\"] for token in sentence]\n",
|
||||||
|
"\n",
|
||||||
" for i in range(len(predTags)):\n",
|
" for i in range(len(predTags)):\n",
|
||||||
" if (expTags[i][0] == \"O\" and expTags[i] != predTags[i]):\n",
|
" if (expTags[i][0] == \"O\" and expTags[i] != predTags[i]):\n",
|
||||||
" fp += 1\n",
|
" fp += 1\n",
|
||||||
@ -642,6 +641,191 @@
|
|||||||
" 4. Ashish Vaswani, Noam Shazeer, Niki Parmar, Jakob Uszkoreit, Llion Jones, Aidan N. Gomez, Lukasz Kaiser, Illia Polosukhin, Attention is All you Need, NIPS 2017, pp. 5998-6008, https://arxiv.org/abs/1706.03762\n",
|
" 4. Ashish Vaswani, Noam Shazeer, Niki Parmar, Jakob Uszkoreit, Llion Jones, Aidan N. Gomez, Lukasz Kaiser, Illia Polosukhin, Attention is All you Need, NIPS 2017, pp. 5998-6008, https://arxiv.org/abs/1706.03762\n",
|
||||||
" 5. Alan Akbik, Duncan Blythe, Roland Vollgraf, Contextual String Embeddings for Sequence Labeling, Proceedings of the 27th International Conference on Computational Linguistics, pp. 1638–1649, https://www.aclweb.org/anthology/C18-1139.pdf\n"
|
" 5. Alan Akbik, Duncan Blythe, Roland Vollgraf, Contextual String Embeddings for Sequence Labeling, Proceedings of the 27th International Conference on Computational Linguistics, pp. 1638–1649, https://www.aclweb.org/anthology/C18-1139.pdf\n"
|
||||||
]
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "markdown",
|
||||||
|
"metadata": {},
|
||||||
|
"source": [
|
||||||
|
"### Predykcja aktów mowy użytkownika"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 36,
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"name": "stdout",
|
||||||
|
"output_type": "stream",
|
||||||
|
"text": [
|
||||||
|
"2022-05-30 22:08:33,633 Reading data from ..\\tasks\\zad8\\pl\\dataSentence\n",
|
||||||
|
"2022-05-30 22:08:33,633 Train: ..\\tasks\\zad8\\pl\\dataSentence\\train.tsv\n",
|
||||||
|
"2022-05-30 22:08:33,634 Dev: None\n",
|
||||||
|
"2022-05-30 22:08:33,635 Test: ..\\tasks\\zad8\\pl\\dataSentence\\test.tsv\n",
|
||||||
|
"Corpus: 280 train + 31 dev + 32 test sentences\n"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source": [
|
||||||
|
"def conllu2flair(sentences, label2=None):\n",
|
||||||
|
" fsentences = []\n",
|
||||||
|
"\n",
|
||||||
|
" for sentence in sentences:\n",
|
||||||
|
" fsentence = Sentence()\n",
|
||||||
|
"\n",
|
||||||
|
" for token in sentence:\n",
|
||||||
|
" ftoken = Token(token['form'])\n",
|
||||||
|
"\n",
|
||||||
|
" \n",
|
||||||
|
" if label2:\n",
|
||||||
|
" ftoken.add_tag(label2, token[label2])\n",
|
||||||
|
" \n",
|
||||||
|
" fsentence.add_token(ftoken)\n",
|
||||||
|
"\n",
|
||||||
|
" fsentences.append(fsentence)\n",
|
||||||
|
"\n",
|
||||||
|
" return SentenceDataset(fsentences)\n",
|
||||||
|
"\n",
|
||||||
|
"trainPath = \"../tasks/zad8/pl/dataSentence/train.tsv\"\n",
|
||||||
|
"testPath = \"../tasks/zad8/pl/dataSentence/test.tsv\"\n",
|
||||||
|
"dataFolder = \"../tasks/zad8/pl/dataSentence\"\n",
|
||||||
|
"column_name_map = {0: \"text\", 1: \"label_topic\"}\n",
|
||||||
|
"corpusClassification = CSVClassificationCorpus(dataFolder,\n",
|
||||||
|
" column_name_map,\n",
|
||||||
|
" skip_header=False,\n",
|
||||||
|
" delimiter='\\t',\n",
|
||||||
|
")\n",
|
||||||
|
"print(corpusClassification)"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 40,
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"name": "stdout",
|
||||||
|
"output_type": "stream",
|
||||||
|
"text": [
|
||||||
|
"2022-05-30 22:10:19,891 Computing label dictionary. Progress:\n"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "stderr",
|
||||||
|
"output_type": "stream",
|
||||||
|
"text": [
|
||||||
|
"100%|██████████| 312/312 [00:04<00:00, 68.32it/s] "
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "stdout",
|
||||||
|
"output_type": "stream",
|
||||||
|
"text": [
|
||||||
|
"2022-05-30 22:10:25,276 [b'inform', b'reqmore', b'hello', b'infomrm', b'reqmore inform', b'bye', b'ack', b'reqalts', b'impl-conf inform', b'help', b'request', b'affirm', b'thankyou', b'affirm inform', b'bye thankyou', b'hello inform', b'infrom', b'confirm', b'negate confirm', b'negate', b'negate ', b'deny']\n"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "stderr",
|
||||||
|
"output_type": "stream",
|
||||||
|
"text": [
|
||||||
|
"\n"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source": [
|
||||||
|
"from flair.data import Corpus\n",
|
||||||
|
"from flair.datasets import TREC_6\n",
|
||||||
|
"from flair.embeddings import WordEmbeddings, FlairEmbeddings, DocumentRNNEmbeddings\n",
|
||||||
|
"from flair.models import TextClassifier\n",
|
||||||
|
"from flair.trainers import ModelTrainer\n",
|
||||||
|
"\n",
|
||||||
|
"from os.path import exists\n",
|
||||||
|
"\n",
|
||||||
|
"\n",
|
||||||
|
"# 2. create the label dictionary\n",
|
||||||
|
"label_dict = corpusClassification.make_label_dictionary()\n",
|
||||||
|
"\n",
|
||||||
|
"# 3. make a list of word embeddings\n",
|
||||||
|
"word_embeddings = [\n",
|
||||||
|
" WordEmbeddings('pl'),\n",
|
||||||
|
" FlairEmbeddings('polish-forward'),\n",
|
||||||
|
" FlairEmbeddings('polish-backward'),\n",
|
||||||
|
" CharacterEmbeddings(),\n",
|
||||||
|
"]\n",
|
||||||
|
"\n",
|
||||||
|
"# 4. initialize document embedding by passing list of word embeddings\n",
|
||||||
|
"# Can choose between many RNN types (GRU by default, to change use rnn_type parameter)\n",
|
||||||
|
"document_embeddings = DocumentRNNEmbeddings(word_embeddings, hidden_size=256)\n",
|
||||||
|
"\n",
|
||||||
|
"# 5. create the text classifier\n",
|
||||||
|
"classifier = TextClassifier(document_embeddings, label_dictionary=label_dict)\n",
|
||||||
|
"\n",
|
||||||
|
"# 6. initialize the text classifier trainer\n",
|
||||||
|
"trainer = ModelTrainer(classifier, corpusClassification)\n",
|
||||||
|
"\n",
|
||||||
|
"modelPath = 'resources/taggers/trec/final-model.pt'\n",
|
||||||
|
"\n",
|
||||||
|
"\n",
|
||||||
|
"fileExists = exists(modelPath)\n",
|
||||||
|
"\n",
|
||||||
|
"if(not fileExists):\n",
|
||||||
|
" # 7. start the training\n",
|
||||||
|
" trainer.train('resources/taggers/trec',\n",
|
||||||
|
" learning_rate=0.1,\n",
|
||||||
|
" mini_batch_size=32,\n",
|
||||||
|
" anneal_factor=0.5,\n",
|
||||||
|
" patience=5,\n",
|
||||||
|
" max_epochs=10)"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 41,
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"name": "stdout",
|
||||||
|
"output_type": "stream",
|
||||||
|
"text": [
|
||||||
|
"2022-05-30 22:10:47,199 loading file resources/taggers/trec/final-model.pt\n",
|
||||||
|
"[reqmore (0.5459)]\n"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source": [
|
||||||
|
"classifier = TextClassifier.load(modelPath)\n",
|
||||||
|
"\n",
|
||||||
|
"# create example sentence\n",
|
||||||
|
"sentence = Sentence('Jakie filmy gracie jutro?')\n",
|
||||||
|
"\n",
|
||||||
|
"# predict class and print\n",
|
||||||
|
"classifier.predict(sentence)\n",
|
||||||
|
"\n",
|
||||||
|
"print(sentence.labels)"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 42,
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"name": "stdout",
|
||||||
|
"output_type": "stream",
|
||||||
|
"text": [
|
||||||
|
"[inform (0.5967)]\n"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source": [
|
||||||
|
"# create example sentence\n",
|
||||||
|
"sentence = Sentence('siedzenia h1 h2')\n",
|
||||||
|
"\n",
|
||||||
|
"# predict class and print\n",
|
||||||
|
"classifier.predict(sentence)\n",
|
||||||
|
"\n",
|
||||||
|
"print(sentence.labels)"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"metadata": {
|
"metadata": {
|
||||||
@ -671,7 +855,7 @@
|
|||||||
"name": "python",
|
"name": "python",
|
||||||
"nbconvert_exporter": "python",
|
"nbconvert_exporter": "python",
|
||||||
"pygments_lexer": "ipython3",
|
"pygments_lexer": "ipython3",
|
||||||
"version": "3.8.10"
|
"version": "3.8.3"
|
||||||
},
|
},
|
||||||
"subtitle": "8.Parsing semantyczny z wykorzystaniem technik uczenia maszynowego[laboratoria]",
|
"subtitle": "8.Parsing semantyczny z wykorzystaniem technik uczenia maszynowego[laboratoria]",
|
||||||
"title": "Systemy Dialogowe",
|
"title": "Systemy Dialogowe",
|
||||||
|
@ -1,19 +1,25 @@
|
|||||||
import re
|
import re
|
||||||
from flair.data import Sentence, Token
|
from flair.data import Sentence, Token
|
||||||
from flair.datasets import SentenceDataset
|
from flair.datasets import SentenceDataset
|
||||||
from flair.models import SequenceTagger
|
from flair.models import SequenceTagger, TextClassifier
|
||||||
|
|
||||||
class NLU:
|
class NLU:
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.nluModel = SequenceTagger.load('./lab/slot-model/final-model.pt')
|
self.nluModelClassifier = TextClassifier.load('./lab/resources/taggers/trec/final-model.pt')
|
||||||
|
self.nluModelTagger = SequenceTagger.load('./lab/slot-model/final-model.pt')
|
||||||
|
|
||||||
def predict(self, sentence):
|
def predict(self, sentence):
|
||||||
|
# user act prediction
|
||||||
|
sentenceClass = Sentence(sentence)
|
||||||
|
self.nluModelClassifier.predict(sentenceClass)
|
||||||
|
|
||||||
|
# tags prediction
|
||||||
sentence = self.getStrCleaned(sentence)
|
sentence = self.getStrCleaned(sentence)
|
||||||
csentence = [{'form': word} for word in sentence]
|
csentence = [{'form': word} for word in sentence]
|
||||||
fsentence = self.conllu2flair([csentence])[0]
|
fsentence = self.conllu2flair([csentence])[0]
|
||||||
self.nluModel.predict(fsentence)
|
self.nluModelTagger.predict(fsentence)
|
||||||
return self.toDSTInput([(token, ftoken.get_tag('slot').value) for token, ftoken in zip(sentence, fsentence)])
|
return self.toDSTInput([(token, ftoken.get_tag('slot').value) for token, ftoken in zip(sentence, fsentence)], str(sentenceClass.labels[0]).split(" ")[0])
|
||||||
|
|
||||||
def conllu2flair(self, sentences, label=None):
|
def conllu2flair(self, sentences, label=None):
|
||||||
fsentences = []
|
fsentences = []
|
||||||
@ -42,27 +48,25 @@ class NLU:
|
|||||||
messageLower = messageLower.replace(char,'')
|
messageLower = messageLower.replace(char,'')
|
||||||
return messageLower.split()
|
return messageLower.split()
|
||||||
|
|
||||||
def toDSTInput(self, taggedSentence):
|
def toDSTInput(self, taggedSentence, intent):
|
||||||
result = []
|
result = []
|
||||||
intent = None
|
|
||||||
slotValue = None
|
slotValue = None
|
||||||
slot = None
|
slot = None
|
||||||
for tuple in taggedSentence:
|
for tuple in taggedSentence:
|
||||||
value, tagInt = tuple
|
value, tag = tuple
|
||||||
if intent is None: intent = tagInt.split("/")[1]
|
if tag == "O":
|
||||||
if tagInt.split("/")[0] == "O":
|
|
||||||
if slotValue is not None:
|
if slotValue is not None:
|
||||||
result.append([intent, 'Cinema', slot, slotValue])
|
result.append([intent, 'Cinema', slot, slotValue])
|
||||||
slot = None
|
slot = None
|
||||||
slotValue = None
|
slotValue = None
|
||||||
elif tagInt.split("/")[0].split("-")[0] == "B":
|
elif tag.split("-")[0] == "B":
|
||||||
slot = tagInt.split("/")[0].split("-")[1]
|
slot = tag.split("-")[1]
|
||||||
slotValue = value
|
slotValue = value
|
||||||
elif tagInt.split("/")[0].split("-")[0] == "I":
|
elif tag.split("-")[0] == "I":
|
||||||
try:
|
try:
|
||||||
slotValue += " " + value
|
slotValue += " " + value
|
||||||
except:
|
except:
|
||||||
slot = tagInt.split("/")[0].split("-")[1]
|
slot = tag.split("-")[1]
|
||||||
slotValue = value
|
slotValue = value
|
||||||
|
|
||||||
if slotValue is not None:
|
if slotValue is not None:
|
||||||
|
@ -24,7 +24,7 @@ def chatbot():
|
|||||||
isActive = False
|
isActive = False
|
||||||
else:
|
else:
|
||||||
nluPred = nlu.predict(sentence=userMessage)
|
nluPred = nlu.predict(sentence=userMessage)
|
||||||
# print(nluPred)
|
print(nluPred)
|
||||||
dst.update(nluPred)
|
dst.update(nluPred)
|
||||||
# print(dst.state)
|
# print(dst.state)
|
||||||
dpAct = dp.getAction(dst.getLastUserAct(), dst.getEmptySlots(), dst.getSystemSlots())
|
dpAct = dp.getAction(dst.getLastUserAct(), dst.getEmptySlots(), dst.getSystemSlots())
|
||||||
|
33
tasks/zad8/pl/dataSentence/test.tsv
Normal file
33
tasks/zad8/pl/dataSentence/test.tsv
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
Dzień dobry. hello
|
||||||
|
Jakie filmy są w tym tygodniu w repertuarze? reqmore
|
||||||
|
O której godzinie w piątej mogę zobaczyć Na noże? reqmore inform
|
||||||
|
Ok, w takim razie chciałbym zarezerwować 2 miejsca na seans o 19:30. inform
|
||||||
|
Dwa normalne. inform
|
||||||
|
Mogą być. ack
|
||||||
|
Dziękuje bardzo. bye
|
||||||
|
Witam hello
|
||||||
|
Chciałbym zarezerować dwa bilety na Batman inform
|
||||||
|
A kiedy jest najbliższy seans? inform
|
||||||
|
To poproszę trzy bilety na batmana o 15:30 inform
|
||||||
|
Na samym tyle sali inform
|
||||||
|
Dziękuję thankyou
|
||||||
|
Hej hello
|
||||||
|
Chciałbym kupić bilety na seans Zorro - jak to było na prawdę inform
|
||||||
|
Zorro2 inform
|
||||||
|
Poproszę o listę seansów reqmore
|
||||||
|
Poproszę o listę filmów granych jutro wieczorem reqmore inform
|
||||||
|
Chciałbym kupić bilety na film To nie wypanda inform
|
||||||
|
20:15 inform
|
||||||
|
11 inform
|
||||||
|
W środku, pomiedzy górnym i środkowym rzędzie
|
||||||
|
W środku, pomiedzy górnym i środkowym rzędem inform
|
||||||
|
<3 thankyou
|
||||||
|
Dzień dobry hello
|
||||||
|
Chciał bym zamówić bilet na film Minionki dzisiaj o 18.30 inform
|
||||||
|
czy jest jakis film o godzinie 18:30? request
|
||||||
|
niech będzie ack
|
||||||
|
1 inform
|
||||||
|
jakie sš dostępne ulgi?
|
||||||
|
studencka inform
|
||||||
|
daleko od ekranu inform
|
||||||
|
tak ack
|
|
330
tasks/zad8/pl/dataSentence/train.tsv
Normal file
330
tasks/zad8/pl/dataSentence/train.tsv
Normal file
@ -0,0 +1,330 @@
|
|||||||
|
Tak. inform
|
||||||
|
Normalny. reqmore
|
||||||
|
Super, poproszę by miejsca były obok siebie. inform
|
||||||
|
Super, czy można płacić z góry? reqmore
|
||||||
|
Ok, czy bilety mam już zarezerwowane? reqmore
|
||||||
|
Super, dziękuję. bye
|
||||||
|
Dzień dobry. hello
|
||||||
|
Chcę zarezerwować bilety. inform
|
||||||
|
Dzisiaj. inform
|
||||||
|
16:30:00 infomrm
|
||||||
|
Cześć. hello
|
||||||
|
Chciałbym anulować rezerwację biletu. inform
|
||||||
|
Numer 42069. inform
|
||||||
|
Numer 42068. inform
|
||||||
|
Numer 42067. inform
|
||||||
|
Chciałbym anulować rezerwację biletu dla imienia i nazwiska Jan Kowalski inform
|
||||||
|
Nie pamiętam. Czy mogę podać e-mail? reqmore
|
||||||
|
elo. hello
|
||||||
|
Chciałbym kupić bilety na seans Zorro - jak to było na prawdę. inform
|
||||||
|
Poproszę listę filmów granych jutro wieczorem reqmore inform
|
||||||
|
Chciałbym kupić bilety na Transformers. inform
|
||||||
|
Tak, chcę dwa bilety za 2 dni. inform
|
||||||
|
Normalne. inform
|
||||||
|
Przy oknie, w przedziale.
|
||||||
|
Wagon z przedziałami, miejsce przy oknie.
|
||||||
|
Tak, ale bardziej z góry. inform
|
||||||
|
Exit. bye
|
||||||
|
Kim jesteś? help
|
||||||
|
Co gracie? reqmore
|
||||||
|
Jaki Zorro? reqmore
|
||||||
|
W jakich godzinach gracie Zorro? reqmore
|
||||||
|
Chciałbym zarezerwować bilety na Batmana. inform
|
||||||
|
21.03.2022. inform
|
||||||
|
23.03.2022. inform
|
||||||
|
Super. ack
|
||||||
|
13:00 inform
|
||||||
|
1 normalny. inform
|
||||||
|
Blisko ekranu. inform
|
||||||
|
Dziękuję, do usłyszenia. bye
|
||||||
|
Dzień dobry. hello
|
||||||
|
chciałbym się dowiedzieć jaki jest cennik. reqmore
|
||||||
|
A jest zniżka studencka? reqmore
|
||||||
|
a co leci dzisiaj w kinie? reqmore inform
|
||||||
|
o której jest na noże? reqmore inform
|
||||||
|
poproszę dwa bilety na 12 inform
|
||||||
|
a jakie są? reqmore
|
||||||
|
2 ulgowe poprosze. inform
|
||||||
|
jakie są wolne miejsca? reqmore
|
||||||
|
Tak. ack
|
||||||
|
Chciałbym 3 bilety na batmana na jtro. inform
|
||||||
|
coś koło południa. reqmore
|
||||||
|
nic później? reqalts
|
||||||
|
To ten o 19. inform
|
||||||
|
2 ulgowe. inform
|
||||||
|
z przodu. inform
|
||||||
|
ale jakie miejsca?? reqmore
|
||||||
|
Dzień dobry. hello
|
||||||
|
Chciałabym zarezerwować bilet do kina. inform
|
||||||
|
Dziś. inform
|
||||||
|
Proszę na batmana. inform
|
||||||
|
Proszę o godzine 20:19. inform
|
||||||
|
ulogwy. inform
|
||||||
|
1. impl-conf inform
|
||||||
|
z tyłu, na środku (aby ekran był centralnie widoczny). inform
|
||||||
|
dobrze, dziekuję. bye
|
||||||
|
Witam hello
|
||||||
|
Co potrafisz? help
|
||||||
|
Jakie są najbliższe seanse? inform
|
||||||
|
A jakie są dostępne? reqmore
|
||||||
|
A w jakim to kinie? request
|
||||||
|
A gdzie jest to kino? reqmore
|
||||||
|
O której grają Uncharted? reqmore inform
|
||||||
|
Ile kosztują bilety na ten film? request
|
||||||
|
A w jaki dzień bielty są tańsze? reqmore
|
||||||
|
w takim razie chciałbym zarezerwować dwa bilety normalne i jeden ulgowy na środę 20:00 inform
|
||||||
|
Na środku sali inform
|
||||||
|
ok ack
|
||||||
|
Witam hello
|
||||||
|
Jaki jest repertuar na piątek? reqmore inform
|
||||||
|
O jakich godzinach grają te filmy? reqmore
|
||||||
|
Wszystkie ack
|
||||||
|
Czy obgługujecie rezerwację biletów grupowych? request
|
||||||
|
Rozumiem, a jak mogę dokonać rezerwacji dla 20 osób? reqmore
|
||||||
|
Tak affirm
|
||||||
|
dziękuję ack
|
||||||
|
Witam hello
|
||||||
|
Czy w kinie Rialto grają jakieś stare filmy? reqmore
|
||||||
|
to dziękuję thankyou
|
||||||
|
Witam hello
|
||||||
|
Czy tylko można u was rezerwować Nachos ?
|
||||||
|
Chciałbym zapytać co u pana hello
|
||||||
|
Poproszę bilet na batmana o 19:00 inform
|
||||||
|
bez ludzi w okolicy inform
|
||||||
|
Czy to wszystko affirm
|
||||||
|
Dzień dobry! hello
|
||||||
|
Chciałbym zarezerwować film
|
||||||
|
Bilet na film inform
|
||||||
|
Jakie filmy są teraz w kinach? request
|
||||||
|
poproszę 3x bilet na ambulans inform
|
||||||
|
niech będzie ten ostatni inform
|
||||||
|
Przedostatnim inform
|
||||||
|
Spoko ack
|
||||||
|
Chciałbym jeszcze kupon na jedzenie
|
||||||
|
Poproszę słony popcorn
|
||||||
|
Duży
|
||||||
|
Nara bye
|
||||||
|
Dzień dobry hello
|
||||||
|
Chciał bym zamówić bilet na film Minionki dzisiaj o 18.30 inform
|
||||||
|
to poprosze ups 2 inform
|
||||||
|
na dzisiaj inform
|
||||||
|
najlepiej 18.30 inform
|
||||||
|
poprosze 18 inform
|
||||||
|
jakie są dostępne miejsca? request
|
||||||
|
które miejsca są daleko od ekranu? reqmore
|
||||||
|
w takim razie poproszę M5 inform
|
||||||
|
dziekuje thankyou
|
||||||
|
Cześć hello
|
||||||
|
Co mogę zarezerwować? reqmore
|
||||||
|
Gdzie znajduje się kino? request
|
||||||
|
Tak, chciałbym iść do multikina na Malcie inform
|
||||||
|
Super, teraz chciałbym zarezerwować bilet na film inform
|
||||||
|
Uncharted inform
|
||||||
|
wybieram godzine 12:00 inform
|
||||||
|
1 miejsce, gdzieś na środku sali inform
|
||||||
|
Pasuje ack
|
||||||
|
Elo help
|
||||||
|
Chciałabym zarezerwować bilet inform
|
||||||
|
Co gracie request
|
||||||
|
Ja bym chciała na Fantsaczne zwierzta inform
|
||||||
|
29.03.2022 inform
|
||||||
|
Jakoś wieczorkiem inform
|
||||||
|
To na 21 prosze inform
|
||||||
|
To na 18 proszę inform
|
||||||
|
Najlepsze inform
|
||||||
|
Moment no ile tych miejsc i czemu nie są w tym samym rzędzie reqmore
|
||||||
|
proszę z managerem
|
||||||
|
Jeden dla mnie i dla kotka proszę inform
|
||||||
|
Dobra, to blikiem proszę
|
||||||
|
Halo halo
|
||||||
|
nie skończyłam
|
||||||
|
Ehhh
|
||||||
|
DZIEŃ DOBRY hello
|
||||||
|
No właśnie. W czym możesz pomóc? help
|
||||||
|
A jedzonko macie? reqmore
|
||||||
|
Nachosy proszę reqmore
|
||||||
|
A jakie sosy do Nachosów? reqmore
|
||||||
|
Chciałabym anulować rezerwację inform
|
||||||
|
123123 inform
|
||||||
|
Dzięki <3 thankyou
|
||||||
|
Dzień dobry hello
|
||||||
|
Chciałabym zmienić rezerwację inform
|
||||||
|
123123 inform
|
||||||
|
Upewniam się ack
|
||||||
|
Dzień dobry hello
|
||||||
|
Chciałbym zarezerwować bilety inform
|
||||||
|
batman inform
|
||||||
|
dzisiaj inform
|
||||||
|
podaj więcej informacji o seansach reqmore
|
||||||
|
podaj więcej informacji o seansie o 15.20 reqmore
|
||||||
|
czy film jest 2D czy 3D? reqmore
|
||||||
|
podaj informacje o napisach/dubbingu reqmore
|
||||||
|
Cześć hello
|
||||||
|
Chciałbym zarezwsfsgf bilet
|
||||||
|
Chciałbym zarezerwować bilet inform
|
||||||
|
Jakie są wyświetlane w najbliższą sobotę? reqmore
|
||||||
|
W których godzinach grany jest film To nie wypanda? reqmore inform
|
||||||
|
W takim razie chciałbym kupić 3 bilety, jeśli możliwe miejsca koło siebie inform
|
||||||
|
Najbliższa sobota inform
|
||||||
|
Godzina 19:30 inform
|
||||||
|
Najlepiej w ostatnim rzędzie inform
|
||||||
|
Chciałbym zapłacić przy odbiorze reqmore
|
||||||
|
Czy moja rezerwacja została potwierdzona? reqmore
|
||||||
|
84372 inform
|
||||||
|
Nie negate
|
||||||
|
Dzień dobry hello
|
||||||
|
Chciałbym dowiedzieć się jakie filmy są wyświetlane w tym tygodniu. reqmore
|
||||||
|
W jakich godzinach mogę zobaczyć Batmana w piątek? reqmore inform
|
||||||
|
Chciałbym zarezerwować 3 miejsca na seans o 17:45 inform
|
||||||
|
Czy są dostępne miejsca w tylnych rzędach? reqmore inform
|
||||||
|
Ok affirm inform
|
||||||
|
Dziękuję, do widzenia bye thankyou
|
||||||
|
Dzień dobry, chciałbym anulować rezerwację hello inform
|
||||||
|
87574 inform
|
||||||
|
Potwierdzam affirm
|
||||||
|
Cześć hello
|
||||||
|
Nie możesz thankyou
|
||||||
|
Dzień dobry, Systemie hello
|
||||||
|
Chciałbym kupić nachos reqmore
|
||||||
|
Jak mogę się do takiej strefy dostać? reqmore
|
||||||
|
W jakim mieście? reqmore
|
||||||
|
Czy można zarezerwować u was bilety na seans? reqmore
|
||||||
|
Jakie polecasz? reqmore
|
||||||
|
Jaką ocenę posiada Batman? reqmore
|
||||||
|
Dobrze. Chciałbym zatem zarezerwować bilet na Innych Ludzi inform
|
||||||
|
22.03.2022 inform
|
||||||
|
Jutro, po godzinie 16:00 inform
|
||||||
|
Jaki jutro jest dzień tygodnia? request
|
||||||
|
To poproszę o rezerwację na 17:45 inform
|
||||||
|
17:45 inform
|
||||||
|
Z tyłu sali, nie na samym końcu inform
|
||||||
|
W jakiej części rzędu znajduje się to miejsce? request
|
||||||
|
Dziękuję thankyou
|
||||||
|
Dzień dobry hello
|
||||||
|
chciałbym kupić dwa bilety na batmana inform
|
||||||
|
jutro inform
|
||||||
|
poproszę na 20:30 inform
|
||||||
|
z tyłu inform
|
||||||
|
w jakiej cenie są bilety? help
|
||||||
|
są zniżki studenckie? help
|
||||||
|
mógłbym kupić bilety? reqmore
|
||||||
|
batman - chciałbym kupić zarezerwowane miejsca reqmore inform
|
||||||
|
dobrze czy wystarczy zachować numer rezerwacji? reqmore
|
||||||
|
dobrze ack
|
||||||
|
witam hello
|
||||||
|
jakie są jutro filmy? reqmore inform
|
||||||
|
o ktorej jest nasze magiczne encanto? reqmore inform
|
||||||
|
poproszę 3 bilety na 18:20 inform
|
||||||
|
na środku inform
|
||||||
|
poproszę jeszcze jedno miejsce obok inform
|
||||||
|
dziekuje thankyou
|
||||||
|
do widzenia bye
|
||||||
|
Co dziś leci reqmore inform
|
||||||
|
Co jest dobre dla dzieci reqmore
|
||||||
|
"Poproszę 2 na ""to nie wypanda""" inform
|
||||||
|
a z przodu gdzieś inform
|
||||||
|
eee a o której?? request
|
||||||
|
Dzień dobry hello
|
||||||
|
Chciałabym zarezerwować bilet do kina inform
|
||||||
|
Wyjdż za mnie inform
|
||||||
|
The batman inform
|
||||||
|
Dziś wieczorem inform
|
||||||
|
Proszę o godzinie 20:15 inform
|
||||||
|
z tyłu, na środku (aby ekran był centralnie widoczny) inform
|
||||||
|
Dobrze, dziękuję thankyou
|
||||||
|
cześć hello
|
||||||
|
chciałbym sprawdzić repertuar kin reqmore
|
||||||
|
na dzisiaj inform
|
||||||
|
Witam hello
|
||||||
|
Jakie sš najbliższe seanse? reqmore
|
||||||
|
W jakim to kinie? reqmore
|
||||||
|
A gdzie jest to kino? reqmore
|
||||||
|
Ile kosztujš bilety na Inni ludzie? reqmore
|
||||||
|
oba inform
|
||||||
|
A w jaki dzień bilety sš tańsze? reqmore
|
||||||
|
W takim razie chciałbym zarezerwować dwa bilety na czwartek na film Inni Ludzie inform
|
||||||
|
Jeden normalny i ulgowy inform
|
||||||
|
Na środku Sali inform
|
||||||
|
Chciałem zarezerwować dwa miejsca reqmore
|
||||||
|
Zgadzam się infrom
|
||||||
|
Tak inform
|
||||||
|
Jaki jest koszt tej rezerwacji? reqmore
|
||||||
|
A ile kosztuje bilety łącznie? reqmore
|
||||||
|
ok. Dziękuję ack
|
||||||
|
Witam hello
|
||||||
|
Chciałbym zarezerwować bilet ale nie wiem na co. inform
|
||||||
|
Czy film Historia mojej żony jest ciekawy ? reqmore
|
||||||
|
Dobrze to poproszę inform
|
||||||
|
Ulgowy inform
|
||||||
|
czy jest jakaś maksymalna liczba ? reqmore
|
||||||
|
to poproszę 100 inform
|
||||||
|
tak jak powiedziałem ulgowe inform
|
||||||
|
środek Sali inform
|
||||||
|
tak confirm
|
||||||
|
Nie dziękuje negate confirm
|
||||||
|
Dzień dobry! hello
|
||||||
|
Chciałbym zarezerwować seans. Bilet na seans inform
|
||||||
|
Jakie filmy są obecnie na ekranach? reqmore
|
||||||
|
Sobota inform
|
||||||
|
Poproszę 2 bilety na innych ludzi inform
|
||||||
|
jeden ulgowy i jeden zwykły inform infrom
|
||||||
|
Na środku Sali infrom
|
||||||
|
Pewnie ack
|
||||||
|
czy te miejsca sš obok siebie? reqmore
|
||||||
|
Dzień dobry hello
|
||||||
|
Chciałabym zarezerwować bilety inform
|
||||||
|
Jaki film jest grany jutro w godzinach popołudniowych? request
|
||||||
|
Czy sš wcześniejsze seanse? reqmore
|
||||||
|
W takim razie chcę zarezerwować bilety na Psie Pazury inform
|
||||||
|
Komu przysługuje ulga?
|
||||||
|
Kim jest senior?
|
||||||
|
W takim razie chcę zarezerwować normalne bilety na Psie Pazury inform
|
||||||
|
Na środku inform
|
||||||
|
3 inform
|
||||||
|
Tak ack
|
||||||
|
Ale chciałam 3 bilety negate
|
||||||
|
zgadzam się ack
|
||||||
|
tak ack
|
||||||
|
nier negate
|
||||||
|
tak ack
|
||||||
|
nie
|
||||||
|
Dzień dobry hello
|
||||||
|
Chciałbym dowiedzieć się jaki jest aktualnie repertuar request
|
||||||
|
Jutro jest w repertuarze film inni ludzie? request
|
||||||
|
Ile kosztuje bilet na ten film? request
|
||||||
|
ulogwy
|
||||||
|
W górnej części sali inform
|
||||||
|
Gdzie znajduje się to miejsce względem ekranu? reqmore
|
||||||
|
Chciałbym na środku inform
|
||||||
|
zgadzam ack
|
||||||
|
jaka jest cena? reqmore
|
||||||
|
Dobrze, rezerwuje ack
|
||||||
|
Chciałbym anulować rezerwację deny
|
||||||
|
Dziekuje bye
|
||||||
|
Cześć hello
|
||||||
|
Co można u was zjeść? request
|
||||||
|
Co można obejrzeć w kwietniu request
|
||||||
|
kiedy gracie DKF zamek? request
|
||||||
|
poproszę dwa bilety ulgowe na 25/04/2022 12:15 15:50 inform
|
||||||
|
pierwszy rzšd po lewej stronie inform
|
||||||
|
Tak ack
|
||||||
|
zgadzam się ack
|
||||||
|
Jaki jest numer mojej rezerwacji reqmore
|
||||||
|
Dziękuję systemie thankyou
|
||||||
|
Siema hello
|
||||||
|
Chcę iść do kina inform
|
||||||
|
Co gracie request
|
||||||
|
To na fdantastyczne zwierznera prosze inform
|
||||||
|
A co macie request
|
||||||
|
A na za tydzień? request
|
||||||
|
To na za tydzień na cud guadalupe proszę inform
|
||||||
|
To na coś innego request
|
||||||
|
Dzisiaj inform
|
||||||
|
Zaskocz mnie
|
||||||
|
No to jakoś niech będzie jakoś to będzie inform
|
||||||
|
Jeden dla mnie, drugi dla kota
|
||||||
|
To jeden będzie infrom
|
||||||
|
normalny
|
||||||
|
na środku gdzieś inform
|
||||||
|
Niech będzie ack
|
||||||
|
jakieś potwierdzenie rezerwacji dostanę czy mogę po prostu wejść i usišść? request
|
|
@ -1,9 +1,19 @@
|
|||||||
import pandas as pd
|
import pandas as pd
|
||||||
|
from sympy import true
|
||||||
|
|
||||||
def flatten(t):
|
def flatten(t):
|
||||||
return [item for sublist in t for item in sublist]
|
return [item for sublist in t for item in sublist]
|
||||||
|
|
||||||
def getData():
|
# def getStrCleaned(rawMessage):
|
||||||
|
# # / and : is needed for date and time recognition
|
||||||
|
# punctuation = '!"#$%&\'()*+,-.;<=>?@[\\\\]^_`{|}~'
|
||||||
|
# messageLower = rawMessage.lower()
|
||||||
|
# # new_str = re.sub(' +', ' ', new_str)
|
||||||
|
# for char in punctuation:
|
||||||
|
# messageLower = messageLower.replace(char,'')
|
||||||
|
# return messageLower.split()
|
||||||
|
|
||||||
|
def getData(testData):
|
||||||
Xdata = []
|
Xdata = []
|
||||||
Ydata = []
|
Ydata = []
|
||||||
pathOut = './tasks/zad8/pl/'
|
pathOut = './tasks/zad8/pl/'
|
||||||
@ -14,15 +24,27 @@ def getData():
|
|||||||
for i in range(16,20):
|
for i in range(16,20):
|
||||||
for j in range(20):
|
for j in range(20):
|
||||||
for nr in range(1,5):
|
for nr in range(1,5):
|
||||||
fileName = pathIn + "dialog-" + str(i).zfill(2) + "-" + str(j).zfill(2) + "-" + str(nr).zfill(2) + ".tsv"
|
fileName = pathIn + "dialog-" + str(i).zfill(2) + "-" + str(j).zfill(2) + "-" + str(nr).zfill(2)
|
||||||
|
if testData: fileName += "(test)"
|
||||||
|
fileName += ".tsv"
|
||||||
try:
|
try:
|
||||||
df = pd.read_csv(fileName, sep='\t', header=None, encoding="utf-8")
|
df = pd.read_csv(fileName, sep='\t', header=None, encoding="utf-8")
|
||||||
Xdata.append(df[1].tolist())
|
dfSys = df[df[0] == "user"]
|
||||||
Ydata.append(df[2].tolist())
|
dfSys.dropna()
|
||||||
|
Xdata.append(dfSys[1].tolist())
|
||||||
|
Ydata.append(dfSys[2].tolist())
|
||||||
|
# Xdata = [getStrCleaned(x) for x in Xdata]
|
||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
return flatten(Xdata), flatten(Ydata)
|
return flatten(Xdata), flatten(Ydata)
|
||||||
|
|
||||||
x,y = getData()
|
x, y = getData(False)
|
||||||
|
xTest, yTest = getData(True)
|
||||||
|
dataTuples = list(zip(x, y))
|
||||||
|
testDataTuples = list(zip(xTest, yTest))
|
||||||
|
|
||||||
print(y)
|
df = pd.DataFrame(dataTuples)
|
||||||
|
dfTest = pd.DataFrame(testDataTuples)
|
||||||
|
|
||||||
|
df.to_csv('tasks/zad8/pl/dataSentence/train.tsv', sep="\t", index=False, header=None)
|
||||||
|
dfTest.to_csv('tasks/zad8/pl/dataSentence/test.tsv', sep="\t", index=False, header=None)
|
@ -2369,11 +2369,11 @@
|
|||||||
7 12:15 inform B-time
|
7 12:15 inform B-time
|
||||||
8 15:50 inform B-time
|
8 15:50 inform B-time
|
||||||
|
|
||||||
# text: pierwszy rzšd po lewej stronie
|
# text: pierwszy rząd po lewej stronie
|
||||||
# intent: inform
|
# intent: inform
|
||||||
# slots: pierwszyrzšdpopolewej:area
|
# slots: pierwszyrządpopolewej:area
|
||||||
1 pierwszy inform B-area
|
1 pierwszy inform B-area
|
||||||
2 rzšd inform I-area
|
2 rząd inform I-area
|
||||||
3 po inform I-area
|
3 po inform I-area
|
||||||
4 lewej inform I-area
|
4 lewej inform I-area
|
||||||
5 stronie inform NoLabel
|
5 stronie inform NoLabel
|
||||||
|
Loading…
Reference in New Issue
Block a user