HCL Commerce Version 9.1.14.0 or later

Considérations lors de l'utilisation du Basic Natural Language Processing

Le traitement du langage naturel (NLP) peut être utilisé selon deux modes, Basic NLP et le mode par défaut, Advanced NLP. Advanced NLP est activé par défaut.

Il se peut que vous souhaitiez plutôt utiliser dans certaines circonstances le mode Basic, par exemple quand votre langue n'est pas prise en charge par CoreNLP, quand vous souhaitez réduire la taille de vos conteneurs Query ou réduire la mémoire de segment requise pour le conteneur Query dans l'environnement d'exécution. Le mode NLP et sa portée sont contrôlés par la variable d'environnement NLP_ENABLE_LANGUAGE_CODE ou la clé Vault nlpEnableLanguageCode. Cette variable prend en charge une liste de huit langues maximum grâce à un module Stanford CoreNLP. Si vous ajoutez des langues au-delà des huit prises en charge par CoreNLP, comme décrit dans Ajout de langues au service NLP, les langues supplémentaires sont évaluées par le module Basic NLP.

Les huit langues prises en charge dans Advanced NLP sont l'arabe (ar), le chinois (zh), l'anglais (en), le français (fr), l'allemand (de), le hongrois (hu), l'italien (it) et l'espagnol (es). Les dix-huit langues prises en charge par Basic NLP sont l'arabe (ar), l'anglais (en), le chinois (zh), le danois (da), le néerlandais (nl), le finnois (fi), le français (fr), l'allemand (de), le grec (gr), le hongrois (hu), l'italien (it), le norvégien (no), le portugais (pt), le roumain (ro), le russe (ru), l'espagnol (es), le suédois (sv) et le turc (tr).

Basic NLP offre toutes les fonctionnalités de Advanced NLP, à l'exception de l'analyse des dépendances et des conversions de mots en chiffres. Dix-huit langues sont prises en charge pour Basic NLP. Ces langues sont répertoriées dans le fichier de propriétés Basic NLP. Si d'autres langues au-delà de ces dix-huit sont spécifiées, le flux Basic NLP est utilisé pour ces langues, mais sans recherche du radical. En d'autres termes, la recherche du radical n'est appliquée qu'aux langues répertoriées dans le fichier de propriétés. Par conséquent, si vous ne souhaitez pas utiliser la recherche du radical avec une langue particulière, supprimez-la du fichier.

Par exemple, un magasin prenant en charge le grec et l'anglais peut avoir :
  1. Uniquement l'anglais défini dans NLP_ENABLE_LANGUAGE_CODE.
  2. Il n'est pas nécessaire d'ajouter le grec au fichier de propriétés Basic NLP. Lorsqu'une langue donnée est transmise à l'API et qu'elle ne fait pas partie des dix-huit langues prises en charge, la recherche du radical n'est pas effectuée, mais le reste du flux Basic NLP continue de s'exécuter.

Ajout de nouveaux stemmers Snowball lors de l'utilisation de Basic NLP

Certains processus partent du principe que les fonctions Advanced NLP sont présentes. L'une de ces opérations est la recherche du radical, qui sert à ramener les mots infléchis ou composés à leur radical. HCL Commerce Search utilise pour cela le filtre snowballPorterFilterFactory. Si vous activez Basic NLP, ajoutez manuellement le nom de vos paramètres régionaux et le nom de la langue prise en charge par le stemmer Snowball dans la propriété 'stemmer.language' si elle ne figure pas dans la liste des stemmers pris en charge par défaut. HCL Commerce Search inclut par défaut des stemmers Snowball pour les paramètres régionaux suivants dans les paramètres d'index. Bien qu'Elasticsearch ne propose aucun stemmer pour le chinois et le grec, aucune configuration supplémentaire n'est nécessaire pour rendre le reste de ces stemmers par défaut disponibles pour le service Query si vous activez Basic NLP.
[ar_EG = arabe, da_DK = danois, de_DE = allemand, en_US = anglais, es_ES = espagnol, fi_FI = finnois, fr_FR = français, hu_HU = hongrois, it_IT = italien, nb_no = norvégien, nl_NL = néerlandais, pt_BR = portugais, ro_RO = roumain, ru_RU = russe, sv_SE = suédois, tr_TR = turc]
Si vous souhaitez ajouter un stemmer Snowball pour une nouvelle langue lorsque Basic NLP est activé, il suffit d'envoyer une requête PATCH au point de terminaison de configuration suivant. Après avoir effectué cette modification, redémarrez NiFi et déclenchez un index complet. Une fois l'index terminé, le nouveau stemmer est inclus dans les paramètres de l'index. Dans cet exemple, nous ajoutons les stemmers pour le néerlandais et le norvégien à la liste des filtres.
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 les paramètres régionaux ne sont pas pris en charge par le magasin actuel, aucun stemmer ne sera ajouté aux paramètres d'index.

Pour obtenir de l'aide sur l'acquisition du stemmer pour une langue spécifique, consultez la rubrique Filtre de jeton Snowball sur le site Web de documentation d'Elasticsearch.

Important:
Après une mise à niveau vers HCL Commerce Search 9.1.14.1, vérifiez l'intégrité des données de votre nœud Ingest à l'aide du point de terminaison REST /configuration.
GET - http://dataQueryHost:dataQueryPort/search/resources/api/v2/configuration?nodeName=ingest&envType=auth
Le nœud Ingest doit inclure les propriétés de configuration et toutes les valeurs par défaut pour les langues de stemmer et de mots neutres suivantes.
{ "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 les propriétés stemmer.language ou stopword.language ne sont pas présentes dans le nœud Ingest, mettez-les à jour à l'aide du point de terminaison /configuration comme décrit dans Ajout manuel de langues lors de l'utilisation de Basic NLP

Activation de la recherche par catégorie pour les catégories autres que celles de niveau feuille

HCL Commerce permet aux clients de rechercher des produits en fonction du nom de leur catégorie parente associée, ou dans le cas d'une liste de noms de catégories. Une telle situation peut se produire lorsque des catégories liées ou une recherche de chemin de catégorie complète sont activées aux fins d'une recherche. Une fois qu'une correspondance de nom de catégorie est identifiée, tous les produits de cette catégorie sont renvoyés dans les résultats de recherche. Un affinement supplémentaire est possible en incluant d'autres termes dans la même expression de recherche. Par exemple, l'expression de recherche « robes Gusso » comprend le nom de la marque Gusso et un nom de catégorie (ainsi qu'un nom de produit), à savoir « robes ». Cette recherche renverra tous les produits des catégories dont le nom contient « robes » et qui sont de la marque Gusso, suivis par tous les autres produits dont le nom ou la description abrégée ne correspond qu'à « Gusso » ou à « robes ».

La recherche par catégorie est désactivée dans Basic NLP. Cela signifie que lors de l'exécution de recherches par mots clés, seules les catégories de niveau feuille sont prises en compte au moment d'établir une correspondance entre le terme saisi et les catégories. Vous pouvez aussi configurer le système pour qu'il établisse une correspondance entre le terme saisi et des catégories autres que celles de type feuille, à l'aide du point de terminaison de configuration suivant. Définissez la valeur de la propriété Ingest flow.basic.nlp.category.search sur true. Par défaut, la recherche par catégorie est désactivée>. Suivez les étapes ci-dessous pour l'activer.

  1. Exécutez une requête PATCH vers l'API de configuration Ingest avec le corps de la requête inclus.
    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. Effectuez une réindexation complète. Voir Création de l'index Elasticsearch pour la procédure.
  3. Redémarrez le service Query. Pour plus d'informations, voir Démarrage du conteneur Query Docker avec configurations par défaut.

Améliorer les résultats dans Basic NLP

Vous pouvez utiliser un fournisseur pour améliorer le résultat des termes de recherche identifiés comme NOUN, CATEGORY ou BRAND. La valeur par défaut est le fournisseur Advanced NLP défini dans le fichier de configuration HCL_Basic_NLPProfile.json :
"Boost":"com.hcl.commerce.search.internal.expression.provider.SearchBasicNLPBoostQueryProviderHelper"
Le contenu par défaut de ce fichier est le suivant :
{ "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" } }
Le fournisseur Basic NLP est défini dans le fichier 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" } }
Une nouvelle configuration est également ajoutée dans le fichier de configuration wc-component.json contenant le nom du champ sur lequel s'effectue l'amélioration.
{ "name": "basic.nlp.boost.fields", "value":"NOUN=nlp.natural.nouns.normalized,BRAND=nlp.natural.names.raw,CATEGORY=nlp.natural.categories.raw" } 
Il s'agit d'une liste séparée par des virgules dans laquelle chaque valeur se compose de deux parties :
  • Avant '=' figure la classification.
  • Après '=' figure le champ sur lequel vous effectuez l'amélioration s'il est identifié comme une classification NOUN, BRAND ou CATEGORY.
Pour améliorer un résultat, le champ et le facteur d'amélioration sont tous deux nécessaires. Le champ est dérivé du composant ci-dessus et le facteur d'amélioration est défini dans le fichier boostfields.properties, avec le préfixe 'basic'.

Basic NLP scripts stockés

Au démarrage du service Query, des scripts stockés sont chargés pour améliorer les résultats de recherche. Ces scripts sont chargés sur la base du composant 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"

La capture d'écran suivante montre un exemple de configuration de script d'amélioration "noun-boost-script-param-1".

Pour plus d'informations sur l'optimisation des termes de recherche dans Basic NLP, voir Détails du traitement NLP dans les réponses d'API.