Recherche par mot-clé
Chez Tokopedia, nous comprenons que la valeur de notre corpus de produits n'est exploitée que lorsque nos acheteurs peuvent trouver des produits qui leur correspondent, c'est pourquoi nous nous efforçons d'améliorer la pertinence des résultats de recherche.
C'est pourquoi nous nous efforçons d'améliorer la pertinence des résultats de recherche. Pour poursuivre cet effort, nous introduisons la recherche par similarité sur Tokopedia. Si vous allez sur la page des résultats de recherche sur les appareils mobiles, vous trouverez un bouton "..." qui expose un menu qui vous donne l'option de rechercher des produits similaires au produit.
Recherche par mot-clé
Tokopedia Search utilise Elasticsearch pour la recherche et le classement des produits. Pour chaque demande de recherche, nous interrogeons d'abord ElasticSearch, qui classe les produits en fonction de la demande de recherche. ElasticSearch stocke chaque mot sous la forme d'une séquence de nombres représentant les codes ASCII (ou UTF) pour chaque lettre. Il construit un index inversé pour trouver rapidement les documents qui contiennent les mots de la requête de l'utilisateur, puis trouve la meilleure correspondance entre eux à l'aide de divers algorithmes de notation. Ces algorithmes ne prêtent guère attention à la signification des mots, mais plutôt à leur fréquence d'apparition dans le document, à leur proximité, etc. La représentation ASCII contient évidemment suffisamment d'informations pour transmettre la sémantique (après tout, nous, les humains, pouvons la comprendre). Malheureusement, il n'existe pas de bon algorithme permettant à l'ordinateur de comparer les mots codés en ASCII en fonction de leur signification.
Représentation vectorielle
Une solution à ce problème consisterait à proposer une autre représentation, qui nous renseignerait non seulement sur les lettres contenues dans le mot, mais aussi sur sa signification. Par exemple, nous pourrions coder les autres mots avec lesquels notre mot est fréquemment utilisé (représentés par le contexte probable). Nous pourrions alors supposer que des contextes similaires représentent des choses similaires et essayer de les comparer à l'aide de méthodes mathématiques. Nous pourrions même trouver un moyen d'encoder des phrases entières en fonction de leur signification.
Blog_Comment nous avons utilisé la recherche sémantique pour rendre notre recherche 10x plus intelligente_2.png
Sélectionner un moteur de recherche de similarité d'intégration
Maintenant que nous disposons de vecteurs de caractéristiques, la question qui se pose est de savoir comment extraire du grand volume de vecteurs ceux qui sont similaires au vecteur cible. En ce qui concerne le moteur de recherche d'embeddings, nous avons essayé plusieurs moteurs disponibles sur Github, dont FAISS, Vearch et Milvus.
Nous préférons Milvus aux autres moteurs sur la base des résultats des tests de charge. D'un côté, nous avons déjà utilisé FAISS pour d'autres équipes et nous aimerions donc essayer quelque chose de nouveau. Par rapport à Milvus, FAISS est davantage une bibliothèque sous-jacente et n'est donc pas très pratique à utiliser. Après en avoir appris davantage sur Milvus, nous avons finalement décidé d'adopter Milvus pour ses deux principales caractéristiques :
Milvus est très facile à utiliser. Tout ce que vous avez à faire est de tirer son image Docker et de mettre à jour les paramètres en fonction de votre propre scénario.
Il prend en charge davantage d'index et dispose d'une documentation détaillée.
En résumé, Milvus est très convivial pour les utilisateurs et la documentation est très détaillée. Si vous rencontrez un problème, vous pouvez généralement trouver des solutions dans la documentation ; sinon, vous pouvez toujours obtenir de l'aide auprès de la communauté Milvus.
Service de cluster Milvus
Après avoir décidé d'utiliser Milvus comme moteur de recherche à vecteur de fonctionnalités, nous avons décidé d'utiliser Milvus pour l'un de nos cas d'utilisation du service Ads dans lequel nous voulions faire correspondre des mots-clés à faible taux de remplissage avec des mots-clés à taux de remplissage élevé. Nous avons configuré un nœud autonome dans un environnement de développement (DEV) et commencé à servir, il fonctionnait bien depuis quelques jours et nous donnait des mesures CTR/CVR améliorées. Si un nœud autonome tombait en panne en production, l'ensemble du service deviendrait indisponible. Nous devons donc déployer un service de recherche hautement disponible.
Milvus fournit à la fois Mishards, un middleware de cluster sharding, et Milvus-Helm pour la configuration. Dans Tokopedia, nous utilisons les playbooks Ansible pour la configuration de l'infrastructure, nous avons donc créé un playbook pour l'orchestration de l'infrastructure. Le diagramme ci-dessous, tiré de la documentation de Milvus, montre comment fonctionne Mishards :
Blog_Comment nous avons utilisé la recherche sémantique pour rendre notre recherche 10x plus intelligente_3.png
Mishards fait descendre une requête en amont vers ses sous-modules en divisant la requête en amont, puis collecte et renvoie les résultats des sous-services vers l'amont. L'architecture globale de la solution de cluster basée sur Mishards est illustrée ci-dessous : Blog_How we used semantic search to make our search 10x smarter_4.jpeg
La documentation officielle fournit une introduction claire de Mishards. Vous pouvez vous référer à Mishards si vous êtes intéressé.
Dans notre service de mot-clé à mot-clé, nous avons déployé un nœud en écriture, deux nœuds en lecture seule et une instance de middleware Mishards dans GCP, en utilisant Milvus ansible. Jusqu'à présent, le système s'est avéré stable. L'indexation, un processus d'organisation des données qui accélère considérablement la recherche dans les big data, est un élément essentiel qui permet d'interroger efficacement les millions, les milliards, voire les trillions de données vectorielles sur lesquelles s'appuient les moteurs de recherche de similitudes.
Comment l'indexation vectorielle accélère-t-elle la recherche de similarités ?
Les moteurs de recherche de similarité fonctionnent en comparant les données d'entrée à une base de données afin de trouver les objets les plus similaires aux données d'entrée. L'indexation est le processus d'organisation efficace des données et joue un rôle majeur dans l'utilité de la recherche de similarité en accélérant considérablement les requêtes fastidieuses sur les grands ensembles de données. Après l'indexation d'un vaste ensemble de données vectorielles, les requêtes peuvent être acheminées vers les grappes, ou sous-ensembles de données, qui sont les plus susceptibles de contenir des vecteurs similaires à une requête d'entrée. Dans la pratique, cela signifie qu'un certain degré de précision est sacrifié pour accélérer les requêtes sur des données vectorielles très volumineuses.
On peut faire une analogie avec un dictionnaire, où les mots sont classés par ordre alphabétique. Lors de la recherche d'un mot, il est possible de naviguer rapidement vers une section qui ne contient que des mots ayant la même initiale, ce qui accélère considérablement la recherche de la définition du mot saisi.
Et maintenant, demandez-vous ?
Blog_Comment nous avons utilisé la recherche sémantique pour rendre notre recherche 10x plus intelligente_5.jpeg
Comme nous l'avons vu plus haut, il n'y a pas de solution universelle, nous voulons toujours améliorer les performances du modèle utilisé pour obtenir les enchâssements.
D'un point de vue technique, nous voulons également exécuter plusieurs modèles d'apprentissage en même temps et comparer les résultats des différentes expériences. Surveillez cet espace pour plus d'informations sur nos expériences telles que la recherche d'images et la recherche de vidéos.
Références :
- Mishards Docs:https://milvus.io/docs/v0.10.2/mishards.md
- Mishards : https://github.com/milvus-io/milvus/tree/master/shards
- Milvus-Helm : https://github.com/milvus-io/milvus-helm/tree/master/charts/milvus
Cet article de blog est repris de : https://medium.com/tokopedia-engineering/how-we-used-semantic-search-to-make-our-search-10x-smarter-bd9c7f601821
Lisez d'autres histoires d'utilisateurs pour en savoir plus sur la fabrication de choses avec Milvus.
- Représentation vectorielle
- Sélectionner un moteur de recherche de similarité d'intégration
- Service de cluster Milvus
- Comment l'indexation vectorielle accélère-t-elle la recherche de similarités ?
- Et maintenant, demandez-vous ?
- Références :
On This Page
Try Managed Milvus for Free
Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.
Get StartedLike the article? Spread the word