ChatScript - ChatScript

ChatScript is een combinatie van Natural Language- engine en dialoogbeheersysteem, oorspronkelijk ontworpen voor het maken van chatbots , maar wordt momenteel ook gebruikt voor verschillende vormen van NL-verwerking . Het is geschreven in C ++ . De engine is een open source-project bij SourceForge . en GitHub .

ChatScript is geschreven door Bruce Wilcox en oorspronkelijk uitgebracht in 2011, nadat Suzette (geschreven in ChatScript) de Loebner Prize 2010 won en een van de vier menselijke rechters voor de gek hield.

Kenmerken

In het algemeen streeft ChatScript ernaar om uiterst beknopt te schrijven, aangezien de beperkende schaalbaarheid van handgeschreven chatbots is hoeveel / snel men het script kan schrijven.

Omdat ChatScript is ontworpen voor interactieve conversatie, behoudt het automatisch de gebruikersstatus tijdens volleys. Een salvo is een willekeurig aantal zinnen dat de gebruiker tegelijk invoert en de reactie van de chatbots.

Het basiselement van scripting is de regel. Een regel bestaat uit een type, een label (optioneel), een patroon en een uitvoer. Er zijn drie soorten regels. Gambits zijn iets dat een chatbot zou kunnen zeggen als hij controle heeft over het gesprek. Repliek zijn regels die reageren op een opmerking van een gebruiker die is gekoppeld aan wat de chatbot zojuist heeft gezegd. Responders zijn regels die reageren op willekeurige gebruikersinvoer die niet noodzakelijkerwijs is gekoppeld aan wat de chatbot zojuist heeft gezegd. Patronen beschrijven de omstandigheden waaronder een regel kan worden geactiveerd. Patronen variëren van extreem simplistisch tot zeer complex (analoog aan Regex maar gericht op NL). Meestal wordt veel gebruik gemaakt van conceptensets, dit zijn lijsten met woorden die een betekenis delen. ChatScript bevat zo'n 2000 voorgedefinieerde concepten en scripters kunnen gemakkelijk hun eigen concepten schrijven. Bij de uitvoer van een regel worden letterlijke woorden vermengd die naar de gebruiker worden verzonden, samen met de algemene programmeercode in C-stijl.

Regels zijn gebundeld in verzamelingen die onderwerpen worden genoemd. Onderwerpen kunnen trefwoorden hebben, waardoor de motor automatisch in het onderwerp kan zoeken naar relevante regels op basis van gebruikersinvoer.

Voorbeeldcode

Topic: ~food(  ~fruit  fruit food eat)

t: What is your favorite food?
    a: (~fruit) I like fruit also.
    a: (~metal) I prefer listening to heavy metal music rather than eating it.

?:  WHATMUSIC ( << what music you ~like >>) I prefer rock music.
s: ( I * ~like * _~music_types)    ^if (_0 == country) {I don't like country.} else {So do I.}

Woorden die beginnen met ~ zijn conceptreeksen. ~ Fruit is bijvoorbeeld de lijst van alle bekende fruitsoorten. Het eenvoudige patroon (~ fruit) reageert als er een fruit wordt genoemd direct nadat de chatbot om favoriete eten vraagt. Het iets complexere patroon voor de regel met het label WHATMUSIC vereist dat alle woorden wat, muziek, jij en elk woord of elke zin die ze leuk vinden, leuk vinden, maar ze kunnen in elke volgorde voorkomen. Er zijn drie soorten hulpverleners. ?: regels reageren op gebruikersvragen. s: regels reageren op gebruikersverklaringen. u: regels reageren op beide.

ChatScript-code ondersteunt standaard if-else, loops, door de gebruiker gedefinieerde functies en oproepen, en variabele toewijzing en toegang.

Gegevens

Sommige gegevens in ChatScript zijn van voorbijgaande aard, wat betekent dat ze aan het einde van de huidige salvo zullen verdwijnen. Andere gegevens zijn permanent, voor altijd geldig totdat ze expliciet worden gedood. Gegevens kunnen lokaal zijn voor een enkele gebruiker of worden gedeeld met alle gebruikers op botniveau.

Intern worden alle gegevens weergegeven als tekst en indien nodig automatisch geconverteerd naar een numerieke vorm.

Variabelen

Gebruikersvariabelen zijn er in verschillende soorten. Variabelen die puur lokaal zijn voor een onderwerp of functie, zijn van voorbijgaande aard. Globale variabelen kunnen worden gedeclareerd als tijdelijk of permanent. Een variabele wordt over het algemeen gedeclareerd door deze alleen te gebruiken, en het type hangt af van het voorvoegsel ($, $$, $ _).

$_local  = 1			is a local transient variable being assigned a 1
$$global1.value = “hi”	is a transient global variable which is a JSON object
$global2 += 20		is a permanent global variable

Feiten

Naast variabelen ondersteunt ChatScript feiten - triples van gegevens, die ook van voorbijgaande aard of permanent kunnen zijn. Functies kunnen zoeken naar feiten met bepaalde waarden van sommige velden, waardoor ze zich gedragen als een in-memory database. Het ophalen van feiten is erg snel en efficiënt. Het aantal beschikbare feiten in het geheugen is grotendeels beperkt tot het beschikbare geheugen van de machine waarop de ChatScript-engine draait. Feiten kunnen recordstructuren vertegenwoordigen en zijn hoe ChatScript intern JSON vertegenwoordigt. Tabellen met informatie kunnen worden gedefinieerd om de juiste feiten te genereren.

table: ~inventors(^who ^what)
createfact(^who invent ^what)
DATA:
"Johannes Gutenberg" "printing press"
"Albert Einstein" ["Theory of Relativity" photon "Theory of General Relativity"]

De bovenstaande tabel koppelt mensen aan wat ze hebben uitgevonden (1 per regel), waarbij Einstein een lijst krijgt met dingen die hij deed.

Externe communicatie

ChatScript sluit de Curl-bibliotheek in en kan feiten rechtstreeks in JSON lezen en naar een website schrijven.

Server

Een ChatScript-engine kan in lokale of servermodus worden uitgevoerd.

Pos-tagging, parsing en ontologie

ChatScript wordt geleverd met een ingebedde kopie van het Engelse WordNet , inclusief de ontologie , en creëert en breidt zijn eigen ontologie uit via conceptverklaringen. Het heeft een Engelstalige pos-tagger en parser en ondersteunt integratie met TreeTagger voor pos-tagging van een aantal andere talen (TreeTagger commerciële licentie vereist).

Databases

Naast een interne feitendatabase ondersteunt ChatScript PostgreSQL en MongoDB zowel voor toegang via scripts, maar desgewenst ook als centraal bestandssysteem zodat ChatScript horizontaal geschaald kan worden. Een veelvoorkomend gebruik is het gebruik van een gecentraliseerde database om de gebruikersbestanden te hosten en meerdere servers om de ChatScript-engine uit te voeren.

JavaScript

ChatScript integreert ook DukTape, ECMAScript E5 / E5.1-compatibiliteit, met een aantal semantiek bijgewerkt vanaf ES2015 +.

Controle stroom

De controlestroom van een chatbot wordt beheerd door het controlescript. Dit is slechts een ander gewoon onderwerp van regels, dat API-functies van de engine aanroept. De besturing is dus volledig configureerbaar door de scripter (en er zijn functies om introspectie in de motor mogelijk te maken). Er zijn opties voor controlestroom voor voorverwerking en controlflow voor nabewerking beschikbaar voor speciale verwerking.

Referenties