Společnost JetBrains uvolnila Mellum, tj. svůj velký jazykový model (LLM) pro vývojáře, jako open source. Mellum podporuje programovací jazyky Java, Kotlin, Python, Go, PHP, C, C++, C#, JavaScript, TypeScript, CSS, HTML, Rust a Ruby.
Vývojáři Kali Linuxu upozorňují na nový klíč pro podepisování balíčků. K původnímu klíči ztratili přístup.
V březnu loňského roku přestal být Redis svobodný. Společnost Redis Labs jej přelicencovala z licence BSD na nesvobodné licence Redis Source Available License (RSALv2) a Server Side Public License (SSPLv1). Hned o pár dní později vznikly svobodné forky Redisu s názvy Valkey a Redict. Dnes bylo oznámeno, že Redis je opět svobodný. S nejnovější verzí 8 je k dispozici také pod licencí AGPLv3.
Oficiální ceny Raspberry Pi Compute Modulů 4 klesly o 5 dolarů (4 GB varianty), respektive o 10 dolarů (8 GB varianty).
Byla vydána beta verze openSUSE Leap 16. Ve výchozím nastavení s novým instalátorem Agama.
Devadesátková hra Brány Skeldalu prošla portací a je dostupná na platformě Steam. Vyšel i parádní blog autora o portaci na moderní systémy a platformy včetně Linuxu.
Lidi dělají divné věci. Například spouští Linux v Excelu. Využít je emulátor RISC-V mini-rv32ima sestavený jako knihovna DLL, která je volaná z makra VBA (Visual Basic for Applications).
Revolut nabídne neomezený mobilní tarif za 12,50 eur (312 Kč). Aktuálně startuje ve Velké Británii a Německu.
Společnost Amazon miliardáře Jeffa Bezose vypustila na oběžnou dráhu první várku družic svého projektu Kuiper, který má z vesmíru poskytovat vysokorychlostní internetové připojení po celém světě a snažit se konkurovat nyní dominantnímu Starlinku nejbohatšího muže planety Elona Muska.
Poslední aktualizací začal model GPT-4o uživatelům příliš podlézat. OpenAI jej tak vrátila k předchozí verzi.
V poslední době poskytovatelé i uživatelé místo telefonu stále častěji používají různé formy Instant Messagingu (IM). IM je často efektivnější pro obě strany. Standardní IM má na straně poskytovatele člověka, který může být potenciálně nahrazen robotem. Jak vyrobit takového robota schopného komunikovat s člověkem přirozeným jazykem, popisujeme v následujícím článku.
IBM nabízí prostředí, které vytvoření robota usnadní, na své platformě Bluemix. Bluemix je platforma poskytovaná jako služba (PaaS, Platform As A Service) v prostředí cloudu. Díky tomu nepotřebujete na svém počítači nic instalovat, stačí vám webový prohlížeč.
Bluemix obsahuje řadu připravených služeb. My se zaměříme na jednu z nich, tzv. konverzační službu (Conversation Service). Konverzační služba je v katalogu služeb Bluemix v sekci Watson. V této sekci naleznete řadu tzv. kognitivních služeb, tj. služeb, které nějak souvisejí s vnímáním a porozuměním. Naleznete tam například služby pro rozpoznávání a syntézu hlasu, pro porozumění a klasifikaci obsahu dokumentů a také již zmíněnou konverzační službu. Aplikace, kterou pomocí konverzační služby spouštíte, komunikuje s uživatelem pomocí textu. Pokud budete chtít vytvořit robota, který mluví a rozumí, můžete sáhnout po dalších službách ze stejné sekce.
Pod pojmem robot si nepředstavujte robota s fyzickým tělem, i když i pro takové se konverzační služba používá. Robot (někdy také nazývaný jen bot nebo chatbot) je program, který porozumí vstupnímu textu a reaguje na něj textovou odpovědí. Robot je schopný vést s uživatelem plynulý dialog. Na rozdíl od známých experimentů v minulosti (např. Eliza), kdy se autoři snažili vytvořit robota, kterého člověk neodliší od člověka, se roboti, o kterých mluvíme, nesnaží předstírat, že jsou lidé. Naši roboti se snaží poskytovat užitečné informace tou nejvhodnější formou, což často bývá právě přirozená lidská řeč.
Konverzační aplikace mají řadu využití od porady při nakupování až po učení.
Jak tedy začít? Ze všeho nejdříve si vytvořte účet pro prostředí Bluemix (www.bluemix.com). Zdarma získáte testovací verzi účtu, která je časově omezená na 30 dní.
V katalogu služeb si vyberte v sekci „Watson“ službu „Conversation“. Po kliknutí na ni si vyberte tzv. „free plan“, tedy testovací verzi, kterou můžete používat zdarma.
Následně obdržíte unikátní autorizační údaje (volba Service Credentials na obrázku níže). Údaje jsou specifické pro danou službu a jsou jiné než ty pro přihlášení do prostředí Bluemix. Když budete využívat později i jiné služby, každá bude mít své autorizační údaje.
Zmáčknutím zeleného tlačítka „Launch tool“ na stránce se dostanete do prostředí aplikace pro vytváření robota.
V terminologii konverzační služby se robotovi říká „workspace“, tedy „pracovní plocha“. Je to termín méně vznešený než slovo robot, lépe ale vystihuje, jak robot vzniká. My zůstaneme u termínu robot, případně konverzační aplikace.
Na úvodní obrazovce je každá konverzační aplikace reprezentována jedním obdélníkem. Každý obdélník má své číslo (workspace ID), jméno a popis.
Kliknutím na zelené tlačítko „Create“ si můžete vytvořit novou konverzační aplikaci. Můžete také nahrát existující konverzační aplikaci kliknutím na ikonu vpravo. Konverzačních aplikací můžete mít v jedné konverzační službě mnoho. V testovací verzi je počet omezen na tři.
K editaci konkrétní konverzační aplikace se dostanete dvojklikem na obdélník. Robot se skládá z několika částí. Přístup k jednotlivým částem je z hlavní nabídky, kterou rozbalíte zmáčknutím ikony v levém horním rohu.
Nabídka se skládá ze dvou sekcí: „Build“ a „Improve“. Část „Build“ umožňuje práci s třemi komponentami konverzační aplikace, s tzv. „Intenty“, „Entitami“ a „Dialogem“. Každé z částí také odpovídá jedna složka na pracovní ploše (viz. nadpisy v horní liště). Druhá sekce hlavní nabídky („Improve“) zpřístupňuje informace o používání robota. Můžete ji použít k lepšímu pochopení, jak uživatelé robota používají, jaké kladou dotazy a v jakých situacích robot chybuje. Doba uchování dat pro testovací verzi je omezena na 7 dní.
Když začínáte s návrhem robota, nemusíte znát všechny detaily prostředí. Použití nástrojů je intuitivní. Je ale dobře předem porozumět základním pojmům.
Zkuste se nejdříve zamyslet, co od robota očekáváte. Identifikujte otázky, které uživatel bude klást a připravte odpovědi. Robot realizuje dvě základní funkce. Snaží se porozumět, co uživatel chce, a následně generovat odpovědi.
Situaci trochu komplikuje fakt, že uživatelův záměr a tím i správná odpověď robota záleží na kontextu. Například uživatelův vstup „ano“ znamená smazat soubor (pokud předcházel dotaz „Opravdu soubor smazat?“) nebo znamená záměr cestovat do Španělska (pokud předcházel dotaz „Chcete cestovat do Španělska?“).
Porozuměním vstupnímu textu popisujeme v sekcích „Intents“ a „Entities“ (v nabídce v sekci „Build“). To, jak má robot v daném kontextu reagovat, popisujeme v sekci „Dialog“.
Pojďme se nejdříve seznámit se základními částmi konverzační aplikace.
Intent (česky záměr), pojmenovává společně skupinu vět, které mají společný cíl. Intent reprezentuje záměr uživatele získat určitý typ informace.
Na stejnou věc se uživatel může dotázat mnoha způsoby, například záměr otázek: „Kolik je hodin?“, „Nemáte prosím hodinky?“, „Potřeboval bych vědět přesný čas.“ je stejný. Uživatel chce vědět přesný čas.
Jiný příklad. Chcete, aby konverzační aplikace na otázku: „Co umíš?“ odpověděla: „Poradím vám, jak obnovit heslo u vašeho e-mailového účtu“. Může se ale stát, že se uživatel zeptá například větami „Jak mi můžeš pomoci.“, „Co mohu říci?“.
Je pochopitelně obtížné shromáždit všechny věty, které uživatel může napsat k vyjádření určitého záměru. Potřebujeme, aby robot poznal, o jaký záměr jde i v případě, že se uživatel zeptal trochu jinak, než je uvedeno v příkladech. Popsat něco takového v běžném programovacím jazyce je obtížné. V prostředí konverzační služby stačí uvést několik reprezentativních příkladů. Zbytek již zajistí technologie v pozadí (tzv. klasifikátor přirozeného jazyka, Natural Language Classifier), který se naučí na příkladech. Je také schopen příklady zevšeobecnit. Každý intent by měl obsahovat několik příkladů, doporučuje se alespoň pět. Příklady by měly být vhodnými reprezentanty uživatelských vstupů. Není dobře, když se počet příkladů pro jednotlivé záměry výrazně liší.
Naučit robota rozpoznat záměr je v prostředí popisované konverzační služby snadné. Zvolíte položku „Intent“ v sekci „Build“, zadáte název a přidáte několik příkladů vět, které mají stejný smysl.
Všimněte si, že před název intentu se předřazuje znak #. Znak # se používá pro označení intentů, @ pro označení entit a $ pro proměnné. Klasifikátor v pozadí pro každý vstup vybere jen jeden intent.
Schopnost vznikající konverzační aplikace klasifikovat vstupy si můžete hned ověřit. Zmáčknutím ikonky „Ask Watson“ v pravém horním rohu obrazovky se zobrazí testovací panel (panel „Try it out“), ve kterém můžete zadat vstupní věty a sledovat, jak aplikace reaguje. Trénování klasifikátoru intentů nějakou dobu trvá, o čemž vás informuje nápis v horní části testovacího panelu. Když uděláte změnu v popisu intentů, musíte počkat několik desítek vteřin, než se modely v pozadí přeškolí a systém se začne chovat podle nových příkladů.
Pokud nejste spokojeni s klasifikací zadané věty, můžete ji operativně přiřadit k jinému intentu přímo v testovacím panelu.
Entita se používá k detekci doplňující informace ve větě. Detekce entit probíhá nezávisle na detekci intentů. Každá klasifikovaná věta má jeden intent, ale může mít několik entit.
Příkladem je věta „Chci cestovat zítra do Hradce Králové“. Intent je například #CESTA, první entita @CAS, má hodnoty „zítra“ a druhá entita @MÍSTO má hodnotu “Hradec Králové“.
Všimněte si, že entita má na rozdíl od intentu nejen jméno, ale i hodnotu. Entity mohou být více typů. Zde popisujeme především výčtové entity, které autor konverzační aplikace může definovat v sekci Entity. Můžete také použít několik systémových entit, které vám pomohou detekovat například čísla nebo třeba datum.
Vytvořit výčtovou entitu je jednoduché. Zadáte, jak se bude jmenovat a jaké může nabývat hodnoty. Každá hodnota může mít navíc ještě synonyma, tedy slova, která jsou chápána jako slova stejného významu. Pokud například vytvoříte entitu @ANO_NE, která nabývá hodnot „ano“ nebo „ne“, můžete k hodnotě „ano“ přidat synonymum „jo“. Pro vstupní větu „Jo, je to tak.“ aplikace detekuje přítomnost entity @ANO_NE s hodnotou „ano“. Všimněte si, že hodnota entity je „ano“, nikoliv „jo“. Entita vždy nabývá hodnot základních, i když v klasifikovaném textu je užito synonymum.
To, jak vámi navržené entity fungují, si můžete zase vyzkoušet v testovacím panelu („Try it out“) podobně, jak jsme to dělali pro intenty.
Občas nastává situace, kdy si návrhář aplikace může vybrat, který prostředek využije. Můžete si například vytvořit dva oddělené intenty (např. #ANO a #NE) a podmiňovat odpověď detekcí intentu. Alternativně můžete vytvořit jedinou entitu (např. @ANO_NE) a podmínit odpověď přítomností entity s konkrétní hodnotou (např. @ANO_NE:ano). Je důležité si uvědomit, že současné intenty využívají zobecněnou reprezentaci příkladů, detekují tedy i věty podobné. Naopak entity vyžadují přesnou shodu hodnoty, případně synonyma.
Definicí intentů a entit se dostáváme velmi blízko k vytvoření konverzační aplikace. Zbývá jen popsat, co má robot říci, když rozpozná nějaký intent nebo entitu. K popisu takového přiřazení slouží sekce Dialog. Pro složitější konverzace pochopitelně nestačí jen rozpoznat intent. I to jde zapsat v sekci Dialog a popíšeme si to později.
Pojďme si nejdříve vyzkoušet nejjednodušší případ, kdy robot reaguje jen na rozpoznaný intent. Chcete například, aby robot odpověděl na pozdrav pozdravem. Předpokládáme, že jsme si vytvořili intent #POZDRAV, pro jehož definici použijeme příklad „Ahoj“, “Nazdar“ a „Dobrý den“. Dialog vytvoříte z tzv. dialogových uzlů. Poté, co vytvoříte nový dialog, má dialog jediný uzel. Ten je připojen k nápisu „conversation starts“.
Kliknutím na uzel se zobrazí v pravé části obrazovky formulář, ve kterém uzel popíšete. Každý uzel má vstupní podmínku (část 1. Trigger) a část, která popisuje, co se stane, když je podmínka splněna (část 2. Response).
Chcete-li, aby dialog odpověděl při detekci intentu #POZDRAV, stačí, když do podmínky uzlu napíšete #POZDRAV a do části odpovědi označené „Enter a response“ napíšete odpověď (např. „Nazdar“).
Vše si můžete hned vyzkoušet v testovacím panelu po pravé straně obrazovky (Try it out). Změny v dialogové části se do chování konverzační aplikace promítnou téměř okamžitě (změny v intentech a entitách vyžadují chvíli čekání, než se je klasifikátor znovu naučí).
Pro praktický projekt, který umí něco více než pozdravit, už s jediným uzlem nevystačíte. Další uzly přidáte kliknutím na znak „+“ pod uzlem. Při zadávání uživatelského vstupu se postupně vyhodnocují dialogové uzly zavěšené pod symbol „conversation starts“. Pokud se některá podmínka splní, uzel se provede a konverzační aplikace odpoví. Zpracování vstupu končí a další vstup se zase bude vyhodnocovat počínaje nejvýše umístěným uzlem. Pokud podmínka uvedená v uzlu není splněna, pokračuje se uzlem pod aktuálním uzlem. Pokud žádný uzel podmínku nesplňuje, konverzační aplikace na otázku neodpoví. Pokud chcete, aby konverzační aplikace odpověděla vždy (alespoň oznámením, že nerozumí), umístíte jako poslední uzel konverzační uzel s podmínkou anything else. Podmínka anything else je splněna vždy. Do její odpovědi můžete napsat např. „Promiňte, nerozumím vám.“.
Další speciální podmínka, kterou můžete použít, je podmínka „conversation_start“. Podmínka je splněna, pokud konverzace právě začíná. Konverzační uzel s touto podmínkou je typicky úplně první uzel. Provede se ještě dříve, než uživatel zadá svůj první vstup. Typicky obsahuje popisem funkce konverzační aplikace (např. „Vítejte ve službě pro změnu hesla.“).
Co když potřebujete popsat dialog, který bere v úvahu předchozí konverzaci? Uživatel vyjádří potřebu nastavit heslo („Chci nastavit heslo“). Aplikace odpoví „Máte u nás existující účet?“ a očekává jasnou odpověď „ano“ nebo „ne“. Pokud by uživatel napsal „ano“ nebo „ne“ na začátku konverzace, nebylo by jasné s čím uživatel (ne)souhlasí. V takovém případě by měl robot oznámit, že nerozumí, nebo by měl požádal o upřesnění. V případě položené otázky chcete jinou reakci. Odpověď tedy závisí na kontextu.
Možná jste si všimli, že vybraný dialogový uzel má symboly „+“ pro přidání nového uzlu nejen pod sebou, ale i vedle sebe. Pokud přidáte dialogový uzel vedle uzlu, bude se po provedení uzlu pokračovat vyhodnocováním dalších uzlu vpravo. Ty mohou mít zase další uzly pod sebou, případně vedle sebe. Pokud se provede uzel, který již nemá žádného následovníka (další uzel vpravo od sebe), další vstup se bude vyhodnocovat od začátku (od nápisu „conversation starts“).
V našem příkladu má prvý uzel podmínku #PASSWORD a odpověď „Rozumím, že chcete změnit heslo, byl váš účet napaden?“. Má dva následovníky, jeden s podmínkou #ANO a odpovědi „rád vám poradím“, druhý s podmínkou #NE a s odpovědí „To nás mrzí, to je jediná věc, s kterou vám můžeme pomoci.“.
Se stromovou dialogovou strukturou si často vystačíte. Není to ale vše, co sekce dialog pro vytváření konverzačních modelů nabízí.
Máte možnost například nastavovat proměnné, přeskakovat mezi dialogovými uzly nebo komunikovat se vzdálenými službami. Některým z těchto funkcí se budeme věnovat v dalším díle.
Tomáš Macek tomas.macek@cz.ibm.com
David Kramný david_kramny@cz.ibm.com
Nástroje: Tisk bez diskuse
Tiskni
Sdílej:
Diskuse byla administrátory uzamčena