add form token

This commit is contained in:
s444417 2022-05-23 07:53:43 +02:00
parent b8e4adfe93
commit ac5ed0c0fc
3 changed files with 82 additions and 76 deletions

View File

@ -82,7 +82,7 @@
},
{
"cell_type": "code",
"execution_count": 13,
"execution_count": 1,
"metadata": {},
"outputs": [
{
@ -155,7 +155,7 @@
},
{
"cell_type": "code",
"execution_count": 14,
"execution_count": 2,
"metadata": {},
"outputs": [
{
@ -172,7 +172,7 @@
"'<table>\\n<tbody>\\n<tr><td style=\"text-align: right;\">1</td><td>wybieram</td><td>inform</td><td>O </td></tr>\\n<tr><td style=\"text-align: right;\">2</td><td>batmana </td><td>inform</td><td>B-title</td></tr>\\n</tbody>\\n</table>'"
]
},
"execution_count": 14,
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
@ -184,7 +184,7 @@
},
{
"cell_type": "code",
"execution_count": 15,
"execution_count": 3,
"metadata": {},
"outputs": [
{
@ -202,7 +202,7 @@
"'<table>\\n<tbody>\\n<tr><td style=\"text-align: right;\">1</td><td>chcę </td><td>inform</td><td>O </td></tr>\\n<tr><td style=\"text-align: right;\">2</td><td>zarezerwować</td><td>inform</td><td>B-goal</td></tr>\\n<tr><td style=\"text-align: right;\">3</td><td>bilety </td><td>inform</td><td>O </td></tr>\\n</tbody>\\n</table>'"
]
},
"execution_count": 15,
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
@ -213,7 +213,7 @@
},
{
"cell_type": "code",
"execution_count": 16,
"execution_count": 4,
"metadata": {},
"outputs": [
{
@ -232,7 +232,7 @@
"'<table>\\n<tbody>\\n<tr><td style=\"text-align: right;\">1</td><td>chciałbym </td><td>inform</td><td>O</td></tr>\\n<tr><td style=\"text-align: right;\">2</td><td>anulować </td><td>inform</td><td>O</td></tr>\\n<tr><td style=\"text-align: right;\">3</td><td>rezerwację</td><td>inform</td><td>O</td></tr>\\n<tr><td style=\"text-align: right;\">4</td><td>biletu </td><td>inform</td><td>O</td></tr>\\n</tbody>\\n</table>'"
]
},
"execution_count": 16,
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
@ -251,7 +251,7 @@
},
{
"cell_type": "code",
"execution_count": 26,
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
@ -288,20 +288,20 @@
},
{
"cell_type": "code",
"execution_count": 18,
"execution_count": 6,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Corpus: 345 train + 38 dev + 32 test sentences\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"
"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"
]
}
],
"source": [
"def conllu2flair(sentences, label=None):\n",
"def conllu2flair(sentences, label1=None, label2=None):\n",
" fsentences = []\n",
"\n",
" for sentence in sentences:\n",
@ -310,16 +310,19 @@
" for token in sentence:\n",
" ftoken = Token(token['form'])\n",
"\n",
" if label:\n",
" ftoken.add_tag(label, token[label])\n",
"\n",
" if label1:\n",
" if label2:\n",
" ftoken.add_tag(label1, token[label1] + \"/\" + token[label2])\n",
" else:\n",
" ftoken.add_tag(label1, token[label1])\n",
" \n",
" fsentence.add_token(ftoken)\n",
"\n",
" fsentences.append(fsentence)\n",
"\n",
" return SentenceDataset(fsentences)\n",
"\n",
"corpus = Corpus(train=conllu2flair(trainset, 'slot'), test=conllu2flair(testset, 'slot'))\n",
"corpus = Corpus(train=conllu2flair(trainset, 'slot', \"frame\"), test=conllu2flair(testset, 'slot', \"frame\"))\n",
"print(corpus)\n",
"tag_dictionary = corpus.make_tag_dictionary(tag_type='slot')\n",
"print(tag_dictionary)"
@ -334,7 +337,7 @@
},
{
"cell_type": "code",
"execution_count": 19,
"execution_count": 7,
"metadata": {},
"outputs": [],
"source": [
@ -361,7 +364,7 @@
},
{
"cell_type": "code",
"execution_count": 20,
"execution_count": 8,
"metadata": {},
"outputs": [
{
@ -396,7 +399,7 @@
" (locked_dropout): LockedDropout(p=0.5)\n",
" (embedding2nn): Linear(in_features=4446, out_features=4446, bias=True)\n",
" (rnn): LSTM(4446, 256, batch_first=True, bidirectional=True)\n",
" (linear): Linear(in_features=512, out_features=20, bias=True)\n",
" (linear): Linear(in_features=512, out_features=78, bias=True)\n",
" (beta): 1.0\n",
" (weights): None\n",
" (weight_tensor) None\n",
@ -417,7 +420,7 @@
},
{
"cell_type": "code",
"execution_count": 21,
"execution_count": 9,
"metadata": {},
"outputs": [],
"source": [
@ -479,14 +482,14 @@
},
{
"cell_type": "code",
"execution_count": 22,
"execution_count": 10,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"2022-05-05 17:34:34,767 loading file slot-model/final-model.pt\n"
"2022-05-22 15:25:19,970 loading file slot-model/final-model.pt\n"
]
}
],
@ -504,16 +507,16 @@
},
{
"cell_type": "code",
"execution_count": 42,
"execution_count": 11,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[('kiedy', 'O'), ('gracie', 'O'), ('film', 'O'), ('zorro', 'B-title')]"
"[('co', 'O/reqmore'), ('gracie', 'O/reqmore'), ('obecnie', 'O/reqmore')]"
]
},
"execution_count": 42,
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
@ -525,7 +528,7 @@
" model.predict(fsentence)\n",
" return [(token, ftoken.get_tag('slot').value) for token, ftoken in zip(sentence, fsentence)]\n",
"\n",
"predict(model, 'kiedy gracie film zorro'.split())"
"predict(model, 'co gracie obecnie'.split())"
]
},
{
@ -538,7 +541,7 @@
},
{
"cell_type": "code",
"execution_count": 24,
"execution_count": 12,
"metadata": {},
"outputs": [
{
@ -546,18 +549,18 @@
"text/html": [
"<table>\n",
"<tbody>\n",
"<tr><td>kiedy </td><td>O </td></tr>\n",
"<tr><td>gracie</td><td>O </td></tr>\n",
"<tr><td>film </td><td>O </td></tr>\n",
"<tr><td>zorro </td><td>B-title</td></tr>\n",
"<tr><td>kiedy </td><td>O/reqmore</td></tr>\n",
"<tr><td>gracie</td><td>O/reqmore</td></tr>\n",
"<tr><td>film </td><td>O/reqmore</td></tr>\n",
"<tr><td>zorro </td><td>O/reqmore</td></tr>\n",
"</tbody>\n",
"</table>"
],
"text/plain": [
"'<table>\\n<tbody>\\n<tr><td>kiedy </td><td>O </td></tr>\\n<tr><td>gracie</td><td>O </td></tr>\\n<tr><td>film </td><td>O </td></tr>\\n<tr><td>zorro </td><td>B-title</td></tr>\\n</tbody>\\n</table>'"
"'<table>\\n<tbody>\\n<tr><td>kiedy </td><td>O/reqmore</td></tr>\\n<tr><td>gracie</td><td>O/reqmore</td></tr>\\n<tr><td>film </td><td>O/reqmore</td></tr>\\n<tr><td>zorro </td><td>O/reqmore</td></tr>\\n</tbody>\\n</table>'"
]
},
"execution_count": 24,
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
@ -568,17 +571,19 @@
},
{
"cell_type": "code",
"execution_count": 82,
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"stats: \n",
"precision: 0.8076923076923077\n",
"recall: 0.4117647058823529\n",
"f1: 0.5454545454545454\n"
"ename": "NameError",
"evalue": "name 'testset' is not defined",
"output_type": "error",
"traceback": [
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[1;31mNameError\u001b[0m Traceback (most recent call last)",
"\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"
]
}
],
@ -605,13 +610,13 @@
" # predict tags\n",
" predTags = [tag[1] for tag in predict(model, termsList)]\n",
" \n",
" expTags = [token[\"slot\"] for token in sentence]\n",
" expTags = [token[\"slot\"] + \"/\" + token[\"frame\"] for token in sentence]\n",
" for i in range(len(predTags)):\n",
" if (expTags[i] == \"O\" and expTags[i] != predTags[i]):\n",
" if (expTags[i][0] == \"O\" and expTags[i] != predTags[i]):\n",
" fp += 1\n",
" elif ((expTags[i] != \"O\") & (predTags[i] == \"O\")):\n",
" elif ((expTags[i][0] != \"O\") & (predTags[i][0] == \"O\")):\n",
" fn += 1\n",
" elif ((expTags[i] != \"O\") & (predTags[i] == expTags[i])):\n",
" elif ((expTags[i][0] != \"O\") & (predTags[i] == expTags[i])):\n",
" tp += 1\n",
"\n",
" precisionScore = precision(tp, fp)\n",
@ -645,7 +650,7 @@
"author": "Marek Kubis",
"email": "mkubis@amu.edu.pl",
"interpreter": {
"hash": "2be5faf79681da6f2a61fdfdd5405d65d042280f7fba6178067603e3a2925119"
"hash": "2f9d6cf1e3d8195079a65c851de355134a77367bcd714b1a5d498c42d3c07114"
},
"jupytext": {
"cell_metadata_filter": "-all",
@ -653,7 +658,7 @@
"notebook_metadata_filter": "-all"
},
"kernelspec": {
"display_name": "Python 3.10.4 64-bit",
"display_name": "Python 3.8.3 64-bit",
"language": "python",
"name": "python3"
},

View File

@ -19,9 +19,9 @@
# text: o której godzinie w piątek mogę zobaczyć na noże
# intent: reqmore inform
# slots: októrejgodzinie:goal,wpiątek:date,nanoże:title
1 o reqmore inform B-goal
2 której reqmore inform I-goal
3 godzinie reqmore inform I-goal
1 o reqmore inform B-time
2 której reqmore inform I-time
3 godzinie reqmore inform I-time
4 w reqmore inform NoLabel
5 piątek reqmore inform B-date
6 mogę reqmore inform NoLabel
@ -237,11 +237,11 @@
# slots: 1:quantity
1 1 inform B-quantity
# text: jakie sš dostępne ulgi
# text: jakie są dostępne ulgi
# intent: nan
# slots:
1 jakie NoLabel
2 sš NoLabel
2 są NoLabel
3 dostępne NoLabel
4 ulgi NoLabel

View File

@ -561,12 +561,12 @@
2 potrafisz help NoLabel
# text: jakie są najbliższe seanse
# intent: inform
# intent: reqmore
# slots:
1 jakie inform B-goal
2 są inform I-goal
3 najbliższe inform I-goal
4 seanse inform I-goal
1 jakie reqmore NoLabel
2 są reqmore NoLabel
3 najbliższe reqmore B-interval
4 seanse reqmore NoLabel
# text: a jakie są dostępne
# intent: reqmore
@ -729,7 +729,7 @@
5 grają reqmore NoLabel
6 jakieś reqmore NoLabel
7 stare reqmore NoLabel
8 filmy reqmore NoLabel
8 filmy reqmore B-title
# text: to dziękuję
# intent: thankyou
@ -808,14 +808,14 @@
3 film inform NoLabel
# text: jakie filmy są teraz w kinach
# intent: request
# intent: reqmore
# slots: jakiefilmysą:goal
1 jakie request B-goal
2 filmy request I-goal
3 są request I-goal
4 teraz request NoLabel
5 w request NoLabel
6 kinach request NoLabel
1 jakie reqmore B-goal
2 filmy reqmore I-goal
3 są reqmore I-goal
4 teraz reqmore B-interval
5 w reqmore NoLabel
6 kinach reqmore NoLabel
# text: poproszę 3x bilet na ambulans
# intent: inform
@ -1824,13 +1824,13 @@
# slots:
1 witam hello NoLabel
# text: jakie sš najbliższe seanse
# text: jakie są najbliższe seanse
# intent: reqmore
# slots: najbliższeseanse:goal
1 jakie reqmore NoLabel
2 sš reqmore NoLabel
3 najbliższe reqmore B-goal
4 seanse reqmore I-goal
2 są reqmore NoLabel
3 najbliższe reqmore B-interval
4 seanse reqmore B-goal
# text: w jakim to kinie
# intent: reqmore
@ -2525,7 +2525,7 @@
1 niech ack NoLabel
2 będzie ack NoLabel
# text: jakieś potwierdzenie rezerwacji dostanę czy mogę po prostu wejść i usišść
# text: jakieś potwierdzenie rezerwacji dostanę czy mogę po prostu wejść i usiąść
# intent: request
# slots:
1 jakieś request NoLabel
@ -2538,7 +2538,7 @@
8 prostu request NoLabel
9 wejść request NoLabel
10 i request NoLabel
11 usišść request NoLabel
11 usiąść request NoLabel
# text: wybieram batmana o 16:20
# intent: inform
@ -2853,14 +2853,15 @@
2 filmy inform B-goal
3 są inform NoLabel
4 wieczorem inform B-interval
# text: co gracie za trzy dni
# intent: inform
# slots: zatrzydni:date
1 co inform NoLabel
2 gracie inform NoLabel
3 za inform B-date
4 trzy inform I-date
5 dni inform I-date
1 co reqmore NoLabel
2 gracie reqmore NoLabel
3 za reqmore B-date
4 trzy reqmore I-date
5 dni reqmore I-date
# text: co gracie za dwa dni
# intent: inform