307 lines
16 KiB
Plaintext
307 lines
16 KiB
Plaintext
|
{
|
||
|
"cells": [
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {
|
||
|
"collapsed": false
|
||
|
},
|
||
|
"source": [
|
||
|
"![Logo 1](https://git.wmi.amu.edu.pl/AITech/Szablon/raw/branch/master/Logotyp_AITech1.jpg)\n",
|
||
|
"<div class=\"alert alert-block alert-info\">\n",
|
||
|
"<h1> Systemy Dialogowe </h1>\n",
|
||
|
"<h2> 5. <i>Struktura dialogu</i> [laboratoria]</h2> \n",
|
||
|
"<h3> Marek Kubis (2021)</h3>\n",
|
||
|
"</div>\n",
|
||
|
"\n",
|
||
|
"![Logo 2](https://git.wmi.amu.edu.pl/AITech/Szablon/raw/branch/master/Logotyp_AITech2.jpg)"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"Struktura dialogu\n",
|
||
|
"=================\n",
|
||
|
"\n",
|
||
|
"Dialog mo\u017cna podzieli\u0107 na *tury* b\u0119d\u0105ce naprzemiennymi wypowiedziami\n",
|
||
|
"poszczeg\u00f3lnych uczestnik\u00f3w konwersacji.\n",
|
||
|
"\n",
|
||
|
"<!-- TODO rysunek drawio (chmurki) -->\n",
|
||
|
"\n",
|
||
|
"### Akty mowy\n",
|
||
|
"Akcje podejmowane przez m\u00f3wc\u00f3w za pomoc\u0105 wypowiedzi nazywamy *aktami mowy*.\n",
|
||
|
"\n",
|
||
|
"#### Aspekty akt\u00f3w mowy wed\u0142ug Austina (za Zdunkiewicz 1993)\n",
|
||
|
"| Aspekt | Opis |\n",
|
||
|
"|-------------:|:-----------------------------------------------------------------------------------------------------------------------------|\n",
|
||
|
"| lokucyjny | dotyczy samego procesu tworzenia okre\u015blonego wyra\u017cenia (bez uwzgl\u0119dnienia kontekstu) |\n",
|
||
|
"| illokucyjny | dotyczy tego co m\u00f3wca chce osi\u0105gn\u0105\u0107 za po\u015brednictwem danej wypowiedzi (np. pro\u015bba, ostrze\u017cenie, obietnica, \u017c\u0105danie) |\n",
|
||
|
"| perlokucyjny | dotyczy ubocznych cel\u00f3w i rezeltat\u00f3w osi\u0105gni\u0119tych za po\u015brednictwem danej wypowiedzi (np. zlekcewa\u017cenie, obraza, rozbawienie) |\n",
|
||
|
"\n",
|
||
|
"#### Klasyfikacja akt\u00f3w mowy wed\u0142ug Searla (za Zdunkiewicz 1993)\n",
|
||
|
"\n",
|
||
|
"| Typ | Cel | Przyk\u0142ady |\n",
|
||
|
"|--------------------------:|:------------------------------------------------------------|:------------------------|\n",
|
||
|
"| asercja (assertive) | przedstawienie s\u0105du o stanie rzeczy | w\u0105tpienie |\n",
|
||
|
"| dyrektywa (directive) | wywieranie nacisku na odbiorc\u0119 | rozkaz, pro\u015bba |\n",
|
||
|
"| komisywa (commisive) | podjecie zobowi\u0105zania | obietnica, zobowi\u0105zanie |\n",
|
||
|
"| ekspresywa (expressive) | wyra\u017cenie stanu emocjonalnego | gratulacje, kondolencje |\n",
|
||
|
"| deklaratywa (declarative) | wywo\u0142anie okre\u015blonego stanu rzeczy w stosunkach spo\u0142ecznych | mianowanie |"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"### Akty dialogowe\n",
|
||
|
"\n",
|
||
|
"Buduj\u0105c system dialogowy zwykle przyjmuje si\u0119 w\u0119\u017csza i jednocze\u015bnie bardziej\n",
|
||
|
"szczeg\u00f3\u0142ow\u0105 klasyfikacj\u0119.\n",
|
||
|
"Tzw. *akty dialogowe* stanowi\u0105 reprezentacj\u0119 znaczenia wypowiedzi u\u017cytkownika i/lub systemu.\n",
|
||
|
"\n",
|
||
|
"Przyjrzyjmy si\u0119 teraz klasyfikacji akt\u00f3w dialogowych, kt\u00f3re Henderson i in. (2013), wzoruj\u0105c si\u0119 na Youngu i in. (2010), przyj\u0119li na potrzeby ewaluacji system\u00f3w rekomenduj\u0105cych restauracje."
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": null,
|
||
|
"metadata": {},
|
||
|
"outputs": [],
|
||
|
"source": [
|
||
|
"!mkdir -p l04\n",
|
||
|
"%cd l04\n",
|
||
|
"!wget -c https://github.com/matthen/dstc/releases/download/v1/dstc2_test.tar.gz\n",
|
||
|
"!tar xzvf dstc2_test.tar.gz\n",
|
||
|
"%cd .."
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"#### Akty u\u017cytkownika\n",
|
||
|
"\n",
|
||
|
"| Typ | Opis |\n",
|
||
|
"|---------:|:-----------------------------------|\n",
|
||
|
"| ack | potwierdzenie |\n",
|
||
|
"| affirm | zatwierdzenie |\n",
|
||
|
"| bye | zako\u0144czenie rozmowy |\n",
|
||
|
"| hello | przywitanie |\n",
|
||
|
"| help | pro\u015bba o pomoc (bez szczeg\u00f3\u0142\u00f3w) |\n",
|
||
|
"| negate | zaprzeczenie |\n",
|
||
|
"| null | akt niezrozumia\u0142y dla systemu |\n",
|
||
|
"| repeat | pro\u015bba o powt\u00f3rzenie |\n",
|
||
|
"| reqalts | pro\u015bba o alternatywn\u0105 rekomendacj\u0119 |\n",
|
||
|
"| reqmore | pro\u015bba o uszczeg\u00f3\u0142owienie |\n",
|
||
|
"| restart | \u017c\u0105danie restartu |\n",
|
||
|
"| silence | cisza |\n",
|
||
|
"| thankyou | podzi\u0119kowanie |\n",
|
||
|
"| confirm | potwierdzenie warto\u015bci slotu |\n",
|
||
|
"| deny | odrzucenie warto\u015bci slotu |\n",
|
||
|
"| inform | przekazanie warto\u015bci slotu |\n",
|
||
|
"| request | pro\u015bba o podanie warto\u015bci slotu |"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"Zilustrujmy powy\u017csze zestawienie przyk\u0142adami bezpo\u015brednio ze zbioru testowego konkursu *Dialog State Tracking Challenge 2*."
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": null,
|
||
|
"metadata": {},
|
||
|
"outputs": [],
|
||
|
"source": [
|
||
|
"import glob\n",
|
||
|
"import json\n",
|
||
|
"import tabulate\n",
|
||
|
"import itertools\n",
|
||
|
"\n",
|
||
|
"def acts2desc(acts):\n",
|
||
|
" descs = []\n",
|
||
|
"\n",
|
||
|
" for intent, iacts in itertools.groupby(sorted(acts, key=lambda x: x['act']), key=lambda x: x['act']):\n",
|
||
|
" slots = ','.join(f'{slot[0]}={slot[1]}' if slot[0] != 'slot' else slot[1] for act in iacts for slot in act['slots'])\n",
|
||
|
" descs.append(f'{intent}({slots})')\n",
|
||
|
"\n",
|
||
|
" return '&'.join(descs) if descs else 'null()'\n",
|
||
|
"\n",
|
||
|
"examples = set()\n",
|
||
|
"\n",
|
||
|
"for path in sorted(glob.glob('l04/data/**/label.json', recursive=True)):\n",
|
||
|
" if len(examples) > 30:\n",
|
||
|
" break\n",
|
||
|
"\n",
|
||
|
" with open(path) as f:\n",
|
||
|
" for turn in json.load(f)['turns']:\n",
|
||
|
" examples.add((acts2desc(turn['semantics']['json']), turn['transcription']))\n",
|
||
|
" # examples.add(((turn['semantics']['cam']), turn['transcription']))\n",
|
||
|
"\n",
|
||
|
"tabulate.tabulate(examples, tablefmt='html', headers=['act', 'utterance'])"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"Powy\u017csze przyk\u0142ady pokazuj\u0105, \u017ce tury nie zawsze s\u0105 pe\u0142nymi zdaniami. Komunikacja przy u\u017cyciu mowy\n",
|
||
|
"ma spontaniczny charakter, st\u0105d w toku konwersacji mog\u0105 pojawi\u0107 si\u0119 poprawki, wtr\u0119ty czy \u017c\u0105dania\n",
|
||
|
"restartu.\n",
|
||
|
"\n",
|
||
|
"#### Akty systemu\n",
|
||
|
"\n",
|
||
|
"| Typ | Opis |\n",
|
||
|
"|----------------------------:|:--------------------------------------------------------|\n",
|
||
|
"| affirm | potwierdzenie |\n",
|
||
|
"| bye | zako\u0144czenie rozmowy |\n",
|
||
|
"| canthear | \u201enic nie s\u0142ysz\u0119\u201d |\n",
|
||
|
"| confirm-domain | pro\u015bba o potwierdzenie dziedziny |\n",
|
||
|
"| negate | zaprzeczenie |\n",
|
||
|
"| repeat | pro\u015bba o powt\u00f3rzenie |\n",
|
||
|
"| reqmore | sprawdzenie czy u\u017cytkownik chce dodatkowych informacji |\n",
|
||
|
"| welcomemsg | przywitanie |\n",
|
||
|
"| canthelp | \u201enie mog\u0119 pom\u00f3c\u201d |\n",
|
||
|
"| canthelp.missing_slot_value | \u201epotrzebuj\u0119 pozna\u0107 warto\u015b\u0107 slotu, \u017ceby pom\u00f3c\u201d |\n",
|
||
|
"| expl-conf | potwierdzenie (wprost), \u017ce slot ma dan\u0105 warto\u015b\u0107 |\n",
|
||
|
"| impl-conf | potwierdzenie (nie wprost), \u017ce slot ma dan\u0105 warto\u015b\u0107 |\n",
|
||
|
"| inform | poinformowanie u\u017cytkownika, o przyj\u0119tej warto\u015bci slotu |\n",
|
||
|
"| offer | rekomendacja (restauracji) |\n",
|
||
|
"| request | pytanie u\u017cytkownika o warto\u015b\u0107 slotu |\n",
|
||
|
"| select | pro\u015bba o dokonanie wyboru spo\u015br\u00f3d przedstawionych opcji |\n",
|
||
|
"\n",
|
||
|
"Przyjrzyjmy si\u0119 r\u00f3wnie\u017c przyk\u0142adom akt\u00f3w systemowych."
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": null,
|
||
|
"metadata": {},
|
||
|
"outputs": [],
|
||
|
"source": [
|
||
|
"import glob\n",
|
||
|
"import json\n",
|
||
|
"import tabulate\n",
|
||
|
"\n",
|
||
|
"examples = set()\n",
|
||
|
"\n",
|
||
|
"for path in sorted(glob.glob('l04/data/**/log.json', recursive=True)):\n",
|
||
|
" if len(examples) > 30:\n",
|
||
|
" break\n",
|
||
|
"\n",
|
||
|
" with open(path) as f:\n",
|
||
|
" for turn in json.load(f)['turns']:\n",
|
||
|
" output = turn['output']\n",
|
||
|
" examples.add((acts2desc(output['dialog-acts']), output['transcript']))\n",
|
||
|
"\n",
|
||
|
"tabulate.tabulate(examples, tablefmt='html', headers=['act', 'utterance'])"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"Jak wida\u0107 w powy\u017cszym uj\u0119ciu akty dialogowe takie jak `inform`, `request` czy `expl-conf` mog\u0105\n",
|
||
|
"przyjmowa\u0107 pewne parametry.\n",
|
||
|
"\n",
|
||
|
"### Ramy\n",
|
||
|
"Struktur\u0105 danych powszechnie wykorzystywan\u0105 w systemach dialogowych do reprezentacji wiedzy\n",
|
||
|
"jest *rama* (ang. *frame*).\n",
|
||
|
"Ramy s\u0105 wykorzystywane zar\u00f3wno do reprezentowania poszczeg\u00f3lnych akt\u00f3w mowy jak i do\n",
|
||
|
"modelowania bie\u017c\u0105cego stanu dialogu oraz cel\u00f3w u\u017cytkownika.\n",
|
||
|
"Rama ma nazw\u0119 oraz pewn\u0105 liczb\u0119 *slot\u00f3w*. Ka\u017cdy slot ma okre\u015blon\u0105 nazw\u0119 oraz warto\u015b\u0107.\n",
|
||
|
"\n",
|
||
|
"Ramy przedstawione poni\u017cej stanowi\u0105 reprezentacje akt\u00f3w dialogowych."
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": null,
|
||
|
"metadata": {},
|
||
|
"outputs": [],
|
||
|
"source": [
|
||
|
"import json\n",
|
||
|
"\n",
|
||
|
"samples = ['voip-00d76b791d-20130327_005342',\n",
|
||
|
" 'voip-00d76b791d-20130327_012544',\n",
|
||
|
" 'voip-0f41c16f2f-20130402_004710']\n",
|
||
|
"\n",
|
||
|
"for sample in samples:\n",
|
||
|
" with open(f'l04/data/Mar13_S2A0/{sample}/label.json') as f:\n",
|
||
|
" print(json.dumps(json.load(f)['turns'][3]['semantics']['json'], indent=2))"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"Zadanie\n",
|
||
|
"-------\n",
|
||
|
"Opisa\u0107 wypowiedzi u\u017cytkownika i odpowiedzi systemu zgromadzone w Pa\u0144stwa korpusie eksperymentalnym (tj. plikach `*.tsv` w katalogu `data`) aktami dialogowymi."
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"### Uwagi\n",
|
||
|
"\n",
|
||
|
" - Akty reprezentuj\u0105ce znaczenie poszczeg\u00f3lnych wypowiedzi nale\u017cy umieszcza\u0107 w trzeciej kolumnie plik\u00f3w `*.tsv`.\n",
|
||
|
"\n",
|
||
|
" - Do zapisu akt\u00f3w prosz\u0119 stosowa\u0107 notacj\u0119 wykorzystywan\u0105 w przyk\u0142adach (`inform(phone=01223 244277)&offer(name=the lucky star)`).\n",
|
||
|
"\n",
|
||
|
" - Klasyfikacja akt\u00f3w dialogowych przedstawiona przez Hendersona i in. (2013) mo\u017ce stanowi\u0107 dobry punkt wyj\u015bcia, ale nie trzeba si\u0119 jej kurczowo trzyma\u0107."
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"Przyk\u0142adowe narz\u0119dzia do oznaczania tekstu\n",
|
||
|
"------------------------------------------\n",
|
||
|
"\n",
|
||
|
" - [brat](http://brat.nlplab.org/)\n",
|
||
|
"\n",
|
||
|
" - [doccano](https://github.com/doccano/doccano)\n",
|
||
|
"\n",
|
||
|
" - [WebAnno](https://webanno.github.io/webanno/)\n",
|
||
|
"\n",
|
||
|
" - [LabelStudio](https://labelstud.io/)\n",
|
||
|
"\n",
|
||
|
" - Microsoft Excel, Office 365 itp.\n"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"Literatura\n",
|
||
|
"----------\n",
|
||
|
" 1. Austin, John Langshaw, How to Do Things with Words, Oxford, 1962.\n",
|
||
|
"\n",
|
||
|
" 2. John Searle, Speech Acts, Cambridge University Press, 1969, ISBN 0-521-09626-X.\n",
|
||
|
"\n",
|
||
|
" 3. Dorota Zdunkiewicz, Akty mowy, Wsp\u00f3\u0142czesny j\u0119zyk polski, Wroc\u0142aw, 1993, pp. 259-270.\n",
|
||
|
"\n",
|
||
|
" 4. Matthew Henderson, Blaise Thomson, Jason D. Williams, The Second Dialog State Tracking Challenge, SIGDIAL 2014, 263-272."
|
||
|
]
|
||
|
}
|
||
|
],
|
||
|
"metadata": {
|
||
|
"jupytext": {
|
||
|
"cell_metadata_filter": "-all",
|
||
|
"main_language": "python",
|
||
|
"notebook_metadata_filter": "-all"
|
||
|
},
|
||
|
"author": "Marek Kubis",
|
||
|
"email": "mkubis@amu.edu.pl",
|
||
|
"lang": "pl",
|
||
|
"subtitle": "5.Struktura dialogu[laboratoria]",
|
||
|
"title": "Systemy Dialogowe",
|
||
|
"year": "2021"
|
||
|
},
|
||
|
"nbformat": 4,
|
||
|
"nbformat_minor": 4
|
||
|
}
|