Scopri LangChain Chatta con i tuoi Documenti, Traduttore Chatbot, Chatta con Wikipedia, Generatore di Dati Sintetici

Scopri LangChain Chatta con i tuoi Documenti, Traduttore Chatbot, Chatta con Wikipedia e Generatore di Dati Sintetici

La crescita del mondo dell’IA generativa è resa possibile anche grazie a una importante libreria Python: LangChain, e l’interesse è aumentato nei mesi scorsi, come mostrato dal seguente grafico.

Google Trends

Cosa è LangChain?

LangChain, in parole povere, è un wrapper, più specificamente è un framework open-source progettato per lo sviluppo di applicazioni basate su Large Language Models.

L’idea alla base del framework è quella di “concatenare” diversi componenti per creare casi d’uso più avanzati sfruttando LLM.

LangChain è composto da diversi componenti.

  • Schema si riferisce alla struttura sottostante dei dati utilizzata per costruire modelli di intelligenza artificiale (AI), ed esiste in diverse forme, inclusi testi, messaggi di chat e documenti.
  • Modelli: ci sono diversi modelli supportati dal framework. I Large Language Models prendono una stringa di testo in input e restituiscono una stringa di testo in output. I Chat Models prendono una lista di messaggi di chat in input e restituiscono un messaggio di chat. I Text Embedding Models prendono del testo in input e restituiscono un vettore, una lista di numeri in virgola mobile.
  • Prompts: rappresentano il nuovo modo di programmazione dei modelli. I prompts sbagliati producono output sbagliati, mentre quelli corretti sono potenti. Un buon prompt può essere strutturato utilizzando diversi oggetti, come un template, con esempi specifici e parsing dell’output.
  • Indici: permettono ai LLM di interagire con i documenti. Prendono una query dell’utente e restituiscono le informazioni più rilevanti. Esistono diversi tipi di indici, tra cui caricatori di documenti, suddivisori di testo, repository di vettori e recuperatori. I caricatori di documenti vengono utilizzati per caricare documenti da diverse fonti, i suddivisori di testo vengono utilizzati per scomporre la query dell’utente in pezzi più piccoli, i repository di vettori possono memorizzare grandi quantità di embedding e i recuperatori vengono utilizzati per recuperare informazioni rilevanti dai dati caricati.
  • Memory: consente ai sistemi AI di ricordare conversazioni precedenti con gli utenti e capire il contesto dell’utente in modo migliore. La memoria viene memorizzata sotto forma di cronologia delle chat.
  • Chains: sono una sequenza di risposte prodotte dal sistema AI in risposta all’input dell’utente. Ci sono catene semplici basate su una sequenza di risposte a una domanda dell’utente. Nel frattempo, le catene sintetizzate utilizzano algoritmi di elaborazione del linguaggio naturale (NLP) per generare un riassunto dell’input dell’utente al fine di simulare conversazioni simili a quelle umane.
  • Agents: sono i componenti software che consentono al sistema AI di interagire con gli utenti. Esistono due tipi di agenti: toolkit e agenti. I toolkit sono framework con le risorse necessarie per costruire applicazioni AI. Gli agenti sono applicazioni AI pre-costruite che possono essere utilizzate immediatamente per interagire con i clienti.

I casi d’uso tipici di LangChain includono l’analisi dei documenti, i chatbot, la sintesi, l’analisi del codice e altro ancora…

In questo articolo, ho esplorato quattro casi d’uso che puoi seguire in questo quaderno sfruttando GPT 3.5 turbo di OpenAI.

Chat con i tuoi documenti

Nel primo caso d’uso, ho esaminato il Q&A della base di conoscenza. In questo tipo di applicazione, i documenti vengono caricati e suddivisi per creare embedding memorizzati in un repository di vettori, una struttura dati che facilita il processo di ricerca dei vettori. Con la query dell’utente, convertita anche in embedding, viene eseguita una ricerca semantica per recuperare le informazioni corrette e produrre la risposta di output.

QA pipeline from LangChain

Per questa attività, ho caricato un articolo sulla recensione dell’analisi del sentiment e del riconoscimento delle emozioni, quindi il risultato di una delle mie query:

llm = ChatOpenAI(temperature=0, model_name='gpt-3.5-turbo')chain = load_qa_chain(llm, chain_type="map_reduce")query1 = "Potresti spiegare le sfide nell'analisi del sentiment e nell'analisi delle emozioni evidenziate nel documento?"docs = docsearch.similarity_search(query1)chain.run(input_documents=docs, question=query1)

In base alle informazioni fornite, le sfide nell'analisi del sentiment e nell'analisi delle emozioni menzionate nel documento includono: Mancanza di risorse: Il documento menziona che una delle sfide è la mancanza di risorse, in particolare la difficoltà nel raccogliere un ampio dataset annotato per gli algoritmi statistici. L'etichettatura manuale di un ampio dataset è un processo lungo e meno affidabile. Uso delle emozioni: Il documento suggerisce che l'uso delle emozioni nell'analisi del sentiment e dell'analisi delle emozioni rappresenti una sfida. Non fornisce ulteriori dettagli su come questa sfida si manifesti. Diffusione dell'argot web: Il documento menziona che la diffusione dell'argot web rappresenta una sfida nell'analisi del sentiment e delle emozioni. Non fornisce ulteriori dettagli su come questa sfida influisca sull'analisi. Ambiguità lessicale e sintattica: Il documento afferma che l'ambiguità lessicale e sintattica è una sfida nell'analisi del sentiment e dell'analisi delle emozioni. Non fornisce ulteriori dettagli su come questa sfida influisca sull'analisi. Mancanza di regole standard per comunicare i sentimenti: Il documento sottolinea la mancanza di regole standard per comunicare i sentimenti su piattaforme multiple come una sfida. Menziona che le persone esprimono le loro emozioni in modi diversi, rendendo difficile per i ricercatori sviluppare una tecnica che possa funzionare efficacemente in tutti i domini.Si noti che le informazioni fornite si basano sulle parti estratte del documento fornito, e potrebbero esserci ulteriori sfide menzionate nel documento completo che qui non sono incluse.

Traduttore di chatbot

Nel secondo caso d’uso, ho esplorato la tipica intelligenza artificiale conversazionale che, con l’avvento di ChatGPT, è stata rivoluzionata: il chatbot. Per questo scopo, ho utilizzato lo schema basato sul sistema che orchestra i messaggi umani e i messaggi dell’intelligenza artificiale per eseguire un compito di traduzione.

Pipeline del chatbot da LangChain

Di seguito è riportato il risultato di una delle mie richieste:

chat = ChatOpenAI(temperature=0, model_name='gpt-3.5-turbo')chat([HumanMessage(content="Traduci questa frase dall'inglese al tedesco: Sono interessato a sviluppare un'azienda start-up")])

AIMessage(content='Ich bin daran interessiert, ein Start-up-Unternehmen zu entwickeln.')

Ecco il risultato partendo dal tedesco all’inglese con Google Traduttore come test….impressionante!!!

Non parlo fluentemente tedesco, e penso che possa essere utile quando si ha bisogno di scrivere/leggere qualcosa in un’altra lingua.

Chatta con Wikipedia

Per il terzo compito, ho avuto l’idea dello scraping delle pagine di Wikipedia, ma ho deciso di scegliere il modo più semplice per sfruttare la libreria Python che facilita l’accesso e l’analisi dei dati da Wikipedia. In questo modo, con “WikipediaRetriever”, posso chiedere e ottenere le informazioni che mi servono dall’enciclopedia. Ecco i risultati delle mie richieste.

model = ChatOpenAI(temperature=0, model_name='gpt-3.5-turbo')qa = ConversationalRetrievalChain.from_llm(model, retriever=retriever)questions = [    "Cos'è una tempesta?",    "Cos'è la sostenibilità?",    "Cos'è il cambiamento climatico?",]chat_history = []for question in questions:    result = qa({"question": question, "chat_history": chat_history})    chat_history.append((question, result["answer"]))    print(f"-> **Domanda**: {question} \n")    print(f"**Risposta**: {result['answer']} \n")

-> **Domanda**: Cos'è una tempesta? **Risposta**: Una tempesta è un evento meteorologico caratterizzato da forti venti, precipitazioni (come pioggia, neve o grandine) e spesso tuoni e fulmini. Le tempeste possono variare in intensità e durata e possono manifestarsi in diverse forme, come temporali, uragani, blizzard o tornado. Le tempeste possono causare danni significativi alle proprietà e rappresentare rischi per la sicurezza umana. -> **Domanda**: Cos'è la sostenibilità? **Risposta**: La sostenibilità è un concetto che si riferisce alla capacità di mantenere o supportare qualcosa nel lungo termine. Nel contesto dell'ambiente, la sostenibilità si concentra spesso sulla lotta ai principali problemi ambientali, come il cambiamento climatico, la perdita di biodiversità e l'inquinamento. Comporta la ricerca di un equilibrio tra sviluppo economico, protezione dell'ambiente e benessere sociale. La sostenibilità può guidare le decisioni a livello globale, nazionale e individuale e mira a soddisfare le esigenze dell'attuale generazione senza compromettere la capacità delle generazioni future di soddisfare le proprie esigenze. -> **Domanda**: Cos'è il cambiamento climatico? **Risposta**: Il cambiamento climatico si riferisce all'alterazione a lungo termine dei modelli climatici della Terra, inclusi i cambiamenti di temperatura, precipitazioni, modelli di vento e altri aspetti del sistema climatico. È causato principalmente dall'attività umana, in particolare dalla combustione dei combustibili fossili, che rilascia gas serra nell'atmosfera. Questi gas serra, come diossido di carbonio e metano, intrappolano il calore e contribuiscono al riscaldamento del pianeta. Il cambiamento climatico ha una vasta gamma di impatti sull'ambiente, gli ecosistemi e le società umane, tra cui l'aumento del livello del mare, eventi meteorologici estremi più frequenti e intensi, la perdita di biodiversità e minacce alla salute e al benessere umano. È considerato una delle sfide più grandi che l'umanità affronta e richiede sforzi globali per mitigarne gli effetti e adattarsi ai cambiamenti.

Penso che sia un utile strumento per ottenere informazioni sintetiche quando si vuole consultare Wikipedia.

Generatore di dati sintetici

Con l’ultimo compito, ho pensato di sfruttare la potenza generativa di ChatGPT nella generazione di dati sintetici. Questi dati generati artificialmente imitano le caratteristiche dei dati reali senza contenere alcuna informazione di individui o entità effettivi.

Per iniziare è necessario dare la struttura dei dati che si desidera generare, ad esempio le variabili che desidero generare sono denominate dati delle spese mediche.

class SpeseMediche(BaseModel):    ID: int    Età: int    BMI: float    Altezza: int    Figli: int    Spese: float

Per dare una direzione al generatore di dati sintetici, può essere utile fornire alcuni esempi simili al mondo reale.

esempi = [    {        "esempio": """ID: 123456, Età: 34, BMI: 27.9,        Figli: 0, Altezza: 170, Spese: 1884.90"""    },    {        "esempio": """ID: 253459, Età: 45, BMI: 22.7,        Figli: 2, Altezza: 167, Spese: 1725.34"""    },    {        "esempio": """ID: 323758, Età: 23, BMI: 18.9,        Figli: 0, Altezza: 178, Spese: 3866.60"""    }]

In questa fase, posso guidare il generatore di dati sintetici per creare un modello di prompt con istruzioni per il Large Language Model su come produrre dati sintetici nel formato corretto.

TEMPLATE_OPENAI = PromptTemplate(input_variables=["esempio"], template="{esempio}")prompt_template = FewShotPromptTemplate(    prefix=PREFIX_SYNTHETIC_FEW_SHOT,    esempi=esempi,    suffix=SUFISSO_SYNTHETIC_FEW_SHOT,    input_variables=["soggetto", "extra"],    esempio_prompt=TEMPLATE_OPENAI,)

Ora, tutto è pronto per costruire un modello generatore di dati e dati sintetici.

generatore_dati_sintetici = create_openai_data_generator(    schema_output=SpeseMediche,    llm=ChatOpenAI(temperature=1, model_name='gpt-3.5-turbo'),    prompt=prompt_template,)risultati_sintetici = generatore_dati_sintetici.generate(    soggetto="Spese_Mediche",    extra="scelto a caso",    runs=10)

Ecco i risultati per 10 campioni.

La generazione di dati sintetici è una cartuccia di fondamentale importanza per ogni data scientist perché può essere utilizzata per testare, fare ricerca e addestrare modelli di machine learning preservando privacy e sicurezza.

Conclusione

Il repository di LangChain su GitHub ha raggiunto oltre 66.000 stelle. È uno strumento potente che fornisce accesso a diversi grandi modelli di linguaggio da vari fornitori come OpenAI, Hugging Face e Google, tra gli altri. Questi modelli possono essere accessibili tramite chiamate API, consentendo agli sviluppatori di creare applicazioni orientate a una maggiore produttività e solo con un po’ di codice.

LangChain, con le sue funzionalità, è adatto per essere integrato in ogni azienda per sviluppare AI conversazionali e altre applicazioni AI generative basate su grandi modelli di linguaggio e diventerà uno strumento indispensabile.

Riferimenti:

Notebook

LangChain

Tutorial di LangChain

Una recensione sull’analisi del sentiment e rilevamento delle emozioni dal testo