Recherche de tenseur pour les humains.
Un moteur de recherche de tenseur open-source qui s'intègre de manière transparente à vos applications, sites web et flux de travail.
Marqo cloud ☁️ est actuellement en version bêta. Si vous êtes intéressé, postulez ici : https://q78175g1wwa.typeform.com/to/d0PEuRPC
La recherche tensorielle consiste à transformer des documents, des images et d'autres données en collections de vecteurs appelés "tenseurs". La représentation des données sous forme de tenseurs nous permet de faire correspondre des requêtes à des documents avec une compréhension de type humain du contenu de la requête et du document. La recherche tensorielle peut être utilisée dans de nombreux cas, tels que
- la recherche et les recommandations pour l'utilisateur final
- la recherche multimodale (image à image, texte à image, image à texte)
- les robots de chat et les systèmes de questions-réponses
- la classification de textes et d'images
- Marqo nécessite Docker. Pour installer Docker, allez sur le [site officiel de Docker] (https://docs.docker.com/get-docker/).
- Utilisez Docker pour exécuter Marqo (les utilisateurs de Mac avec des puces M-series devront aller ici) :
docker rm -f marqo;
docker pull marqoai/marqo:latest;
docker run --name marqo -it --privileged -p 8882:8882 --add-host host.docker.internal:host-gateway marqoai/marqo:latest
- Installez le client Marqo :
pip install marqo
- Commencez l'indexation et la recherche ! Prenons un exemple simple ci-dessous :
import marqo
mq = marqo.Client(url='http://localhost:8882')
mq.index("my-first-index").add_documents([
{
"Title": "The Travels of Marco Polo",
"Description": "A 13th-century travelogue describing Polo's travels"
},
{
"Title": "Extravehicular Mobility Unit (EMU)",
"Description": "The EMU is a spacesuit that provides environmental protection, "
"mobility, life support, and communications for astronauts",
"_id": "article_591"
}]
)
results = mq.index("my-first-index").search(
q="What is the best outfit to wear on the moon?"
)
mq
est le client qui enveloppe l'APImarqo
.add_documents()
prend une liste de documents, représentés comme des dicts python, pour l'indexationadd_documents()
crée un index avec des paramètres par défaut, s'il n'en existe pas encore.- Vous pouvez optionnellement définir l'ID d'un document avec le champ spécial
_id
. Sinon, Marqo va en générer un. - Si l'index n'existe pas, Marqo le créera. S'il existe, Marqo ajoutera les documents à l'index.
Regardons les résultats :
# let's print out the results:
import pprint
pprint.pprint(results)
{
'hits': [
{
'Title': 'Extravehicular Mobility Unit (EMU)',
'Description': 'The EMU is a spacesuit that provides environmental protection, mobility, life support, and'
'communications for astronauts',
'_highlights': {
'Description': 'The EMU is a spacesuit that provides environmental protection, '
'mobility, life support, and communications for astronauts'
},
'_id': 'article_591',
'_score': 0.61938936
},
{
'Title': 'The Travels of Marco Polo',
'Description': "A 13th-century travelogue describing Polo's travels",
'_highlights': {'Title': 'The Travels of Marco Polo'},
'_id': 'e00d1a8d-894c-41a1-8e3b-d8b2a8fce12a',
'_score': 0.60237324
}
],
'limit': 10,
'processingTimeMs': 49,
'query': 'What is the best outfit to wear on the moon?'
}
- Chaque hit correspond à un document qui correspond à la requête de recherche.
- Ils sont classés du plus au moins correspondant
limit
est le nombre maximum de résultats à retourner. Il peut être défini comme un paramètre pendant la recherche.- Chaque résultat a un champ
_highlights
. C'est la partie du document qui correspond le mieux à la requête.
Récupère un document par ID.
result = mq.index("my-first-index").get_document(document_id="article_591")
Notez qu'en ajoutant le document en utilisant add_documents
à nouveau en utilisant le même _id
, un document sera mis à jour.
Obtenez des informations sur un index.
results = mq.index("my-first-index").get_stats()
Effectuer une recherche par mot-clé.
result = mq.index("my-first-index").search('marco polo', search_method=marqo.SearchMethods.LEXICAL)
Utiliser la méthode de recherche tensorielle par défaut
result = mq.index("my-first-index").search('adventure', searchable_attributes=['Title'])
Supprimer des documents.
results = mq.index("my-first-index").delete_documents(ids=["article_591", "article_602"])
Supprime un index.
results = mq.index("my-first-index").delete()
Pour alimenter la recherche d'images et de textes, Marqo permet aux utilisateurs de brancher et de jouer avec les modèles CLIP de HuggingFace. **Pour commencer à indexer et à rechercher des images, créez d'abord un index avec une configuration CLIP, comme ci-dessous :
settings = {
"treat_urls_and_pointers_as_images":True, # allows us to find an image file and index it
"model":"ViT-L/14"
}
response = mq.create_index("my-multimodal-index", **settings)
Les images peuvent ensuite être ajoutées dans les documents comme suit. Vous pouvez utiliser des urls provenant de l'internet (par exemple S3) ou du disque de la machine :
response = mq.index("my-multimodal-index").add_documents([{
"My Image": "https://upload.wikimedia.org/wikipedia/commons/thumb/f/f2/Portrait_Hippopotamus_in_the_water.jpg/440px-Portrait_Hippopotamus_in_the_water.jpg",
"Description": "The hippopotamus, also called the common hippopotamus or river hippopotamus, is a large semiaquatic mammal native to sub-Saharan Africa",
"_id": "hippo-facts"
}])
Vous pouvez ensuite effectuer une recherche par texte comme d'habitude. Les champs de texte et d'image seront recherchés :
results = mq.index("my-multimodal-index").search('animal')
Setting searchable_attributes
to the image field ['My Image']
ensures only images are searched in this index:
results = mq.index("my-multimodal-index").search('animal', searchable_attributes=['My Image'])
La recherche à l'aide d'une image peut être réalisée en fournissant le lien de l'image.
results = mq.index("my-multimodal-index").search('https://upload.wikimedia.org/wikipedia/commons/thumb/9/96/Standing_Hippopotamus_MET_DP248993.jpg/440px-Standing_Hippopotamus_MET_DP248993.jpg')
La documentation complète de Marqo se trouve ici https://marqo.pages.dev/.
Notez que vous ne devez pas exécuter d'autres applications sur le cluster Opensearch de Marqo car Marqo modifie et adapte automatiquement les paramètres du cluster.
Marqo ne prend pas encore en charge la configuration du backend docker-in-docker pour l'architecture arm64. Cela signifie que si vous avez un Mac série M, vous devrez également exécuter le backend de Marqo, marqo-os, localement.
Pour exécuter Marqo sur un Mac série M, suivez les étapes suivantes.
- Dans un terminal, exécutez la commande suivante pour lancer opensearch :
docker rm -f marqo-os; docker run -p 9200:9200 -p 9600:9600 -e "discovery.type=single-node" marqoai/marqo-os:0.0.3-arm
- Dans un autre terminal, exécutez la commande suivante pour lancer Marqo :
docker rm -f marqo; docker run --name marqo --privileged \
-p 8882:8882 --add-host host.docker.internal:host-gateway \
-e "OPENSEARCH_URL=https://localhost:9200" \
marqoai/marqo:latest
Marqo est un projet communautaire dont l'objectif est de rendre la recherche tensorielle accessible à l'ensemble de la communauté des développeurs. Nous sommes heureux que vous soyez intéressés à nous aider ! Veuillez lire this pour commencer.
- Créer un environnement virtuel
python -m venv ./venv
. - Activez l'environnement virtuel
source ./venv/bin/activate
- Installez les exigences à partir du fichier d'exigences :
pip install -r requirements.txt
- Lancez les tests en exécutant le fichier tox. Placez le CD dans ce répertoire et exécutez "tox".
- Si vous mettez à jour les dépendances, assurez-vous de supprimer le répertoire .tox et de réexécuter le fichier.
- Exécutez la suite de tests complète (en utilisant la commande
tox
dans ce répertoire). - Créez une demande de pull avec un problème github attaché.
- Rejoignez notre [communauté Slack] (https://join.slack.com/t/marqo-community/shared_invite/zt-1d737l76e-u~b3Rvey2IN2nGM4wyr44w) et discutez de vos idées avec les autres membres de la communauté.
- Réunions de la communauté Marqo (à venir !)
!Liste de repo de Stargazers pour @marqo-ai/marqo](https://github.com/marqo-ai/marqo/stargazers)
Ce fichier readme est disponible dans les traductions suivantes :