add paraGenerator
This commit is contained in:
2
.gitignore
vendored
2
.gitignore
vendored
@@ -1,3 +1,5 @@
|
|||||||
.venv/
|
.venv/
|
||||||
llama.cpp/
|
llama.cpp/
|
||||||
datasets/
|
datasets/
|
||||||
|
__pycache__/
|
||||||
|
models/
|
||||||
|
|||||||
32
NER.py
32
NER.py
@@ -1,9 +1,27 @@
|
|||||||
|
# 1 модуль - Распознавание именованных сущностей (NER)
|
||||||
|
|
||||||
import spacy
|
import spacy
|
||||||
|
|
||||||
nlp = spacy.load("ru_core_news_lg")
|
class NER:
|
||||||
text = "Добрый день, я, Сидоров Иван Иванович. Прошу перевести сто тысяч рублей Якову Петру Игнатьевичу."
|
"""
|
||||||
doc = nlp(text)
|
Класс для выделения именованных сущностей из текста с помощью библиотеки spaCy.
|
||||||
|
"""
|
||||||
for ent in doc.ents:
|
def __init__(self):
|
||||||
print(f"{ent.text} -> {ent.label_}")
|
self.nlp = spacy.load("ru_core_news_lg")
|
||||||
|
|
||||||
|
def extract_entities(self, text):
|
||||||
|
"""
|
||||||
|
Выделение именованных сущностей из текста
|
||||||
|
Использование: text (<текст>)
|
||||||
|
Возвращает: List[Dict[text, type]] - список словарей, каждый из которых содержит информацию об одной сущности
|
||||||
|
"""
|
||||||
|
doc = self.nlp(text)
|
||||||
|
entities = []
|
||||||
|
for ent in doc.ents:
|
||||||
|
entities.append({
|
||||||
|
'text': ent.text, # Текст сущности
|
||||||
|
'type': ent.label_, # Тип сущности (PER, LOC, ORG, DATE и т.д.)
|
||||||
|
'start': ent.start_char, # Начальная позиция в тексте
|
||||||
|
'end': ent.end_char # Конечная позиция в тексте
|
||||||
|
})
|
||||||
|
return entities
|
||||||
|
|||||||
@@ -5,4 +5,7 @@
|
|||||||
pip install spacy
|
pip install spacy
|
||||||
python -m spacy download ru_core_news_lg
|
python -m spacy download ru_core_news_lg
|
||||||
```
|
```
|
||||||
|
#### для paraGenerator
|
||||||
|
```
|
||||||
|
CMAKE_ARGS="-DGGML_CUDA=on -DLLAMA_OPENSSL=ON" pip install llama-cpp-python
|
||||||
|
```
|
||||||
|
|||||||
26
main.py
Normal file
26
main.py
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
# Точка входа программы
|
||||||
|
|
||||||
|
from NER import NER
|
||||||
|
from paraGenerator import ParaphraseGenerator
|
||||||
|
|
||||||
|
## Запуск рабочих инструментов
|
||||||
|
ner = NER()
|
||||||
|
pg = ParaphraseGenerator()
|
||||||
|
###
|
||||||
|
|
||||||
|
srcText = 'Добрый день, я, Сидоров Иван Иванович. Прошу перевести сто тысяч рублей Якову Петру Игнатьевичу в Москву.'
|
||||||
|
|
||||||
|
entities1 = ner.extract_entities(srcText)
|
||||||
|
print(entities1)
|
||||||
|
|
||||||
|
#paraphrase1 = pg.generate(srcText, entities1)
|
||||||
|
#print(paraphrase1)
|
||||||
|
|
||||||
|
#entities2 = ner.extract_entities(paraphrase1)
|
||||||
|
#print(entities2)
|
||||||
|
|
||||||
|
gg = ()
|
||||||
|
gg.append(1)
|
||||||
|
gg.append(2)
|
||||||
|
gg.append(1)
|
||||||
|
print(gg)
|
||||||
33
paraGenerator.py
Normal file
33
paraGenerator.py
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
# 2 модуль - Генератор парафраза на основе llama.cpp
|
||||||
|
|
||||||
|
from openai import OpenAI
|
||||||
|
|
||||||
|
class ParaphraseGenerator:
|
||||||
|
"""
|
||||||
|
Класс для использования генеративной модели на базе llama.cpp
|
||||||
|
"""
|
||||||
|
def __init__(self):
|
||||||
|
self.client = OpenAI(base_url="http://127.0.0.1:8080", api_key="")
|
||||||
|
|
||||||
|
def generate(self, srcText, entities):
|
||||||
|
"""
|
||||||
|
Генерация парафраза по промпту.
|
||||||
|
Использование: generate(<исходный текст>, <сущности>)
|
||||||
|
"""
|
||||||
|
entityList = ', '.join(entity['text'] for entity in entities) # генерация списка выделенных сущностей
|
||||||
|
prompt = 'Перефразируй следующий текст, сохранив все именованные сущности "' + entityList + '" в точности такими же, как в оригинале. ' \
|
||||||
|
'Не изменяй эти фрагменты текста, не заменяй их синонимами, не переставляй слова внутри них. ' \
|
||||||
|
'Можешь изменять грамматическую структуру предложения, порядок слов, использовать синонимы для' \
|
||||||
|
'остальных частей текста, но именованные сущности должны остаться неизменными. Исходный текст: "' + srcText + '"'
|
||||||
|
try:
|
||||||
|
response = self.client.chat.completions.create(
|
||||||
|
model = "",
|
||||||
|
messages = [{"role": "user", "content": prompt}],
|
||||||
|
temperature = 0.8,
|
||||||
|
top_p = 0.95,
|
||||||
|
max_tokens = 200
|
||||||
|
)
|
||||||
|
return response.choices[0].message.content
|
||||||
|
except Exception as e:
|
||||||
|
print(f"Ошибка генерации: {e}")
|
||||||
|
return None
|
||||||
Reference in New Issue
Block a user