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.
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.
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.
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.
Dans cet exemple, on ajoute une source de type web avec l’URL du site à 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é :
all.site retourne dans ce cas une partie de la transcription du contenu média avec le terme recherché en surbrillance.
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 ».
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.
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.
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 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.