ChatScript - ChatScript
ChatScript on yhdistelmä luonnollisen kielen moottoria ja valintaikkunoiden hallintajärjestelmää, joka on suunniteltu alun perin chatbottien luomiseen , mutta sitä käytetään tällä hetkellä myös erilaisissa NL-käsittelyissä . Se on kirjoitettu C ++: lla . Moottori on avoimen lähdekoodin projekti SourceForgessa . ja GitHub .
ChatScriptin kirjoitti Bruce Wilcox ja se julkaistiin alun perin vuonna 2011, kun Suzette (kirjoitettu ChatScript) voitti vuoden 2010 Loebner-palkinnon ja huijasi yhtä neljästä ihmis tuomarista.
ominaisuudet
Yleensä ChatScript pyrkii laatimaan erittäin ytimekkäästi, koska käsikirjoitettujen chat-robottien skaalautuvuus rajoittuu siihen, kuinka paljon / nopeasti komentosarja voidaan kirjoittaa.
Koska ChatScript on suunniteltu vuorovaikutteiseen keskusteluun, se ylläpitää käyttäjän tilaa automaattisesti lentopalloissa. Lentopallo on mikä tahansa määrä lauseita, jotka käyttäjä syöttää kerralla, ja chat-robottien vastaus.
Komentosarjojen peruselementti on sääntö. Sääntö koostuu tyypistä, tarrasta (valinnainen), kuviosta ja tulosteesta. Sääntöjä on kolmenlaisia. Gambit ovat jotain, jonka chatbot saattaa sanoa, kun se hallitsee keskustelua. Vastaukset ovat sääntöjä, jotka vastaavat käyttäjän huomautukseen, joka on sidottu chatbotin juuri sanoihin. Vastaajat ovat sääntöjä, jotka vastaavat mielivaltaiseen käyttäjän syötteeseen, joka ei välttämättä ole sidoksissa chatbotin juuri sanoihin. Kuviot kuvaavat olosuhteita, joissa sääntö voi laukaista. Kuviot vaihtelevat äärimmäisen yksinkertaisesta syvälle monimutkaiseen (analoginen Regexin kanssa, mutta tarkoitettu NL: lle). Raskas käyttö on tyypillisesti käsitteitä, jotka ovat luetteloita sanoista, joilla on merkitys. ChatScript sisältää noin 2000 ennalta määritettyä konseptia, ja komentosarjat voivat helposti kirjoittaa omat. Säännön tulos sekoittaa käyttäjälle lähetettävät kirjaimelliset sanat yhdessä yleisen C-tyylisen ohjelmointikoodin kanssa.
Säännöt niputetaan aihekokoelmiksi. Aiheilla voi olla avainsanoja, joiden avulla moottori voi automaattisesti etsiä aiheesta asiaankuuluvia sääntöjä käyttäjän antamien tietojen perusteella.
Esimerkkikoodi
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.}
~ -Alkuiset sanat ovat käsitteitä. Esimerkiksi ~ hedelmä on luettelo kaikista tunnetuista hedelmistä. Yksinkertainen kuvio (~ hedelmä) reagoi, jos jokin hedelmä mainitaan heti sen jälkeen, kun chatbot pyytää lempiruokaa. Hieman monimutkaisempi malli WHATMUSIC-nimiselle säännölle vaatii kaikkien sanojen mitä, musiikki, sinä ja minkä tahansa sanan tai lauseen pitämisen, mutta ne voivat esiintyä missä tahansa järjestyksessä. Vastaajia on kolme tyyppiä. ?: säännöt reagoivat käyttäjien kysymyksiin. s: säännöt reagoivat käyttäjän lausuntoihin. u: säännöt reagoivat kumpaankin.
ChatScript-koodi tukee standardeja if-else, silmukoita, käyttäjän määrittelemiä toimintoja ja puheluita sekä muuttuvia määrityksiä ja käyttöoikeuksia.
Tiedot
Osa ChatScript-tiedoista on ohimeneviä, mikä tarkoittaa, että ne katoavat nykyisen lentopallon lopussa. Muut tiedot ovat pysyviä, kestäviä ikuisesti, kunnes ne tapetaan nimenomaisesti. Tiedot voivat olla paikallisia yhdelle käyttäjälle tai jaettuja kaikkien käyttäjien keskuudessa bottien tasolla.
Sisäisesti kaikki tiedot esitetään tekstinä ja ne muunnetaan automaattisesti numeeriseen muotoon tarpeen mukaan.
Muuttujat
Käyttäjämuuttujia on useita. Aiheeseen tai toimintoon puhtaasti paikalliset muuttujat ovat ohimeneviä. Globaalit muuttujat voidaan julistaa ohimeneviksi tai pysyviksi. Muuttuja ilmoitetaan yleensä vain käyttämällä sitä, ja sen tyyppi riippuu sen etuliitteestä ($, $$, $ _).
$_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
Tosiseikat
Muuttujien lisäksi ChatScript tukee faktoja - kolmoistietoja, jotka voivat olla myös ohimeneviä tai pysyviä. Funktiot voivat kysyä tosiasioita, joilla on tietyt arvot joillakin kentillä, mikä saa ne toimimaan muistissa olevan tietokannan tavoin. Faktojen haku on erittäin nopeaa ja tehokasta. Muistissa olevien tosiseikkojen määrä on suurelta osin rajoitettu ChatScript-moottoria käyttävän koneen käytettävissä olevaan muistiin. Faktat voivat edustaa tietueiden rakenteita ja kuinka ChatScript edustaa JSONia sisäisesti. Tietotaulukot voidaan määritellä tuottamaan sopivia tosiasioita.
table: ~inventors(^who ^what)
createfact(^who invent ^what)
DATA:
"Johannes Gutenberg" "printing press"
"Albert Einstein" ["Theory of Relativity" photon "Theory of General Relativity"]
Yllä oleva taulukko linkittää ihmiset keksimäänsä (yksi riviä kohden), kun Einstein saa luettelon tekemistään asioista.
Ulkoinen viestintä
ChatScript upottaa Curl-kirjaston ja voi suoraan lukea ja kirjoittaa tosiasioita JSON: ssa verkkosivustolle.
Palvelin
ChatScript-moottori voi toimia paikallisessa tai palvelintilassa.
Pos-koodaus, jäsentäminen ja ontologia
ChatScript mukana kopio Englanti WordNet upotettu, mukaan lukien sen ontologia , ja luo ja laajentaa omaa ontologian avulla käsite ilmoituksista. Siinä on englanninkielinen pos-tagger ja jäsennin, ja se tukee integrointia TreeTaggerin kanssa useiden muiden kielten pos-taggaamiseen (vaaditaan TreeTagger-kaupallinen lisenssi).
Tietokannat
Sisäisen tosiasiatietokannan lisäksi ChatScript tukee PostgreSQL: ää ja MongoDB: tä sekä komentosarjojen kautta että haluttaessa myös keskeisenä tiedostojärjestelmänä, jotta ChatScript voidaan skaalata vaakasuunnassa. Yleinen käyttötapa on keskitetyn tietokannan käyttäminen käyttäjätiedostojen ja useiden palvelimien isännöimiseksi ChatScript-moottorin ajamiseksi.
JavaScript
ChatScript sisältää myös DukTape-, ECMAScript E5 / E5.1 -yhteensopivuuden, joidenkin semantiikan päivitettynä ES2015 + -sovelluksesta.
Ohjausvirta
Chatbotin ohjausvirtaa hallitaan ohjauskomennolla. Tämä on vain toinen tavallinen sääntöjen aihe, joka käyttää moottorin API-toimintoja. Siten komentosarja voi ohjata täysin konfiguroitavaksi (ja toimintoja on olemassa, jotta moottoriin voidaan tutustua). Erikoiskäsittelyä varten on käytettävissä esikäsittelyn ohjausvirta ja jälkikäsittelyn ohjausvirtausvaihtoehtoja.