Digitale assets zijn essentiële visuele representaties van producten, diensten, cultuur en merkidentiteit voor bedrijven in een steeds digitalere wereld. Digitale assets kunnen, samen met vastgelegd gebruikersgedrag, de klantbetrokkenheid vergemakkelijken door interactieve en gepersonaliseerde ervaringen aan te bieden, waardoor bedrijven op een dieper niveau verbinding kunnen maken met hun doelgroep. Het efficiënt ontdekken en zoeken naar specifieke inhoud binnen digitale assets is van cruciaal belang voor bedrijven om workflows te optimaliseren, samenwerking te stroomlijnen en relevante inhoud aan de juiste doelgroep te leveren. Volgens een onderzoek zullen video's in 2021 al een goede naam hebben 81% van al het internetverkeer van consumenten. Deze observatie komt niet als een verrassing, omdat video en audio krachtige media zijn die meer meeslepende ervaringen bieden en doelgroepen op een hoger emotioneel niveau natuurlijk aanspreken.
Naarmate bedrijven grote hoeveelheden digitale activa verzamelen, wordt het een grotere uitdaging om deze effectief te organiseren en te beheren om de waarde ervan te maximaliseren. Traditioneel koppelen bedrijven metadata, zoals trefwoorden, titels en beschrijvingen, aan deze digitale assets om het zoeken en ophalen van relevante inhoud te vergemakkelijken. Maar dit vereist in de eerste plaats een goed ontworpen systeem voor het beheer van digitale activa en aanvullende inspanningen om deze activa op te slaan. In werkelijkheid ontberen de meeste digitale assets informatieve metadata die efficiënt zoeken naar inhoud mogelijk maken. Bovendien moet u vaak een analyse uitvoeren van verschillende segmenten van het hele bestand en de concepten ontdekken die daar aan bod komen. Dit is tijdrovend en vereist veel handmatige inspanning.
Generatieve AI, vooral op het gebied van de verwerking en het begrip van natuurlijke taal (NLP en NLU), heeft een revolutie teweeggebracht in de manier waarop we tekst begrijpen en analyseren, waardoor we efficiënter en op schaal diepere inzichten kunnen verwerven. De vooruitgang op het gebied van grote taalmodellen (LLM's) heeft geleid tot rijkere weergaven van teksten, wat betere zoekmogelijkheden voor digitale middelen biedt. Retrieval Augmented Generation (RAG), gebouwd bovenop LLM's en geavanceerde prompttechnieken, is een populaire aanpak om nauwkeurigere antwoorden te bieden op basis van informatie die verborgen is in de digitale activaopslag van ondernemingen. Door gebruik te maken van ingebedde modellen van LLM's en krachtige indexers en retrievers kan RAG gesproken of geschreven vragen begrijpen en verwerken en snel de meest relevante informatie in de kennisbank vinden. Eerdere studies hebben aangetoond hoe RAG kan worden toegepast om een vraag- en antwoordoplossing te bieden die aansluit bij de kennis van het privédomein van een onderneming. Van alle soorten digitale assets zijn video- en audio-assets echter de meest voorkomende en belangrijkste.
De op RAG gebaseerde oplossing voor het beantwoorden van video/audio-vragen kan mogelijk zakelijke problemen oplossen bij het vinden van training en referentiemateriaal in de vorm van niet-tekstuele inhoud. Met beperkte tags of metadata die aan deze assets zijn gekoppeld, probeert de oplossing gebruikers te laten communiceren met de chatbot en antwoorden te krijgen op hun vragen, wat links kunnen zijn naar specifieke videotraining (“Ik heb een link nodig naar de Amazon S3-training voor gegevensopslag”) koppelingen naar documenten (“Ik heb een link nodig om meer te leren over machine learning”), of vragen die in de video’s aan bod kwamen (“Vertel me hoe ik een S3-bucket maak”). Het antwoord van de chatbot kan de vraag direct beantwoorden en bevat ook de links naar de bronvideo's met de specifieke tijdstempel van de inhoud die het meest relevant is voor het verzoek van de gebruiker.
In dit bericht laten we zien hoe u de kracht van RAG kunt gebruiken bij het bouwen van een vraag- en antwoordoplossing voor video- en audio-items Amazon Sage Maker.
Overzicht oplossingen
Het volgende diagram illustreert de oplossingsarchitectuur.
De workflow bestaat hoofdzakelijk uit de volgende fasen:
- Converteer video naar tekst met een spraak-naar-tekstmodel en tekstuitlijning met video's en organisatie. Wij slaan de gegevens op in Amazon eenvoudige opslagservice (Amazone S3).
- Maak intelligent videozoeken mogelijk met behulp van een RAG-aanpak met LLM's en LangChain. Gebruikers kunnen antwoorden krijgen die zijn gegenereerd door LLM's en relevante bronnen met tijdstempels.
- Bouw een multifunctionele chatbot met behulp van LLM's met SageMaker, waar de twee bovengenoemde oplossingen worden verpakt en geïmplementeerd.
Voor een gedetailleerde implementatie, zie de GitHub repo.
Voorwaarden
U hebt een AWS-account nodig met een AWS Identiteits- en toegangsbeheer (IAM)-rol met machtigingen voor het beheren van bronnen die zijn gemaakt als onderdeel van de oplossing. Voor details, zie maak een AWS-account aan.
Als dit de eerste keer is dat u ermee werkt Amazon SageMaker Studio, moet je eerst een SageMaker-domein. Bovendien moet u mogelijk een verhoging van het servicequotum aanvragen voor de overeenkomstige verwerkings- en hostinginstanties van SageMaker. Voor het voorbewerken van de videogegevens gebruiken we een ml.p3.2xlarge SageMaker-verwerkingsinstantie. Voor het hosten van Falcon-40B gebruiken we een ml.g5.12xlarge SageMaker-hostinginstantie.
Converteer video naar tekst met een spraak-naar-tekstmodel en een model voor het insluiten van zinnen
Om digitale video- of audio-items te kunnen doorzoeken en contextuele informatie van video's aan LLM's te kunnen bieden, moeten we alle media-inhoud naar tekst converteren en vervolgens de algemene benaderingen in NLP volgen om de tekstgegevens te verwerken. Om onze oplossing flexibeler te maken om verschillende scenario's aan te kunnen, bieden we de volgende opties voor deze taak:
- Amazon Transcribe en Amazon Translate – Als elk video- en audiobestand slechts één taal bevat, raden we u ten zeerste aan om hiervoor te kiezen Amazon Transcribe, een door AWS beheerde service voor het transcriberen van audio- en videobestanden. Als u ze in dezelfde taal moet vertalen, Amazon Vertalen is een andere door AWS beheerde service, die meertalige vertalingen ondersteunt.
- Fluisteren – In praktijksituaties kunnen videogegevens meerdere talen bevatten, zoals video's voor het leren van vreemde talen. Fluisteren is een multitasking spraakherkenningsmodel dat meertalige spraakherkenning, spraakvertaling en taalidentificatie kan uitvoeren. U kunt gebruik maken van een Fluisteren model om verschillende talen op videogegevens te detecteren en te transcriberen, en vervolgens alle verschillende talen in één taal te vertalen. Het is belangrijk dat de meeste RAG-oplossingen in dezelfde taal op de kennisbank draaien. Hoewel OpenAI de Whisper API biedt, gebruiken we voor dit bericht het Whisper-model van Gezicht knuffelen.
We voeren deze taak uit met een Amazon SageMaker-verwerking werken met bestaande gegevens. U kunt verwijzen naar data_preparation.ipynb
voor meer informatie over het uitvoeren van deze taak.
Converteer videogegevens naar audiogegevens
Omdat Amazon Transcribe zowel video- als audiogegevens kan verwerken en het Whisper-model alleen audiogegevens kan accepteren, moeten we, om beide opties te laten werken, videogegevens naar audiogegevens converteren. In de volgende code gebruiken we VideoFileClip
van de bibliotheek moviepy
om deze taak uit te voeren:
from moviepy.editor import VideoFileClip video = VideoFileClip(video_path)
video.audio.write_audiofile(audio_path)
Audiogegevens transcriberen
Wanneer de audiogegevens gereed zijn, kunnen we kiezen uit onze twee transcriptieopties. U kunt de optimale optie kiezen op basis van uw eigen gebruiksscenario met de eerder genoemde criteria.
Optie 1: Amazon Transcribe en Amazon Translate
De eerste optie is om Amazon AI-services, zoals Amazon Transcribe en Amazon Translate, te gebruiken om de transcripties van de video- en audiodatasets te verkrijgen. U kunt het volgende raadplegen GitHub-voorbeeld bij het kiezen van deze optie.
Optie 2: Fluisteren
Een Whisper-model kan audiogegevens verwerken maximaal 30 seconden lang. Om grote audiogegevens te verwerken, gebruiken we transformers.pipeline
om gevolgtrekkingen uit te voeren met Whisper. Bij het zoeken naar relevante videoclips of het genereren van inhoud met RAG zijn tijdstempels voor de relevante clips de belangrijke referenties. Daarom keren wij return_timestamps
aan om uitvoer met tijdstempels te krijgen. Door de parameter in te stellen language
in generate_kwargs
, worden alle verschillende talen in één videobestand getranscribeerd en vertaald in dezelfde taal. stride_length_s
is de paslengte links en rechts van elk stuk. Met deze parameter kunnen we ervoor zorgen dat het Whisper-model meer context ziet bij het doen van gevolgtrekkingen op elk deel, wat tot een nauwkeuriger resultaat zal leiden. Zie de volgende code:
from transformers import pipeline
import torch target_language = "en"
whisper_model = "whisper-large-v2" device = "cuda:0" if torch.cuda.is_available() else "cpu"
pipe = pipeline(
"automatic-speech-recognition",
model=f"openai/{whisper_model}",
device=device
) generate_kwargs = {"task":"transcribe", "language":f"<|{target_language}|>"}
prediction = pipe(
file_path,
return_timestamps=True,
chunk_length_s=30,
stride_length_s=(5),
generate_kwargs=generate_kwargs
)
De uitvoer van pipe
zijn de gegevens in woordenboekformaat met items van text
en chunks
. text
bevat het volledige getranscribeerde resultaat, en chunks
bestaat uit stukjes met het tijdstempel en het bijbehorende getranscribeerde resultaat (zie de volgende schermafbeelding). We gebruiken gegevens in stukjes voor verdere verwerking.
Zoals de voorgaande schermafbeelding laat zien, zijn veel zinnen afgekapt en in verschillende delen opgesplitst. Om de stukjes betekenisvoller te maken, moeten we in de volgende stap afgesneden zinnen combineren en tijdstempels bijwerken.
Organiseer zinnen
We gebruiken een heel eenvoudige regel om zinnen te combineren. Als het stuk eindigt met een punt (.
), brengen we geen enkele verandering aan; anders voegen we het samen met het volgende deel. In het volgende codefragment wordt uitgelegd hoe we deze wijziging doorvoeren:
prev_chunk = None
new_chunks = []
for chunk in chunks:
if prev_chunk:
chunk['text'] = prev_chunk['text'] + chunk['text']
chunk['timestamp'] = (prev_chunk['timestamp'][0], chunk['timestamp'][1]) if not chunk['text'].endswith('.'):
prev_chunk = chunk
else:
new_chunks.append(chunk)
prev_chunk = None
Vergeleken met de originele stukken geproduceerd door de audio-naar-tekst-conversies, kunnen we volledige zinnen krijgen die oorspronkelijk zijn afgesneden.
Brede zinnen
De tekstinhoud in documenten is normaal gesproken per alinea georganiseerd. In elke paragraaf wordt hetzelfde onderwerp behandeld. Het opsplitsen per alinea kan helpen bij het insluiten van teksten in betekenisvollere vectoren, wat de nauwkeurigheid van het ophalen kan verbeteren.
In tegenstelling tot de normale tekstinhoud in documenten, zijn transcripties uit het transcriptiemodel niet voorzien van alinea's. Hoewel er enkele stops in de audiobestanden voorkomen, kan het soms niet worden gebruikt voor alineazinnen. Aan de andere kant, langchain
biedt de recursieve chunking tekstsplitterfunctie RecursiveCharacterTextSplitter
, waarmee alle semantisch relevante inhoud in hetzelfde deel kan worden bewaard. Omdat we tijdstempels bij chunks moeten bijhouden, implementeren we ons eigen chunkingproces. Geïnspireerd door het bericht Hoe tekst in alinea's te verdelen met behulp van Python, splitsen we zinnen op op basis van de gelijkenis tussen de aangrenzende zinnen met een aanpak voor het insluiten van zinnen. Het basisidee is om de zinnen met de laagste gelijkenis met aangrenzende zinnen als splitspunten te nemen. We gebruiken all-MiniLM-L6-v2
voor het insluiten van zinnen. Voor de uitleg van deze aanpak kunt u het originele bericht raadplegen. We hebben enkele kleine wijzigingen aangebracht in de originele broncode; verwijzen naar onze broncode voor de implementatie. Het kernonderdeel van dit proces is als volgt:
# Embed sentences
model_name = "all-minilm-l6-v2"
model = SentenceTransformer(model_name)
embeddings = model.encode(sentences_all)
# Create similarities matrix
similarities = cosine_similarity(embeddings) # Let's apply our function. For long sentences i reccomend to use 10 or more sentences
minmimas = activate_similarities(similarities, p_size=p_size, order=order) # Create empty string
split_points = [each for each in minmimas[0]]
text = '' para_chunks = []
para_timestamp = []
start_timestamp = 0 for num, each in enumerate(sentences_all): current_timestamp = timestamps_all[num] if text == '' and (start_timestamp == current_timestamp[1]): start_timestamp = current_timestamp[0] if num in split_points: para_chunks.append(text) para_timestamp.append([start_timestamp, current_timestamp[1]]) text = f'{each}. ' start_timestamp = current_timestamp[1] else: text+=f'{each}. ' if len(text): para_chunks.append(text) para_timestamp.append([start_timestamp, timestamps_all[-1][1]])
Om de efficiëntie van chunking met zinsinbedding te evalueren, hebben we kwalitatieve vergelijkingen uitgevoerd tussen verschillende chunking-mechanismen. De veronderstelling die ten grondslag ligt aan dergelijke vergelijkingen is dat als de opgedeelde teksten semantischer verschillend en gescheiden zijn, er minder irrelevante contextuele informatie zal worden opgehaald voor de vraag- en antwoordsessie, zodat het antwoord nauwkeuriger en nauwkeuriger zal zijn. Tegelijkertijd zullen de kosten van gevolgtrekking ook lager zijn, omdat er minder contextuele informatie naar LLM's wordt verzonden, omdat de kosten stijgen met de grootte van de tokens.
We hebben de eerste twee componenten van een PCA gevisualiseerd door hoge dimensies in twee dimensies te reduceren. Vergeleken met recursieve chunking kunnen we zien dat de afstanden tussen vectoren die verschillende chunks vertegenwoordigen met zinsinbedding meer verspreid zijn, wat betekent dat de chunks semantisch meer gescheiden zijn. Dit betekent dat wanneer de vector van een query dicht bij de vector van één chunk ligt, er mogelijk minder mogelijkheden zijn om dichtbij andere chunks te komen. Een ophaaltaak heeft minder mogelijkheden om relevante informatie te kiezen uit meerdere semantisch vergelijkbare brokken.
Wanneer het chunkingproces voltooid is, voegen we tijdstempels toe aan de bestandsnaam van elk chunk, slaan we het op als één bestand en uploaden we het vervolgens naar een S3-bucket.
Maak intelligent videozoeken mogelijk met behulp van een RAG-gebaseerde aanpak met LangChain
Er zijn doorgaans vier benaderingen om een RAG-oplossing voor Q&A met LangChain te bouwen:
- De
load_qa_chain
functionaliteit, die alle informatie naar een LLM stuurt. Dit is geen ideale aanpak gezien de contextvenstergrootte en het volume aan video- en audiogegevens. - De
RetrievalQA
tool, waarvoor een tekstsplitter, een tekstinbeddingsmodel en een vectoropslag nodig zijn om teksten te verwerken en relevante informatie op te halen. - gebruik
VectorstoreIndexCreator
, wat een omhulsel is rond alle logica in de tweede benadering. De tekstsplitter, het tekstinsluitingsmodel en het vectorarchief worden tegelijkertijd binnen de functie geconfigureerd. - De
ConversationalRetrievalChain
tool, die het geheugen van de chatgeschiedenis verder toevoegt aan de QA-oplossing.
Voor dit bericht gebruiken we de tweede benadering om expliciet de beste technische praktijken aan te passen en te kiezen. In de volgende secties beschrijven we elke stap in detail.
Om te zoeken naar de relevante inhoud op basis van de zoekopdrachten van gebruikers, gebruiken we semantisch zoeken, waarmee we de intentie achter de zoekopdracht beter kunnen begrijpen en betekenisvolle zoekacties kunnen uitvoeren. We gebruiken eerst een vooraf getraind inbeddingsmodel om alle getranscribeerde tekst in een vectorruimte in te sluiten. Tijdens het zoeken wordt de zoekopdracht ook ingebed in dezelfde vectorruimte en worden de dichtstbijzijnde inbeddingen uit het broncorpus gevonden. U kunt het vooraf getrainde insluitingsmodel implementeren zoals weergegeven in Vraag beantwoorden met behulp van Retrieval Augmented Generation met basismodellen in Amazon SageMaker JumpStart om de insluitingen voor semantisch zoeken te creëren. In ons artikel gebruiken we vergelijkbare manieren om een intelligente videozoekoplossing te creëren met behulp van een op RAG gebaseerde aanpak met open source LangChain bibliotheek. LangChain is een open-sourceframework voor het ontwikkelen van applicaties die worden aangedreven door taalmodellen. LangChain biedt een generieke interface voor veel verschillende LLM's.
We implementeren eerst een inbeddingsmodel GPT-J 6B geleverd door Amazon SageMaker JumpStart en het taalmodel Falcon-40B Instrueer vanuit Hugging Face om je voor te bereiden op de oplossing. Wanneer de eindpunten gereed zijn, volgen we soortgelijke stappen als beschreven Vraag beantwoorden met behulp van Retrieval Augmented Generation met basismodellen in Amazon SageMaker JumpStart om het LLM-model en het inbeddingsmodel voor LangChain te creëren.
Het volgende codefragment laat zien hoe u het LLM-model maakt met behulp van de langchain.llms.sagemaker_endpoint.SagemakerEndpoint
klasse en transformeer de verzoek- en antwoordlading voor de LLM in de ContentHandler
:
from langchain.llms.sagemaker_endpoint import LLMContentHandler, SagemakerEndpoint parameters = { "max_new_tokens": 500,
} class ContentHandler(LLMContentHandler): content_type = "application/json" accepts = "application/json" def transform_input(self, prompt: str, model_kwargs={}) -> bytes: self.len_prompt = len(prompt) input_str = json.dumps({"inputs": prompt , "parameters": {**model_kwargs}}) return input_str.encode("utf-8") def transform_output(self, output: bytes) -> str: response_json = output.read() res = json.loads(response_json) print(res) ans = res[0]['generated_text'][self.len_prompt:] return ans content_handler = ContentHandler() sm_llm = SagemakerEndpoint( endpoint_name=_MODEL_CONFIG_["huggingface-falcon-40b"]["endpoint_name"], region_name=aws_region, model_kwargs=parameters, content_handler=content_handler,
)
Wanneer we een SageMaker JumpStart-insluitingsmodel gebruiken, moeten we de LangChain SageMaker-eindpuntinsluitingsklasse aanpassen en het modelverzoek en -antwoord transformeren om te integreren met LangChain. Laad de verwerkte videotranscripties met behulp van de LangChain-documentlader en maak een index.
We maken gebruik van de DirectoryLoader
pakket in LangChain om de tekstdocumenten in de documentlader te laden:
loader = DirectoryLoader("./data/demo-video-sagemaker-doc/", glob="*/.txt")
documents = loader.load()
Vervolgens gebruiken we de insluitingsmodellen om de insluitingen van de inhoud te maken en slaan we de insluitingen op in een FAISS-vectoropslag om een index te maken. We gebruiken deze index om relevante documenten te vinden die semantisch vergelijkbaar zijn met de invoerquery. Met de VectorstoreIndexCreator
class, kun je gewoon een paar regels code schrijven om deze taak te volbrengen:
index_creator = VectorstoreIndexCreator( vectorstore_cls=FAISS, embedding=embeddings, text_splitter=CharacterTextSplitter(chunk_size=500, chunk_overlap=0),
)
index = index_creator.from_loaders([loader])
Nu kunnen we de index gebruiken om naar relevante context te zoeken en deze doorgeven aan het LLM-model om een nauwkeurig antwoord te genereren:
index.query(question=question, llm=sm_llm)
Bouw een multifunctionele chatbot met SageMaker
Met de geïmplementeerde LLM op SageMaker kunnen we een multifunctionele slimme chatbot bouwen om te laten zien hoe deze modellen uw bedrijf kunnen helpen bij het bouwen van geavanceerde AI-aangedreven applicaties. In dit voorbeeld gebruikt de chatbot Gestroomlijnd om de gebruikersinterface te bouwen en de LangChain raamwerk om verschillende componenten rond LLM's aan elkaar te koppelen. Met behulp van de tekst-naar-tekst- en spraak-naar-tekst-LLM's die op SageMaker zijn geïmplementeerd, accepteert deze slimme chatbot invoer van tekstbestanden en audiobestanden, zodat gebruikers kunnen chatten met de invoerbestanden (accepteert tekst- en audiobestanden) en verder kunnen bouwen toepassingen daarbovenop. Het volgende diagram toont de architectuur van de chatbot.
Wanneer een gebruiker een tekstbestand uploadt naar de chatbot, plaatst de chatbot de inhoud in de LangChain-geheugencomponent en kan de gebruiker chatten met het geüploade document. Dit deel is geïnspireerd door het volgende GitHub-voorbeeld die een document-chatbot bouwt met SageMaker. We voegen ook een optie toe waarmee gebruikers audiobestanden kunnen uploaden. Vervolgens roept de chatbot automatisch het spraak-naar-tekst-model aan dat wordt gehost op het SageMaker-eindpunt om de tekstinhoud uit het geüploade audiobestand te extraheren en de tekstinhoud toe te voegen aan het LangChain-geheugen. Ten slotte bieden we de gebruiker de mogelijkheid om de optie te selecteren om de kennisbank te gebruiken bij het beantwoorden van vragen. Dit is de RAG-mogelijkheid die in het voorgaande diagram wordt getoond. We hebben de SageMaker-eindpunten gedefinieerd die worden geïmplementeerd in de notebooks die in de vorige secties zijn beschreven. Houd er rekening mee dat u de daadwerkelijke eindpuntnamen moet doorgeven die in uw account worden weergegeven wanneer u de Streamlit-app uitvoert. U kunt de eindpuntnamen vinden op de SageMaker-console onder Gevolgtrekking en Eindpunten.
Falcon_endpoint_name = os.getenv("falcon_ep_name", default="falcon-40b-instruct-12xl")
whisper_endpoint_name = os.getenv('wp_ep_name', default="whisper-large-v2")
embedding_endpoint_name = os.getenv('embed_ep_name', default="huggingface-textembedding-gpt-j-6b")
Wanneer de kennisbankoptie niet is geselecteerd, gebruiken we de gespreksketen, waar we de geheugencomponent toevoegen met behulp van de Gespreksbuffergeheugen geleverd door LangChain, zodat de bot de huidige gespreksgeschiedenis kan onthouden:
def load_chain(): memory = ConversationBufferMemory(return_messages=True) chain = ConversationChain(llm=llm, memory=memory) return chain chatchain = load_chain()
We gebruiken soortgelijke logica als getoond in de eerdere sectie voor de RAG-component en voegen de functie voor het ophalen van documenten toe aan de code. Voor demodoeleinden laden we de getranscribeerde tekst die is opgeslagen in de lokale opslag van SageMaker Studio als documentbron. U kunt op basis van uw keuze andere RAG-oplossingen implementeren met behulp van de vectordatabases, zoals Amazon OpenSearch-service, Amazon RDS, Amazon KendraEn nog veel meer.
Wanneer gebruikers de kennisbank voor de vraag gebruiken, haalt het volgende codefragment de relevante inhoud uit de database op en biedt het aanvullende context voor de LLM om de vraag te beantwoorden. We gebruikten de specifieke methode van FAISS, similarity_search_with_score
, bij het zoeken naar relevante documenten. Dit komt omdat het ook de metadata en de gelijkenisscore van het opgehaalde bronbestand kan leveren. De geretourneerde afstandsscore is L2-afstand. Daarom is een lagere score beter. Dit geeft ons meer opties om de gebruikers meer context te bieden, zoals het verstrekken van de exacte tijdstempels van de bronvideo's die relevant zijn voor de invoerquery. Wanneer de RAG-optie door de gebruiker vanuit de gebruikersinterface wordt geselecteerd, gebruikt de chatbot de load_qa_chain
functie van LangChain om de antwoorden te geven op basis van de invoerprompt.
docs = docsearch.similarity_search_with_score(user_input)
contexts = [] for doc, score in docs: print(f"Content: {doc.page_content}, Metadata: {doc.metadata}, Score: {score}") if score <= 0.9: contexts.append(doc) source.append(doc.metadata['source'].split('/')[-1])
print(f"n INPUT CONTEXT:{contexts}")
prompt_template = """Use the following pieces of context to answer the question at the end. If you don't know the answer, just say that you don't know, don't try to make up an answer.:nn{context}nnQuestion: {question}nHelpful Answer:""" PROMPT = PromptTemplate(template=prompt_template, input_variables=["context", "question"])
chain = load_qa_chain(llm=llm, prompt=PROMPT)
result = chain({"input_documents": contexts, "question": user_input}, return_only_outputs=True)["output_text"] if len(source) != 0: df = pd.DataFrame(source, columns=['knowledge source']) st.data_editor(df)
Voer de chatbot-app uit
Nu zijn we klaar om de Streamlit-app uit te voeren. Open een terminal in SageMaker Studio en navigeer naar de gekloonde GitHub-repositorymap. U moet de vereiste Python-pakketten installeren die zijn opgegeven in de requirements.txt
bestand. Loop pip install -r requirements.txt
om de Python-afhankelijkheden voor te bereiden.
Voer vervolgens de volgende opdracht uit om de eindpuntnamen in de omgevingsvariabelen bij te werken op basis van de eindpunten die in uw account zijn geïmplementeerd. Wanneer u de chatbot.py
-bestand werkt het automatisch de eindpuntnamen bij op basis van de omgevingsvariabelen.
export falcon_ep_name=<the falcon endpoint name deployed in your account>
export wp_ep_name=<the whisper endpoint name deployed in your account>
export embed_ep_name=<the embedding endpoint name deployed in your account>
streamlit run app_chatbot/chatbot.py --server.port 6006 --server.maxUploadSize 6
Om toegang te krijgen tot de Streamlit-gebruikersinterface, kopieert u uw SageMaker Studio-URL en vervangt u deze lab?
Met proxy/[PORT NUMBER]/
. Voor dit bericht hebben we de serverpoort opgegeven als 6006
, dus de URL zou er zo uit moeten zien https://<domain ID>.studio.<region>.sagemaker.aws/jupyter/default/proxy/6006/
.
vervangen domein-ID en regio met de juiste waarde in uw account om toegang te krijgen tot de gebruikersinterface.
Chat met uw audiobestand
In het Gespreksopstelling kies het venster Bestanden doorbladeren om lokale tekst- of audiobestanden te selecteren om naar de chatbot te uploaden. Als u een audiobestand selecteert, wordt automatisch het spraak-naar-tekst SageMaker-eindpunt aangeroepen om het audiobestand te verwerken en de getranscribeerde tekst aan de console te presenteren, zoals weergegeven in de volgende schermafbeelding. U kunt vragen blijven stellen over het audiobestand en de chatbot kan de audiocontent onthouden en op basis van de audiocontent reageren op uw vragen.
Gebruik de kennisbank voor de Q&A
Als u vragen wilt beantwoorden die specifieke domeinkennis vereisen of de kennisbank wilt gebruiken, selecteert u Maak gebruik van de kennisbank. Hierdoor kan de chatbot relevante informatie ophalen uit de eerder opgebouwde kennisbank (de vectordatabase) om extra context toe te voegen om de vraag te beantwoorden. Wanneer we bijvoorbeeld de vraag stellen “wat is de aanbevolen manier om eerst een funderingsmodel aan te passen?” naar de chatbot zonder de kennisbank, retourneert de chatbot een antwoord dat lijkt op de volgende schermafbeelding.
Wanneer we de kennisbank gebruiken om deze vraag te helpen beantwoorden, retourneert de chatbot een ander antwoord. In de demovideo lezen we het SageMaker-document over hoe u dit kunt doen pas een model aan in SageMaker Jumpstart.
De uitvoer biedt ook de originele videobestandsnaam met de opgehaalde tijdstempel van de bijbehorende tekst. Gebruikers kunnen teruggaan naar het originele videobestand en de specifieke clips in de originele video's zoeken.
Deze voorbeeldchatbot laat zien hoe bedrijven verschillende soorten digitale middelen kunnen gebruiken om hun kennisbasis te vergroten en multifunctionele hulp te bieden aan hun werknemers om de productiviteit en efficiëntie te verbeteren. U kunt de kennisdatabase opbouwen op basis van documenten, audio- en videodatasets en zelfs beelddatasets om alle bronnen samen te consolideren. Omdat SageMaker fungeert als een geavanceerd ML-platform, versnelt u projectideeën naar productiesnelheid met de breedte en diepte van de SageMaker-services die de hele ML-levenscyclus bestrijken.
Opruimen
Om kosten te besparen, verwijdert u alle bronnen die u als onderdeel van het bericht heeft ingezet. U kunt de meegeleverde opschoonsectie van het notebook volgen om de bronnen programmatisch te verwijderen, of u kunt alle SageMaker-eindpunten verwijderen die u mogelijk via de SageMaker-console hebt gemaakt.
Conclusie
De komst van generatieve AI-modellen, aangedreven door LLM's, heeft een revolutie teweeggebracht in de manier waarop bedrijven inzichten uit informatie verwerven en toepassen. Binnen deze context spelen digitale assets, waaronder video- en audiocontent, een cruciale rol als visuele representatie van producten, diensten en merkidentiteit. Het efficiënt zoeken en ontdekken van specifieke inhoud binnen deze assets is van cruciaal belang voor het optimaliseren van workflows, het verbeteren van de samenwerking en het leveren van op maat gemaakte ervaringen aan de beoogde doelgroep. Met de kracht van generatieve AI-modellen op SageMaker kunnen bedrijven het volledige potentieel van hun video- en audiobronnen ontsluiten. De integratie van generatieve AI-modellen stelt ondernemingen in staat efficiënte en intelligente zoekoplossingen te bouwen, waardoor gebruikers toegang krijgen tot relevante en contextuele informatie uit hun digitale activa, waardoor de waarde ervan wordt gemaximaliseerd en zakelijk succes in het digitale landschap wordt bevorderd.
Voor meer informatie over het werken met generatieve AI op AWS, zie Aankondiging van nieuwe tools voor bouwen met generatieve AI op AWS.
Over de auteurs
Gorden Wang is een Senior AI/ML Specialist TAM bij AWS. Hij ondersteunt strategische klanten met best practices op het gebied van AI/ML in vele sectoren. Hij heeft een passie voor computer vision, NLP, generatieve AI en MLOps. In zijn vrije tijd houdt hij van hardlopen en wandelen.
Melanie Li is een Senior AI/ML Specialist TAM bij AWS gevestigd in Sydney, Australië. Ze helpt zakelijke klanten bij het bouwen van oplossingen met behulp van de modernste AI/ML-tools op AWS en biedt begeleiding bij het ontwerpen en implementeren van ML-oplossingen met best practices. In haar vrije tijd houdt ze ervan om de natuur te verkennen en tijd door te brengen met familie en vrienden.
Guang Yang is Senior Applied Scientist bij het Amazon Generative AI Innovation Center, waar hij met klanten in verschillende branches werkt en creatieve probleemoplossingen toepast om waarde voor klanten te genereren met de modernste generatieve AI-oplossingen.
Harjyot Malik is een Senior Program Manager bij AWS, gevestigd in Sydney, Australië. Hij werkt samen met de APJC Enterprise Support-teams en helpt hen bij het ontwikkelen en leveren van strategieën. Hij werkt samen met bedrijfsteams en verdiept zich in complexe problemen om innovatieve oplossingen te ontdekken die op hun beurt de efficiëntie van het bedrijf vergroten. In zijn vrije tijd houdt hij ervan om te reizen en nieuwe plekken te ontdekken.
- Door SEO aangedreven content en PR-distributie. Word vandaag nog versterkt.
- PlatoData.Network Verticale generatieve AI. Versterk jezelf. Toegang hier.
- PlatoAiStream. Web3-intelligentie. Kennis versterkt. Toegang hier.
- PlatoESG. Automotive / EV's, carbon, CleanTech, Energie, Milieu, Zonne, Afvalbeheer. Toegang hier.
- Plato Gezondheid. Intelligentie op het gebied van biotech en klinische proeven. Toegang hier.
- ChartPrime. Verhoog uw handelsspel met ChartPrime. Toegang hier.
- BlockOffsets. Eigendom voor milieucompensatie moderniseren. Toegang hier.
- Bron: https://aws.amazon.com/blogs/machine-learning/intelligent-video-and-audio-qa-with-multilingual-support-using-llms-on-amazon-sagemaker/
- : heeft
- :is
- :niet
- :waar
- $UP
- 1
- 10
- 100
- 2021
- 30
- 500
- 7
- 9
- a
- in staat
- Over
- versnellen
- ACCEPTEREN
- Accepteert
- toegang
- Volgens
- dienovereenkomstig
- Account
- Accumuleren
- nauwkeurigheid
- accuraat
- Bereiken
- verwerven
- over
- daadwerkelijk
- toevoegen
- Extra
- Daarnaast
- Voegt
- aangrenzend
- adopteren
- vergevorderd
- vooruitgang
- Voordeel
- komst
- AI
- AI-modellen
- AI-diensten
- AI-powered
- AI / ML
- opstelling
- Alles
- toelaten
- Het toestaan
- al
- ook
- Amazone
- Amazon Sage Maker
- Amazon Transcribe
- Amazon Vertalen
- Amazon Web Services
- onder
- an
- analyse
- analyseren
- en
- Nog een
- beantwoorden
- antwoorden
- elke
- api
- gebruiken
- toepassingen
- toegepast
- Solliciteer
- nadering
- benaderingen
- architectuur
- ZIJN
- rond
- AS
- aanwinst
- vermogensbeheer
- Activa
- Hulp
- geassocieerd
- aanname
- At
- hechten
- gehoor
- hoorzittingen
- audio
- aangevuld
- Australië
- webmaster.
- AWS
- terug
- baseren
- gebaseerde
- basis-
- BE
- omdat
- wordt
- geweest
- gedrag
- achter
- wezen
- BEST
- 'best practices'
- Betere
- tussen
- Bot
- zowel
- merk
- breedte
- buffer
- bouw
- Gebouw
- bouwt
- bebouwd
- bedrijfsdeskundigen
- ondernemingen
- maar
- by
- CAN
- Kan krijgen
- mogelijkheden
- bekwaamheid
- geval
- gevallen
- Centreren
- keten
- ketens
- uitdagend
- verandering
- Wijzigingen
- lasten
- Chatbot
- keuze
- Kies
- het kiezen van
- Cisco
- klasse
- clips
- Sluiten
- code
- samenwerking
- combineren
- komt
- Gemeen
- Bedrijven
- vergeleken
- compleet
- complex
- bestanddeel
- componenten
- begrijpen
- computer
- Computer visie
- concepten
- uitgevoerd
- geconfigureerd
- Verbinden
- Wij verbinden
- bestaat uit
- troosten
- consolideren
- consument
- bevat
- content
- inhoud
- verband
- contexten
- contextual
- voortzetten
- Gesprek
- converteren
- Kern
- te corrigeren
- Overeenkomend
- Kosten
- Kosten
- kon
- deksel
- bedekt
- en je merk te creëren
- aangemaakt
- Creatieve
- criteria
- cruciaal
- Culture
- Actueel
- klant
- Klantbinding
- Klanten
- aan te passen
- Snijden
- gegevens
- gegevensopslag
- Database
- databanken
- datasets
- diepere
- gedefinieerd
- leveren
- het leveren van
- demonstratie
- tonen
- demonstreert
- afhankelijkheden
- implementeren
- ingezet
- diepte
- beschrijven
- beschreven
- detail
- gedetailleerd
- gegevens
- opsporen
- het ontwikkelen van
- apparaat
- anders
- digitaal
- Digitaal actief
- Digital Asset Management
- Digitale activa
- digitale wereld
- Afmeting
- Afmeting
- direct
- Onthul Nu
- het ontdekken van
- afstand
- do
- document
- documenten
- doen
- domein
- don
- Dont
- rit
- elk
- Vroeger
- editor
- effectief
- efficiëntie
- doeltreffendheid
- doeltreffend
- efficiënt
- inspanning
- inspanningen
- anders
- insluiten
- ingebed
- inbedding
- medewerkers
- machtigt
- maakt
- waardoor
- einde
- Endpoint
- eindigt
- engagement
- houdt zich bezig
- Engineering
- verhogen
- verbeteren
- Enterprise
- bedrijven
- Geheel
- Milieu
- schatten
- Zelfs
- voorbeeld
- bestaand
- Ervaringen
- Verklaart
- uitleg
- Verken
- exporteren
- extract
- Gezicht
- vergemakkelijken
- familie
- weinig
- minder
- Dien in
- Bestanden
- VIND DE PLEK DIE PERFECT VOOR JOU IS
- Voornaam*
- eerste keer
- flexibel
- richt
- volgen
- volgend
- volgt
- Voor
- vreemd
- formulier
- formaat
- het bevorderen van
- gevonden
- Foundation
- vier
- Achtergrond
- vrienden
- oppompen van
- vol
- functie
- functionaliteit
- verder
- Krijgen
- Algemeen
- voortbrengen
- gegenereerde
- het genereren van
- generatie
- generatief
- generatieve AI
- krijgen
- GitHub
- gegeven
- geeft
- Go
- leiding
- hand
- handvat
- Hebben
- he
- hulp
- helpt
- haar
- verborgen
- Hoge
- hoger
- zeer
- zijn
- geschiedenis
- gehost
- Hosting
- Hoe
- How To
- Echter
- HTML
- http
- HTTPS
- i
- idee
- ideaal
- Identificatie
- Identiteit
- if
- illustreert
- beeld
- meeslepende
- uitvoeren
- uitvoering
- uitvoering
- importeren
- belangrijk
- verbeteren
- in
- omvatten
- Inclusief
- Laat uw omzet
- in toenemende mate
- aanwas
- index
- industrieën
- informatie
- leerzaam
- Innovatie
- innovatieve
- invoer
- ingangen
- binnen
- inzichten
- geinspireerd
- installeren
- instantie
- integreren
- integratie
- Intelligent
- bestemde
- aandachtig
- interactie
- interactieve
- Interface
- Internet
- in
- oproept
- IT
- artikelen
- Jobomschrijving:
- jpg
- json
- voor slechts
- Houden
- trefwoorden
- blijven
- kennis
- l2
- Gebrek
- Landschap
- taal
- Talen
- Groot
- leiden
- LEARN
- leren
- LED
- links
- Lengte
- minder
- laten
- Laten we
- Niveau
- Bibliotheek
- levenscyclus van uw product
- als
- Beperkt
- lijnen
- LINK
- links
- LLM
- laden
- lader
- lokaal
- logica
- lang
- Kijk
- ziet eruit als
- lot
- houdt
- te verlagen
- laagste
- machine
- gemaakt
- voornamelijk
- maken
- beheer
- beheerd
- management
- manager
- handboek
- veel
- materieel
- Matrix
- Maximaliseren
- maximaliseren
- Mei..
- me
- betekenis
- zinvolle
- middel
- mechanismen
- Media
- Geheugen
- vermeld
- Metadata
- methode
- minder
- ML
- MLops
- model
- modellen
- meer
- meest
- meervoudig
- naam
- namen
- Naturel
- Natural Language Processing
- NATUUR
- OP DEZE WEBSITE VIND JE
- Noodzaak
- New
- volgende
- nlp
- geen
- Geen
- een
- normaal
- aantal
- of
- korting
- het aanbieden van
- vaak
- on
- EEN
- Slechts
- open
- open source
- OpenAI
- Kansen
- optimale
- Optimaliseer
- optimaliseren
- Keuze
- Opties
- or
- organisatie
- Georganiseerd
- origineel
- oorspronkelijk
- OS
- Overige
- anders-
- onze
- uitgang
- het te bezitten.
- pakket
- Paketten
- parameter
- parameters
- deel
- vooral
- passeren
- hartstochtelijk
- Uitvoeren
- periode
- permissies
- Gepersonaliseerde
- stukken
- pijp
- pijpleiding
- centraal
- plaats
- plaatsen
- platform
- Plato
- Plato gegevensintelligentie
- PlatoData
- Spelen
- punten
- Populair
- mogelijkheid
- Post
- potentieel
- mogelijk
- energie
- aangedreven
- krachtige
- praktijken
- nauwkeurig
- voorspelling
- Voorbereiden
- presenteren
- vorig
- privaat
- probleem
- problemen
- Verwerkt
- verwerking
- geproduceerd
- productie
- produktiviteit
- Producten
- Programma
- project
- zorgen voor
- mits
- biedt
- het verstrekken van
- doeleinden
- puts
- Python
- Q & A
- kwalitatieve
- queries
- vraag
- Contact
- snel
- Lees
- klaar
- echte wereld
- Realiteit
- rijk
- erkenning
- adviseren
- aanbevolen
- opgenomen
- Recursieve
- vermindering
- referenties
- relevante
- niet vergeten
- vervangen
- bewaarplaats
- vertegenwoordigen
- te vragen
- vereisen
- nodig
- Voorwaarden
- vereist
- Resources
- Reageren
- antwoord
- resultaat
- terugkeer
- Retourneren
- revolutie
- rechts
- Rol
- Regel
- lopen
- lopend
- s
- sagemaker
- dezelfde
- Bespaar
- ervaren
- Scale
- verspreid
- scenario's
- Wetenschapper
- partituur
- Ontdek
- zoeken
- Tweede
- seconden
- sectie
- secties
- zien
- segmenten
- gekozen
- ZELF
- senior
- verzonden
- zin
- apart
- service
- Diensten
- serveer-
- het instellen van
- setup
- ze
- moet
- tonen
- getoond
- Shows
- gelijk
- overeenkomsten
- Eenvoudig
- single
- Maat
- slim
- snipper
- So
- oplossing
- Oplossingen
- OPLOSSEN
- Het oplossen van
- sommige
- bron
- broncode
- bronnen
- Tussenruimte
- specialist
- specifiek
- gespecificeerd
- toespraak
- Spraakherkenning
- spraak-naar-tekst
- snelheid
- besteden
- spleet
- gesproken
- stadia
- state-of-the-art
- Stap voor
- Stappen
- Stopt
- mediaopslag
- shop
- Sla de gegevens op
- opgeslagen
- strategisch
- strategieën
- gestroomlijnd
- schrijden
- Draad
- studies
- studio
- Studie
- succes
- dergelijk
- ondersteuning
- steunen
- verrassing
- sydney
- system
- op maat gemaakt
- Nemen
- het nemen
- doelwit
- Taak
- teams
- technieken
- terminal
- dat
- De
- De Bron
- hun
- Ze
- harte
- Er.
- daarbij
- daarom
- Deze
- dit
- toch?
- Door
- niet de tijd of
- tijdstempel
- titels
- naar
- samen
- tokens
- tools
- tools
- top
- onderwerp
- fakkel
- traditioneel
- Trainingen
- Transformeren
- transformers
- vertalen
- Vertaling
- reizen
- proberen
- BEURT
- twee
- types
- typisch
- ui
- voor
- die ten grondslag liggen
- begrijpen
- begrip
- openen
- bijwerken
- updates
- geüpload
- URL
- us
- .
- use case
- gebruikt
- Gebruiker
- gebruikers
- toepassingen
- gebruik
- waarde
- divers
- verticals
- zeer
- via
- Video
- Video's
- visie
- vitaal
- volume
- volumes
- willen
- Manier..
- manieren
- we
- web
- webservices
- waren
- wanneer
- welke
- Fluisteren
- geheel
- wil
- venster
- Met
- binnen
- zonder
- Mijn werk
- workflow
- workflows
- werkzaam
- Bedrijven
- wereld
- Wrapped
- schrijven
- geschreven
- You
- Your
- zephyrnet