artificial intelligence, Semantics

To Bot, Or Not To Bot


Are Bots the Future of Computing?

Bots — simple computer-based [micro] services that you interact with conversationally — are being hailed by some as the next wave of computing, a profound platform shift and the most exciting technology since the iPhone.

Microsoft this week became the latest technology provider to strategically embrace bots and offer a framework for developing them. Microsoft joins Facebook, Slack, WeChat, Kik and many others. In Microsoft’s case, as with several others, bots are a part of a continued push into a broad set of technologies centered around artificial intelligence or AI.

But let’s forget AI for a moment. This trend towards functional capabilities delivered as well-bounded, discrete services goes back at least as far as IT concepts such as object-oriented programming and  component-based development (think of a method or web service like “CheckBalance” or “MakeDeposit”). To some degree this basic idea is also manifest in app connection frameworks such as IFTTT and associated app integration platforms like Zapier. The rapid trend towards hosting services in cloud environments and making them easily accessible through Application Programming Interfaces (APIs) has now provided much of the infrastructure or connective tissue to enable the rise of bots.

If you’re a business looking at where technology is headed as part of your product strategy, you may be asking if bots are likely to truly transform digital products and whether that’s a good or a bad thing. Personally I think they have the potential to be transformative and that they will indeed be a good thing. As with other major tech disruptions, the transformation will almost certainly not happen overnight and as it goes mainstream it won’t necessarily look like this first wave of the technology. But I’m convinced bots are coming (some are here already) and smart businesses should start now exploring the opportunities that will come from building products using a bot model.

Wait, I thought Bots Were Bad????

We’re not talking here about hijacked PCs running programs whose sole purpose is to spew SPAM, or other automated programs that ‘mindlessly’ push pre-programmed content. The bots coming onto the scene now are helpful software agents, with many of them embodying at least some form of intelligence. By that I mean they have the ability to interpret a request for a service and to respond appropriately with relevant information, content or actions. Here’s the clincher in my mind: the services these bots perform need to offer real identifiable value to the user who is interacting with the bot.

Why Is This Happening Now? You Might Ask

In a world where everything is becoming an endpoint, bots are the little engines that interpret incoming signals — in context– and provide responses or initiate outbound actions. Think about the streams of data generated by Internet of Things (IoT) based sensors and all the data traffic traveling through messaging services.  This data is not just valuable en masse for historical or predictive analytics. It can be put to more immediate, localized and personalized use. Whether pinged directly through a single trigger word or command, or more passively activated using AI to interpret a chunk of data in a message, bots are driven by actionable data [intelligently] understood within a context. The ubiquity of devices such as sensors, beacons and smartphones, along with omnipresent network connections, always-on communications channels, vast sources of content and publicly-accessible APIs have all reached a tipping point of availability and maturity to support human interaction with the world in a way that is augmented by automated software agents – bots.

While the bots may be stand-alone services, to support a critical mass of them they need to be hosted within a platform that either resides in or interfaces with our existing communications channels. Today that takes the form of smart phone OSs, SMS/text messaging services, social messaging services such as Facebook Messenger, Kik, WeChat and Line, and/or virtual personal assistants such as Google Now, Microsoft Cortana or Amazon Echo’s Alexa. Virtual personal assistants can be thought of as universal or generalized bots that orchestrate or intermediate more specialized sub-bots. Mobile payment services such as Apple Pay are also contributing to the trend. Although simple text is sufficient as a basic user interface to bots, advances in natural language interpretation and understanding, and in voice recognition and speech synthesis provide additional, richer ways for humans and bots to interact. The technology then is wholly or largely existent today. Given the sheer volume of data and APIs, we need technology just to handle that volume. Technology also offers the opportunity to both simplify and augment our personal and business communications and transactions. So arguably the demand side of the equation exists now, too.

Should My Business Dive In Now or Wait?

It’s early days and a lot remains to be ironed out, particularly in terms of bot platforms. Every technology provider seems to be doing their own platform, there are few or no standards and little if any integration across platforms. There will be successes and failures and shakeouts. So it’s too early to jump in, right? Absolutely not! Any business that isn’t venturing into this space risks missing the boat as the wave of bots washes in. There are ways to venture into this space that mitigate the risk, while providing valuable revenue and experience to businesses and real value to their customers. Here are a few tips for getting started:

  1. Start by creating bots from services that your business already has exposed as APIs or single-function apps
  2. Focus on bots that are easy for your customers to understand and use, and that provide real, identifiable value to your customers. It’s okay if the service is simple and the value is small, like providing limited sets of information or content in response to specific customer requests or focusing on a commonly performed task with a small, fixed number of options
  3. Design your bots conceptually, then implement them initially on 1 or 2 platforms within communications channels where your customers are most active and where your business has experience, presence and familiarity. That could be SMS/text messaging for a single telecom carrier or mobile OS, or an in-message bot command embedded in one of the messaging services like Kik or Skype
  4. Let your customers know they are part of something new and that you value their input and feedback. Make the experience fun for your customers, and for your product team, too
  5. Don’t get too far ahead in setting goals and expectations. Monitor your initial bot experiences, using your own tools or through the analytics that are provided as part of a bot platform or delivery channel. Don’t be hesitant to iterate, pivot or rethink. You’re not betting your business on these, at least to start with, so failures don’t have a large downside. Look for where you are getting initial success, try to understand the success drivers, and replicate those as you add to the volume and complexity of your bots.

Keep in mind that the bot-driven era of computing will be like a marathon, or at least a 10K run, not a sprint. It’s not too soon to start venturing with bots. Along the way you’ll get a better sense for how they can benefit your customers and your business. And you’ll help determine the shape they take as they come into the mainstream as the next wave of computing.


Secret Agent Action

This blog post isn’t about some superhero or secret agent code-named Action. It’s about enabling intelligent software agents to take action. As I’ve been writing periodically about intelligent software agents or virtual personal assistants, I’ve not shied away from saying there are significant challenges to making them commonplace in our everyday lives. But that doesn’t mean we shouldn’t be starting to build intelligent agents today.

One challenge is providing software agents knowledge about the domains in which they are intended to operate, in other words making software agents ‘intelligent’. In my last post, “Teaching a Martian to Make a Martini”, I tried to provide a sense of the scale of the challenge involved in making software agents intelligent, and pointed to ways to get started using semantic networks (whether constructed, induced, blended or generated). There are at least two other significant challenges: describing or modeling the actions to be performed and specifying the triggers/conditions, inputs, controls and expected outputs from those actions. These are of course intertwined with having underlying knowledge of the domain, as these challenges involve putting domain knowledge in a form and context such that the software agent can make use of it to perform one or more tasks for their human ‘employer’.

Here’s the first secret to producing agents capable of action: create the models of the actions or processes (at least in rough form) through ‘simply’ capturing instructions via natural language processing, perhaps combined with haptic signals (such as click patterns) from the manual conduct of the tasks on devices such as smart phones. Thinking of the example from my previous post, this is the equivalent of you telling the Martian the steps to be executed to make a martini or going through the steps yourself with the Martian observing the process. In either case, this process model includes the tasks to be performed and the associated work flow (including critical path and optional or alternative steps), as well as triggers and conditions (such as prerequisites, dependencies, etc.) for the execution of the steps and the inputs, outputs and controls for those steps. Keywords extracted from the instructions can serve as the basis for building out a richer, underlying contextual model in the form of a semantic network or ontology. But there is more work to be done. A state like the existence of a certain input or the occurrence of an event such as the completion of a prior task can serve as a trigger, and the output of one process can be an input to one or more others. There can be loops, and since there can be unexpected situations, there can be other actions to take when things don’t go according to plan. Process modeling can get quite complex. Writing code can be a form of process modeling, where the code is a model or a model can be created in a form that is executable by some state machine. But we don’t want to have to do either of those in this case. The goal should be to naturally evolve these models, not to require they be developed in all their detail before they get used by an agent for the first time. And more general models that can be specialized as they get applied are the best case scenario.

I know a fair bit about complex process models. I encoded a model of the product definition (i.e., product design) process for aircraft (as developed by a team at Northrop Corporation — with a shout out here to @AlexTu) into a form executable by an artificial intelligence/expert system. My objective at the time was to test an approach to modeling of a process ontology and an associated AI technology built around it. The objective of Northrop was to be able to have a software system ‘understand’ things like the relationships among the process steps, related artifacts (e.g., input and outputs) and conditionals and to be able to optimize the process through eliminating unnecessary steps and introducing more parallelism. In other words, a major goal of the project was to enable more of what was called at the time ‘concurrent engineering’, both to shorten the time needed for product definition and to catch problems with the design of the product as early in the process as possible (since the later such problems are caught, the more they cost to correct — with the worst case being of course that a problem isn’t discovered until the aircraft has been built and is deployed and in use for its mission in the field). The project was pretty darned impressive, and the technology worked well as an ‘assistant’ to product engineers looking to improve their processes.

Many of the tasks we deal with on a regular basis in our everyday lives aren’t as complex or specialized as the product definition process for an aircraft. But even relatively simple processes can be tedious to encode if every detail has to be explicitly modeled. Here is where another secret comes in: rather than model detailed conditionals for things like triggers, why not use statistical data about the presence of certain indicative concepts in input and output data associated with the process, along with refinements to the model based on user feedback? Clearly this approach makes the most sense for non-critical processes. You don’t want to try it for brain surgery (at least not if you are one of the first patients). But virtual personal assistants and other agents aren’t intended to do jobs for us entirely on their own, so much as to help us do our job (at least at first). So if we have some patience up-front and are willing to work with ‘good enough’, I think we could see a lot more examples of such software agents. If we have expectations that the agents know everything and are right close to 100% of the time, we’ll see a lot fewer. It’s that simple, I think.

So let’s get started building and using some ‘good enough’ assistants. If other people want to wait until they’re ‘perfected’, they can join the party later, maybe after The Singularity has occurred. I think it is time to start now. And I’m convinced we’ll get farther faster if we do start now, rather than waiting until years from now to begin building such technologies en masse. Let’s refocus some of our collective efforts from yet-another social networking app or more cute cat videos onto more intelligent agents. Then intelligent, actionable software agents won’t be so secret anymore – in fact, they’ll be everywhere. And you’ll have more free time to spend with your cat.


Teaching a Martian to Make a Martini

English: Liquid nitrogen storage facility at t...

What Happens When a Martian Makes a Martini? (Photo credit: Wikipedia)

In my last blog post, I stated I felt expert systems were an important forerunner of today’s emerging digital personal assistants and any other software technologies that include an element of ‘agency’ — acting on behalf of others, in this case the humans who invoke them. For someone or something to act on your behalf effectively, they need to understand many specific things about the particular domain they are tasked with working in, along with some general knowledge of the type that cuts horizontally across many vertical domains, and of course they need to know some things about you.

Chuck Dement, the late founder of Ontek Corporation and one of the smartest people I’ve met, used to say that teaching software to understand and execute the everyday tasks that humans do was like teaching a Martian visiting here on Earth how to make a martini. His favorite Martian, George the Gasbag, like the empty shell of a computer program, didn’t know anything about our world or how it works, let alone the specifics of making a martini. Forgetting for a moment George’s physical limitations due to being a gasbag, imagine trying to explain to him (or to encode in software) the process of martini-making — starting with basically no existing knowledge.

First, George has to know something about the laws of physics. He doesn’t need to understand the full quantum model (does anyone actually understand it?), but he does need to be aware of some of the more practical aspects of physics from the standpoint of how it applies to everyday life on the surface of Earth. Much of martini-making involves combining liquid substances. Liquid substances need to be confined in a container of some sort, preferably a non-porous one. The container has to maintain a [relatively] stable and upright position during much of the process. The container holds certain quantities of the liquids. For a martini to be a martini and to taste ‘right’ to its human consumers, the liquids have to be particular substances. Their chemical properties have to meet certain criteria to be suitable (and legal) for use. The quantities of the liquid have to measured in relative proportions to one another. The total combined quantity shouldn’t (or at least needn’t) exceed the total quantity that the container can hold.

You need some ice, which involves another substance — water — its liquid form having been transformed into a solid at a certain temperature. If you are making the martini indoors in most cases or outside when the temperature is warm, the process of producing ice from water requires special devices to create the required temperature conditions within some fixed space. And so on and so forth. You can pull on any of those threads and dive into the subject. Think of having a conversation with a 4 or 5 year-old child and answering all the “Why?” and “How?” questions.

Of course there are at least two major different processes that can be used to mix the liquids along with the ice. They involve different motions — stirring the liquid within the container versus shaking the container (after putting a lid or similar enclosure on the previously ‘open part’ of the container to keep the liquid from flying out). The latter begs the question: is the open ‘part’ of the container really even a part of it, or the absence of some part?

There are allowable variations in the substances (ingredients), both in terms of kinds and specific brands (gin versus vodka, Beefeater versus Tanqueray for gin). Both the process and the ingredients often come down to the specific preferences of the intended individual consumer (take James Bond, for example), but may also be influenced by availability, business criteria such as price or terms of supplier contracts, and whether the consumer has already consumed several martinis or similar alcoholic beverages within some relatively fixed timeframe (don’t forget here to factor in the person’s gender, body size, previous night’s sleep, history of alcohol consumption, altitude, etc.). The main point here is simply if they’ve had several such drinks, their preferences may be more flexible than for the first one or two!

Whew!!! All that just to make a martini? That’s all to illustrate that encoding knowledge for everyday tasks is non-trivial. No one ever said developing intelligent agent software would be simple. But as previously mentioned, George doesn’t need to know everything about every aspect of the domains involved in martini-making. Going overboard is a sure recipe for failure. Knowing where to draw the line is the key and so a healthy serving of pragmatism is recommended. A place to start is I think even getting in the ballpark of knowledge about everyday things and applying that approximate knowledge to practical application uses. Since you don’t always know beforehand how much knowledge you need, I’m a fan of the generative approach to semantic technologies (see my related blog post on approaches to semantic technologies). The generative approach allows agility and flexibility in the production of that knowledge, as well as providing ways to tailor it for individual differences.

And speaking of individual differences: how will George recognize when I’m ready for him to make me a martini? What are the triggers and any prerequisite conditions (like being of legal drinking age in the geo-location where the drink is being made and consumed). Well, I could always ask George (or my personal, robotically-enabled, martini-making software assistant), but I trust that he knows me well enough to recognize that telling look that says, “I could sure use a drink, my friend,…especially after all the knowledge I had to encode to enable you to make one.”


Enhanced by Zemanta

What Makes a Good Personal Assistant?

One of my mentors from years ago — who was one of the smartest people I’ve known — had a great deal of admiration for personal assistants. The human kind I mean. Through him, I gained an appreciation for them, too. By personal assistants I mean anyone who directly helps someone else do their job or perform a similar sort of function.

A personal assistant, like other employees, works for their boss. You can say that all employees are extensions of their boss and broadly-speaking they help their boss achieve the goals of her/his organization. But most employees have specialized jobs to do that apply to particular aspects of the organization they are part of. A personal assistant is different in that their job is to help their boss do his/her job more efficiently or effectively. They take on tasks that their boss can’t do due to time or other constraints, doesn’t want to do, finds value in having someone help with, etc. They remove roadblocks, take care of details, keep things organized and stop things falling through the cracks, and sometimes even act as roadblocks themselves — preventing other people from distracting their boss or wasting her/his time. In numerous ways they augment the value and productivity of their boss and make his/her life a little bit easier.

A good personal assistant is a natural, almost seamless extension of their employer. They have a deep understanding of the organization, its goals, resources and constraints, and the nature of the tasks to be done. They understand their employer’s role in the organization, her/his motivations and his/her opinions of other people inside the organization and externally in partner, customer and competitive organizations. They know who can be trusted and who to ‘go to’ for specific needs. They are perhaps their boss’ most trusted employee, a confidant.

Really good personal assistants anticipate their boss’ next requests and are prepared to respond to those as soon as the boss gives even an indication. They know the set of possible options/next steps and the likely decision criteria that would trigger one versus another. When something unexpected comes up, they know to alert their boss. They are honest and open with their boss (but not necessarily fully open with others, as they need to know when to protect their boss and her/his interests). They don’t necessarily need to be told explicitly when to do something or what to do. They can often read between the lines or recognize triggers for actions they should be taking. They can be entrusted to represent their boss and to make appropriate decisions on their boss’ behalf, when needed (and at the same time not overstep the boundaries of their authority and responsibility).

So how does a personal assistant become capable of contributing so effectively to the execution of tasks — some more mundane, some more important — that their boss otherwise would be doing? It’s all about context. A personal assistant knows the background for tasks and decisions. They know the history. They have strong domain knowledge. They know their boss’ preferences. They know how ‘outsiders’ (anyone but them and their boss) are likely to behave in certain situations, who to trust and who to keep an eye on. Some of this information they have been told explicitly by their boss. Some of it they have picked up just from working closely with their boss for some time. They need to know the limits of their own skills and knowledge and who to bring into the process (often on their boss’ behalf) to achieve the goal. They know where and when to ‘ping’ their boss and get additional direction, clarification or confirmation.

All of this is relevant to my interest in semantics for the following reason: if we want to develop virtual personal assistants — intelligent software agents — they will need similar knowledge and capabilities. That will have to come from somewhere, and it seems unlikely or at least inefficient if all that knowledge has to be hand-curated and all that logic has to be hand-coded. Some of it at least will need to be machine- learned/generated and then validated, based on existing knowledge and through learning loops (i.e., by trial and error and/or explicit feedback loops).

Think about the so-called personal digital assistants that exist today. Do they have these capabilities and knowledge? Not the ones I’m familiar with. They do a decent job of interpreting my explicit voice commands for a relatively fixed set of tasks, such as search, creating a meeting event or calling someone from my contact list. More complex tasks, if handled at all, involve a constant series of back and forth questions between the personal assistant and me. Human personal assistants might do this early in a task to establish the framing criteria, but part of their productivity-enhancing abilities lies in the fact that they can do many things autonomously or semi-autonomously (knowing when to come back to me with questions, or to discuss options or problems). Can you imagine if they behaved like their digital counterparts do today, simply echoing back much of your input and making you connect most of the dots and orchestrate most of the workflows through repeated questions derived from some sort of decision tree? Those aren’t true personal assistants, those are at best ‘helper apps’. But you have to start somewhere I guess.

We have a long way to go to get to where we have real virtual personal assistants. I think the basic technology components exist for the most part today to at least get started. But there is much work to do to put them together in the right way and create apps that do even a little bit of what Corporal ‘Radar’ O’Reilly did for the Colonel on M*A*S*H [Note: if you don’t know that reference, by all means Google it! He’s the kind of personal assistant I want to have in automated form].


Introducing Myself and N2Semantics


This is my introductory blog. It’s hard to describe what I’m trying to do with N2Semantics without giving you a little background on who I am and what I’ve done so far in my career. I would say I’m a computer scientist or technologist, but not because I particularly like computers or information technology. I like what you can do with such technologies, or even more importantly, what they can do for you!

I spent the early part of my career designing and developing applications, primarily in the fields of product definition (engineering), development (manufacturing) and delivery (packaging, distribution, transportation). I ended up focusing on the representational aspects of such systems — their architecture, logic and data structures. I did a lot of enterprise information modeling, data and process modeling, system and database design, and software development and implementation (and support — let’s not forget support!). I found a passion in the challenges of reflecting the real world inside computer systems. That led me to gaining knowledge and experience in the field of knowledge representation and doing some of the early, pioneering work in conceptual models or conceptual schemas — what came to be known as ‘ontologies’.

Representing human knowledge in a form that computers can make use — and actually enabling them to make use of it — became a life-long pursuit. I’ve been pursuing it for over 20 years and I’m still pursuing it. Along the way, there have been lots of successes and also many failures. If you never make a mistake, you’re probably not pushing the edge of discovery. It’s from those failures that you learn (hopefully!) and they become the basis for progress and success. I’ll try to talk about some of the failures in future blog posts, as well as some successes.

I feel optimistic about pursuing intelligent systems today — more optimistic than I have ever been in my career. I feel the required technology components exist today, at least in sufficient form to put to productive, practical use. And that’s what I want to do. I’m not interested in doing fundamental research. I want to work with providers of leading-edge, innovative technologies and business people with real application ideas and challenges for which those technologies provide enabling solutions. While many technologies comprise pieces of this puzzle, in particular I focus on semantic technologies. I want to help companies use semantic technologies — along with mobile devices, content sources, social media, et al — to create intelligent software agents. In future posts I’ll talk about some of the [productive] ways software agents might assist us in going about our day-to-day lives. That’s what interests me and that’s what’s behind my starting up N2Semantics. The journey into semantic applications is going to be a fun, but challenging journey. Join me on that journey by following this blog.


Enhanced by Zemanta