---
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">Natural Language Enhanced Search</div>
                        <p class="subhead">
                            Natural Language enhanced search 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 initial naive
                            implementations of chatbots have struggles to gain 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 natural language 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>

