This commit is contained in:
Julian Zabłoński 2022-05-04 12:29:36 +02:00
parent 78847f35a5
commit 4cb8387cc9
6 changed files with 309 additions and 396 deletions

View File

@ -1,4 +1,4 @@
# Seminarium # Seminarium
jupyter notebook jupyter notebook
jupyter nbconvert C:\Users\User\VisualStudio\Seminarium\prezentacja.ipynb --to slides --post serve jupyter nbconvert J:\Desktop\seminarium\Seminarium\prezentacja.ipynb --to slides --post serve

BIN
RNN.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

BIN
S2S.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

View File

@ -1,294 +0,0 @@
{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"**DST** - Dialog State Tracking \n",
"Monitorowanie stanu dialogu"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"**Czym jest DST?**\n",
"\n",
"Monitorowanie stanu dialogu polega na obserwowaniu jakie informacje dostarczył i czego oczekuję od systemu uzytkownik, na podstawię całego dialogu między systemem a użytkownikiem. \n",
"\n",
"Najczęściej składa sie on z **aktów dialogowych** i wartości **slotów**. Akty dialogowe mówia systemowi jakie ma zadanie wykonać, a sloty jakie informacje potrzebuję od użytkownika do wykonania zadania.\n",
"\n",
"Źródła:[3]\n",
"\n",
"![](DST.png)"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"**Dlaczego jest to potrzebne?**\n",
"\n",
"Prowadząc dialog z człowiekiem z natury wychodzi nam zapamietywanie oraz łaczenie poprzednich wypowiedzi w całość, nie potrzebujemy się zastanawiać co oznacza odpowiedź \"tak\" bo zrozumieć że jest to odpowidź na zadane przez nas pytanie. System dialogowy potrzebuję właśnie takiego rozumienia kontekstu danej wypowiedzi aby prawidłowo działać."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"![Dialog](Dialog_1.png)\n",
"\n",
"W podanym przykładowym dialogu system nie potrzebował pytać ponownie o miejsce oraz rodzaj jedzenia które szuka użytkownik gdyż zostało to już podane wcześniej systemowi. "
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"**Dobry system DST powinnien zawierać właściwości:**\n",
"\n",
"Incrementality: System powinnien aktualizować swój stan po każdej wypowiedzi \n",
"\n",
"Context-awereness: System potrafi używać informacji z poprzednich tur dialogu \n",
"\n",
"Trainability: System ulepsza się po dostarczeniu nowych danych \n",
"\n",
"Portability: System powinnien działać w róznych aplikcajca w różnych dziedzinach, nawet bez danych treningowych z domeny"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"**Problematyka tworzenia DST**\n",
"\n",
"Jedną z przeszkód stojących na drodzę do idealnego DST jest właściwe inerpretowanie tego co było już powiedziane a to co właśnie powiedział użytkownik. Trzeba rozpoznać każdą zmianę jaką chce dokonać użytkownik w istniejących już wartościach slotów. Jest to zwłaszcza utrudnione przez nie zawsze precyzyjne informcaję podane do systemu. Trzeba inertpretować do czego się odnosi oraz co oznacza zdanie np.\"w takim razie jakieś tanie miejsce\" a bez kontekstu jest to nie możliwę.\n",
"\n",
"Gdy użytkownik zapyta się o rzecz, która nie istnieje w bazie system musi odpowiednio zaragować. Proste odpowiedzi typu \"Taka restauracja nie isteniej\" mogą tylko zniechęcić użytkownika do korzystania z systemu. Trzeba dopasować odpowiedź do brakujących danych można zapytać czy użytkownich chciałby zmienić lokalizacje lub rodzaj restuaracji o którą pytał. \n",
"\n",
"Problemy wynikają także z błednego odczytania co użytkownik powiedział(ASR) lub nie precyzyjnej odpowiedzi systemu(SLU). Takie błedy mimo dobrze działającego DST mogą spowodować minięcie się z oczekiwaniami użytkownika."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"**Tradycyjne rozwiązania w DST**\n",
"\n",
"Początkowo problemy monitorowania stanu dialogu rozwiązywano na kilka sposobów: \n",
"- Słowniki semantyczne, które umożliwiały\n",
"- Wyszukiwanie najlepszych cech z pośród zbiorów własnoręcznie wytworzonych\n",
"- Tworzenie bez znajomości kompleksowej ontologii domeny slotów na podstawie historii dialogów \n",
"\n",
"Źródła: [3]"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"**Modele wykorzystywane w DST**\n",
"\n",
"W przeciągu ostatnich lat do opartych na uczeniu maszynowym rozwiązań nakierowanych na DST wykorzystywane były różne architektury modeli, przeważnie coraz efektywniejsze. Przyjrzymy się następującym konceptom:\n",
"- RNN\n",
"- ReDST\n",
"- BERT\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"Rekurencyjna sieć neuronowa (RNN) - łańcuch kopii tej samej sieci korzystających z parametrów poprzedniczek"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"BERT"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"**Dialog State Tracking Challenge 2 & 3 Data**\n",
"\n",
"Z powodu tego iż zbieranie danych jest bardzo kosztowne, mało kto mógł korzystać z dobrze przygotowanych danych aby rozwijać własne DST. Dlatego aby ułatwić rozwój powstał pierwszy Dialog State Tracking Challenge i jego następca Dialog State Tracking Challenge 2 & 3.\n",
"DSTC 2 zawierał ponad 15 tysięcy dobrze opisanych dialogów udostępnionych aby ludzi mogli trenować swój system.\n",
"\n",
"Źródła: [2] [1]"
]
},
{
"cell_type": "code",
"execution_count": 53,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"system: Hello , welcome to the Cambridge restaurant system? You can ask for restaurants by area , price range or food type . How may I help you? dialog-acts-[{'slots': [], 'act': 'welcomemsg'}]\n",
"user: expensive restaurant in the south part of town dialog-acts-[{'slots': [], 'act': 'welcomemsg'}]\n",
"system: What kind of food would you like? dialog-acts-[{'slots': [['slot', 'food']], 'act': 'request'}]\n",
"user: any dialog-acts-[{'slots': [['slot', 'food']], 'act': 'request'}]\n",
"system: the good luck chinese food takeaway is a nice restaurant in the south of town serving chinese food dialog-acts-[{'slots': [['name', 'the good luck chinese food takeaway']], 'act': 'offer'}, {'slots': [['food', 'chinese']], 'act': 'inform'}, {'slots': [['pricerange', 'expensive']], 'act': 'inform'}, {'slots': [['area', 'south']], 'act': 'inform'}]\n",
"user: address dialog-acts-[{'slots': [['name', 'the good luck chinese food takeaway']], 'act': 'offer'}, {'slots': [['food', 'chinese']], 'act': 'inform'}, {'slots': [['pricerange', 'expensive']], 'act': 'inform'}, {'slots': [['area', 'south']], 'act': 'inform'}]\n",
"system: Sure , the good luck chinese food takeaway is on 82 Cherry Hinton Road Cherry Hinton dialog-acts-[{'slots': [['name', 'the good luck chinese food takeaway']], 'act': 'offer'}, {'slots': [['addr', '82 cherry hinton road cherry hinton']], 'act': 'inform'}]\n",
"user: type of food dialog-acts-[{'slots': [['name', 'the good luck chinese food takeaway']], 'act': 'offer'}, {'slots': [['addr', '82 cherry hinton road cherry hinton']], 'act': 'inform'}]\n",
"system: the good luck chinese food takeaway is a nice restaurant in the south of town in the expensive price range dialog-acts-[{'slots': [['name', 'the good luck chinese food takeaway']], 'act': 'offer'}, {'slots': [['pricerange', 'expensive']], 'act': 'inform'}, {'slots': [['area', 'south']], 'act': 'inform'}]\n",
"user: thank you good bye dialog-acts-[{'slots': [['name', 'the good luck chinese food takeaway']], 'act': 'offer'}, {'slots': [['pricerange', 'expensive']], 'act': 'inform'}, {'slots': [['area', 'south']], 'act': 'inform'}]\n"
]
}
],
"source": [
"import json\n",
"f = open('log.json')\n",
"f2 = open('label.json')\n",
"data = json.load(f)\n",
"user = json.load(f2)\n",
"for i in range(len(data['turns'])):\n",
" print(f'system: {data[\"turns\"][i][\"output\"][\"transcript\"]} dialog-acts-{data[\"turns\"][i][\"output\"][\"dialog-acts\"]}')\n",
" print(f'user: {user[\"turns\"][i][\"transcription\"]} dialog-acts-{data[\"turns\"][i][\"output\"][\"dialog-acts\"]}')"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"Co to jest\n",
"\n",
"DST jest to rozpozananie obecnego stanu dialogu na podstawię całego jego przebiegu.\n",
"\n",
"Po co to jest?\n",
"Dst umożliwa nam rozpozanie czego użytkownik jeszcze nam nie przekazał, jakie sloty nie zostały jeszcze uzupełnione. Umożlwia on szybkie zrozumienie gdy użytkoniwk odwoła się do poprzedniej swojej wypowiedzi.\n",
"\n",
"(Ludzie prowadząc dialog naturalnie zapamiętują na jaki temat toczy się dyskusja, System jednak potrzebuje mieć zaimplementowanę aby patrzeć na każdą nową ture dialogu jako nową element pewnej całość, aby mógł zrozumieć pewne odwołania lub skróty myślowe.)\n",
"\n",
"Problematyka\n",
"(Największym problem w monitorowaniu stanu dialogu jest nauczenie systemu do jakiego slota użytkownik się odwołuje, Oraz samo tworzenie slotów) \n",
"(do rozwiązań - Problemem jest że najczęstrze rozwiązania działają najlepiej na rozpoznawaniu co się dzieje w aktualnej turze, a nie koniecznie patrzą na ogół dialogu)\n",
"\n",
"\n",
"(jeżeli nie ma czegoś w bazie np. restauracji tajskiej, system musi i tak zrozumieć żę użytkownich chce się dowiedzieć o resturacji )\n",
"\n",
"Rozwiązania istniejące\n",
"Problem klasyfikacji \n",
"- Znalezienie istotnych cech z pośród własnorecznie utworzonych \n",
"- Słowniki semantyczne \n",
"Tworzenie bez znajomości kompleksowej ontologii domeny slotów na podstawie historii dialogów \n",
"\n",
"\n",
"\n",
"RNN- sieć neuronowa która wpierdala w siebie ciągle wszystkie tury dialogu -co powoduję że dużo ma niepotrzebnych informacji\n",
"\n",
"\n",
"tera - turn-by-turn z pre-trained model -czyli biorą to co wywnioskował model poprzednio i łączy to z tym co zostało powiedziane w tej turze i zwraca nowy wniosek. "
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"**Bibliografia**\n",
"\n",
"**[1]** DSTC https://github.com/matthen/dstc\n",
"\n",
"**[2]** The Second Dialog State Tracking Challenge https://aclanthology.org/W14-4337.pdf\n",
"\n",
"**[3]** Dialogue State Tracking with Incremental Reasoning https://direct.mit.edu/tacl/article/doi/10.1162/tacl_a_00384/101875/Dialogue-State-Tracking-with-Incremental-Reasoning"
]
}
],
"metadata": {
"celltoolbar": "Slideshow",
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.7"
}
},
"nbformat": 4,
"nbformat_minor": 2
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long