Download main.py from MRdev2/IA_funcional: direct link, hf CLI and curl.
- Browser
- Download file 3.51 kB
-
https://huggingface.co/MRdev2/IA_funcional/resolve/main/main.py
- Command line
-
hf download hf://MRdev2/IA_funcional/main.py
-
curl -L -o main.py https://huggingface.co/MRdev2/IA_funcional/resolve/main/main.py
3.51 kB
| import nltk | |
| import numpy as np | |
| import tensorflow as tf | |
| from keras.models import Sequential, load_model | |
| from keras.layers import Dense | |
| import random | |
| import json | |
| import pickle | |
| ###Deu certo### | |
| nltk.download('punkt') | |
| stemmer = nltk.stem.lancaster.LancasterStemmer() | |
| # Carregando a base de dados | |
| with open("/home/mrdev/Ollama_testes/tutorial_IA/intents.json") as file: | |
| data = json.load(file) | |
| # Separando as informações | |
| try: | |
| with open("/home/mrdev/Ollama_testes/tutorial_IA/data.pickle", "rb") as f: | |
| words, labels, training, output = pickle.load(f) | |
| except: | |
| words = [] | |
| labels = [] | |
| docs_y = [] | |
| docs_x = [] | |
| # Loop para armazenar as informações de forma separada | |
| for intent in data["intents"]: | |
| for pattern in intent["pattern"]: | |
| wrds = nltk.word_tokenize(pattern) | |
| words.extend(wrds) | |
| docs_x.append(wrds) | |
| docs_y.append(intent["tag"]) | |
| if intent["tag"] not in labels: | |
| labels.append(intent["tag"]) | |
| # Organizando/pre-processamento | |
| words = [stemmer.stem(w.lower()) for w in words if w != "?"] | |
| words = sorted(list(set(words))) | |
| labels = sorted(labels) | |
| # Iniciando a tokenização e treinamento | |
| training = [] | |
| output = [] | |
| out_empty = [0 for _ in range(len(labels))] | |
| for x, doc in enumerate(docs_x): | |
| bag = [] | |
| wrds = [stemmer.stem(w) for w in doc] | |
| for w in words: | |
| if w in wrds: | |
| bag.append(1) | |
| else: | |
| bag.append(0) | |
| output_row = out_empty[:] | |
| output_row[labels.index(docs_y[x])] = 1 | |
| training.append(bag) | |
| output.append(output_row) | |
| training = np.array(training) | |
| output = np.array(output) | |
| with open("/home/mrdev/Ollama_testes/tutorial_IA/data.pickle", "wb") as f: | |
| pickle.dump((words, labels, training, output), f) | |
| #print(data["intents"]) | |
| # Iniciando a criação do modelo | |
| tf.keras.backend.clear_session() # Limpa a sessão do TensorFlow | |
| model = Sequential() | |
| model.add(Dense(8, input_shape=(len(training[0]),), activation='relu')) | |
| model.add(Dense(8, activation='relu')) | |
| model.add(Dense(len(output[0]), activation='softmax')) | |
| # Compilando o modelo | |
| model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy']) | |
| # Tentando carregar o modelo treinado | |
| try: | |
| model = load_model("/home/mrdev/Ollama_testes/tutorial_IA/model_keras.h5") | |
| except: | |
| # Treinando o modelo | |
| model.fit(training, output, epochs=1000, batch_size=8, verbose=1) | |
| # Salvando o modelo treinado | |
| model.save("/home/mrdev/Ollama_testes/tutorial_IA/model_keras.h5") | |
| def bag_of_words(s, words): | |
| bag = [0 for _ in range(len(words))] | |
| s_words = nltk.word_tokenize(s) | |
| s_words = [stemmer.stem(word.lower()) for word in s_words] | |
| for se in s_words: | |
| for i, w in enumerate(words): | |
| if w == se: | |
| bag[i] = 1 | |
| return np.array(bag) | |
| # Iniciando o chat em tempo real | |
| def chat(): | |
| print("__start__") | |
| while True: | |
| inp = input("Você: ") | |
| if inp.lower() == "sair": | |
| print("Saindo") | |
| break | |
| else: | |
| results = model.predict(np.array([bag_of_words(inp, words)])) | |
| results_index = np.argmax(results) | |
| tag = labels[results_index] | |
| for tg in data["intents"]: | |
| if tg["tag"] == tag: | |
| responses = tg["responses"] | |
| print(random.choice(responses)) | |
| chat() | |