Spaces:
Build error
Build error
11
Browse files- .gitignore +1 -0
- .gradio/certificate.pem +31 -0
- .gradio/flagged/dataset1.csv +2 -0
- app.py +23 -64
- data.json +32 -109
- finetune.py +113 -0
- test.py +29 -0
- train.py +3 -3
.gitignore
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
*.json
|
.gradio/certificate.pem
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
-----BEGIN CERTIFICATE-----
|
| 2 |
+
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
|
| 31 |
+
-----END CERTIFICATE-----
|
.gradio/flagged/dataset1.csv
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
|
|
|
|
|
|
|
| 1 |
+
query,output,timestamp
|
| 2 |
+
Что Тимур делаем,"['Разрабатываем проекты, которые стремятся освободить разум и дать чувствам новое дыхание.', 'Разрабатываем философские публикации, исследующие субъективный идеализм и солипсизм через примеры, такие как кино.', 'Мечтаем объединить технологии, науку и искусство для изменения мира к лучшему.', 'Создаем комиксы о футуристическом мире с марксистской философией в легкой, доброй форме.', 'Разрабатываем текстовые работы под псевдонимом Тим Ад и рассматриваем возможность издания этих работ в качестве книги.']",2025-02-28 15:46:18.553450
|
app.py
CHANGED
|
@@ -1,66 +1,25 @@
|
|
| 1 |
-
import json
|
| 2 |
-
import faiss
|
| 3 |
-
import torch
|
| 4 |
-
from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig
|
| 5 |
-
from sentence_transformers import SentenceTransformer
|
| 6 |
-
from deep_translator import GoogleTranslator # Для перевода
|
| 7 |
-
|
| 8 |
-
# Загружаем TinyLlama
|
| 9 |
-
model_name = "TinyLlama/TinyLlama-1.1B-Chat-v1.0"
|
| 10 |
-
tokenizer = AutoTokenizer.from_pretrained(model_name)
|
| 11 |
-
model_name = "TinyLlama/TinyLlama-1.1B-Chat-v1.0"
|
| 12 |
-
tokenizer = AutoTokenizer.from_pretrained(model_name)
|
| 13 |
-
# Убираем 4-битную квантизацию и используем float32
|
| 14 |
-
model = AutoModelForCausalLM.from_pretrained(
|
| 15 |
-
model_name,
|
| 16 |
-
torch_dtype=torch.float32, # Используем обычные веса без квантизации
|
| 17 |
-
device_map="auto"
|
| 18 |
-
)
|
| 19 |
-
|
| 20 |
-
# Загружаем Sentence Transformer
|
| 21 |
-
embedder = SentenceTransformer("all-MiniLM-L6-v2") # Легкий, работает на Free Tier
|
| 22 |
-
|
| 23 |
-
# Загружаем базу знаний
|
| 24 |
-
with open("data.json", "r", encoding="utf-8") as f:
|
| 25 |
-
knowledge_base = json.load(f)
|
| 26 |
-
|
| 27 |
-
# Превращаем вопросы в векторы
|
| 28 |
-
instructions = [item["instruction"] for item in knowledge_base]
|
| 29 |
-
responses = [item["response"] for item in knowledge_base]
|
| 30 |
-
instruction_vectors = embedder.encode(instructions)
|
| 31 |
-
|
| 32 |
-
# Создаем FAISS индекс
|
| 33 |
-
dimension = instruction_vectors.shape[1]
|
| 34 |
-
index = faiss.IndexFlatL2(dimension)
|
| 35 |
-
index.add(instruction_vectors)
|
| 36 |
-
|
| 37 |
-
# Функция поиска по смыслу с переводом
|
| 38 |
-
def search_knowledge_base(query, top_k=1):
|
| 39 |
-
if not query.isascii(): # Если текст НЕ на английском
|
| 40 |
-
query_ru = query # Оставляем как есть
|
| 41 |
-
else:
|
| 42 |
-
query_ru = GoogleTranslator(source='en', target='ru').translate(query) # Переводим на русский
|
| 43 |
-
|
| 44 |
-
query_vector = embedder.encode([query_ru])
|
| 45 |
-
distances, indices = index.search(query_vector, top_k)
|
| 46 |
-
response_ru = responses[indices[0][0]] if indices[0][0] < len(responses) else "Ответ не найден."
|
| 47 |
-
|
| 48 |
-
if query.isascii(): # Если изначально вопрос был на английском, переводим обратно
|
| 49 |
-
response_en = GoogleTranslator(source='ru', target='en').translate(response_ru)
|
| 50 |
-
return response_en
|
| 51 |
-
return response_ru
|
| 52 |
-
|
| 53 |
-
# Функция чата
|
| 54 |
-
def chat(message):
|
| 55 |
-
fact = search_knowledge_base(message)
|
| 56 |
-
message = f"{message}\nИнформация: {fact}"
|
| 57 |
-
|
| 58 |
-
inputs = tokenizer(message, return_tensors="pt").to("cpu")
|
| 59 |
-
outputs = model.generate(**inputs, max_new_tokens=100)
|
| 60 |
-
response = tokenizer.batch_decode(outputs, skip_special_tokens=True)[0]
|
| 61 |
-
return response
|
| 62 |
-
|
| 63 |
-
# Gradio UI
|
| 64 |
import gradio as gr
|
| 65 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 66 |
iface.launch()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
import gradio as gr
|
| 2 |
+
from datasets import load_dataset
|
| 3 |
+
from transformers import pipeline
|
| 4 |
+
|
| 5 |
+
# Загружаем твой dataset
|
| 6 |
+
dataset = load_dataset("adiom/ai-dataset")
|
| 7 |
+
data = dataset['train']
|
| 8 |
+
|
| 9 |
+
# Загружаем модель для вопросов и ответов
|
| 10 |
+
qa_pipeline = pipeline("question-answering", model="deepset/roberta-base-squad2")
|
| 11 |
+
|
| 12 |
+
# Функция для обработки запросов
|
| 13 |
+
def answer_question(query):
|
| 14 |
+
best_answer = ""
|
| 15 |
+
for item in data:
|
| 16 |
+
context = item['output'] # Пример: извлекаем ответ из поля 'output'
|
| 17 |
+
result = qa_pipeline(question=query, context=context)
|
| 18 |
+
if result["score"] > 0.1: # Порог уверенности
|
| 19 |
+
best_answer = result["answer"]
|
| 20 |
+
break
|
| 21 |
+
return best_answer
|
| 22 |
+
|
| 23 |
+
# Интерфейс Gradio
|
| 24 |
+
iface = gr.Interface(fn=answer_question, inputs="text", outputs="text")
|
| 25 |
iface.launch()
|
data.json
CHANGED
|
@@ -1,110 +1,33 @@
|
|
| 1 |
[
|
| 2 |
-
|
| 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 |
-
"instruction": "Какие цели у Тимура?",
|
| 36 |
-
"response": "Тимур стремится объединить технологии, науку и искусство, изменить мир к лучшему, исследовать новые возможности взаимодействия и создавать уникальные проекты. Он также хочет удочерить ребенка и стать хорошим отцом."
|
| 37 |
-
},
|
| 38 |
-
{
|
| 39 |
-
"instruction": "Какие творческие проекты у Тимура?",
|
| 40 |
-
"response": "Тимур создает музыку под псевдонимом DOGtheGOD, пишет тексты и стихи под псевдонимом Тим Ад, рисует граффити, разрабатывает комиксы Aurora Comics и арт-проект VZM, а также создает милых существ под названием Куленёчки."
|
| 41 |
-
},
|
| 42 |
-
{
|
| 43 |
-
"instruction": "Какие научные интересы у Тимура?",
|
| 44 |
-
"response": "Тимур изучает биоинформатику, молекулярную биологию, органическую химию, квантовую физику и влияние ИИ на общество. Он также интересуется марксизмом, неомарксизмом и философскими концепциями, такими как субъективный идеализм и солипсизм."
|
| 45 |
-
},
|
| 46 |
-
{
|
| 47 |
-
"instruction": "Какие бизнес-проекты у Тимура?",
|
| 48 |
-
"response": "Тимур управляет небольшим кафе, продает парфюмерию через бренд 'Perfume by K&M', разрабатывает маркетплейс MART CAT для зоо-бизнеса и создает видеохостинг BRUTALBABY с поддержкой web3.0 и прямых эфиров."
|
| 49 |
-
},
|
| 50 |
-
{
|
| 51 |
-
"instruction": "Какие технологии блокчейна использует Тимур?",
|
| 52 |
-
"response": "Тимур работает с Polygon, интеграцией WalletConnect/MetaMask, смарт-контрактами, NFT и системой Proof of Contribution. Он также разрабатывает проект Worm для поиска узлов в множестве сетей для обеспечения отказоустойчивости блокчейна Amalgam."
|
| 53 |
-
},
|
| 54 |
-
{
|
| 55 |
-
"instruction": "Какие планы у Тимура на будущее?",
|
| 56 |
-
"response": "Тимур планирует углубиться в изучение квантового программирования, создать учебник по механико-логическим процессорам, разработать сервис для отслеживания цен криптовалют и продолжить работу над проектами, связанными с AI, блокчейном и благотворительностью."
|
| 57 |
-
},
|
| 58 |
-
{
|
| 59 |
-
"instruction": "Какие личные качества Тимура?",
|
| 60 |
-
"response": "Тимур — амбициозный, творческий и трудолюбивый человек. Он ценит семейные ценности, поддерживает социальные связи и стремится менять мир к лучшему через свои проекты."
|
| 61 |
-
},
|
| 62 |
-
{
|
| 63 |
-
"instruction": "Что такое проект Canfly?",
|
| 64 |
-
"response": "Canfly — это некоммерческая организация, основанная Адиомом Тимуром, которая занимается разработкой искусственного интеллекта и блокчейн-платформы Amalgam. Проект фокусируется на создании децентрализованных решений, благотворительности и интеграции передовых технологий."
|
| 65 |
-
},
|
| 66 |
-
{
|
| 67 |
-
"instruction": "Какие цели у проекта Canfly?",
|
| 68 |
-
"response": "Canfly стремится объединить технологии, науку и искусство для изменения мира к лучшему. Ключевые цели включают разработку блокчейн-платформы Amalgam, создание DAO, поддержку благотворительных инициатив (например, фонда 'Летать вместе'), а также продвижение открытых исследований в области ИИ, биоинформатики и квантовых технологий."
|
| 69 |
-
},
|
| 70 |
-
{
|
| 71 |
-
"instruction": "Какие технологии использует Canfly?",
|
| 72 |
-
"response": "Canfly использует технологии Web3.0, смарт-контракты, NFT, Polygon, интеграцию WalletConnect/MetaMask, а также разрабатывает AI-модели и голосовые интерфейсы. Для разработки применяются Node.js, Nuxt.js, NestJS, Docker, PostgreSQL и другие инструменты."
|
| 73 |
-
},
|
| 74 |
-
{
|
| 75 |
-
"instruction": "Что такое Canfly DAO?",
|
| 76 |
-
"response": "Canfly DAO — децентрализованная автономная организация, созданная в рамках проекта. Она управляет процессами на платформе Amalgam, распределяет токены ($PDC, $AMT, $CFT) и координирует вклад участников через систему Proof of Contribution (PoC)."
|
| 77 |
-
},
|
| 78 |
-
{
|
| 79 |
-
"instruction": "Какие токены связаны с Canfly?",
|
| 80 |
-
"response": "Canfly использует три токена: $AMALGAMA (основной токен платформы), $PDC (вознаграждение за вклад в контент) и $AMT (вознаграждение за предоставление аппаратных ресурсов). Также планируется $CFT для управления DAO."
|
| 81 |
-
},
|
| 82 |
-
{
|
| 83 |
-
"instruction": "Как связаны Canfly и Amalgam?",
|
| 84 |
-
"response": "Canfly — организация, которая разрабатывает блокчейн-платформу Amalgam. Amalgam представляет собой децентрализованную систему с DAO, уникальной системой Proof of Contribution и интеграцией Web3.0, предназначенную для создания контента через пользовательские группы (NFT) и распределения платежей через смарт-контракты."
|
| 85 |
-
},
|
| 86 |
-
{
|
| 87 |
-
"instruction": "Какие проекты входят в экосистему Canfly?",
|
| 88 |
-
"response": "В экосистему Canfly входят: Amalgam (блокчейн-платформа), Ingria (автономный ИИ с эмоциональными экранами), фонд 'Летать вместе' (благотворительность), вики-сайт по биоинформатике, учебник по механико-логическим процессорам (PLP) и другие исследовательские и образовательные инициативы."
|
| 89 |
-
},
|
| 90 |
-
{
|
| 91 |
-
"instruction": "Как Canfly поддерживает благотворительность?",
|
| 92 |
-
"response": "Canfly разрабатывает фонд 'Летать вместе', который поможет людям в сложных жизненных ситуациях, включая детей-сирот. Платформа будет open-source, чтобы любой мог развернуть её на бесплатном хостинге (например, Vercel), обеспечивая безопасность и доступность для активистов."
|
| 93 |
-
},
|
| 94 |
-
{
|
| 95 |
-
"instruction": "Какие планы у Canfly на будущее?",
|
| 96 |
-
"response": "Canfly планирует развивать Amalgam, интегрировать ИИ-модели (например, Ingria), запустить квантовые исследования, создать виртуальные выставочные пространства и расширить благотворительные программы. Также в планах — издание научных работ и учебников."
|
| 97 |
-
},
|
| 98 |
-
{
|
| 99 |
-
"instruction": "Кто участвует в разработке Canfly?",
|
| 100 |
-
"response": "Основатель и генеральный директор — Адиом Тимур. В разработке участвуют разработчики, исследователи и энтузиасты блокчейна, ИИ и биоинформатики. Canfly сотрудничает с сообществами в Twitter, GitHub и другими open-source проектами."
|
| 101 |
-
},
|
| 102 |
-
{
|
| 103 |
-
"instruction": "Как Canfly связан с искусственным интеллектом?",
|
| 104 |
-
"response": "Canfly разрабатывает AI-модели, такие как Ingria (автономный ИИ с эмоциональными экранами), голосовые боты для Telegram и Discord, а также системы анализа данных для блокчейна. Используются технологии DeepSpeech, TensorFlow и Hugging Face."
|
| 105 |
-
},
|
| 106 |
-
{
|
| 107 |
-
"instruction": "Как Canfly использует блокчейн?",
|
| 108 |
-
"response": "Canfly применяет блокчейн для создания децентрализованных приложений (Amalgam), управления DAO, хранения контента через NFT и обеспечения прозрачности в благотворительных проектах. Система Proof of Contribution стимулирует активность пользователей."
|
| 109 |
-
}
|
| 110 |
-
]
|
|
|
|
| 1 |
[
|
| 2 |
+
"Компания разрабатывает инновационные решения в области искусственного интеллекта.",
|
| 3 |
+
"Мы используем технологии, такие как глубокое обучение, нейронные сети и обработка естественного языка.",
|
| 4 |
+
"Наши проекты охватывают области медицины, финансов, образования и искусства.",
|
| 5 |
+
"Разрабатываем решения для автоматизации бизнес-процессов с использованием AI и Big Data.",
|
| 6 |
+
"Проект AI Health анализирует данные о здоровье и предлагает персонализированные рекомендации.",
|
| 7 |
+
"Мы работаем над созданием систем, которые помогают диагностировать болезни на ранних стадиях.",
|
| 8 |
+
"Проект AI Finance предоставляет решения для автоматической оценки рисков и прогнозирования финансовых потоков.",
|
| 9 |
+
"Разрабатываем умные роботы для промышленности, способные работать в сложных условиях.",
|
| 10 |
+
"Проект AI Art использует генеративные нейросети для создания уникальных произведений искусства.",
|
| 11 |
+
"Компания работает над созданием AI-решений для автоматизации документооборота.",
|
| 12 |
+
"Мы разрабатываем роботов, которые могут взаимодействовать с людьми и помогать в обучении.",
|
| 13 |
+
"Создаем систему для анализа социальных сетей с использованием NLP для выявления трендов и фальшивых новостей.",
|
| 14 |
+
"Используем методы машинного обучения для анализа больших данных и предсказания будущих событий.",
|
| 15 |
+
"Разрабатываем системы, которые помогают людям с инвалидностью общаться с окружающим миром.",
|
| 16 |
+
"Мы разрабатываем интеграции для IoT-устройств и облачные сервисы для хранения и обработки данных.",
|
| 17 |
+
"Проект AI for Education разрабатывает технологии для автоматического анализа успеваемости студентов.",
|
| 18 |
+
"Создаем проекты для улучшения системы здравоохранения с помощью AI и интернета вещей.",
|
| 19 |
+
"Используем AI для создания персонализированных обучающих курсов и тренажеров.",
|
| 20 |
+
"Работаем над созданием новых систем для эффективного управления городским транспортом.",
|
| 21 |
+
"Разрабатываем технологии для улучшения безопасности в городской инфраструктуре с использованием нейросетей.",
|
| 22 |
+
"Компания использует передовые технологии, такие как Blockchain и AI, для создания безопасных платформ.",
|
| 23 |
+
"Мы разрабатываем системы для обнаружения и предотвращения кибератак с помощью методов машинного обучения.",
|
| 24 |
+
"Проект AI Robotics разрабатывает роботов, способных выполнять сложные задачи на производстве.",
|
| 25 |
+
"Мы создаем AI-решения для оптимизации сельского хозяйства и повышения урожайности.",
|
| 26 |
+
"Используем глубокое обучение для анализа геномных данных и разработки новых методов лечения.",
|
| 27 |
+
"Разрабатываем нейросетевые модели для прогнозирования рыночных трендов в финансовой сфере.",
|
| 28 |
+
"Проект AI for Environment помогает отслеживать состояние экосистем и предсказывать экологические катастрофы.",
|
| 29 |
+
"Компания разрабатывает инструменты для анализа и обработки данных с помощью технологии машинного обучения.",
|
| 30 |
+
"Мы создаем системы для прогнозирования успеха стартапов с использованием AI и больших данных.",
|
| 31 |
+
"Проект AI for Law помогает юристам анализировать судебные решения и предсказывать исходы дел.",
|
| 32 |
+
"Разрабатываем системы для повышения эффективности логистики с помощью машинного обучения и IoT."
|
| 33 |
+
]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
finetune.py
ADDED
|
@@ -0,0 +1,113 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from transformers import AutoTokenizer, AutoModel
|
| 2 |
+
import torch
|
| 3 |
+
import faiss
|
| 4 |
+
import numpy as np
|
| 5 |
+
import gradio as gr
|
| 6 |
+
|
| 7 |
+
|
| 8 |
+
# Загружаем токенизатор и модель
|
| 9 |
+
MODEL_NAME = "distilbert-base-multilingual-cased"
|
| 10 |
+
tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME)
|
| 11 |
+
model = AutoModel.from_pretrained(MODEL_NAME)
|
| 12 |
+
|
| 13 |
+
# Тестовая фраза
|
| 14 |
+
text = "Привет, как дела?"
|
| 15 |
+
|
| 16 |
+
# Токенизация
|
| 17 |
+
tokens = tokenizer(text, return_tensors="pt", padding=True, truncation=True)
|
| 18 |
+
|
| 19 |
+
# Генерация эмбеддингов
|
| 20 |
+
with torch.no_grad():
|
| 21 |
+
output = model(**tokens)
|
| 22 |
+
|
| 23 |
+
# Вывод размера эмбеддингов
|
| 24 |
+
embedding = output.last_hidden_state[:, 0, :] # Берём CLS-токен
|
| 25 |
+
print("Размер эмбеддинга:", embedding.shape)
|
| 26 |
+
|
| 27 |
+
|
| 28 |
+
# Размерность эмбеддинга (768, как у DistilBERT)
|
| 29 |
+
D = 768
|
| 30 |
+
|
| 31 |
+
# Создаём FAISS-индекс (L2 - евклидово расстояние)
|
| 32 |
+
index = faiss.IndexFlatL2(D)
|
| 33 |
+
|
| 34 |
+
# Проверяем, пуст ли индекс
|
| 35 |
+
print("Индекс создан. Количество векторов:", index.ntotal)
|
| 36 |
+
|
| 37 |
+
import json
|
| 38 |
+
|
| 39 |
+
# Загрузка данных из файла
|
| 40 |
+
with open('data.json', 'r', encoding='utf-8') as f:
|
| 41 |
+
documents = json.load(f)
|
| 42 |
+
|
| 43 |
+
# Проверим данные
|
| 44 |
+
print(documents[:5]) # Печатаем первые 5 элементов
|
| 45 |
+
|
| 46 |
+
|
| 47 |
+
# Кодируем тексты в эмбеддинги
|
| 48 |
+
doc_embeddings = []
|
| 49 |
+
for doc in documents:
|
| 50 |
+
tokens = tokenizer(doc, return_tensors="pt", padding=True, truncation=True)
|
| 51 |
+
with torch.no_grad():
|
| 52 |
+
embedding = model(**tokens).last_hidden_state[:, 0, :].numpy() # Берём CLS-токен
|
| 53 |
+
doc_embeddings.append(embedding)
|
| 54 |
+
|
| 55 |
+
# Превращаем список в numpy-массив
|
| 56 |
+
doc_embeddings = np.vstack(doc_embeddings)
|
| 57 |
+
|
| 58 |
+
# Добавляем в FAISS
|
| 59 |
+
index.add(doc_embeddings)
|
| 60 |
+
|
| 61 |
+
# Проверяем, сколько векторов в базе
|
| 62 |
+
print("Векторов в индексе:", index.ntotal)
|
| 63 |
+
|
| 64 |
+
def search_query(query, index, top_k=3):
|
| 65 |
+
# Токенизация запроса
|
| 66 |
+
tokens = tokenizer(query, return_tensors="pt", padding=True, truncation=True)
|
| 67 |
+
|
| 68 |
+
# Генерация эмбеддинга для запроса
|
| 69 |
+
with torch.no_grad():
|
| 70 |
+
query_embedding = model(**tokens).last_hidden_state[:, 0, :].numpy()
|
| 71 |
+
|
| 72 |
+
# Поиск ближайших векторов
|
| 73 |
+
D, I = index.search(query_embedding, top_k)
|
| 74 |
+
|
| 75 |
+
return D, I
|
| 76 |
+
|
| 77 |
+
# Пример запроса
|
| 78 |
+
query = "веб-сервис"
|
| 79 |
+
|
| 80 |
+
# Получаем результаты поиска
|
| 81 |
+
distances, indices = search_query(query, index)
|
| 82 |
+
|
| 83 |
+
# Печатаем результаты
|
| 84 |
+
print("Результаты поиска:")
|
| 85 |
+
for dist, idx in zip(distances[0], indices[0]):
|
| 86 |
+
print(f"Текст: {documents[idx]} | Расстояние: {dist}")
|
| 87 |
+
|
| 88 |
+
|
| 89 |
+
def search_in_faiss(query: str):
|
| 90 |
+
# Преобразуем запрос в эмбеддинг
|
| 91 |
+
tokens = tokenizer(query, return_tensors="pt", padding=True, truncation=True)
|
| 92 |
+
with torch.no_grad():
|
| 93 |
+
query_embedding = model(**tokens).last_hidden_state[:, 0, :].numpy()
|
| 94 |
+
|
| 95 |
+
# Находим ближайшие векторы в FAISS
|
| 96 |
+
distances, indices = index.search(query_embedding, k=5)
|
| 97 |
+
|
| 98 |
+
# Формируем результаты
|
| 99 |
+
results = [documents[idx] for idx in indices[0]]
|
| 100 |
+
return results
|
| 101 |
+
|
| 102 |
+
iface = gr.Interface(
|
| 103 |
+
fn=search_in_faiss, # Функция для поиска в FAISS
|
| 104 |
+
inputs="text", # Ввод текста
|
| 105 |
+
outputs="text", # Вывод результата (тексты документов)
|
| 106 |
+
title="Поиск по проектам",
|
| 107 |
+
description="Введите запрос, и система найдет наиболее подходящие ответы из базы знаний."
|
| 108 |
+
)
|
| 109 |
+
|
| 110 |
+
# Запуск интерфейса
|
| 111 |
+
iface.launch(
|
| 112 |
+
share=True
|
| 113 |
+
)
|
test.py
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from transformers import AutoTokenizer, AutoModelForSeq2SeqLM
|
| 2 |
+
|
| 3 |
+
# Путь к сохранённой модели
|
| 4 |
+
model_name = "./results"
|
| 5 |
+
|
| 6 |
+
try:
|
| 7 |
+
# Попытка загрузить модель и токенизатор
|
| 8 |
+
tokenizer = AutoTokenizer.from_pretrained(model_name)
|
| 9 |
+
model = AutoModelForSeq2SeqLM.from_pretrained(model_name)
|
| 10 |
+
except Exception as e:
|
| 11 |
+
print(f"Ошибка при загрузке модели: {e}")
|
| 12 |
+
print("Проверьте содержимое папки './results'.")
|
| 13 |
+
exit()
|
| 14 |
+
|
| 15 |
+
# Функция для генерации ответов
|
| 16 |
+
def generate_answer(input_text):
|
| 17 |
+
inputs = tokenizer(input_text, return_tensors="pt", max_length=128, truncation=True)
|
| 18 |
+
outputs = model.generate(**inputs, max_length=128)
|
| 19 |
+
return tokenizer.decode(outputs[0], skip_special_tokens=True)
|
| 20 |
+
|
| 21 |
+
# Тестирование модели
|
| 22 |
+
if __name__ == "__main__":
|
| 23 |
+
while True:
|
| 24 |
+
question = input("Введите вопрос (или 'exit' для выхода): ")
|
| 25 |
+
if question.lower() in ["exit", "quit"]:
|
| 26 |
+
print("Завершение работы.")
|
| 27 |
+
break
|
| 28 |
+
answer = generate_answer(question)
|
| 29 |
+
print(f"Ответ модели: {answer}")
|
train.py
CHANGED
|
@@ -17,12 +17,12 @@ model = get_peft_model(model, config)
|
|
| 17 |
|
| 18 |
# Загружаем данные (пример из data.json)
|
| 19 |
train_data = [
|
| 20 |
-
{"
|
| 21 |
-
{"
|
| 22 |
]
|
| 23 |
|
| 24 |
# Преобразуем в формат для обучения
|
| 25 |
-
train_texts = [f"Q: {d['
|
| 26 |
train_encodings = tokenizer(train_texts, padding=True, truncation=True, return_tensors="pt")
|
| 27 |
|
| 28 |
# Настройки обучения
|
|
|
|
| 17 |
|
| 18 |
# Загружаем данные (пример из data.json)
|
| 19 |
train_data = [
|
| 20 |
+
{"input": "Что такое Canfly Inna?", "output": "Canfly Inna — это FastAPI сервер с RAG."},
|
| 21 |
+
{"input": "Как работает FAISS?", "output": "FAISS — это быстрый поиск ближайших соседей."}
|
| 22 |
]
|
| 23 |
|
| 24 |
# Преобразуем в формат для обучения
|
| 25 |
+
train_texts = [f"Q: {d['input']}\nA: {d['output']}" for d in train_data]
|
| 26 |
train_encodings = tokenizer(train_texts, padding=True, truncation=True, return_tensors="pt")
|
| 27 |
|
| 28 |
# Настройки обучения
|