Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Snakk med din applikasjon!

Snakk med din applikasjon!

Min presentasjon fra JavaZone 2017 om nlp, api.ai og chatbots

Ole-Martin Mørk

September 14, 2017
Tweet

More Decks by Ole-Martin Mørk

Other Decks in Technology

Transcript

  1. Agenda Min historie med språk-prosessering Hvordan få en datamaskin til

    å snakke med et menneske Demoer Introduksjon til api.ai Oppsummering
  2. private Node initSearchFor(String query) {
 if (query.endsWith("hos") || query.endsWith("hos ")

    || query.endsWith("av") || query.endsWith("av ")) {
 return Node.PROSJEKT;
 } else if (query.endsWith("kan") || query.endsWith("kan ") || query.endsWith("bruker") ||
 query.endsWith("bruker ")) {
 return Node.FAG;
 } else if (query.endsWith("med") || query.endsWith("med ")) {
 return Node.PERSON;
 }
 for (String token : query.split(" ")) {
 if (token.equalsIgnoreCase("alle") ||
 token.equalsIgnoreCase("konsulenter") ||
 token.equalsIgnoreCase("ansatte")) {
 return Node.PERSON;
 } else if (token.equalsIgnoreCase("prosjekter") ||
 token.equalsIgnoreCase("prosjekt")) {
 return Node.PROSJEKT;
 } else if (token.equalsIgnoreCase("kunde") ||
 token.equalsIgnoreCase("kunder")) {
 return Node.KUNDE;
 } else if (token.equalsIgnoreCase("fag") || token.equalsIgnoreCase("teknologi")) {
 return Node.FAG;
 }
 }
 throw new IllegalArgumentException("Ukjent queryformat: " + query);
 }
  3. Grammar A “language” can be formally defined as “any system

    of formalized symbols, signs, etc. used for communication” A “grammar” can be defined as a “the set of structural rules that governs sentences, words, etc. in a natural language” 1 2 3
  4. parsing expression grammar public Rule anyOf(String characters) public Rule noneOf(String

    characters) public Rule string(String string) public Rule ignoreCase(String string) public Rule firstOf(Object... rules) public Rule oneOrMore(Object... rules) public Rule optional(Object rule) public Rule sequence(Object... rules) public Rule zeroOrMore(Object rule) public Rule nTimes(int repetitions, Object rule) public boolean push(V value) public V pop() 1 2 3
  5. public Rule expression() { return sequence( start(), firstOf( people(), projects(),

    technologies(ROOT) ), oneOrMore( firstOf( and(), sequence(know(SEARCH), subjects()), sequence(workedAt(SEARCH), customers()), sequence(know(SEARCH), customers()), sequence(know(SEARCH), technologies(MIDDLE)), sequence(workedWith(), consultants()), know(PARAM), workedAt(PARAM)))); } 1 2 3
  6. [expression] 'Finn prosjekter med Ole-Martin Mørk som bruker Java' [FirstOf]

    'prosjekter ' [projects] 'prosjekter ' [projectSequence] 'prosjekter ' [fromStringLiteral] 'prosjekter ' ["prosjekter"] 'prosjekter' [whiteSpace] ' ' [OneOrMore] 'med Ole-Martin Mørk som bruker Java' [FirstOf] 'med Ole-Martin Mørk ' [Sequence] 'med Ole-Martin Mørk ' [fromStringLiteral] 'med ' ["med"] 'med' [whiteSpace] ' ' [consultants] 'Ole-Martin Mørk ' [Sequence] 'Ole-Martin Mørk ' [fromStringLiteral] 'Ole-Martin Mørk ' ["Ole-Martin Mørk"] 'Ole-Martin Mørk' [whiteSpace] ' ' [FirstOf] 'som bruker Java' [Sequence] 'som bruker Java' [know] 'som bruker ' [Optional] 'som ' [FirstOf] 'bruker ' [fromStringLiteral] 'bruker ' ["bruker"] 'bruker' [whiteSpace] ' ' [subjects] 'Java' [Sequence] 'Java' [fromStringLiteral] 'Java' ["Java"] 'Java' 1 2 3
  7. Spill ut samtalen 2 Hi there.. It’s you again.. What

    do you need today? I have a consultant that needs a project I see.. Does the subject know anything? Yes, lots. In particular he knows Java well ok.. Statens Vegvesen and NAV uses Java. You should ask them.
  8. Chatbot-tjenester • Facebook Wit.ai • Google api.ai • Amazon Lex

    • SiriKit • Microsoft Bot Framework • Alexa Skill Kit
  9. Språkforståelse • LUIS • IBM Watson • TextRazor • MeaningCloud

    • Cloud Natural Language API • Aylien Creative Commons, Wikimedia
  10. ?