Analyse vocale pour les centres d'appels basés sur SOLR

Je veux parler de notre expérience dans le développement d'applications basées sur la plate-forme de recherche en texte intégral Apache Solr.

Notre tùche était de développer un systÚme d'analyse de la parole pour les centres de contact. Le systÚme est basé sur deux technologies de base: la reconnaissance vocale et la recherche indexée. Pour la reconnaissance, nous avons utilisé nos moteurs, et pour l'indexation et la recherche, nous avons choisi Solr.

Pourquoi Solr? Nous n'avons pas effectuĂ© notre propre recherche comparative sur les moteurs de recherche indexĂ©s, mais nous avons soigneusement examinĂ© les opinions de nos collĂšgues . Bien sĂ»r, le choix pourrait ĂȘtre fait en faveur d'Elasticsearch ou de Sphinx, mais, apparemment, les stars de notre projet se sont formĂ©es en faveur de Solr, nous l'avons «scié». DĂ©jĂ  au cours du projet, nous avons dĂ©terminĂ© que les paramĂštres disponibles dans Solr sont suffisants pour configurer nos tĂąches.

Caractéristiques de notre projet


Le systĂšme a Ă©tĂ© dĂ©veloppĂ© pour l'analyse des appels des clients, qui sont enregistrĂ©s dans le centre de contact pour surveiller la qualitĂ© du service. Il n'analyse pas le son, mais le texte obtenu grĂące Ă  la reconnaissance automatique du dialogue. Les textes de discours reconnus sont fondamentalement diffĂ©rents des textes que nous rencontrons rĂ©guliĂšrement sur des sites Internet ou par e-mail. MĂȘme avec une prĂ©cision de reconnaissance de 100%, les textes de la parole spontanĂ©e reconnue peuvent sembler n'avoir aucun sens.

Cela est dĂ» Ă  deux facteurs principaux. PremiĂšrement, dans le discours oral, les expressions non verbales et faciales sont trĂšs souvent utilisĂ©es, qui ne sont pas reconnues dans le texte, mais sont importantes pour comprendre ce qui a Ă©tĂ© dit. DeuxiĂšmement, dans la parole, des abrĂ©viations et des omissions de structures linguistiques sont constamment utilisĂ©es, qui peuvent ĂȘtre restaurĂ©es Ă  partir du contexte d'une situation de communication. Ce phĂ©nomĂšne en linguistique est appelĂ© ellipse.

Pour voir de vos propres yeux le texte du discours reconnu avec toutes ses fonctionnalités, regardez les sous-titres automatiques de la vidéo sur youtube avec le son désactivé. C'est à propos de ce contenu, le matériel va à l'entrée du systÚme d'analyse vocale.

RequĂȘtes compliquĂ©es


Bien que Solr prenne en charge les instructions et les regroupements conditionnels standard, ces capacités ne sont souvent pas suffisantes pour implémenter tous les scénarios pour les analystes.

Souvent, l'analyste doit crĂ©er une requĂȘte avec des paramĂštres non inclus dans l'index Solr. Par exemple, trouvez tous les mots «merci» qui ont Ă©tĂ© prononcĂ©s au cours des 30 derniĂšres secondes de la conversation. Les mots sont indexĂ©s par Solr, mais pas de positions de mots temporaires. Nous appelons ces requĂȘtes «complexes» - les requĂȘtes qui incluent les paramĂštres de l'indice Solr et tout autre paramĂštre de sĂ©lection de donnĂ©es qui ne sont pas inclus dans l'indice Solr.

Comment un analyste forme-t-il des requĂȘtes?


L'analyste n'a aucune idĂ©e de la composition de l'indice Solr, il est important pour lui de rechercher et de recouper tous les attributs des phonogrammes d'appels et leurs transcriptions textuelles. Par consĂ©quent, le concept de «requĂȘte complexe» pour l'analyste est purement pragmatique: les requĂȘtes dans lesquelles il existe de nombreux paramĂštres de sĂ©lection, ou les requĂȘtes sont organisĂ©es dans une hiĂ©rarchie.

DĂ©crivant les actions de l'analyste dans le langage de la thĂ©orie des ensembles, nous pouvons dire qu'Ă  l'aide de requĂȘtes, l'analyste explore les relations entre les diffĂ©rents sous-ensembles: intersections, diffĂ©rences, ajouts. À l'aide de requĂȘtes hiĂ©rarchiques, l'analyste analyse le tableau de donnĂ©es au niveau de dĂ©tail requis de sa structure.


Figure 1. RequĂȘtes hiĂ©rarchiques

La figure 2 montre un exemple classique d'une requĂȘte complexe contenant Ă  la fois des critĂšres de sĂ©lection textuels et numĂ©riques.


Figure 2. Une requĂȘte complexe contenant des paramĂštres de sĂ©lection de donnĂ©es quantitatives et lexicales

À quoi ressemblent les requĂȘtes pour Solr?


ConsidĂ©rez le mĂ©canisme gĂ©nĂ©ral pour exĂ©cuter une requĂȘte dans Solr en utilisant l'exemple de la requĂȘte B de la figure 1. Comme nous pouvons le voir, la requĂȘte B a une requĂȘte parent A , en d'autres termes B⊆A . Dans l'analyse de la parole, une demande ne peut pas ĂȘtre satisfaite alors qu'au moins un de ses «parents» n'est pas satisfait. Ainsi, la requĂȘte A est exĂ©cutĂ©e en premier, puis seulement B. Evidemment, B doit contenir les conditions de la requĂȘte A.

La premiĂšre chose qui vient Ă  l'esprit est de combiner les conditions des deux requĂȘtes via AND et de les coller dans la query :

q=key:A AND key:B

Cependant, si nous combinons simplement toutes les requĂȘtes consĂ©cutives en une seule query , elle sera grande, elle sera diffĂ©rente pour chaque requĂȘte et elle sera calculĂ©e dans son intĂ©gralitĂ©. De plus, les conditions A affecteront la pertinence des rĂ©sultats de la requĂȘte B , ce qui ne serait pas souhaitable.

Essayons d'ajouter des requĂȘtes parent en tant que FilterQuery . Dans ce cas, la requĂȘte A ne sera pas affectĂ©e par la non-pertinence et nous pouvons nous attendre Ă  ce qu'elle soit dĂ©jĂ  terminĂ©e et que ses rĂ©sultats soient dans le cache. Ainsi, Solr devra calculer uniquement la requĂȘte B , tandis que Solr triera la sĂ©lection rĂ©sultante de la maniĂšre dont nous avons besoin:

q=keyword:B &fq=keyword:A

Si nous considĂ©rons schĂ©matiquement le format de la requĂȘte Ă  Solr, nous pouvons distinguer deux entitĂ©s principales:

  1. MainQuery - la requĂȘte principale avec un ensemble de paramĂštres que le document doit satisfaire. Par exemple, une demande de recherche d'opĂ©rateurs polis ressemblerait Ă  ceci: text_operator: ” ” .
    Cela signifie que le champ text_operator du document de recherche doit contenir la phrase “ ”
  2. FilterQuery - un ensemble de filtres supplémentaires qui limitent la sélection résultante. FilterQuery format MainQuery correspond à MainQuery

La division de la demande en Main et Filter vous permet de:

  1. indiquer explicitement quels paramĂštres de requĂȘte doivent affecter le rang du document dans la sĂ©lection et lesquels ne servent qu'Ă  la sĂ©lection dans la sĂ©lection rĂ©sultante. La pertinence pour la construction du classement des documents est calculĂ©e lorsque la partie de la requĂȘte MainQuery est exĂ©cutĂ©e et lorsque la partie de la requĂȘte FilterQuery est FilterQuery documents qui ne remplissent pas les conditions de la requĂȘte
  2. réduire considérablement la charge sur le moteur de recherche, car l'échantillon résultant obtenu aprÚs les calculs de FilterQuery est complÚtement mis en cache, tandis que les résultats du calcul de MainQuery sont stockés dans le cache uniquement pour les premiers du rang de 50 valeurs

MainQuery et FiletrQuery ont des effets diffĂ©rents sur les fonctions Solr. Par exemple, pour la mise en Ă©vidence , la fonction responsable de la mise en surbrillance des fragments de document pertinents, seule MainQuery et les paramĂštres FilterQuery pas la highlighting . C'est logique, car la pertinence est calculĂ©e exactement dans la partie de la requĂȘte MainQuery . VoilĂ  Ă  quoi ressemblent les rĂ©sultats de highlighting dans une vĂ©ritable recherche de textes avec les mots «bonjour» et «services».


Figure 3. Mise en Ă©vidence des mots pertinents aprĂšs avoir terminĂ© une requĂȘte MainQuery .

RequĂȘtes compliquĂ©es dans Solr


Revenons à l'exemple d'un opérateur poli. Dans cet exemple, nous avons déterminé les appels appropriés par la présence de l'expression «bon aprÚs-midi» dans le discours de l'opérateur, mais nous n'avons pas indiqué l'intervalle de temps pour rechercher des mots clés par rapport au début ou à la fin de la conversation.

Il semble qu'il y ait tout ce qu'il faut pour cela - la transcription textuelle de la conversation tĂ©lĂ©phonique contient l'horodatage de chaque mot, ainsi que des informations sur les participants au dialogue auxquels il appartient. Ces donnĂ©es peuvent Ă©galement ĂȘtre utilisĂ©es dans la recherche.


Figure 4. Fragment de décryptage textuel avec balisage non inclus dans l'index Solr: affiliation du locuteur, horodatages.

Mais comment traiter une requĂȘte de recherche vers Solr, si des paramĂštres non indexables sont impliquĂ©s dans la requĂȘte - l'heure Ă  laquelle le mot est prononcĂ©?

Il existe deux maniÚres évidentes de résoudre ce problÚme:

  1. ajouter des paramĂštres non indexĂ©s Ă  l'indice Solr. Dans le mĂȘme temps, la consommation de mĂ©moire augmentera lĂ©gĂšrement, mais l'indice sera considĂ©rablement plus lourd
  2. la sĂ©lection des donnĂ©es par des paramĂštres non indexables doit ĂȘtre effectuĂ©e Ă  l'aide de son service, et dans la collecte des documents obtenus aprĂšs une telle sĂ©lection, une recherche Ă  l'aide de l'indice Solr. Dans le mĂȘme temps, la consommation de mĂ©moire sera nettement supĂ©rieure Ă  celle du premier cas, mais les performances seront prĂ©visibles

Nous avons choisi la deuxiĂšme option. Pour ce faire, nous avons dĂ©veloppĂ© un service qui calcule les collections par requĂȘtes contenant des paramĂštres logiques et numĂ©riques non inclus dans l'index Solr. À la suite du travail de ce service, la partie de la collection qui n'a pas satisfait la demande a Ă©tĂ© marquĂ©e avec une balise spĂ©ciale («échappĂ©e») puis n'a pas participĂ© au calcul des rĂ©sultats de la requĂȘte.

Imaginez que nous voulons imposer une restriction sur la recherche Ă  la requĂȘte B que nous connaissons dĂ©jĂ , uniquement dans les 30 premiĂšres secondes de la boĂźte de dialogue. À la premiĂšre Ă©tape, nous exĂ©cutons B comme une simple requĂȘte, puis «filtrons» les mots qui vont au-delĂ  de la plage sĂ©lectionnĂ©e afin qu'ils ne tombent pas dans l'index Solr, mais en mĂȘme temps, nous pouvons restaurer le document d'origine Ă  partir d'eux. Les documents rĂ©sultants sont placĂ©s dans une collection Solr distincte et la recherche de la requĂȘte B y est redĂ©marrĂ©e.

Ici, je dois dire que les restrictions sur le début ou la fin de la conversation sont des fleurs, les baies sont des restrictions sur les résultats de la demande des parents. Pensez à l'exécution d'une telle demande.
Imaginez que nos documents se composent de boules avec des chiffres. Essayons de trouver toutes les boules "6" situées dans pas plus de deux boules à droite de "5".
Vous avez déjà réalisé que les numéros des billes sont inclus dans l'indice Solr, et qu'il n'y a pas de distance entre les billes.
Trouvez tous les documents avec des boules "6" et "5". En tant que MainQuery utilisons une requĂȘte pour les boules "5" et une requĂȘte pour "6" que nous enverrons Ă  FilterQuery . En consĂ©quence, Solr mettra en Ă©vidence les «5» boules dans les rĂ©sultats de recherche, ce qui simplifiera considĂ©rablement notre vie Ă  l'Ă©tape suivante.
Nous filtrons toutes les balles sauf celles qui sont à la distance souhaitée de «5». Les documents reçus (documents avec les boules souhaitées) seront placés dans une collection séparée.
FilterQuery sur les boules "6" dans la collection résultante, le résultat est les documents que nous FilterQuery .

En pratique, les boules 5 et 6 masquent gĂ©nĂ©ralement les requĂȘtes qui occupent plusieurs Ă©crans dans leur reprĂ©sentation textuelle. Je suis heureux que nous ayons mis en Ɠuvre cette recherche pas en vain - les analystes utilisent trĂšs souvent des requĂȘtes avec des restrictions du parent.

Conclusion


Qu'avons-nous appris, qu'avons-nous appris et qu'avons-nous réalisé grùce au projet?

Nous savons comment utiliser efficacement Solr pour travailler avec des donnĂ©es de diffĂ©rents types, nous pouvons «apprendre» Ă  Solr Ă  traiter des requĂȘtes avec des paramĂštres qui ne sont pas inclus dans son index de recherche.

Nous avons dĂ©veloppĂ© un systĂšme d'analyse vocale industriel fonctionnant sous une charge Ă©levĂ©e: des requĂȘtes de recherche complexes d'analystes sont calculĂ©es pour des Ă©chantillons de jusqu'Ă  cinq millions de documents texte. C'est possible et plus, mais il n'y avait aucun besoin pratique. L'Ă©chantillon de travail habituel de l'analyste comprend jusqu'Ă  environ 500 000 SMS d'appels tĂ©lĂ©phoniques reconnus, et le nombre total d'appels peut atteindre 15 millions.

Pour nos clients dans les centres de contact, le systÚme offre des opportunités sans précédent pour des analyses de nature trÚs différente: analyse des sujets et des raisons des demandes, analyse de la satisfaction client et bien d'autres.

Maintenant, nous connectons de nouvelles sources Ă  nos analyses - des conversations textuelles des clients avec les opĂ©rateurs. Nous mettons en Ɠuvre une seule application d'analyse des appels clients sur tous les canaux du centre de contact: tĂ©lĂ©phone, chat, formulaires sur sites, etc.

Nous nous ferons un plaisir de répondre à vos questions.

Je vous remercie

PS Solr est une chose trÚs difficile et nécessite un bon réglage pour obtenir de bons résultats. Nous raconterons notre expérience dans ce domaine dans les articles suivants.

Source: https://habr.com/ru/post/fr429590/


All Articles