2023-10-14 AI PitchPatterns Conversation Flow

 

Piemērs grafam (mermaidjs valodā)

Locksmith services how can I help you?
I have a problem here with the door
I am calling to cancel
No
I need my door to get fixed
I need a qoute for the service
Ok this will be 99.99
Sorry cannot fix this type of door
Yes
No
This is car door
Ok this will be 99.99
No
Too Expensive
No
Can I offer discount?
What is your budget
No
Yes
Yes

 

Jāizveido jauna datubāze no kuras tālāk var ērti ģenerēt šāda veida grafiku visu nepārprocesējot:

flow_segmenets
flow_segmenet_id: PK
conversation_id: int
segment_id: int
agent_id: int
client_id: int
prev_flow_segmenet_id: int
next_flow_segmenet_id: int | NULL
text_original: TEXT | NULL
text_en: TEXT | NULL
is_client_speaking: bool
dominant_emotion: str
emb_1: vector(256)
emb_2: vector(256)
emb_3: vector(256)
flow_conversations
flow_conversation_id: PK
client_id: int
is_yes: BOOL
flow_graph
flow_graph_id: PK
flow_graph_uuid: string | for web
client_id: int
client_str: str
flow_graph_filters
flow_graph_id: int
agent_id: int | NULL
agent_str: str | NULL
project_id: int | NULL
project_str: str | NULL
tag_id: int | NULL
tag_str: str | NULL
flow_graph_nodes
flow_graph_node_id: PK
graph_layer_count: int
parent_graph_node_id: int
graph_node_text_original: str
graph_node_text_en: str
graph_node_emb_1: vector
graph_node_emb_2: vector
graph_node_emb_3: vector
is_client_speaking: bool
dominant_emotion: str
is_end_result: bool
is_yes_result: bool | NULL
flow_graph_nodes_flow_segments
flow_graph_nodes_flow_segment_id: PK
flow_graph_node_id: int
flow_segmenet_id: int

flow_conversations, flow_segmenets => akumulē worker_aggregator

flow_graph, flow_graph_nodes, flow_graph_filters, flow_graph_nodes_flow_segments => ieraksta flask_app frontend

 

next_flow_segmenet_id = NULL nozīmē pēdējais segments sarunā YES saruna ir tāda, kurai conversation_id iekš tags_in_conversations satur YES

Lai paātrinātu darbību vēlams daļu PP tabulu datus pārkopēt agregējot db_pp_conv_flow

 

Saglabāt uzreiz vairākus embedding formātus, lai var testēt dažādas clustering metodes un tos kombinēt savā starpā

flow_graph un flow_graph_nodes ir gatavie rezultāti, lai pēc tam varam debuggot

flow_graph_filters satur pa vienam filtra elementam no UI (nemēģināt vienā ierakstā salikt visus filtra elementus)

 

Vektoru meklēšanai izmantot arī PostgreSQL Database extensions, lai ātrāk strādātu, bet pirmajā versijā var izmantot default PostgreSQL https://github.com/pgvector/pgvector

 

Kritēriji kā dala sarunu koku:

  1. Katra nākamā sarunu koka līmenis veidojas no secīgiem sarunu segmentiem, kuri ir ne īsāki kā definēts segmenta garums, iespējams, 10sek (īsos secīgos segmentus izlaižam)

  2. Visām conversation flow daļām obligāti jābūt maksimāli daudz relācijām uz orģinālo DB projectx

  3. Katra koka nodes veidosies no median embedding tovākā prototipiskā pateiktā teikuma vai frāzes

  4. Nākotnē jāņem vērā, ka pie katra koka virsotnes glabāsim arī emocijas, intention, topics utt!

  5. Garas pauzes nākotnē arī varētu ielikt kā nodes

Sistēmas arhitektūra

flask_app frontend
DB pp_conv_flow
worker_aggregator
DB pitchpatterns

 

Clustering

Nākotnē izmantosim HDBSCAN, lai clusterizētu tēmas ar nezināmu N skaitu katrā līmenī, bet šobrīd lūdzu izmantot:

  1. Definēts K cluster count katrā slānī:

    1. Pirmajā: 5

    2. Otrais, Trešais slānis: 3

    3. Ceturtais piektais slānis: 2

  2. Kopā lietojam maksimums 5 slāņus (graph_layer_count)

  3. Klasterizāciju veicam tikai ar sklearn SpectralClustering algoritmu (uzmanību, nepieciešams pārmeklēt tā parametrus, liela ietekme rezultātam)

  4. Lai pārbaudītu rezultātus lūdzu lietojoet vizualizācijas katrā layer (sub tree) tensorboard vai weights and biases emebddings projector . Vizuāla clasterizācijas pārbaude ir obligāti jāveic, jo no tekstiem mēs nevarēsim debuggot

  5. Ja cluster ietver vairāk kā pusi pēdējo node conversation flow, tad to klasificējam kā terminal state: yes, no