Вот структура проекта:
Код: Выделить всё
pythonAI/
├── download.py
├── learner.py
├── main.py
├── model_old.py
├── modelos
│ ├── ca
│ │ ├── config.json
│ │ ├── generation_config.json
│ │ ├── merges.txt
│ │ ├── model.safetensors
│ │ ├── special_tokens_map.json
│ │ ├── tokenizer_config.json
│ │ ├── tokenizer.json
│ │ └── vocab.json
│ ├── en
│ │ ├── config.json
│ │ ├── generation_config.json
│ │ ├── merges.txt
│ │ ├── model.safetensors
│ │ ├── special_tokens_map.json
│ │ ├── tokenizer_config.json
│ │ ├── tokenizer.json
│ │ └── vocab.json
│ └── es
│ ├── config.json
│ ├── generation_config.json
│ ├── model.safetensors
│ ├── special_tokens_map.json
│ ├── tokenizer_config.json
│ ├── tokenizer.json
│ └── vocab.txt
├── model.py
├── nlp_processor.py
├── __pycache__
│ ├── learner.cpython-39.pyc
│ ├── model.cpython-39.pyc
│ ├── nlp_processor.cpython-39.pyc
│ └── search_engine.cpython-39.pyc
├── README.md
├── search_engine.py
└── utils.py
nlp_processor.py для определения языка и предварительной обработки текста:
Код: Выделить всё
from langdetect import detect
import re
def detect_language(text):
try:
return detect(text)
except:
return 'unknown'
def preprocess_text(text):
text = re.sub(r'\s+', ' ', text).strip()
return text
Код: Выделить всё
from transformers import AutoModelForCausalLM, AutoTokenizer
class ChatModel:
def __init__(self):
self.models = {
'es': self.load_model('./modelos/es'),
'ca': self.load_model('./modelos/ca'),
'en': self.load_model('./modelos/en')
}
def load_model(self, model_path):
model = AutoModelForCausalLM.from_pretrained(model_path)
tokenizer = AutoTokenizer.from_pretrained(model_path)
return model, tokenizer
def get_response(self, processed_input, lang):
model, tokenizer = self.models.get(lang, (None, None))
if model is None or tokenizer is None:
return "Estoy aprendiendo, pronto podré hablar en tu idioma. Escríbeme en Español, catalán o inglés."
inputs = tokenizer.encode(processed_input, return_tensors='pt')
outputs = model.generate(inputs, max_length=50, num_return_sequences=1, pad_token_id=tokenizer.eos_token_id)
response = tokenizer.decode(outputs[0], skip_special_tokens=True)
return response
Код: Выделить всё
from nlp_processor import detect_language, preprocess_text
from model import ChatModel
def main():
chat_model = ChatModel()
while True:
user_input = input("Pregunta: ")
if user_input.lower() in ['salir', 'exit', 'quit']:
break
detected_lang = detect_language(user_input)
if detected_lang not in ['es', 'ca', 'en']:
detected_lang = 'unknown'
processed_input = preprocess_text(user_input)
response = chat_model.get_response(processed_input, detected_lang)
print(f"Chatbot: {response}")
if __name__ == "__main__":
main()
Когда я ввожу «¿hombre o mujer?» чат-бот отвечает:
Код: Выделить всё
Chatbot: ¿ hombre o mujer? ¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿lo??????????????????????????????????????
Что может быть причиной этой проблемы и как я могу исправить?
Спасибо за помощь!
Вот конкретные проблемы, с которыми я столкнулся:
Ответы часто бессвязны.
Ответы содержат повторяющиеся символы или знаки препинания.
Действия, которые я предпринял:
Проверил целостность файлов модели.
Проверили версии трансформаторов, факела и других зависимостей.
Убедились, что токенизаторы правильно связаны с соответствующими моделями.
Среда:
Python 3.9
transformers 4.12.5
torch 1.10.0
langdetect 1.0.9
Я ищу органические ответы
Подробнее здесь: https://stackoverflow.com/questions/785 ... nt-answers