HCL Commerce Version 9.1.14.0 or later

Consideraciones al usar Basic Natural Language Processing

El procesamiento de lenguaje natural (NLP) se puede utilizar de dos modos: Basic NLP y el modo predeterminado, Advanced NLP.Advanced NLP está habilitado de forma predeterminada.

En determinadas circunstancias, es posible que desee utilizar el modo Básico, por ejemplo, cuando CoreNLP no admita su idioma, porque desea reducir el tamaño de sus contenedores de consultas o reducir la memoria de almacenamiento dinámico necesaria para el contenedor de consultas en el entorno de tiempo de ejecución. El modo NLP y su ámbito están controlados por la variable de entorno NLP_ENABLE_LANGUAGE_CODE o la clave de Vault nlpEnableLanguageCode. Esta variable admite una lista de hasta ocho idiomas compatibles con un módulo Stanford CoreNLP. Si añade idiomas adicionales a los ocho admitidos por CoreNLP, como se describe en Adición de idiomas al servicio NLP, los idiomas adicionales los evalúa el módulo Basic NLP.

Los ocho idiomas admitidos en Advanced NLP son árabe (ar), chino (zh), inglés (en), francés (fr), alemán (de), húngaro (hu), italiano (it) y español (es). Los dieciocho idiomas que admite Basic NLP son árabe (ar), inglés (en), chino (zh), danés (da), holandés (nl), finés (fi), francés (fr), alemán (de), griego (gr), húngaro (hu) , italiano (it), noruego (no), portugués (pt), rumano (ro), ruso (ru), español (es), sueco (sv) y turco (tr).

Basic NLP proporciona todas las características de Advanced NLP, excepto para el análisis de dependencias y las transformaciones de palabra a número. Se admiten dieciocho idiomas para Basic NLP. Estos idiomas se enumeran en el archivo de propiedades básicas de NLP. Si se especifican idiomas adicionales a estos dieciocho, se utiliza el flujo de Basic NLP para esos idiomas, pero sin lematización. En otras palabras, la lematización solo se aplica a los idiomas que aparecen en el archivo de propiedades, por lo que si no desea utilizar la lematización con un idioma en particular, elimínelo del archivo.

Por ejemplo, una tienda que admita griego e inglés puede tener:
  1. Solo inglés definido en NLP_ENABLE_LANGUAGE_CODE.
  2. No es necesario añadir griego al archivo de propiedades de NLP básico. Cuando se pasa un idioma determinado a la API que no forme parte de los dieciocho idiomas compatibles, no se realizará la lematización, pero el resto del flujo de Basic NLP aún continuará.

Adición de nuevas leyendas snowball al usar Basic NLP

En determinados procesos se asume que las funciones de Advanced NLP están presentes. Una de esas operaciones es la lematización, que se utiliza para reducir palabras inflexivas o compuestas hasta la raíz de la palabra. HCL Commerce Search utiliza el filtro snowballPorterFilterFactory para la lematización. Si habilita Basic NLP, agregue manualmente su nombre de entorno local y el nombre del idioma admitido por el lematizador snowball en la propiedad 'stemmer.language' si no está en la lista de leyendas admitidas predeterminadas. De forma predeterminada, HCL Commerce Search incluye leyendas snowball para los siguientes entornos locales en la configuración del índice. Aunque Elasticsearch no tiene leyendas disponibles para chino y griego, no se necesita configuración adicional para que el resto de estas leyendas predeterminadas estén disponibles para el servicio de consulta si habilita Basic NLP.
[ar_EG = árabe, da_DK = danés, de_DE = alemán, en_US = inglés, es_ES = español, fi_FI = finés, fr_FR = francés, hu_HU = húngaro, it_IT = italiano, nb_no = noruego, nl_NL = holandés, pt_BR = portugués, ro_RO = rumano, ru_RU = ruso, sv_SE = sueco, tr_TR = turco]
Si desea añadir un lematizador snowball para un nuevo idioma cuando Basic NLP está habilitado, puede hacerlo enviando una solicitud PATCH al siguiente punto final de configuración. Después de realizar este cambio, reinicie NiFi y active un índice completo. Una vez que se completa el índice, la nueva leyenda se incluye en la configuración del índice. En este ejemplo, añadimos leyendas en holandés y noruego a la lista de filtros.
PATCH http://dataQueryHost:dataQueryPort/search/resources/api/v2/configuration?nodeName=ingest&envType=auth Request Body: { "global": { "connector": [ { "name": "attribute", "property": [ { "name": "stemmer.language", "value": " {\"nb_NO\": \"Norwegian\", \"nl_NL\": \"Dutch\"} " }]}]}}
Note: Si el entorno local no es compatible con la tienda actual, no se añadirá ninguna leyenda a la configuración del índice.

Para obtener ayuda para adquirir la leyenda para un idioma concreto, consulte el tema Filtro de token Snowball en el sitio web de documentación de Elasticsearch.

Important:
Después de una actualización a HCL Commerce Search versión 9.1.14.1, verifique la integridad de los datos del nodo Ingest utilizando el punto final de REST /configuration.
GET - http://dataQueryHost:dataQueryPort/search/resources/api/v2/configuration?nodeName=ingest&envType=auth
El nodo Ingest debe incluir propiedades de configuración y todos los valores predeterminados para los siguientes idiomas de leyendas y palabras frecuentes.
{ "name": "stemmer.language", "value": " {\"ar_EG\": \"Arabic\", \"da_DK\": \"Danish\", \"de_DE\": \"German\", \"en_US\": \"English\", \"es_ES\": \"Spanish\", \"fi_FI\": \"Finnish\", \"fr_FR\": \"French\", \"hu_HU\": \"Hungarian\", \"it_IT\": \"Italian\", \"nb_no\": \"Norwegian\", \"nl_NL\": \"Dutch\", \"pt_BR\": \"Portuguese\", \"ro_RO\": \"Romanian\", \"ru_RU\": \"Russian\", \"sv_SE\": \"Swedish\", \"tr_TR\": \"Turkish\"} " }, { "name": "stopword.language", "value": " { \"ar\": \"_arabic_\", \"da\": \"_danish_\", \"de\": \"_german_\", \"el\": \"_greek_\", \"en\": \"_english_\", \"es\": \"_spanish_\", \"fi\": \"_finnish_\", \"fr\": \"_french_\", \"hu\": \"_hungarian_\", \"it\": \"_italian_\", \"ja\": \"_cjk_\", \"ko\": \"_cjk_\", \"nb\": \"_norwegian_\", \"nl\": \"_dutch_\", \"pt\": \"_portuguese_\", \"ro\": \"_romanian_\", \"ru\": \"_russian_\", \"sv\": \"_swedish_\", \"tr\": \"_turkish_\", \"zh\": \"_cjk_\"} " }

Si las propiedades stemmer.language o stopword.language no están presentes en el nodo Ingest, actualícelas usando el punto final /configuration como se describe en Adición manual de idiomas al usar Basic NLP

Habilitación de la búsqueda de categorías para categorías que no son hojas

HCL Commerce permite a los compradores encontrar productos según el nombre de su categoría padre asociada o de una lista de nombres de categorías. Esta situación se puede producir cuando se habilitan para la búsqueda categorías vinculadas o una búsqueda de vía de acceso de categoría completa. Una vez que se encuentra una coincidencia de nombre de categoría, todos los productos de esta categoría se devuelven en el resultado de la búsqueda. Se puede realizar un ajuste adicional junto con otros términos en la misma frase de búsqueda. Por ejemplo, una frase de búsqueda "vestidos Gusso" incluye una marca Gusso y un nombre de categoría (así como un nombre de producto) llamada "vestidos". Esta búsqueda devolverá todos los productos en aquellas categorías que tengan "vestidos" en su nombre y que sean de la marca Gusso, seguidos de otros productos que solo coincidan con "Gusso" o "vestidos" en su nombre o descripción breve.

La búsqueda de categorías está inhabilitada en Basic NLP. Esto significa que al realizar búsquedas de palabras clave, solo se tienen en cuenta las categorías a nivel de hoja al hacer coincidir el término introducido con las categorías. También puede configurar el sistema para que coincida con el término introducido para categorías que no sean hojas, utilizando el siguiente punto final de configuración. Establezca el valor de la propiedad Ingest flow.basic.nlp.category.search en true. De forma predeterminada, la búsqueda de categorías está inhabilitada; para habilitarla, realice los siguientes pasos.

  1. Ejecute una solicitud PATCH en la API de configuración de Ingest con el cuerpo de solicitud incluido.
    PATCH - http://dataQueryHost:dataQueryPort/search/resources/api/v2/configuration?nodeName=ingest&envType=auth { "global": { "connector": [ { "name": "attribute", "property": [ { "name": "flow.basic.nlp.category.search", "value": "true" } ] } ] } }
  2. Realice una reindexación completa. Consulte Crear el índice de Elasticsearch para conocer el procedimiento.
  3. Reinicie el servicio de consulta. Para obtener más información, consulte Iniciar el contenedor de consulta de Docker con las configuraciones predeterminadas.

Mejora de los resultados en Basic NLP

Puede utilizar un proveedor para mejorar el resultado de los términos de búsqueda identificados como NOUN, CATEGORY o BRAND. El valor predeterminado es el proveedor Advanced NLP definido en el archivo de configuración HCL_Basic_NLPProfile.json:
"Boost":"com.hcl.commerce.search.internal.expression.provider.SearchBasicNLPBoostQueryProviderHelper"
El contenido predeterminado de este archivo es el siguiente:
{ "profileName": "HCL_NLPProfile", "provider": { "PartNumber": "com.hcl.commerce.search.internal.expression.provider.SearchNLPCustomPartNumberHelper", "BlankSpace": "com.hcl.commerce.search.internal.expression.provider.SearchNLPWhiteSpaceProviderHelper", "CurrenySymbol": "com.hcl.commerce.search.internal.expression.provider.SearchNLPCurrencySymbolProviderHelper", "SpellCorrect": "com.hcl.commerce.search.internal.expression.provider.SearchNLPSpellCorrectionProviderHelper", "ExcludeSearchTerm": "com.hcl.commerce.search.internal.expression.provider.SearchNLPExcludedTermProviderHelper", "NumberFormatter": "com.hcl.commerce.search.internal.expression.provider.SearchNLPNumberFormatterProviderHelper", "STA": "com.hcl.commerce.search.internal.expression.provider.SearchNLPSTAExpansionProviderHelper", "DependenciesParsing": "com.hcl.commerce.search.internal.expression.provider.SearchNLPDependenciesParsingProviderHelper", "MultiWordSearchTerm": "com.hcl.commerce.search.internal.expression.provider.SearchNLPMultiwordTermProviderHelper", "LowerCase": "com.hcl.commerce.search.internal.expression.provider.SearchNLPLowerCaseProviderHelper", "DMM": "com.hcl.commerce.search.internal.expression.provider.SearchNLPDMMProviderHelper", "SpecialCharacter": "com.hcl.commerce.search.internal.expression.provider.SearchNLPSpecialCharacterProviderHelper", "MultiWordPriceFilter": "com.hcl.commerce.search.internal.expression.provider.SearchMultiwordFilterProviderHelper", "Stopword": "com.hcl.commerce.search.internal.expression.provider.SearchNLPStopwordProviderHelper", "WordToNumber": "com.hcl.commerce.search.internal.expression.provider.SearchNLPWordToNumberProviderHelper", "PriceFilter": "com.hcl.commerce.search.internal.expression.provider.SearchNLPPriceFilterProviderHelper", "POS_NER": "com.hcl.commerce.search.internal.expression.provider.SearchNLPPOSAndNERProviderHelper", "Color": "com.hcl.commerce.search.internal.expression.provider.SearchNLPColorMMProviderHelper" }, "classification": { }, "termDroppingPriority": { "1": "FILTER", "2": "MEASUREMENT", "3": "BRAND", "4": "COLOR", "5": "ADJECTIVE", "6": "CATEGORY", "7": "NOUN" } }
El proveedor Basic NLP se define en el archivo HCL_Basic_NLPProfile.json.
{ "profileName": "HCL_Basic_NLPProfile", "provider": { "PartNumber": "com.hcl.commerce.search.internal.expression.provider.SearchNLPCustomPartNumberHelper", "CategorySearch" : "com.hcl.commerce.search.internal.expression.provider.SearchBasicNLPCategorySearchProviderHelper", "BlankSpace": "com.hcl.commerce.search.internal.expression.provider.SearchNLPWhiteSpaceProviderHelper", "CurrenySymbol": "com.hcl.commerce.search.internal.expression.provider.SearchNLPCurrencySymbolProviderHelper", "LowerCase": "com.hcl.commerce.search.internal.expression.provider.SearchNLPLowerCaseProviderHelper", "SpellCorrect": "com.hcl.commerce.search.internal.expression.provider.SearchNLPSpellCorrectionProviderHelper", "ExcludeSearchTerm": "com.hcl.commerce.search.internal.expression.provider.SearchNLPExcludedTermProviderHelper", "Fractional": "com.hcl.commerce.search.internal.expression.provider.SearchNLPFractionalNumberHelper", "DMM": "com.hcl.commerce.search.internal.expression.provider.SearchNLPDMMProviderHelper", "MultiWordPriceFilter": "com.hcl.commerce.search.internal.expression.provider.SearchMultiwordFilterProviderHelper", "Stopword": "com.hcl.commerce.search.internal.expression.provider.SearchBasicNLPStopwordProviderHelper", "PriceFilter": "com.hcl.commerce.search.internal.expression.provider.SearchNLPPriceFilterProviderHelper", "POS_NER": "com.hcl.commerce.search.internal.expression.provider.SearchBasicNLPPOSAndNERProviderHelper", "Color": "com.hcl.commerce.search.internal.expression.provider.SearchNLPColorMMProviderHelper", "Boost": "com.hcl.commerce.search.internal.expression.provider.SearchBasicNLPBoostQueryProviderHelper" }, "classification": { }, "termDroppingPriority": { "1": "FILTER", "2": "MEASUREMENT", "3": "BRAND", "4": "COLOR", "5": "ADJECTIVE", "6": "CATEGORY", "7": "NOUN" } }
También se añade una nueva configuración en el archivo de configuración wc-component.json, que contiene el nombre del campo en el que se realiza la mejora.
{ "name": "basic.nlp.boost.fields", "value":"NOUN=nlp.natural.nouns.normalized,BRAND=nlp.natural.names.raw,CATEGORY=nlp.natural.categories.raw" } 
Esta es una lista separada por comas en la que cada valor consta de dos partes:
  • Delante del '=" se encuentra la clasificación.
  • Detrás del '=" se encuentra el campo en el que realiza el refuerzo si está identificado como clasificación NOUN, BRAND o CATEGORY.
Para mejorar un resultado, se necesitan tanto el campo como el factor de mejora. El campo se deriva del componente anterior y el factor de mejora se define en el archivo boostfields.properties, con el prefijo 'basic'.

Basic NLP : scripts almacenados

Al iniciar el servicio de consulta, se cargan scripts almacenados que mejoran los resultados de la búsqueda. Estos scripts se cargan según el componente basic.nlp.boost.fields.
  • "noun-boost-script-param-1"
  • "noun-boost-script-param-2"
  • "noun-boost-script-param-3"
  • "brand-boost-script-param-1"
  • "brand-boost-script-param-2"
  • "brand-boost-script-param-3"
  • "category-boost-script-param-1"
  • "category-boost-script-param-2"
  • "category-boost-script-param-3"

En la siguiente captura de pantalla se muestra un ejemplo de una configuración de script de mejora "noun-boost-script-param-1".

Para obtener más información sobre cómo mejorar los términos de búsqueda en Basic NLP, consulte Detalles del procesamiento de NLP en las respuestas de la API.