add dataset

This commit is contained in:
podiukov.iv
2026-04-28 06:06:43 +05:00
parent 7f56c0f10f
commit 23fe47644f
4 changed files with 20 additions and 18 deletions

2
.gitignore vendored
View File

@@ -1,5 +1,5 @@
.venv/ .venv/
llama.cpp/ llama.cpp/
NEREL/ rupaws/
__pycache__/ __pycache__/
models/ models/

17
main.py
View File

@@ -1,5 +1,6 @@
# Точка входа программы # Точка входа программы
import csv
from modules.NER import NER from modules.NER import NER
from modules.paraGenerator import ParaphraseGenerator from modules.paraGenerator import ParaphraseGenerator
from modules.validator import validator from modules.validator import validator
@@ -7,14 +8,22 @@ from modules.validator import validator
ner = NER() ner = NER()
pg = ParaphraseGenerator() pg = ParaphraseGenerator()
srcText = 'Добрый день, я, Сидоров Иван Иванович. Прошу перевести сто тысяч рублей Якову Петру Игнатьевичу в Москву.' datasetPath = 'rupaws/rupaws_wiki_test.csv'
srcTexts = []
with open(datasetPath, 'r') as f:
reader = csv.reader(f, delimiter=';')
for row in reader:
srcTexts.append(row[1])
def main(srcText): def main(srcText):
srcEntities = ner.extract_entities(srcText) # поиск сущностей srcEntities = ner.extract_entities(srcText) # поиск сущностей
print(f'ИСХОДНЫЕ СУЩНОСТИ ~> {srcEntities}')
paraphrase = pg.generate(srcText, srcEntities) # генерация парафраза paraphrase = pg.generate(srcText, srcEntities) # генерация парафраза
paraEntities = ner.extract_entities(paraphrase) # поиск сущностей в парафразе paraEntities = ner.extract_entities(paraphrase) # поиск сущностей в парафразе
return validator(srcText, paraphrase, srcEntities, paraEntities) # валидация return validator(srcText, paraphrase, srcEntities, paraEntities) # валидация
result = main(srcText) for i in range(10): # проверим 10 текстов
print(f'ИСХОДНЫЙ ТЕКСТ: {srcText}') text = srcTexts[i]
print(f'СГЕНЕРИРОВАННЫЙ ТЕКСТ: {result}') print(f'ИСХОДНЫЙ ТЕКСТ ~> {text}')
print(f'ПАРАФРАЗИРОВАННЫЙ ТЕКСТ ~> {main(text)}\n')

View File

@@ -39,6 +39,7 @@ class ParaphraseGenerator:
f'Перефразируй следующий текст, сохранив все именованные сущности "{', '.join(entity for entity in entities)}" в точности такими же, как в оригинале. ' f'Перефразируй следующий текст, сохранив все именованные сущности "{', '.join(entity for entity in entities)}" в точности такими же, как в оригинале. '
'Не изменяй эти фрагменты текста, не заменяй их синонимами, не переставляй слова внутри них. ' 'Не изменяй эти фрагменты текста, не заменяй их синонимами, не переставляй слова внутри них. '
'Можешь изменять грамматическую структуру предложения, порядок слов, использовать синонимы для' 'Можешь изменять грамматическую структуру предложения, порядок слов, использовать синонимы для'
f'остальных частей текста, но именованные сущности должны остаться неизменными. Исходный текст: "{srcText}"' f'остальных частей текста, но именованные сущности должны остаться неизменными.'
f'Исходный текст: "{srcText}". Выводи только сгенерированный текст.'
) )
return self.generateByPrompt(prompt) return self.generateByPrompt(prompt)

View File

@@ -56,14 +56,13 @@ def validator(srcText, paraphrase, srcEntities, paraEntities):
""" """
ce = compare_entities(srcEntities, paraEntities) ce = compare_entities(srcEntities, paraEntities)
if ce[0]: if ce[0]:
print(f'ПАРАФРАЗИРОВАННЫЕ СУЩНОСТИ ~> {paraEntities}')
return paraphrase # если всё нормально, возвращаем текст в неизменном виде return paraphrase # если всё нормально, возвращаем текст в неизменном виде
print(f'Произошла потеря сущностей!')
print(f'Исходные сущности: {srcEntities}')
print(f'Сгенерируемые сущности: {paraEntities}')
print(f'Потеря сущностей: {ce[1]}')
# даём 5 попыток на восстановление # даём 5 попыток на восстановление
for i in range(5): for i in range(5):
print(f'ПОТЕРЯННЫЕ СУЩНОСТИ ~> {ce[1]}')
print(f'ПОПЫТКА ВОССТАНОВЛЕНИЯ ~> {i+1}')
regen_prompt = ( regen_prompt = (
f'При перефразировании текста "{srcText}" из списка элементов "{', '.join(entity for entity in srcEntities)}"' f'При перефразировании текста "{srcText}" из списка элементов "{', '.join(entity for entity in srcEntities)}"'
f'были утеряны или изменены следующие важные элементы: "{', '.join(e for e in ce[1])}". ' f'были утеряны или изменены следующие важные элементы: "{', '.join(e for e in ce[1])}". '
@@ -72,14 +71,7 @@ def validator(srcText, paraphrase, srcEntities, paraEntities):
newParaphrase = pg.generateByPrompt(regen_prompt) newParaphrase = pg.generateByPrompt(regen_prompt)
paraEntities = ner.extract_entities(newParaphrase) paraEntities = ner.extract_entities(newParaphrase)
ce = compare_entities(srcEntities, paraEntities) ce = compare_entities(srcEntities, paraEntities)
print(f'Попытка восстановления: {i+1}')
print(f'Исходные сущности: {srcEntities}')
print(f'Сгенерируемые сущности: {paraEntities}')
print(f'Потеря сущностей: {ce[1]}')
if (ce[0]): # если сравнение дало True, выходим из цикла if (ce[0]): # если сравнение дало True, выходим из цикла
print(f'ПАРАФРАЗИРОВАННЫЕ СУЩНОСТИ ~> {paraEntities}')
return newParaphrase return newParaphrase
return None return None
# a = set(['a','b', 'c', 'd'])
# b = set(['a','b'])
# validator('123', '123', a, b)