Zephyrnet-logo

Bouw financiële zoekapplicaties met behulp van het meertalige inbeddingsmodel van Amazon Bedrock Cohere | Amazon-webservices

Datum:

Bedrijven hebben toegang tot enorme hoeveelheden gegevens, waarvan een groot deel moeilijk te ontdekken is omdat de gegevens ongestructureerd zijn. Conventionele benaderingen van analyseren ongestructureerde gegevens gebruik trefwoord- of synoniemenmatching. Ze vangen niet de volledige context van een document op, waardoor ze minder effectief zijn in het omgaan met ongestructureerde gegevens.

Bij tekstinsluitingen wordt daarentegen gebruik gemaakt van machine learning (ML) mogelijkheden om de betekenis van ongestructureerde gegevens vast te leggen. Inbedding wordt gegenereerd door representatieve taalmodellen die tekst in numerieke vectoren vertalen en contextuele informatie in een document coderen. Dit maakt toepassingen mogelijk zoals semantisch zoeken, Ophalen Augmented Generation (RAG), onderwerpmodellering en tekstclassificatie.

In de financiële dienstverleningssector omvatten toepassingen bijvoorbeeld het extraheren van inzichten uit winstrapporten, het zoeken naar informatie uit financiële overzichten en het analyseren van sentiment over aandelen en markten in financieel nieuws. Dankzij tekstinsluitingen kunnen professionals uit de sector inzichten uit documenten halen, fouten minimaliseren en hun prestaties verbeteren.

In dit bericht presenteren we een applicatie die financieel nieuws in verschillende talen kan doorzoeken en doorzoeken met behulp van Cohere's embed en Herrangschikken modellen met Amazonebodem.

Het meertalige inbeddingsmodel van Cohere

Cohere is een toonaangevend AI-platform voor ondernemingen dat grote taalmodellen (LLM's) en door LLM aangedreven oplossingen van wereldklasse bouwt waarmee computers kunnen zoeken, betekenis kunnen vastleggen en in tekst kunnen communiceren. Ze bieden gebruiksgemak en krachtige beveiligings- en privacycontroles.

Het meertalige inbeddingsmodel van Cohere genereert vectorrepresentaties van documenten voor meer dan 100 talen en is beschikbaar op Amazon Bedrock. Hierdoor hebben AWS-klanten er toegang toe als een API, wat de noodzaak elimineert om de onderliggende infrastructuur te beheren en ervoor zorgt dat gevoelige informatie veilig beheerd en beschermd blijft.

Het meertalige model groepeert tekst met vergelijkbare betekenissen door deze posities toe te wijzen die dicht bij elkaar liggen in een semantische vectorruimte. Met een meertalig insluitingsmodel kunnen ontwikkelaars tekst in meerdere talen verwerken zonder dat ze tussen verschillende modellen hoeven te schakelen, zoals geïllustreerd in de volgende afbeelding. Dit maakt de verwerking efficiënter en verbetert de prestaties voor meertalige applicaties.

Hieronder volgen enkele hoogtepunten van het inbeddingsmodel van Cohere:

  • Focus op documentkwaliteit – Typische inbeddingsmodellen zijn getraind om de gelijkenis tussen documenten te meten, maar het model van Cohere meet ook de documentkwaliteit
  • Betere vindbaarheid voor RAG-toepassingen – RAG-applicaties vereisen een goed zoeksysteem, waar het inbeddingsmodel van Cohere in uitblinkt
  • Kostenefficiënte datacompressie – Cohere maakt gebruik van een speciale, compressiebewuste trainingsmethode, wat resulteert in een aanzienlijke kostenbesparing voor uw vectordatabase

Gebruik cases voor het insluiten van tekst

Tekstinsluitingen zetten ongestructureerde gegevens om in een gestructureerde vorm. Hierdoor kunt u al deze documenten objectief vergelijken, ontleden en er inzichten uit afleiden. Hieronder volgen voorbeelden van gebruiksscenario’s die het inbeddingsmodel van Cohere mogelijk maakt:

  • Semantisch zoeken – Maakt krachtige zoektoepassingen mogelijk in combinatie met een vectordatabase, met uitstekende relevantie op basis van de betekenis van zoektermen
  • Zoekmachine voor een groter systeem – Vindt en haalt de meest relevante informatie op uit verbonden bedrijfsgegevensbronnen voor RAG-systemen
  • Tekstclassificatie – Ondersteunt intentieherkenning, sentimentanalyse en geavanceerde documentanalyse
  • Modellering van onderwerpen – Verandert een verzameling documenten in afzonderlijke clusters om opkomende onderwerpen en thema’s bloot te leggen

Verbeterde zoeksystemen met Rerank

Hoe introduceer je moderne semantische zoekmogelijkheden in bedrijven waar conventionele zoeksystemen voor trefwoorden al aanwezig zijn? Voor dergelijke systemen die al lange tijd deel uitmaken van de informatiearchitectuur van een bedrijf, is een volledige migratie naar een op embeddings gebaseerde aanpak in veel gevallen gewoon niet haalbaar.

Cohere's Rerank-eindpunt is ontworpen om deze kloof te overbruggen. Het fungeert als de tweede fase van een zoekstroom en biedt een rangschikking van relevante documenten op basis van de zoekopdracht van een gebruiker. Bedrijven kunnen een bestaand sleutelwoordsysteem (of zelfs een semantisch) systeem behouden voor het ophalen in de eerste fase en de kwaliteit van de zoekresultaten verbeteren met het Rerank-eindpunt in de herrangschikking in de tweede fase.

Rerank biedt een snelle en eenvoudige optie voor het verbeteren van zoekresultaten door semantische zoektechnologie met één regel code in de stapel van een gebruiker te introduceren. Het eindpunt wordt ook geleverd met meertalige ondersteuning. De volgende afbeelding illustreert de workflow voor het ophalen en opnieuw rangschikken.

Overzicht oplossingen

Financiële analisten moeten veel inhoud verwerken, zoals financiële publicaties en nieuwsmedia, om op de hoogte te blijven. Volgens de Vereniging voor Financiële Professionals (AFP), besteden financiële analisten 75% van hun tijd aan het verzamelen van gegevens of het beheren van het proces in plaats van aan het analyseren van de toegevoegde waarde. Het vinden van het antwoord op een vraag in verschillende bronnen en documenten is tijdrovend en vervelend werk. Het Cohere-inbeddingsmodel helpt analisten snel te zoeken in talloze artikeltitels in meerdere talen om de artikelen te vinden en te rangschikken die het meest relevant zijn voor een bepaalde zoekopdracht, waardoor een enorme hoeveelheid tijd en moeite wordt bespaard.

In het volgende gebruiksvoorbeeld laten we zien hoe het Embed-model van Cohere financieel nieuws in verschillende talen zoekt en doorzoekt in één unieke pijplijn. Vervolgens laten we zien hoe het toevoegen van Rerank aan het ophalen van uw insluitingen (of het toevoegen ervan aan een oudere lexicale zoekopdracht) de resultaten verder kan verbeteren.

Het ondersteunende notebook is beschikbaar op GitHub.

Het volgende diagram illustreert de workflow van de applicatie.

Schakel modeltoegang in via Amazon Bedrock

Amazon Bedrock-gebruikers moeten toegang tot modellen aanvragen om deze beschikbaar te maken voor gebruik. Om toegang tot aanvullende modellen aan te vragen, kiest u Toegang tot modellen het navigatievenster op de Amazon Bedrock console. Voor meer informatie, zie Toegang tot modellen. Voor deze walkthrough moet u toegang aanvragen tot het Cohere Embed Multilingual-model.

Installeer pakketten en importeer modules

Eerst installeren we de benodigde pakketten en importeren we de modules die we in dit voorbeeld zullen gebruiken:

!pip install --upgrade cohere-aws hnswlib translate

import pandas as pd
import cohere_aws
import hnswlib
import os
import re
import boto3

Documenten importeren

We gebruiken een dataset (MultiFIN) met een lijst met echte artikelkoppen in 15 talen (Engels, Turks, Deens, Spaans, Pools, Grieks, Fins, Hebreeuws, Japans, Hongaars, Noors, Russisch, Italiaans, IJslands en Zweeds ). Dit is een open source dataset samengesteld voor financiële natuurlijke taalverwerking (NLP) en is beschikbaar op a GitHub-repository.

In ons geval hebben we een CSV-bestand met de gegevens van MultiFIN aangemaakt, evenals een kolom met vertalingen. We gebruiken deze kolom niet om het model te voeden; we gebruiken het om ons te helpen bij het afdrukken van de resultaten voor degenen die geen Deens of Spaans spreken. We verwijzen naar dat CSV om ons dataframe te maken:

url = "https://raw.githubusercontent.com/cohere-ai/cohere-aws/main/notebooks/bedrock/multiFIN_train.csv"
df = pd.read_csv(url)

# Inspect dataset
df.head(5)

Selecteer een lijst met documenten die u wilt opvragen

MultiFIN beschikt over ruim 6,000 records in 15 verschillende talen. Voor ons voorbeeldgebruik richten we ons op drie talen: Engels, Spaans en Deens. We sorteren de headers ook op lengte en kiezen de langste.

Omdat we de langste artikelen kiezen, zorgen we ervoor dat de lengte niet te wijten is aan herhaalde reeksen. De volgende code toont een voorbeeld waarin dat het geval is. Wij zullen dat opruimen.

df['text'].iloc[2215]

'El 86% de las empresas españolas comprometidas con los Objetivos de Desarrollo 
Sostenible comprometidas con los Objetivos de Desarrollo Sostenible comprometidas 
con los Objetivos de Desarrollo Sostenible comprometidas con los Objetivos de 
Desarrollo Sostenible'

# Ensure there is no duplicated text in the headers
def remove_duplicates(text):
    return re.sub(r'((bw+b.{1,2}w+b)+).+1', r'1', text, flags=re.I)

df ['text'] = df['text'].apply(remove_duplicates)

# Keep only selected languages
languages = ['English', 'Spanish', 'Danish']
df = df.loc[df['lang'].isin(languages)]

# Pick the top 80 longest articles
df['text_length'] = df['text'].str.len()
df.sort_values(by=['text_length'], ascending=False, inplace=True)
top_80_df = df[:80]

# Language distribution
top_80_df['lang'].value_counts()

Onze lijst met documenten is mooi verdeeld over de drie talen:

lang
Spanish    33
English    29
Danish     18
Name: count, dtype: int64

Het volgende is de langste artikelkop in onze dataset:

top_80_df['text'].iloc[0]

"CFOdirect: Resultater fra PwC's Employee Engagement Landscape Survey, herunder hvordan 
man skaber mere engagement blandt medarbejdere. Læs desuden om de regnskabsmæssige 
konsekvenser for indkomstskat ifbm. Brexit"

Documenten insluiten en indexeren

Nu willen we onze documenten insluiten en de insluitingen opslaan. De insluitingen zijn zeer grote vectoren die de semantische betekenis van ons document samenvatten. In het bijzonder gebruiken we het embed-multilingual-v3.0-model van Cohere, dat inbedding met 1,024 dimensies creëert.

Wanneer een query wordt doorgegeven, sluiten we de query ook in en gebruiken we de hnswlib-bibliotheek om de dichtstbijzijnde buren te vinden.

Er zijn slechts een paar regels code nodig om een ​​Cohere-client op te zetten, de documenten in te sluiten en de zoekindex te maken. We houden ook de taal en vertaling van het document bij om de weergave van de resultaten te verrijken.

# Establish Cohere client
co = cohere_aws.Client(mode=cohere_aws.Mode.BEDROCK)
model_id = "cohere.embed-multilingual-v3"

# Embed documents
docs = top_80_df['text'].to_list()
docs_lang = top_80_df['lang'].to_list()
translated_docs = top_80_df['translated_text'].to_list() #for reference when returning non-English results
doc_embs = co.embed(texts=docs, model_id=model_id, input_type='search_document').embeddings

# Create a search index
index = hnswlib.Index(space='ip', dim=1024)
index.init_index(max_elements=len(doc_embs), ef_construction=512, M=64)
index.add_items(doc_embs, list(range(len(doc_embs))))

Bouw een ophaalsysteem

Vervolgens bouwen we een functie die een query als invoer neemt, deze insluit en de vier headers vindt die er nauwer aan verwant zijn:

# Retrieval of 4 closest docs to query
def retrieval(query):
    # Embed query and retrieve results
    query_emb = co.embed(texts=[query], model_id=model_id, input_type="search_query").embeddings
    doc_ids = index.knn_query(query_emb, k=3)[0][0] # we will retrieve 4 closest neighbors
    
    # Print and append results
    print(f"QUERY: {query.upper()} n")
    retrieved_docs, translated_retrieved_docs = [], []
    
    for doc_id in doc_ids:
        # Append results
        retrieved_docs.append(docs[doc_id])
        translated_retrieved_docs.append(translated_docs[doc_id])
    
        # Print results
        print(f"ORIGINAL ({docs_lang[doc_id]}): {docs[doc_id]}")
        if docs_lang[doc_id] != "English":
            print(f"TRANSLATION: {translated_docs[doc_id]} n----")
        else:
            print("----")
    print("END OF RESULTS nn")
    return retrieved_docs, translated_retrieved_docs

Voer een query uit op het ophaalsysteem

Laten we eens kijken wat ons systeem doet met een aantal verschillende zoekopdrachten. We beginnen met Engels:

queries = [
    "Are businessess meeting sustainability goals?",
    "Can data science help meet sustainability goals?"
]

for query in queries:
    retrieval(query)

De resultaten zijn als volgt:

QUERY: ARE BUSINESSES MEETING SUSTAINABILITY GOALS? 

ORIGINAL (English): Quality of business reporting on the Sustainable Development Goals 
improves, but has a long way to go to meet and drive targets.
----
ORIGINAL (English): Only 10 years to achieve Sustainable Development Goals but 
businesses remain on starting blocks for integration and progress
----
ORIGINAL (Spanish): Integrar los criterios ESG y el propósito en la estrategia 
principal reto de los Consejos de las empresas españolas en el mundo post-COVID 

TRANSLATION: Integrate ESG criteria and purpose into the main challenge strategy 
of the Boards of Spanish companies in the post-COVID world 
----
END OF RESULTS 

QUERY: CAN DATA SCIENCE HELP MEET SUSTAINABILITY GOALS? 

ORIGINAL (English): Using AI to better manage the environment could reduce greenhouse 
gas emissions, boost global GDP by up to 38m jobs by 2030
----
ORIGINAL (English): Quality of business reporting on the Sustainable Development Goals 
improves, but has a long way to go to meet and drive targets.
----
ORIGINAL (English): Only 10 years to achieve Sustainable Development Goals but 
businesses remain on starting blocks for integration and progress
----
END OF RESULTS 

Let op het volgende:

  • We stellen gerelateerde, maar enigszins verschillende vragen, en het model is genuanceerd genoeg om de meest relevante resultaten bovenaan te presenteren.
  • Ons model voert geen op trefwoorden gebaseerde zoekopdrachten uit, maar semantische zoekopdrachten. Zelfs als we een term als ‘data science’ gebruiken in plaats van ‘AI’, kan ons model begrijpen wat er wordt gevraagd en het meest relevante resultaat bovenaan weergeven.

Wat dacht je van een vraag in het Deens? Laten we eens kijken naar de volgende vraag:

query = "Hvor kan jeg finde den seneste danske boligplan?" # "Where can I find the latest Danish property plan?"
retrieved_docs, translated_retrieved_docs = retrieval(query)

QUERY: HVOR KAN JEG FINDE DEN SENESTE DANSKE BOLIGPLAN? 

ORIGINAL (Danish): Nyt fra CFOdirect: Ny PP&E-guide, FAQs om den nye leasingstandard, 
podcast om udfordringerne ved implementering af leasingstandarden og meget mere

TRANSLATION: New from CFOdirect: New PP&E guide, FAQs on the new leasing standard, 
podcast on the challenges of implementing the leasing standard and much more 
----
ORIGINAL (Danish): Lovforslag fremlagt om rentefri lån, udskudt frist for 
lønsumsafgift, førtidig udbetaling af skattekredit og loft på indestående på 
skattekontoen

TRANSLATION: Legislative proposal presented on interest-free loans, deferred payroll 
tax deadline, early payment of tax credit and ceiling on deposits in the tax account 
----
ORIGINAL (Danish): Nyt fra CFOdirect: Shareholder-spørgsmål til ledelsen, SEC 
cybersikkerhedsguide, den amerikanske skattereform og meget mere

TRANSLATION: New from CFOdirect: Shareholder questions for management, the SEC 
cybersecurity guide, US tax reform and more 
----
END OF RESULTS

In het voorgaande voorbeeld staat het Engelse acroniem ‘PP&E’ voor ‘property, plant, and Equipment’, en ons model kon dit aan onze vraag koppelen.

In dit geval zijn alle geretourneerde resultaten in het Deens, maar het model kan een document in een andere taal dan de query retourneren als de semantische betekenis ervan dichterbij ligt. We hebben volledige flexibiliteit en met een paar regels code kunnen we specificeren of het model alleen naar documenten in de taal van de query moet kijken, of naar alle documenten.

Verbeter de resultaten met Cohere Rerank

Inbedding is zeer krachtig. We gaan nu echter kijken hoe we onze resultaten nog verder kunnen verfijnen met het Rerank-eindpunt van Cohere, dat is getraind om de relevantie van documenten te beoordelen aan de hand van een zoekopdracht.

Een ander voordeel van Rerank is dat het bovenop een oudere trefwoordzoekmachine kan werken. U hoeft niet over te stappen op een vectordatabase of drastische wijzigingen aan te brengen in uw infrastructuur, en het kost slechts een paar regels code. Herrang is beschikbaar in Amazon Sage Maker.

Laten we een nieuwe zoekopdracht proberen. We gebruiken deze keer SageMaker:

query = "Are companies ready for the next down market?"
retrieved_docs, translated_retrieved_docs = retrieval(query)

QUERY: ARE COMPANIES READY FOR THE NEXT DOWN MARKET? 

ORIGINAL (Spanish): El valor en bolsa de las 100 mayores empresas cotizadas cae un 15% 
entre enero y marzo pero aguanta el embate del COVID-19 

TRANSLATION: The stock market value of the 100 largest listed companies falls 15% 
between January and March but withstands the onslaught of COVID-19 
----
ORIGINAL (English): 69% of business leaders have experienced a corporate crisis in the 
last five years yet 29% of companies have no staff dedicated to crisis preparedness
----
ORIGINAL (English): As work sites slowly start to reopen, CFOs are concerned about the 
global economy and a potential new COVID-19 wave - PwC survey
----
END OF RESULTS

In dit geval kon een semantische zoekopdracht ons antwoord ophalen en in de resultaten weergeven, maar het staat niet bovenaan. Wanneer we de query echter opnieuw doorgeven aan ons Rerank-eindpunt met de lijst met opgehaalde documenten, kan Rerank het meest relevante document bovenaan weergeven.

Eerst maken we de client en het Rerank-eindpunt:

# map model package arn
import boto3
cohere_package = "cohere-rerank-multilingual-v2--8b26a507962f3adb98ea9ac44cb70be1" # replace this with your info

model_package_map = {
    "us-east-1": f"arn:aws:sagemaker:us-east-1:865070037744:model-package/{cohere_package}",
    "us-east-2": f"arn:aws:sagemaker:us-east-2:057799348421:model-package/{cohere_package}",
    "us-west-1": f"arn:aws:sagemaker:us-west-1:382657785993:model-package/{cohere_package}",
    "us-west-2": f"arn:aws:sagemaker:us-west-2:594846645681:model-package/{cohere_package}",
    "ca-central-1": f"arn:aws:sagemaker:ca-central-1:470592106596:model-package/{cohere_package}",
    "eu-central-1": f"arn:aws:sagemaker:eu-central-1:446921602837:model-package/{cohere_package}",
    "eu-west-1": f"arn:aws:sagemaker:eu-west-1:985815980388:model-package/{cohere_package}",
    "eu-west-2": f"arn:aws:sagemaker:eu-west-2:856760150666:model-package/{cohere_package}",
    "eu-west-3": f"arn:aws:sagemaker:eu-west-3:843114510376:model-package/{cohere_package}",
    "eu-north-1": f"arn:aws:sagemaker:eu-north-1:136758871317:model-package/{cohere_package}",
    "ap-southeast-1": f"arn:aws:sagemaker:ap-southeast-1:192199979996:model-package/{cohere_package}",
    "ap-southeast-2": f"arn:aws:sagemaker:ap-southeast-2:666831318237:model-package/{cohere_package}",
    "ap-northeast-2": f"arn:aws:sagemaker:ap-northeast-2:745090734665:model-package/{cohere_package}",
    "ap-northeast-1": f"arn:aws:sagemaker:ap-northeast-1:977537786026:model-package/{cohere_package}",
    "ap-south-1": f"arn:aws:sagemaker:ap-south-1:077584701553:model-package/{cohere_package}",
    "sa-east-1": f"arn:aws:sagemaker:sa-east-1:270155090741:model-package/{cohere_package}",
}

region = boto3.Session().region_name
if region not in model_package_map.keys():
    raise Exception(f"Current boto3 session region {region} is not supported.")

model_package_arn = model_package_map[region]

co = cohere_aws.Client(region_name=region)
co.create_endpoint(arn=model_package_arn, endpoint_name="cohere-rerank-multilingual", instance_type="ml.g4dn.xlarge", n_instances=1)

Wanneer we de documenten doorgeven aan Rerank, kan het model nauwkeurig de meest relevante selecteren:

results = co.rerank(query=query, documents=retrieved_docs, top_n=1)

for hit in results:
    print(hit.document['text'])

69% of business leaders have experienced a corporate crisis in the last five years yet 
29% of companies have no staff dedicated to crisis preparedness

Conclusie

Dit bericht presenteerde een walkthrough van het gebruik van het meertalige inbeddingsmodel van Cohere in Amazon Bedrock in het domein van de financiële dienstverlening. In het bijzonder hebben we een voorbeeld gedemonstreerd van een meertalige zoekapplicatie voor financiële artikelen. We zagen hoe het inbeddingsmodel efficiënte en nauwkeurige ontdekking van informatie mogelijk maakt, waardoor de productiviteit en outputkwaliteit van een analist wordt vergroot.

Het meertalige inbeddingsmodel van Cohere ondersteunt meer dan 100 talen. Het neemt de complexiteit weg van het bouwen van applicaties waarbij met een corpus aan documenten in verschillende talen moet worden gewerkt. De Cohere Embed-model is getraind om resultaten te leveren in real-world toepassingen. Het verwerkt gegevens met veel ruis als invoer, past zich aan complexe RAG-systemen aan en levert kostenefficiëntie dankzij de compressiebewuste trainingsmethode.

Begin vandaag nog met het bouwen met het meertalige inbeddingsmodel van Cohere in Amazon Bedrock.


Over de auteurs

James Yi is een Senior AI/ML Partner Solutions Architect in het Technology Partners COE Tech-team bij Amazon Web Services. Hij heeft een passie voor het samenwerken met zakelijke klanten en partners bij het ontwerpen, implementeren en schalen van AI/ML-applicaties om bedrijfswaarde te creëren. Buiten zijn werk houdt hij van voetballen, reizen en tijd doorbrengen met zijn gezin.

Gonzalo Betegon is een Solutions Architect bij Cohere, een leverancier van geavanceerde technologie voor natuurlijke taalverwerking. Hij helpt organisaties in hun zakelijke behoeften te voorzien door de inzet van grote taalmodellen.

Meor Amer is een Developer Advocate bij Cohere, een leverancier van geavanceerde natuurlijke taalverwerkingstechnologie (NLP). Hij helpt ontwikkelaars bij het bouwen van geavanceerde applicaties met Cohere’s Large Language Models (LLM’s).

spot_img

AVC

VC Café

Laatste intelligentie

spot_img