Tensor search for humans.
Wyszukiwarka tensorowa typu open source, która bezproblemowo integruje się z Twoimi aplikacjami, witrynami internetowymi i cyklami produkcji.
Chmura Marqo ☁️ jest obecnie w fazie beta. Jeśli jesteś zainteresowany, zgłoś się tutaj: https://q78175g1wwa.typeform.com/to/d0PEuRPC
Wyszukiwanie tensorowe polega na przekształcaniu dokumentów, obrazów i innych danych w zbiory wektorów zwane „tensorami”. Reprezentowanie danych jako tensory pozwala nam dopasować zapytania do dokumentów z ludzkim zrozumieniem zapytania i treści dokumentu. Wyszukiwanie tensorowe może wspomagać różne przypadki użycia, takie jak:
- wyszukiwanie i rekomendacje użytkowników końcowych
- wyszukiwanie multimodalne (obraz na obraz, tekst na obraz, obraz na tekst)
- boty czatowe oraz systemy pytań i odpowiedzi
- klasyfikacja tekstu i obrazu
- Marqo wymaga dokera. Aby zainstalować Docker, przejdź do Docker oficjalna strona.
- Użyj dokera, aby uruchomić Marqo (Mac users with M-series chips will need to go here):
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
- Zainstaluj klienta Marqo:
pip install marqo
- Rozpocznij indeksowanie i wyszukiwanie! Spójrzmy na prosty przykład poniżej:
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
to klient, który otacza APImarqo
add_documents()
pobiera do indeksowania listę dokumentów, reprezentowanych jako dykty Pythonaadd_documents()
tworzy indeks z ustawieniami domyślnymi, jeśli jeszcze nie istnieje- Możesz opcjonalnie ustawić identyfikator dokumentu za pomocą specjalnego pola
_id
. W przeciwnym razie Marqo wygeneruje jeden. - Jeśli indeks nie istnieje, Marqo go stworzy. Jeśli istnieje, Marqo doda dokumenty do indeksu.
Przyjrzyjmy się wynikom:
# 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?'
}
– Każde trafienie odpowiada dokumentowi pasującemu do zapytania
– Są uporządkowane od najbardziej pasujących do najmniej pasujących
– limit
to maksymalna liczba trafień do zwrócenia. Można to ustawić jako parametr podczas wyszukiwania
– Każde trafienie ma pole _highlights
. To była ta część dokumentu, która najlepiej pasowała do zapytania.
Pobierz dokument według ID.
result = mq.index("my-first-index").get_document(document_id="article_591")
Zauważ, że dodanie dokumentu za pomocą add_documents
ponownie przy użyciu tego samego _id
spowoduje aktualizację dokumentu.
Uzyskaj informacje o indeksie.
results = mq.index("my-first-index").get_stats()
Przeprowadź wyszukiwanie słów kluczowych.
result = mq.index("my-first-index").search('marco polo', search_method=marqo.SearchMethods.LEXICAL)
Korzystanie z domyślnej metody wyszukiwania tensorów
result = mq.index("my-first-index").search('adventure', searchable_attributes=['Title'])
Usuń dokumenty.
results = mq.index("my-first-index").delete_documents(ids=["article_591", "article_602"])
Usuń indeks.
results = mq.index("my-first-index").delete()
Do obsługi wyszukiwania obrazów i tekstu, Marqo umożliwia użytkownikom podłączanie i odtwarzanie modeli CLIP firmy HuggingFace. Pamiętaj, że jeśli nie skonfigurujesz wyszukiwania multimodalnego, adresy URL obrazów będą traktowane jako ciągi. Aby rozpocząć indeksowanie i wyszukiwanie za pomocą obrazów, najpierw utwórz indeks z konfiguracją CLIP, jak poniżej:
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)
Obrazy można następnie dodawać w dokumentach w następujący sposób. Możesz użyć adresów URL z Internetu (na przykład S3) lub z dysku maszyny:
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"
}])
Następnie możesz wyszukiwać jak zwykle, używając tekstu. Przeszukiwane będą zarówno pola tekstowe, jak i graficzne:
results = mq.index("my-multimodal-index").search('animal')
Ustawienie parametru searchable_attributes
jako pole obrazu ['My Image']
gwarantuje, że w tym indeksie będą przeszukiwane tylko obrazy:
results = mq.index("my-multimodal-index").search('animal', searchable_attributes=['My Image'])
Wyszukiwanie za pomocą obrazu można osiągnąć, podając link do obrazu.
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')
Pełna dokumentacja Marqo znajduje się tutaj: https://marqo.pages.dev/.
Pamiętaj, że nie powinieneś uruchamiać innych aplikacji w klastrze Opensearch Marqo, ponieważ Marqo automatycznie zmienia i dostosowuje ustawienia w klastrze.
Marqo nie obsługuje jeszcze konfiguracji zaplecza docker-in-docker dla architektury arm64. Oznacza to, że jeśli masz komputer Mac z serii M, będziesz musiał również uruchomić lokalnie backend marqo, marqo-os.
Aby uruchomić Marqo na komputerze Mac z serii M, wykonaj następujące kroki.
- W jednym terminalu uruchom następujące polecenie, aby rozpocząć 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
- W innym terminalu uruchom następujące polecenie, aby uruchomić 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 to projekt społecznościowy, którego celem jest udostępnienie wyszukiwania tensorowego szerszej społeczności programistów. Cieszymy się, że jesteś zainteresowany pomocą! Aby rozpocząć, przeczytaj to
- Utwórz wirtualne środowisko
python -m venv ./venv
- Aktywuj środowisko wirtualne
source ./venv/bin/activate
- Zainstaluj wymagania z pliku wymagań:
pip install -r requirements.txt
- Uruchom testy, uruchamiając plik tox. CD do tego dir, a następnie uruchom "tox"
- Jeśli aktualizujesz zależności, Upewnij się, że usunięto dir .tox i uruchom ponownie
- Uruchom pełny zestaw testowy (za pomocą komendy
tox
w tym dir). - Utwórz pull request z dołączonym rozwiązaniem.
- Dołączć do naszego Slack community i rozmawiaj z innymi członkami społeczności o pomysłach.
- Spotkania społeczności Marqo (już wkrótce!)
Ten plik readme jest dostępny w następujących tłumaczeniach:
- English🇬🇧
- Français🇫🇷
- 中文 Chinese🇨🇳
- Polski🇵🇱
- Українська🇺🇦