magneto903

Untitled

Apr 16th, 2024
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 7.87 KB | None | 0 0
  1. def experiment(text_splitter, embedder):
  2.     questions_bank = [
  3.     'Что такое банкомат Тинькоффа',
  4.     'Что такое ПИН-код',
  5.     'Какие валюты ПС являются рассчетными',
  6.     'Что делать если украли карту?',
  7.     'На что клиент имеет право заблокировать карту',
  8.     'В каких случая банк может расторгнуть договор',
  9.     'Что такое регулярный платёж?',
  10.     'Временная франшиза это',
  11.     'Какие риски входят в страховую программу',
  12.     'В каких случаях страховщик имеет право отказать в страовой выплате'
  13.  
  14.     'Какие требования предьявляюся к заёмщику потребительского кредита',
  15.     'В течение какого срока рассматривается заявление на кредит',
  16.     'На какую сумму можно взять кредит',
  17.     'В какой валюте дают кредит',
  18.     'Какие виды потребительского кредита есть',
  19.     'Какой процент у кредитов',
  20.     'В течение каого срока можно отказаться от кредита',
  21.     'Что будет если не выплатить кредит',
  22.     'Как погасить кредит',
  23.     'Как часто нужно платить за кредит'
  24.  
  25.     'Сколько стоит пополнение в банкоматах Тинькофф',
  26.     'Какой кэшбек за покупки на выбранные категории',
  27.     'Сколько стоит пополнение в в других банкоматах при использовании карты МИР',
  28.     'Сколько стоит смс-ки об оповещениях об операциях',
  29.     'Сколько стоит выпуск карты',
  30.     'Сколько стоит снятие наличных',
  31.     'Сколько стоит квази-кэш',
  32.     'Сколько стоит пополнение через СБП',
  33.     'Сколько стоит перевод через приложение Тинькофф на Тинькофф',
  34.     'Сколько стоит перевод через приложение Тинькофф Банк в другой банк',
  35.     # про виртуальную карту
  36.     'Что такое абонентский договор',
  37.     'Что такое виртуальная карта',
  38.     'Как пополнить виртуальную карту',
  39.     'Каким образом банк оповещает о совершении операций с Виртуальной картой?',
  40.     'Как запросить информацию о виртуальной карте',
  41.     'С какими валютами работет виртуальная карта',
  42.     'Что такое распоряжение по виртуальной карте?',
  43.     'Сколько можно переводить по виртуальной карте за раз',
  44.     'Сколько можно переводить по виртуальной карте в течение месяца',
  45.     'В течение какого срока делается виртуальная карта',
  46.     # про безопасность использования банковской карты
  47.     'Зачем нужен ПИН-код?',
  48.     "Можно ли сообщать ПИН-код другим людям?",
  49.     "Что делать если забыл свой ПИН-код",
  50.     "Можно бесконтактно оплатить картой не вводя ПИН-код",
  51.     "Как сохранить карту подольше",
  52.     "Что делать если мне банкомат не хочет возвращать карту",
  53.     "Почему мне пришла смска об операции по карте, которую я не делал",
  54.     "Что будет если ввёл неправильно ПИН-код",
  55.     "Как быстро нужно вытащить карту из банкомата",
  56.     "Какие страны являются странами повышеного риска для карт оплаты",
  57.     # про помощника Олега
  58.     "Кто такой помощник Олег",
  59.     "Как подключить Олега",
  60.     "Как отключить Олега",
  61.     "Сколько стоит услуга помощника Олега",
  62.     "Сколько хранятся записанные Олегом записи звоноков и стенограммы",
  63.     "На сколько звонков может ответить Олег за месяц",
  64.     "На какой территории сервис помощник Олег может работать"]
  65.  
  66.     # loading docs
  67.     documents = MergedDataLoader(loaders=[
  68.        PyPDFLoader(root_dir + 'docs/doc1.pdf'),
  69.        PyPDFLoader(root_dir + 'docs/doc2.pdf'),
  70.        PyPDFLoader(root_dir + 'docs/doc3.pdf'),
  71.        PyPDFLoader(root_dir + 'docs/doc4.pdf'),
  72.        PyPDFLoader(root_dir + 'docs/doc5.pdf'),
  73.        PyPDFLoader(root_dir + 'docs/doc6.pdf')
  74.     ]).load()
  75.  
  76.     print("documents:" + len(documents))
  77.  
  78.     # splitting into chunks
  79.     chunks = text_splitter.split_documents(documents)
  80.     print("chunks: "+len(chunks))
  81.  
  82.     # reference
  83.     reference_table = []
  84.     reference_embedder = HuggingFaceEmbeddings(model_name='intfloat/multilingual-e5-base')
  85.     reference_vec_db = FAISS.from_documents(chunks, reference_embedder)
  86.  
  87.     # bulding reference_table
  88.     for question in questions_bank:
  89.         result = {
  90.            "question": question,
  91.            "chunks": []
  92.         }
  93.  
  94.     res = vec_db.search(question, 'similarity')
  95.     for i in range(4):
  96.         result["chunks"].append([res[i].page_content])
  97.  
  98.     reference_table.append(result);
  99.  
  100.     # testing our configuration
  101.     vec_db = FAISS.from_documents(chunks, embedder)
  102.  
  103.  
  104.     score1 = 0
  105.     score2 = 0
  106.     score3 = 0
  107.  
  108.     question_idx = 0;
  109.     import difflib
  110.  
  111.     def similarity(s1, s2):
  112.        normalized1 = s1.lower()
  113.        normalized2 = s2.lower()
  114.        matcher = difflib.SequenceMatcher(None, normalized1, normalized2)
  115.        return matcher.ratio()
  116.  
  117.  
  118.  
  119.  
  120.     table = []
  121.     for q_idx in range(len(questions_bank)):
  122.  
  123.         result = {
  124.             "question": questions_bank[q_idx],
  125.             "chunks": [],
  126.             "score1": 0,
  127.             "score2": 0
  128.         }
  129.  
  130.     res = vec_db.search(questions_bank[q_idx], 'similarity')
  131.     for i in range(4):
  132.         cur_chunk = res[i].page_content
  133.         result["chunks"].append([res[i].page_content])
  134.         score1 += reference_table[q_idx]['chunks'][0][0] == cur_chunk
  135.         score1 += 0.5 * (reference_table[q_idx]['chunks'][1][0] == cur_chunk)
  136.  
  137.         score2 += similarity(reference_table[q_idx]['chunks'][0][0], cur_chunk)
  138.         score2 += 0.5 * similarity(reference_table[q_idx]['chunks'][1][0], cur_chunk)
  139.  
  140.         result["score1"] += reference_table[q_idx]['chunks'][0][0] == cur_chunk
  141.         result["score1"] += 0.5 * (reference_table[q_idx]['chunks'][1][0] == cur_chunk)
  142.  
  143.         result["score2"] += similarity(reference_table[q_idx]['chunks'][0][0], cur_chunk)
  144.         result["score2"] += 0.5 * similarity(reference_table[q_idx]['chunks'][1][0], cur_chunk)
  145.  
  146.         table.append(result);
  147.  
  148.         score3 += ( result["score1"] == 0)
  149.  
  150.     print("Score1 = "+score1)
  151.     print("Score2 = "+score2)
  152.     print("Score3 = "+score3)
  153.  
  154.  
  155. experiment(
  156. RecursiveCharacterTextSplitter(
  157.     chunk_size=1500,
  158.     chunk_overlap=150
  159. ),
  160. HuggingFaceEmbeddings(
  161.     model_name="mlsa-iai-msu-lab/sci-rus-tiny"
  162. )
  163. )  
Add Comment
Please, Sign In to add comment