---
active_crumb: Use Cases
layout: interior
---

<!--
 Licensed to the Apache Software Foundation (ASF) under one or more
 contributor license agreements.  See the NOTICE file distributed with
 this work for additional information regarding copyright ownership.
 The ASF licenses this file to You under the Apache License, Version 2.0
 (the "License"); you may not use this file except in compliance with
 the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

 Unless required by applicable law or agreed to in writing, software
 distributed under the License is distributed on an "AS IS" BASIS,
 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 See the License for the specific language governing permissions and
 limitations under the License.
-->

<h1 class="page-title">
    <span><i class="fas fa-fw fa-users-cog"></i> {{ page.active_crumb }}</span>
</h1>

<div id="use-cases" class="three-cols-container">
    <div class="col-md-2 first-column">
        <ul class="side-nav">
            <li class="side-nav-title">Documentation</li>
            <li><a href="/docs.html">Overview</a></li>
            <li><a href="/installation.html">Installation</a></li>
            <li><a href="/getting-started.html">Getting Started</a></li>
        </ul>
    </div>
    <div class="col-md-8 second-column">
        <section>
            <h2 class="section-title">NLI Applications</h2>
            <p>
                Despite being seemingly obvious that NLI (Natural Language Interface) has wide applicability to many applications and
                software systems there are specific areas where NLI is already used today and has
                demonstrated its unique capabilities.
            </p>
        </section>
        <section class="two-col-section">
            <div class="container-fluid">
                <div class="row">
                    <div class="col-6">
                        <div id="search" class="sub-section-title">NLI-Enhanced Search</div>
                        <p class="subhead">
                            NLI-enhanced search, filter and sort is one area where NLI has been successful
                            for a number of years already. Look at Google Analytics, GMail, JIRA, or many
                            other applications that allow you to search, filter or sort their content with
                            natural language queries. This use case is a perfect application of NLI as it
                            naturally augments the existing UI/UX by replacing often cumbersome and hard-to-use
                            search/filter/sort UX with a simple text box.
                        </p>
                        <p>
                            As a matter of fact, all major general purpose search platforms today (i.e.
                            Google, Bing, or Siri) use NLI-enhanced approach to their search queries processing.
                        </p>
                        <div id="chatbots" class="sub-section-title">Chatbots</div>
                        <p>
                            NLI is clearly at the heart of any chatbot implementation. And although most naive
                            implementations of chatbots have failed to gain significant traction - the advancement
                            in NLI technology is allowing modern chatbots to become gradually more sophisticated
                            and outgrow the early "childhood" problems of parasitic dialogues, lack of contextual
                            awareness, inability to comprehend a spoken, free-form language, and primitive rule-based logic.
                        </p>
                        <div id="reporting" class="sub-section-title">Data Reporting</div>
                        <p>
                            Fully deterministic NLI systems like NLPCraft provide critical technology for NLI-based
                            data reporting. Unlike data insights analytics or data exploration, the data reporting
                            typically cannot rely on the probabilistic nature of ML/DL-based approaches as it must
                            provide 100% correctness in all cases.
                        </p>
                        <p>
                            NLPCraft employs advanced semantic modelling that provides fully deterministic
                            results and NL comprehension.
                        </p>
                    </div>
                    <div class="col-6">
                        <div id="data" class="sub-section-title">Ad-Hoc Data Exploration</div>
                        <p>
                            One of the most exciting applications of NLI is an ad-hoc data analytics or
                            data exploration. This is the area where the proper NLI application can bring
                            about a fundamental seismic change to how we explore our data and discover the
                            insights from it.
                        </p>
                        <p>
                            Today the most data is walled off in the silos of the individual, incompatible
                            data systems making it mostly inaccessible to the all but a few "power" users.
                            Very few can gain access to all the different systems in a typical company, learn all
                            the different ways to analyse the data and master incompatible and drastically different
                            user interfaces.
                        </p>
                        <p>
                            The NLI-based approach can democratize access to the sprawling silo-ed data with a
                            single unified UX by allowing users to use the natural language to explore and analyse
                            the data. The natural language is the only UX/UI that everyone already knows, requires no
                            training or learning and is universal regardless of the data source.
                        </p>
                        <div id="device" class="sub-section-title">Device Control</div>
                        <p>
                            With the popularization of consumer technologies like Amazon Alexa, Apple HomeKit,
                            Mercedes MBUX and similar the NLI-based control of various devices and systems
                            becoming a norm.
                        </p>
                        <p>
                            While most of these systems today can only understand the
                            rudimentary 2-3 words command the advancements in NLI technology is rapidly leading to
                            more sophisticated interfaces. The enterprise world is starting to catch up and
                            NLI-based systems appear today in various manufacturing, oil and gas, pharma
                            and medical applications.
                        </p>
                    </div>
                </div>
            </div>
        </section>
    </div>
    <div class="col-md-2 third-column">
        <ul class="side-nav">
            <li class="side-nav-title">On This Page</li>
            <li><a href="#search">NLI Search</a></li>
            <li><a href="#chatbots">Chatbots</a></li>
            <li><a href="#data">Data Exploration</a></li>
            <li><a href="#device">Device Control</a></li>
            {% include quick-links.html %}
        </ul>
    </div>
</div>

