Búsqueda basada en palabras clave
En Tokopedia, entendemos que el valor de nuestro corpus de productos sólo se desbloquea cuando nuestros compradores pueden encontrar productos que son relevantes para ellos, por lo que nos esforzamos por mejorar la relevancia de los resultados de búsqueda.
Para avanzar en este esfuerzo, estamos introduciendo la búsqueda por similitud en Tokopedia. Si va a la página de resultados de búsqueda en dispositivos móviles, encontrará un botón "..." que expone un menú que le da la opción de buscar productos similares al producto.
Búsqueda basada en palabras clave
Tokopedia Search utiliza Elasticsearch para la búsqueda y clasificación de productos. Para cada solicitud de búsqueda, primero consultamos a Elasticsearch, que clasifica los productos según la consulta de búsqueda. ElasticSearch almacena cada palabra como una secuencia de números que representan códigos ASCII (o UTF) para cada letra. Construye un índice invertido para averiguar rápidamente qué documentos contienen palabras de la consulta del usuario y, a continuación, encuentra la mejor coincidencia entre ellos utilizando varios algoritmos de puntuación. Estos algoritmos no tienen en cuenta el significado de las palabras, sino la frecuencia con la que aparecen en el documento, la proximidad entre ellas, etc. Obviamente, la representación ASCII contiene suficiente información para transmitir la semántica (al fin y al cabo, los humanos podemos entenderla). Por desgracia, no existe un buen algoritmo para que el ordenador compare las palabras codificadas en ASCII por su significado.
Representación vectorial
Una solución sería idear una representación alternativa, que nos dijera no sólo las letras que contiene la palabra, sino también algo sobre su significado. Por ejemplo, podríamos codificar con qué otras palabras se utiliza frecuentemente nuestra palabra (representadas por el contexto probable). Entonces supondríamos que contextos similares representan cosas similares, e intentaríamos compararlas utilizando métodos matemáticos. Incluso podríamos encontrar la manera de codificar frases enteras por su significado.
Blog_Cómo utilizamos la búsqueda semántica para hacer nuestra búsqueda 10 veces más inteligente_2.png
Seleccionar un motor de búsqueda por similitud de incrustación
Ahora que tenemos vectores de características, la cuestión que queda por resolver es cómo recuperar del gran volumen de vectores los que son similares al vector objetivo. Cuando se trata del motor de búsqueda de incrustaciones, hemos probado POC en varios motores disponibles en Github algunos de ellos son FAISS, Vearch, Milvus.
Preferimos Milvus a otros motores basándonos en los resultados de las pruebas de carga. Por un lado, hemos utilizado FAISS antes en otros equipos y por lo tanto nos gustaría probar algo nuevo. En comparación con Milvus, FAISS es más una biblioteca subyacente, por lo que no es muy cómodo de usar. A medida que fuimos aprendiendo más sobre Milvus, finalmente decidimos adoptar Milvus por sus dos características principales:
Milvus es muy fácil de usar. Todo lo que necesitas hacer es extraer su imagen Docker y actualizar los parámetros basados en tu propio escenario.
Soporta más índices y tiene una documentación de apoyo detallada.
En resumen, Milvus es muy fácil de usar y la documentación es bastante detallada. Si se encuentra con algún problema, normalmente puede encontrar soluciones en la documentación; de lo contrario, siempre puede obtener soporte de la comunidad Milvus.
Servicio de cluster Milvus
Después de decidir utilizar Milvus como motor de búsqueda vectorial de características, decidimos utilizar Milvus para uno de nuestros casos de uso del servicio Ads en el que queríamos emparejar palabras clave de bajo índice de llenado con palabras clave de alto índice de llenado. Configuramos un nodo independiente en un entorno de desarrollo (DEV) y comenzamos a servir, había estado funcionando bien durante unos días, y nos había proporcionado métricas CTR/CVR mejoradas. Si un nodo independiente se bloquea en producción, todo el servicio dejará de estar disponible. Por lo tanto, necesitamos desplegar un servicio de búsqueda de alta disponibilidad.
Milvus proporciona tanto Mishards, un middleware de fragmentación de clústeres, como Milvus-Helm para la configuración. En Tokopedia utilizamos Ansible playbooks para la configuración de la infraestructura, por lo que creamos un playbook para la orquestación de la infraestructura. El siguiente diagrama de la documentación de Milvus muestra cómo funciona Mishards:
Blog_Cómo utilizamos la búsqueda semántica para hacer nuestra búsqueda 10 veces más inteligente_3.png
Mishards desciende en cascada una solicitud de la línea ascendente a sus submódulos dividiendo la solicitud de la línea ascendente y, a continuación, recopila y devuelve los resultados de los subservicios a la línea ascendente. A continuación se muestra la arquitectura general de la solución de clúster basada en Mishards: Blog_How we used semantic search to make our search 10x smarter_4.jpeg
La documentación oficial proporciona una introducción clara de Mishards. Puede consultar Mishards si está interesado.
En nuestro servicio de palabra clave a palabra clave, desplegamos un nodo de escritura, dos nodos de sólo lectura y una instancia de middleware Mishards en GCP, utilizando Milvus ansible. Hasta ahora ha sido estable. La indexación, un proceso de organización de datos que acelera drásticamente la búsqueda de grandes volúmenes de datos, es un componente fundamental que permite consultar de forma eficiente los conjuntos de datos de millones, miles de millones o incluso billones de vectores en los que se basan los motores de búsqueda de similitudes.
¿Cómo acelera la indexación vectorial la búsqueda de similitudes?
Los motores de búsqueda por similitud comparan los datos de entrada con una base de datos para encontrar los objetos más similares. La indexación es el proceso de organización eficiente de los datos y desempeña un papel fundamental en la utilidad de la búsqueda de similitudes, ya que acelera drásticamente las consultas sobre grandes conjuntos de datos, que consumen mucho tiempo. Una vez indexado un gran conjunto de datos vectoriales, las consultas pueden dirigirse a los clusters, o subconjuntos de datos, que tienen más probabilidades de contener vectores similares a una consulta de entrada. En la práctica, esto significa que se sacrifica un cierto grado de precisión para acelerar las consultas sobre datos vectoriales realmente grandes.
Se puede establecer una analogía con un diccionario, en el que las palabras se ordenan alfabéticamente. Al buscar una palabra, es posible navegar rápidamente a una sección que sólo contenga palabras con la misma inicial, lo que acelera drásticamente la búsqueda de la definición de la palabra introducida.
¿Y ahora qué?
Blog_Cómo utilizamos la búsqueda semántica para hacer nuestra búsqueda 10 veces más inteligente_5.jpeg
Como hemos visto, no hay una solución que sirva para todo, siempre queremos mejorar el rendimiento del modelo utilizado para obtener las incrustaciones.
Además, desde un punto de vista técnico, queremos ejecutar varios modelos de aprendizaje al mismo tiempo y comparar los resultados de los distintos experimentos. En este espacio encontrarás más información sobre nuestros experimentos, como la búsqueda de imágenes y vídeos.
Referencias:
- 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
Este artículo de blog ha sido reproducido de: https://medium.com/tokopedia-engineering/how-we-used-semantic-search-to-make-our-search-10x-smarter-bd9c7f601821
Lea otras historias de usuarios para aprender más sobre cómo hacer cosas con Milvus.
- Representación vectorial
- Seleccionar un motor de búsqueda por similitud de incrustación
- Servicio de cluster Milvus
- ¿Cómo acelera la indexación vectorial la búsqueda de similitudes?
- ¿Y ahora qué?
- Referencias:
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