menu icon

Retour d’Expérience - Indexation des transcriptions de fichiers média

all.site est un moteur de recherche collaboratif. Il fonctionne comme Bing ou Google mais il a l’avantage de pouvoir aller plus loin en indexant par exemple les contenus média et en organisant les données de systèmes comme Slack, Confluence ou l’ensemble des informations présentes dans l’intranet d’une entreprise.

Retour d’Expérience - Indexation des transcriptions de fichiers média

Introduction

all.site est un moteur de recherche collaboratif. Il fonctionne comme Bing ou Google mais il a l’avantage de pouvoir aller plus loin en indexant par exemple les contenus média et en organisant les données de systèmes comme Slack, Confluence ou l’ensemble des informations présentes dans l’intranet d’une entreprise.

Afin d’améliorer la pertinence de notre recherche, nous avons ajouté à all.site la fonctionnalité de retrouver des médias comme des vidéos ou des podcasts en recherchant des termes qui existent uniquement dans les transcriptions de ces médias.

Le speech-to-text est une technologie qui a énormément évolué notamment à la suite de l’avènement du Machine Learning. Le speech-to-text est par exemple utilisé par les assistants vocaux comme Alexa et Siri.

Dans le cas de all.site, l’extraction des transcriptions de médias se fait à l’aide de l’outil de reconnaissance vocale Vosk API.

Vosk API est une bibliothèque open source qui fonctionne en mode offline. Elle supporte plus de 20 langues et dialectes dont l’anglais, le français, l’espagnol, le chinois… Vosk fournit la reconnaissance vocale pour les chatbots ou les assistants virtuels. La technologie peut également créer des sous-titres pour des films ou des transcriptions pour des conférences.

Objectif

L’objectif de ce projet est la transcription de contenus média puis leur indexation dans Elasticsearch, pour permettre à nos utilisateurs d’étendre leurs recherches au contenu présent actuellement sous format audio. De cette façon, le moteur de recherche all.site gagne en pertinence de recherche et améliore significativement l’expérience des utilisateurs.

Flexibilité et simplicité

Vosk API supporte plusieurs langages de programmation (Java, PHP, Node, etc.) et tourne dans des systèmes légers (Raspberry Pi, smartphone, etc.) sans avoir besoin d’une capacité de calcul énorme. De plus, la technologie est simple à installer, avec des modèles légers ou plus lourds selon les besoins. Vosk API, utilisée avec l’outil ffmpeg, peut analyser plusieurs formats de fichiers media dont mp3, mp4, wav, etc. Il est également possible d’effectuer la personnalisation du vocabulaire et l’adaptation des modèles pour avoir une meilleure performance de reconnaissance vocale, sujet que nous aborderons dans un prochain billet.

Résultats

Dans cet exemple, on ajoute une source de type web avec l’URL du site à crawler :

alt text

Une fois la source ajoutée, le web crawler va indexer les données du site, et récupérer les fichiers médias qu’il retrouve au travers des tags HTML tels que <audio>, <video>… puis les envoyer à la Vosk API. Cette API va extraire les transcriptions de ces fichiers, puis les indexer dans Elasticsearch qui est le noyaux de all.site.

L’utilisateur de la plateforme all.site peut maintenant effectuer une recherche avec les termes qui se trouvent dans les transcripts des fichiers média du site spécifié :

alt text

all.site retourne dans ce cas une partie de la transcription du contenu média avec le terme recherché en surbrillance.

Problèmes rencontrés, solution et intégration

  • Format de fichier média :

Un prérequis de Vosk, les fichiers média doivent être au format « .wav ». Pour adhérer à cette contrainte, nous avons dû utiliser ffmpeg pour convertir les fichiers médias en format « wav ».

  • Sampling rate :

Afin de reconnaître le dialogue, Vosk API opère sur une sampling rate (taux d'échantillonnage) spécifiée dans le code. Et comme on ne connaît pas d’avance le sampling rate des fichiers médias à traiter, nous avons dû ajouter à la configuration de Vosk ces deux lignes :

--allow-downsample=true
--allow-upsample=true

afin que Vosk adapte le sampling rate du média reçu.

  • Problème de mémoire :

Un problème de mémoire apparaît lorsque le crawler trouve de larges fichiers médias à traiter par Vosk. Ce problème fût résolu en utilisant les WebSockets pour streamer les media au lieu de les envoyer d’un seul coup avec http post. Nous avons aussi configuré Vosk API de manière à ce qu’il puisse vider le buffer de la mémoire à l’aide du mode Print Partial Result ce qui nous a permis de retourner le transcrit au fil de l’eau.

  • Noms propres :

Le dernier problème rencontré au cours de l’implémentation fût l’ajout des noms propres au sein du dictionnaire de la Vosk API afin de les reconnaître. Pour ajouter de nouveaux termes au dictionnaire de Vosk, il faut entraîner le modèle Kaldi utilisé par Vosk ou bien utiliser l’outil Phonetisaurus qui est un ensemble de scripts pour entraîner des modèles de reconnaissances vocales en utilisant le OpenFst framework. La contrainte de cet entraînement est qu’il nécessite une machine puissante (32 Go de RAM et 100 Go d’espace disque minimum).

Pour aller plus loin

Pour apprendre plus sur les technologies Open Source autour de la voix et pour une démonstration supplémentaire cette intégration dans all.site, nous vous recommandons cette présentation par Aline Paponaud et Lucian Precup à la conférence OpenSource Experience: De la voix au texte, la puissance de l'écosystème open source. Pour une expérience augmentée, nous vous conseillons d’y accéder via le site SIDO-OSXP.

Et, pour finir, si vous avez besoin d’aide dans votre projet Search ou Elasticsearch, notamment pour ajouter des fonctionnalités avancées de ce type à votre moteur de recherche, n’hésitez pas à nous contacter. Nos consultants seront ravis de pouvoir vous apporter leur expertise.

Retour d’Expérience - Fine-tuning d’un modèle VOSK

05/01/2022

all.site est un moteur de recherche collaboratif. Il fonctionne comme Bing ou Google mais il a l’avantage de pouvoir aller plus loin en indexant par exemple les contenus média et en organisant les données de systèmes comme Slack, Confluence ou l’ensemble des informations présentes dans l’intranet d’une entreprise.

Read the article

New Search & Data meetup - E-Commerce Search and Open Source

28/10/2021

The fifth edition of the Search and Data meetup is dedicated to e-commerce search and open source. A nice agenda to mark our return to the Meetup scene

Read the article

Expédition vers Synonym Graph dans Elasticsearch

21/04/2021

Dans cet article, nous expliquons comment nous sommes passés des anciens filtres de synonymes d'Elasticsearch aux nouveaux filtres de type graphe, les Synonym Graph Token Filter.

Read the article

Quand les requêtes sont très verbeuses

22/02/2021

Dans cet article, nous présentons une méthode simple pour réécrire les requêtes utilisateurs afin qu'un moteur de recherche basé sur des mots clés puisse mieux les comprendre. Cette méthode est très utile dans le contexte d'une recherche vocale ou une conversation avec un chatbot, contexte dans lequel les requêtes utilisateur sont généralement plus verbeuses.

Read the article

Enrich the data and rewrite the queries with the Elasticsearch percolator

26/04/2019

This article is a transcript of the lightning talk we presented this week at Haystack - the Search and Relevance Conference. We showed a method allowing to enrich and rewrite user queries using Wikidata and the Elasticsearch percolator.

Read the article

A2 le moteur qui sublime Elasticsearch

13/06/2018

Elasticsearch est une technologie ouverte qui permet aux intégrateurs de construire des solutions toujours plus innovantes et puissantes.

Read the article