Zephyrnet-logo

Bouw aangepaste FAQ-chatbot met BERT 

Datum:

Veelgestelde vragen Chatbot met BERT

chatbots zijn steeds meer standaard en waardevolle interfaces geworden die door tal van organisaties voor verschillende doeleinden worden gebruikt. Ze vinden tal van toepassingen in verschillende industrieën, zoals het geven van gepersonaliseerde productaanbevelingen aan klanten, het bieden van XNUMX uur per dag klantenondersteuning voor het oplossen van vragen, hulp bij boekingen van klanten en nog veel meer. Dit artikel onderzoekt het proces van het maken van een FAQ-chatbot die speciaal is ontworpen voor klantinteractie. FAQ-chatbots behandelen vragen binnen een specifiek domein, gebruikmakend van een vooraf gedefinieerde lijst met vragen en bijbehorende antwoorden. Dit type chatbot vertrouwt op Semantic Question Matching als onderliggend mechanisme.

leerdoelen

  • Begrijp de basisprincipes van het BERT-model
  • Elasticsearch en de toepassing ervan in chatbot begrijpen
  • Het mechanisme voor het maken van de chatbots
  • Indexeren en bevragen in Elasticsearch

Dit artikel is gepubliceerd als onderdeel van het Data Science-blogathon.

Inhoudsopgave

Wat is BERT?

sBert | Veelgestelde vragen Chatbot

BERT, Bidirectional Encoder Representations van Transformers, is een groot taalmodel van Google in 2018. In tegenstelling tot unidirectionele modellen is BERT een bidirectioneel model gebaseerd op de Transformer-architectuur. Het leert de context van een woord te begrijpen door rekening te houden met zowel de woorden ervoor als erna in een zin, waardoor een beter begrip mogelijk wordt.

Een grote uitdaging met BERT was dat het geen state-of-the-art prestaties voor NLP-taken kon bereiken. Het belangrijkste probleem was dat de insluitingen op tokenniveau niet effectief konden worden gebruikt voor tekstuele gelijkenis, wat resulteerde in slechte prestaties bij het genereren van insluitingen van zinnen.

Sentence-BERT (SBERT) is echter ontwikkeld om deze uitdaging aan te gaan. SBERT is gebaseerd op een Siamese netwerk, dat twee zinnen tegelijk neemt en ze omzet in inbedding op tokenniveau met behulp van het BERT-model. Het past vervolgens een poolinglaag toe op elke set inbeddingen om zinsinbeddingen te genereren. In dit artikel zullen we SBERT gebruiken voor het insluiten van zinnen.

ELASTIEKZOEKEN | Veelgestelde vragen Chatbot

Elastic Search is een open-source zoek- en analyse-engine die zeer krachtig en zeer schaalbaar is en is ontworpen om uitgebreide gegevens in realtime te verwerken. Ontwikkel via de Apache Lucene-bibliotheek, die zoekmogelijkheden biedt voor volledige tekst. Elasticsearch is zeer schaalbaar omdat het een sterk gedistribueerd netwerk biedt dat kan worden geschaald over meerdere knooppunten, waardoor hoge beschikbaarheid en fouttolerantie worden geboden. Het biedt ook een flexibele en robuuste RESTful API, die interactie met de zoekmachine mogelijk maakt met behulp van HTTP-verzoeken. Het ondersteunt verschillende programmeertalen en biedt clientbibliotheken voor eenvoudige toepassingsintegratie.

Dit artikel leert ons om een ​​FAQ-chatbot te maken met vooraf getrainde BERT en Elasticsearch.

Stap 1) Installeer de SBERT-bibliotheek

#install sentence transformers library
pip install sentence-transformers

Stap 2) Genereer vraaginsluitingen

We zullen de SBERT-bibliotheek gebruiken om de inbeddingen voor de vooraf gedefinieerde vragen te krijgen. Voor elke vraag genereert het een numpy-array met een dimensie van 768, wat overeenkomt met de grootte van algemene inbedding op BERT-tokenniveau:

from sentence_transformers import SentenceTransformer sent_transformer = SentenceTransformer("bert-base-nli-mean-tokens") questions = [ "How to improve your conversation skills? ", "Who decides the appointment of Governor in India? ", "What is the best way to earn money online?", "Who is the head of the Government in India?", "How do I improve my English speaking skills? " ] ques_embedd = sent_transformer.encode(questions)

Stap 3) Installeer Elasticsearch Library

pip install elasticsearch

Stap 4) Index maken in Elasticsearch

from elasticsearch import Elasticsearch # defingin python client for elastic search
es_client = Elasticsearch("localhost:9200") INDEX_NAME = "chat_bot_index" #index dimensions for numpy array i.e. 768
dim_embedding = 768 def create_index() -> None: es_client.indices.delete(index=INDEX_NAME, ignore=404) es_client.indices.create( index=INDEX_NAME, ignore=400, body={ "mappings": { "properties": { "embedding": { "type": "dense_vector", "dims": dim_embedding, }, "question": { "type": "text", }, "answer": { "type": "text", } } } } ) create_index()

Het proces van het maken van een index in elastische zoekopdrachten lijkt sterk op het proces van het definiëren van een schema in een willekeurige database. In de bovenstaande code hebben we een index gemaakt met de naam "chat_bot_index", die drie velden definieert, dwz 'embedding', 'vraag' en 'antwoord', en hun typen, dwz 'dense_vector' voor 'embedding' en 'text ” voor de andere twee.

Stap 5) Vraag-antwoorden indexeren in Elastic Search

def indexing_q(qa_pairs: List[Dict[str, str]]) -> None: for pair in qa_pairs: ques = pair["question"] ans = pair["answer"] embedding = sent_transformer.encode(ques)[0].tolist() data = { "question": questi, "embedding": embedding, "answer": ans, } es_client.index( index=INDEX_NAME, body=data ) qa_pairs = [{ "question": "How to improve your conversation skills? ", "answer": "Speak more", },{ "question": "Who decides the appointment of Governor in India? ", "answer": "President of India", },{ "question": "How can I improve my English speaking skills? ", "answer": "More practice", }] indexing_q(qa_pairs)

In de bovenstaande code hebben we vraag-antwoordparen geïndexeerd in de elastische zoekdatabase met de inbedding van de vragen.

Stap 6) Query's vanuit Elasticsearch

ENCODER_BOOST = 10 def query_question(question: str, top_n: int=10) -> List[dict]: embedding = sentence_transformer.encode(question)[0].tolist() es_result = es_client.search( index=INDEX_NAME, body={ "from": 0, "size": top_n, "_source": ["question", "answer"], "query": { "script_score": { "query": { "match": { "question": question } }, "script": { "source": """ (cosineSimilarity(params.query_vector, "embedding") + 1) * params.encoder_boost + _score """, "params": { "query_vector": embedding, "encoder_boost": ENCODER_BOOST, }, }, } } } ) hits = es_result["hits"]["hits"] clean_result = [] for hit in hits: clean_result.append({ "question": item["_source"]["question"], "answer": item["_source"]["answer"], "score": item["_score"], }) return clean_result query_question("How to make my English fluent?")#import csv

We kunnen de ES-query aanpassen door een "script"-veld op te nemen, waardoor we een scorefunctie kunnen maken die de cosinusovereenkomstscore op inbeddingen berekent. Combineer deze score met de algehele ES BM25-matchingscore. Om de weging van de ingesloten cosinusovereenkomst aan te passen, kunnen we de hyperparameter genaamd "ENCODER_BOOST" wijzigen.

Conclusie

In dit artikel hebben we de toepassing van SBERT en Elasticsearch onderzocht bij het maken van de chatbot. We bespraken het maken van een chatbot die de vragen zou beantwoorden op basis van vooraf gedefinieerde vraag-antwoordparen, rekening houdend met de bedoeling van de vraag.

Hier zijn de belangrijkste afhaalrestaurants van onze verkenning:

  1. Het belang begrijpen van SBERT en Elasticsearch op het gebied van de ontwikkeling van chatbots, en hun capaciteiten benutten om conversatie-ervaringen te verbeteren.
  2. Door SBERT te gebruiken om inbeddingen voor de vragen te genereren, krijgt u een beter begrip van hun semantiek en context.
  3. Gebruikmaken van Elasticsearch om een ​​index op te zetten die de vraag-antwoordparen efficiënt opslaat en organiseert, waardoor zoek- en ophaalbewerkingen worden geoptimaliseerd.
  4. Het demonstreren van het zoekproces in Elasticsearch, illustreren hoe de chatbot effectief de meest relevante antwoorden ophaalt op basis van de vraag van de gebruiker.

Veelgestelde Vragen / FAQ

Q1. Waarin verschilt SBERT van BERT?

A. SBERT breidt BERT uit om semantiek op zinsniveau te coderen, terwijl BERT zich richt op representaties op woordniveau. SBERT beschouwt de hele zin als een enkele invoerreeks en genereert inbeddingen die de betekenis van de hele zin vastleggen.

Q2. Waar kan SBERT voor worden gebruikt?

A. Gebruik SBERT voor verschillende natuurlijke taalverwerkingstaken, zoals semantisch zoeken, zinsgelijkenis, clustering, ophalen van informatie en tekstclassificatie. Het maakt het mogelijk om de semantische gelijkenis tussen zinnen te vergelijken en te analyseren.

Q3. Kan SBERT lange documenten aan?

A. SBERT is in de eerste plaats ontworpen voor inbedding op zinsniveau. Het kan echter ook korte alinea's of tekstfragmenten aan. Voor langere documenten is het gebruikelijk om representaties op zinsniveau te extraheren en ze samen te voegen met behulp van technieken zoals middeling of pooling.

Q4. Hoe werkt Elasticsearch?

A. Elasticsearch werkt als een gedistribueerd systeem, waarbij gegevens worden verdeeld in meerdere shards die over verschillende knooppunten in een cluster kunnen worden verspreid. Elke shard bevat een subset van de gegevens en is volledig functioneel, waardoor een efficiënte parallelle verwerking en hoge beschikbaarheid mogelijk is. Wanneer een zoekopdracht wordt uitgevoerd, gebruikt Elasticsearch een gedistribueerd zoekcoördinatiemechanisme om de zoekopdracht naar de relevante shards te routeren, de zoekbewerkingen parallel uit te voeren en de resultaten samen te voegen voordat ze naar de gebruiker worden geretourneerd.

De in dit artikel getoonde media zijn geen eigendom van Analytics Vidhya en worden naar goeddunken van de auteur gebruikt. 

spot_img

Laatste intelligentie

spot_img