{
    "componentChunkName": "component---src-templates-doc-page-js",
    "path": "/docs/ru/NLU_core/activation/nBest/",
    "result": {"data":{"site":{"siteMetadata":{"title":"Gatsby-doc-engine"}},"markdownRemark":{"id":"d2b3eadf-82fa-5868-ae48-ae30cf93485d","excerpt":"nBest При совместном использовании в одном сценарии нескольких типов правил активации они срабатывают в порядке убывания приоритета: Паттерны. Примеры и группы…","html":"<h1>nBest</h1>\n<hr>\n<p>При совместном использовании в одном сценарии нескольких типов <a href=\"/1.11.7/docs/ru/NLU_core/activation/rules\">правил активации</a> они срабатывают в порядке убывания приоритета:</p>\n<ol>\n<li>Паттерны.</li>\n<li>Примеры и группы примеров.</li>\n<li>Интенты.</li>\n</ol>\n<p>В сценариях со сложным механизмом выбора правил активации для перехода в стейт вы можете получить доступ к наиболее вероятным правилам из любого места сценария через <code class=\"language-text\">$context.nBest</code>.</p>\n<h2>Конфигурационный файл</h2>\n<p>Чтобы включить заполнение <code class=\"language-text\">$context.nBest</code>, в конфигурационный файл <a href=\"/1.11.7/docs/ru/common/bot_structure/configuration_file\"><code class=\"language-text\">chatbot.yaml</code></a> нужно добавить секцию:</p>\n<div class=\"gatsby-highlight\" data-language=\"yaml\"><pre class=\"language-yaml\"><code class=\"language-yaml\"><span class=\"token key atrule\">nlp</span><span class=\"token punctuation\">:</span>\n  <span class=\"token key atrule\">nbest</span><span class=\"token punctuation\">:</span> <span class=\"token number\">3</span></code></pre></div>\n<p class='warn'>В значении параметра <code class=\"language-text\">nlp.nbest</code> укажите необходимое число правил, к которым нужно иметь доступ из сценария. Значение по умолчанию — <code class=\"language-text\">1</code>.</p>\n<h2>Содержимое массива</h2>\n<p>После настройки конфигурационного файла в объекте <a href=\"/1.11.7/docs/ru/JS_API/variables/context\"><code class=\"language-text\">$context</code></a>, представляющем собой текущий контекст обработки запроса, становится доступно поле <code class=\"language-text\">nBest</code>.</p>\n<p class='warn'>В значении <code class=\"language-text\">$context.nBest</code> содержится массив из <code class=\"language-text\">nlp.nbest</code> объектов, представляющих собой наиболее вероятные правила для перехода в какой-либо стейт.</p>\n</br>\n<p>Объект на первом месте в массиве <code class=\"language-text\">$context.nBest</code> отбирается в зависимости от того, задан ли в сценарии собственный механизм выбора правил активации через обработчик <a href=\"/1.11.7/docs/ru/NLU_core/activation/selectNLUResult\"><code class=\"language-text\">selectNLUResult</code></a>:</p>\n<ul>\n<li>Если обработчик задан, то на первом месте <code class=\"language-text\">$context.nBest</code> всегда идет правило, которое было записано обработчиком в поле <code class=\"language-text\">$context.nluResults.selected</code>.</li>\n<li>Если не задан, то на первом месте расположено правило, по которому произошел переход в целевой стейт, с учетом стандартного приоритета в порядке от паттернов к примерам и интентам.</li>\n</ul>\n<p>Правила на втором и последующих местах отсортированы по убыванию значения <code class=\"language-text\">score</code>.</p>\n<p class='tip'>Таким образом, вес правила на втором месте может оказаться выше, чем на первом.</p>\n<h2>Фильтр по типу правил активации</h2>\n<p>Если вы хотите иметь доступ не ко всем правилам активации, а только к правилам определенного типа, добавьте в <code class=\"language-text\">chatbot.yaml</code> одно или несколько из следующих полей:</p>\n<div class=\"gatsby-highlight\" data-language=\"yaml\"><pre class=\"language-yaml\"><code class=\"language-yaml\"><span class=\"token key atrule\">nlp</span><span class=\"token punctuation\">:</span>\n  <span class=\"token key atrule\">nbestPatterns</span><span class=\"token punctuation\">:</span> <span class=\"token number\">1</span>\n  <span class=\"token key atrule\">nbestIntents</span><span class=\"token punctuation\">:</span> <span class=\"token number\">2</span>\n  <span class=\"token key atrule\">nbestExamples</span><span class=\"token punctuation\">:</span> <span class=\"token number\">3</span></code></pre></div>\n<p>Поле <code class=\"language-text\">nbestPatterns</code> задает длину <code class=\"language-text\">$context.nBestPatterns</code> — массива правил активации, сработавших только при помощи паттернов.\nЕсли поле не указано, то этот массив недоступен.</p>\n<p><code class=\"language-text\">nbestIntents</code> и <code class=\"language-text\">nbestExamples</code> работают аналогично для интентов и примеров.</p>\n<h2>Сценарий</h2>\n<h3>Без обработчика selectNLUResult</h3>\n<p>Рассмотрим простой сценарий, в котором используются все типы правил активации. Интент <code class=\"language-text\">/привет</code> предварительно обучен на тренировочной фразе <code class=\"language-text\">привет</code>:</p>\n<div class=\"gatsby-highlight\" data-language=\"sc\"><pre class=\"language-sc\"><code class=\"language-sc\"><span class=\"token keyword\">init:</span>\n    bind(\"postProcess\", function($context) {\n        log($context.nBest);\n    });\n\n<span class=\"token keyword\">theme:</span> /\n\n    <span class=\"token keyword\">state:</span> Pattern\n        <span class=\"token storageType\">q!:</span> привет\n\n    <span class=\"token keyword\">state:</span> Example\n        <span class=\"token storageType\">e!:</span> привет\n\n    <span class=\"token keyword\">state:</span> Intent\n        <span class=\"token storageType\">intent!:</span> /привет</code></pre></div>\n</br>\n<p>В блоке <a href=\"/1.11.7/docs/ru/JAICP_DSL/tags/declarative_tags/init\"><code class=\"language-text\">init</code></a> настроен обработчик <code class=\"language-text\">postProcess</code>, который после каждого запроса логирует содержимое <code class=\"language-text\">$context.nBest</code>. При запросе <code class=\"language-text\">привет</code> в лог запишется массив:</p>\n<div class=\"gatsby-highlight\" data-language=\"js\"><pre class=\"language-js\"><code class=\"language-js\"><span class=\"token punctuation\">[</span>\n  <span class=\"token comment\">// Первый объект — правило для перехода по паттерну</span>\n  <span class=\"token punctuation\">{</span>\n    <span class=\"token string-property property\">\"clazz\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"/Pattern\"</span><span class=\"token punctuation\">,</span> <span class=\"token comment\">// Класс, в который изначально попал запрос</span>\n    <span class=\"token string-property property\">\"score\"</span><span class=\"token operator\">:</span> <span class=\"token number\">0.79</span><span class=\"token punctuation\">,</span> <span class=\"token comment\">// Вес, с которым сработало правило</span>\n    <span class=\"token string-property property\">\"pt\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token comment\">// Алиас для поля `parseTree`</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n    <span class=\"token string-property property\">\"debugInfo\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token comment\">// Служебная информация о сработавшем правиле</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n    <span class=\"token string-property property\">\"ruleType\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"pattern\"</span><span class=\"token punctuation\">,</span> <span class=\"token comment\">// Тип сработавшего правила</span>\n    <span class=\"token string-property property\">\"parseTree\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token comment\">// Полное дерево разбора запроса</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n    <span class=\"token string-property property\">\"targetState\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"/Pattern\"</span><span class=\"token punctuation\">,</span> <span class=\"token comment\">// Стейт, в который произошел переход</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n  <span class=\"token comment\">// Второй объект — правило для перехода по интенту</span>\n  <span class=\"token punctuation\">{</span>\n    <span class=\"token string-property property\">\"clazz\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"/Intent\"</span><span class=\"token punctuation\">,</span>\n    <span class=\"token string-property property\">\"score\"</span><span class=\"token operator\">:</span> <span class=\"token number\">1</span><span class=\"token punctuation\">,</span>\n    <span class=\"token string-property property\">\"pt\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token comment\">// ...</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n    <span class=\"token string-property property\">\"debugInfo\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token comment\">// ...</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n    <span class=\"token string-property property\">\"ruleType\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"intent\"</span><span class=\"token punctuation\">,</span>\n    <span class=\"token string-property property\">\"parseTree\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token comment\">// ...</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n    <span class=\"token string-property property\">\"targetState\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"/Intent\"</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n  <span class=\"token comment\">// Третий объект — правило для перехода по примеру</span>\n  <span class=\"token punctuation\">{</span>\n    <span class=\"token string-property property\">\"clazz\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"/Example\"</span><span class=\"token punctuation\">,</span>\n    <span class=\"token string-property property\">\"score\"</span><span class=\"token operator\">:</span> <span class=\"token number\">0.6069870970795817</span><span class=\"token punctuation\">,</span>\n    <span class=\"token string-property property\">\"pt\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token comment\">// ...</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n    <span class=\"token string-property property\">\"debugInfo\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token comment\">// ...</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n    <span class=\"token string-property property\">\"ruleType\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"example\"</span><span class=\"token punctuation\">,</span>\n    <span class=\"token string-property property\">\"pattern\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"привет\"</span><span class=\"token punctuation\">,</span>\n    <span class=\"token string-property property\">\"parseTree\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token comment\">// ...</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n    <span class=\"token string-property property\">\"targetState\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"/Example\"</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">]</span></code></pre></div>\n<h3>С обработчиком selectNLUResult</h3>\n<p>Добавим в блок <code class=\"language-text\">init</code> <a href=\"/1.11.7/docs/ru/NLU_core/activation/selectNLUResult#%D0%9F%D0%B5%D1%80%D0%B5%D0%BE%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5-%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BA%D0%B0-%D1%81%D1%80%D0%B0%D0%B1%D0%B0%D1%82%D1%8B%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F-%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D0%BB\">обработчик</a>, который переопределяет порядок срабатывания правил активации так, чтобы наибольший приоритет был у примеров:</p>\n<div class=\"gatsby-highlight\" data-language=\"js\"><pre class=\"language-js\"><code class=\"language-js\"><span class=\"token function\">bind</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"selectNLUResult\"</span><span class=\"token punctuation\">,</span> <span class=\"token keyword\">function</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">$context</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>$context<span class=\"token punctuation\">.</span>nluResults<span class=\"token punctuation\">.</span>examples<span class=\"token punctuation\">.</span>length <span class=\"token operator\">></span> <span class=\"token number\">0</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        $context<span class=\"token punctuation\">.</span>nluResults<span class=\"token punctuation\">.</span>selected <span class=\"token operator\">=</span> $context<span class=\"token punctuation\">.</span>nluResults<span class=\"token punctuation\">.</span>examples<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n        <span class=\"token keyword\">return</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n\n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>$context<span class=\"token punctuation\">.</span>nluResults<span class=\"token punctuation\">.</span>patterns<span class=\"token punctuation\">.</span>length <span class=\"token operator\">></span> <span class=\"token number\">0</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        $context<span class=\"token punctuation\">.</span>nluResults<span class=\"token punctuation\">.</span>selected <span class=\"token operator\">=</span> $context<span class=\"token punctuation\">.</span>nluResults<span class=\"token punctuation\">.</span>patterns<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n        <span class=\"token keyword\">return</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n\n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>$context<span class=\"token punctuation\">.</span>nluResults<span class=\"token punctuation\">.</span>intents<span class=\"token punctuation\">.</span>length <span class=\"token operator\">></span> <span class=\"token number\">0</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        $context<span class=\"token punctuation\">.</span>nluResults<span class=\"token punctuation\">.</span>selected <span class=\"token operator\">=</span> $context<span class=\"token punctuation\">.</span>nluResults<span class=\"token punctuation\">.</span>intents<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n</br>\n<p>Теперь, если повторить предыдущий запрос, порядок объектов в массиве <code class=\"language-text\">$context.nBest</code> изменится:</p>\n<div class=\"gatsby-highlight\" data-language=\"js\"><pre class=\"language-js\"><code class=\"language-js\"><span class=\"token punctuation\">[</span>\n  <span class=\"token punctuation\">{</span>\n    <span class=\"token string-property property\">\"clazz\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"/Example\"</span><span class=\"token punctuation\">,</span>\n    <span class=\"token string-property property\">\"score\"</span><span class=\"token operator\">:</span> <span class=\"token number\">0.6069870970795817</span>\n    <span class=\"token comment\">// ...</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n  <span class=\"token punctuation\">{</span>\n    <span class=\"token string-property property\">\"clazz\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"/Intent\"</span><span class=\"token punctuation\">,</span>\n    <span class=\"token string-property property\">\"score\"</span><span class=\"token operator\">:</span> <span class=\"token number\">1</span>\n    <span class=\"token comment\">// ...</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n  <span class=\"token punctuation\">{</span>\n    <span class=\"token string-property property\">\"clazz\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"/Pattern\"</span><span class=\"token punctuation\">,</span>\n    <span class=\"token string-property property\">\"score\"</span><span class=\"token operator\">:</span> <span class=\"token number\">0.79</span>\n    <span class=\"token comment\">// ...</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">]</span></code></pre></div>","frontmatter":{"title":"","description":null},"headings":[{"value":"nBest"}]}},"pageContext":{"slug":"/docs/ru/NLU_core/activation/nBest/","previous":{"fields":{"slug":"/docs/ru/NLU_core/activation/rules/"},"frontmatter":{"title":"","description":null}},"next":{"fields":{"slug":"/docs/ru/NLU_core/CAILA_direct_API/CAILA_direct_API/"},"frontmatter":{"title":"","description":null}}}},
    "staticQueryHashes": ["1209419333"]}