Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def experiment(text_splitter, embedder):
- questions_bank = [
- 'Что такое банкомат Тинькоффа',
- 'Что такое ПИН-код',
- 'Какие валюты ПС являются рассчетными',
- 'Что делать если украли карту?',
- 'На что клиент имеет право заблокировать карту',
- 'В каких случая банк может расторгнуть договор',
- 'Что такое регулярный платёж?',
- 'Временная франшиза это',
- 'Какие риски входят в страховую программу',
- 'В каких случаях страховщик имеет право отказать в страовой выплате'
- 'Какие требования предьявляюся к заёмщику потребительского кредита',
- 'В течение какого срока рассматривается заявление на кредит',
- 'На какую сумму можно взять кредит',
- 'В какой валюте дают кредит',
- 'Какие виды потребительского кредита есть',
- 'Какой процент у кредитов',
- 'В течение каого срока можно отказаться от кредита',
- 'Что будет если не выплатить кредит',
- 'Как погасить кредит',
- 'Как часто нужно платить за кредит'
- 'Сколько стоит пополнение в банкоматах Тинькофф',
- 'Какой кэшбек за покупки на выбранные категории',
- 'Сколько стоит пополнение в в других банкоматах при использовании карты МИР',
- 'Сколько стоит смс-ки об оповещениях об операциях',
- 'Сколько стоит выпуск карты',
- 'Сколько стоит снятие наличных',
- 'Сколько стоит квази-кэш',
- 'Сколько стоит пополнение через СБП',
- 'Сколько стоит перевод через приложение Тинькофф на Тинькофф',
- 'Сколько стоит перевод через приложение Тинькофф Банк в другой банк',
- # про виртуальную карту
- 'Что такое абонентский договор',
- 'Что такое виртуальная карта',
- 'Как пополнить виртуальную карту',
- 'Каким образом банк оповещает о совершении операций с Виртуальной картой?',
- 'Как запросить информацию о виртуальной карте',
- 'С какими валютами работет виртуальная карта',
- 'Что такое распоряжение по виртуальной карте?',
- 'Сколько можно переводить по виртуальной карте за раз',
- 'Сколько можно переводить по виртуальной карте в течение месяца',
- 'В течение какого срока делается виртуальная карта',
- # про безопасность использования банковской карты
- 'Зачем нужен ПИН-код?',
- "Можно ли сообщать ПИН-код другим людям?",
- "Что делать если забыл свой ПИН-код",
- "Можно бесконтактно оплатить картой не вводя ПИН-код",
- "Как сохранить карту подольше",
- "Что делать если мне банкомат не хочет возвращать карту",
- "Почему мне пришла смска об операции по карте, которую я не делал",
- "Что будет если ввёл неправильно ПИН-код",
- "Как быстро нужно вытащить карту из банкомата",
- "Какие страны являются странами повышеного риска для карт оплаты",
- # про помощника Олега
- "Кто такой помощник Олег",
- "Как подключить Олега",
- "Как отключить Олега",
- "Сколько стоит услуга помощника Олега",
- "Сколько хранятся записанные Олегом записи звоноков и стенограммы",
- "На сколько звонков может ответить Олег за месяц",
- "На какой территории сервис помощник Олег может работать"]
- # loading docs
- documents = MergedDataLoader(loaders=[
- PyPDFLoader(root_dir + 'docs/doc1.pdf'),
- PyPDFLoader(root_dir + 'docs/doc2.pdf'),
- PyPDFLoader(root_dir + 'docs/doc3.pdf'),
- PyPDFLoader(root_dir + 'docs/doc4.pdf'),
- PyPDFLoader(root_dir + 'docs/doc5.pdf'),
- PyPDFLoader(root_dir + 'docs/doc6.pdf')
- ]).load()
- print("documents:" + len(documents))
- # splitting into chunks
- chunks = text_splitter.split_documents(documents)
- print("chunks: "+len(chunks))
- # reference
- reference_table = []
- reference_embedder = HuggingFaceEmbeddings(model_name='intfloat/multilingual-e5-base')
- reference_vec_db = FAISS.from_documents(chunks, reference_embedder)
- # bulding reference_table
- for question in questions_bank:
- result = {
- "question": question,
- "chunks": []
- }
- res = vec_db.search(question, 'similarity')
- for i in range(4):
- result["chunks"].append([res[i].page_content])
- reference_table.append(result);
- # testing our configuration
- vec_db = FAISS.from_documents(chunks, embedder)
- score1 = 0
- score2 = 0
- score3 = 0
- question_idx = 0;
- import difflib
- def similarity(s1, s2):
- normalized1 = s1.lower()
- normalized2 = s2.lower()
- matcher = difflib.SequenceMatcher(None, normalized1, normalized2)
- return matcher.ratio()
- table = []
- for q_idx in range(len(questions_bank)):
- result = {
- "question": questions_bank[q_idx],
- "chunks": [],
- "score1": 0,
- "score2": 0
- }
- res = vec_db.search(questions_bank[q_idx], 'similarity')
- for i in range(4):
- cur_chunk = res[i].page_content
- result["chunks"].append([res[i].page_content])
- score1 += reference_table[q_idx]['chunks'][0][0] == cur_chunk
- score1 += 0.5 * (reference_table[q_idx]['chunks'][1][0] == cur_chunk)
- score2 += similarity(reference_table[q_idx]['chunks'][0][0], cur_chunk)
- score2 += 0.5 * similarity(reference_table[q_idx]['chunks'][1][0], cur_chunk)
- result["score1"] += reference_table[q_idx]['chunks'][0][0] == cur_chunk
- result["score1"] += 0.5 * (reference_table[q_idx]['chunks'][1][0] == cur_chunk)
- result["score2"] += similarity(reference_table[q_idx]['chunks'][0][0], cur_chunk)
- result["score2"] += 0.5 * similarity(reference_table[q_idx]['chunks'][1][0], cur_chunk)
- table.append(result);
- score3 += ( result["score1"] == 0)
- print("Score1 = "+score1)
- print("Score2 = "+score2)
- print("Score3 = "+score3)
- experiment(
- RecursiveCharacterTextSplitter(
- chunk_size=1500,
- chunk_overlap=150
- ),
- HuggingFaceEmbeddings(
- model_name="mlsa-iai-msu-lab/sci-rus-tiny"
- )
- )
Add Comment
Please, Sign In to add comment