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
Interface pour crawler

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
Page de recherche

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.

Assurer la scalabilité d’un moteur de recherche pour des milliers de magasins en ligne – retour sur la conférence ElasticON

10/03/2023

Retour sur la présentation Assurer la scalabilité d’un moteur de recherche pour des milliers de magasins en ligne par Roudy Khoury et Aline Paponaud à ElasticON 2023

Lire l'article

Question answering, une approche plus humaine à nos recherches sur all.site.

19/01/2023

Tout sur les Question-Answering et comment l'implémenter en utilisant flask et elasticsearch.

Lire l'article

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.

Lire l'article

De la voix au texte, la puissance de l'écosystème Open Source - retour sur la conférence OSXP

01/12/2021

Retour sur la présentation "De la voix au texte, la puissance de l'écosystème Open Source", donnée à la conférence OSXP (Open Source Experience) par Lucian Precup et Aline Paponaud: lien de l'enregistrement vidéo et résumé des idées présentées.

Lire l'article

La revue de presse du 25 Novembre 2021

25/11/2021

Bientôt le weekend, bientôt l'hiver, alors une petite revue de presse pour occuper vos longues soirées...

Lire l'article

Nouveau meetup Search & Data - E-Commerce Search et Open Source

28/10/2021

La cinquième édition du meetup Search and Data est dédiée au search e-commerce et à l'open source. Un bel agenda pour cette édition de rentrée et de reprise.

Lire l'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.

Lire l'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.

Lire l'article

Enrichir les données et réécrire les requêtes avec le percolator Elasticsearch

26/04/2019

Cet article est une transcription de notre intervention cette semaine à Haystack - une conférence sur l'amélioration de la pertinence des moteurs de recherche. Nous avons montré une méthode permettant d'enrichir et de réécrire les requêtes des utilisateurs en utilisant Wikidata et le percolator Elasticsearch.

Lire l'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.

Lire l'article