Tecnologia Da Informação Flashcards
Dados Estruturados, Semiestruturados e Não-Estruturados
Dados estruturados são informações que foram formatadas e transformadas em um modelo de dados bem definido. Os dados brutos são mapeados em campos predefinidos que podem ser posteriormente extraídos e lidos por meio de SQL facilmente. Os bancos de dados relacionais SQL, consistindo em tabelas com linhas e colunas, são o exemplo perfeito de dados estruturados.
Os dados nem sempre serão estruturados ou não-estruturados – existe outra categoria entre essas duas que está parcialmente estruturada. Esses dados são definidos como semiestruturados. Este tipo de dado possui algumas características consistentes e definidas, não se restringindo a uma estrutura rígida como a necessária para bancos de dados relacionais. Propriedades organizacionais, como metadados ou tags semânticas, são usadas com dados semiestruturados para torná-los mais gerenciáveis; no entanto, ainda contêm alguma variabilidade e inconsistência.
Os dados presentes na forma bruta absoluta são denominados como não estruturados. Esses dados são difíceis de processar devido à sua complexa organização e formatação. Os dados não estruturados podem assumir várias formas, incluindo postagens em mídias sociais, bate-papos, imagens de satélite, dados do sensor IoT, e-mails e apresentações.
Independência de dados
A independência de dados pode ser definida como a capacidade de alterar o esquema em um nível do sistema de banco de dados sem ter de alterar o esquema no próximo nivel mais alto.
Existem dois tipos de indendência, a lógica e a física:
1. Independência lógica de dados é a capacidade de alterar o esquema conceitual sem ter de alterar os esquemas externos ou os programas de aplicação.
2. Independência física de dados é a capacidade de alterar o esquema interno sem ter de alterar o esquema conceitual.
Sistema de Gerenciamento de Banco de Dados (SGBD)
Diferentes Sistema de Gerenciamento de Banco de Dados (SGBDs) possibilitam a criação de diferentes restrições. Os mais comuns e aceitos pela maioria são:
NOT NULL - Garante que os valores inseridos em uma coluna não serão nulos;
UNIQUE - Garante que os valores em uma coluna são únicos (não se repetem);
PRIMARY KEY - Restrição que combina as restrições NOT NULL e UNIQUE. Ou seja, identifica unicamente uma linha de uma tabela;
FOREIGN KEY - Possibilita a criação de relacionamentos entre tabelas;
CHECK - Garante que os valores presentes em uma coluna satisfazem uma condição;
DEFAULT - Cria um valor padrão (default) para uma coluna se ela não respeitar um valor específico.
Os principais tipos de SGBD são:
Relacionais
• Definição: Organizam dados em tabelas com relações entre elas.
• Exemplos: MySQL, PostgreSQL, Oracle Database, Microsoft SQL Server, MariaDB.
Não-relacionais (NoSQL)
• Definição: Não utilizam o modelo relacional, permitindo maior flexibilidade e escalabilidade.
• Subtipos:
• Documentos: MongoDB, CouchDB.
• Chave-Valor: Redis, DynamoDB.
• Colunar: Cassandra, HBase.
• Gráficos: Neo4j, ArangoDB
Banco de Dados Oracle
Uma instância do banco de dados é um conjunto de estruturas na memória e de processos que rodam no servidor. Essa instância é configurada com base nos parâmetros que definimos, e esses parâmetros ficam salvos em um arquivo.
Nesse contexto, o Oracle permite alterar o valor de um parâmetro em um arquivo de parâmetros de várias maneiras, conforme abaixo:
1. Editando um arquivo de parâmetro de inicialização: Na maioria dos casos, o novo valor entra em vigor na próxima vez que você iniciar uma instância do banco de dados. É necessário realizar a alteração de forma manual, geralmente através do arquivo pfile.
2. Emitindo um comando ALTER SYSTEM SET … SCOPE=SPFILE para atualizar um arquivo de parâmetros do servidor. A aplicação é persistente para todo sistema após o reinício do banco de dados;
3. Emitindo um comando ALTER SYSTEM RESET para limpar o valor de um parâmetro de inicialização.
Além disso, há dois tipos de arquivos utilizados pelo Oracle: o pfile (arquivo de parâmetros do servidor) ou init, que é estático, e o spfile (arquivo de parâmetros do servidor), que é dinâmico. Ambos são localizados no diretório dbs da ORACLE_HOME. Enquanto o pfile pode ser aberto, verificado e modificado diretamente, o spfile não pode. Quando o Oracle inicia, ele tenta primeiro usar o spfile; se não encontrar, recorre ao pfile. É possível renomear ou mover o pfile, mas ao movê-lo, é necessário informar ao Oracle onde ele está localizado para iniciar a instância. Isso não é possível com o spfile, que não pode ser movido ou renomeado dessa maneira, apenas através do próprio banco de dados
A vantagem principal de utilizar um spfile em vez de um pfile está na capacidade de fazer alterações de dentro da instância do banco de dados nos parâmetros do Oracle. Enquanto o pfile é apenas de leitura e requer modificações manuais diretamente no arquivo, o spfile permite que os valores dos parâmetros sejam alterados e essas mudanças se tornem permanentes. Isso significa que, ao modificar um parâmetro no spfile e reiniciar a instância com um shutdown e startup, o Oracle irá utilizar os novos valores automaticamente. Essa flexibilidade é crucial para ajustes finos e gerenciamento eficiente do banco de dados Oracle em tempo real.
Redução de Dimensionalidade
A redução de dimensionalidade é uma técnica que pode ser usada para reduzir o número de dimensões de um conjunto de dados, tornando os dados mais fáceis de visualizar e analisar.
A técnica mais amplamente usada para reduzir a dimensionalidade de dados numéricos é a Análise de Componentes Principais, também conhecida como PCA. O PCA é um processo matemático que transforma as variáveis originais, que geralmente estão correlacionadas, em um conjunto de variáveis novas e não correlacionadas chamadas Componentes Principais (PCs).
Para realizar o processo, é necessário encontrar as variáveis mais relevantes, chamadas de Componentes Principais, que não apresentem correlação linear entre si.
Ou seja, PCA é um método de redução de dimensionalidade que é usado para transformar um conjunto de variáveis correlacionadas em um conjunto menor de variáveis não correlacionadas, chamadas de componentes principais. Sendo assim, amplamente usado para reduzir a dimensionalidade de dados numéricos.
Error-reporting - PL/SQL do Oracle 19G - tratamento de exceções.
SQLCode
Função: Retorna o código de erro numérico quando uma exceção ocorre.
Uso: Dentro de um bloco de tratamento de exceções para identificar o erro.
SQLErrm
Função: Retorna a mensagem de erro associada ao código de erro.
Uso: Dentro de um bloco de tratamento de exceções para obter uma descrição textual do erro.
Matching
O matching (pode ser encontrado na literatura com diferentes variações, como objetct matching, product matching, citation matching, etc.) é um processo crucial na integração de dados de múltiplas fontes, pois permite identificar e conectar entidades que representam o mesmo objeto do mundo real, mesmo que estejam representadas de maneira diferente em diferentes fontes.
De forma geral, o desafio central do matching é encontrar correspondências precisas entre as entidades, mesmo quando há diferenças nos nomes, formatos, valores de atributos e outras características. Detectar a ocorrência de uma mesma entidade do mundo real é o objetivo principal do matching, pois permite a integração precisa e eficiente dos dados.
Por exemplo, podemos avaliar diferentes fontes de dados e queremos saber exatamente que são os mesmos objetos, e que além disso, combinam com uma entidade real:
1. Correspondência de nomes diferentes: Pode existir uma mesma pessoa cadastrada com nomes diferentes em diferentes fontes.
2. Diferenças nos formatos:Mesma data com formatos diferentes em diferentes fontes.
3. Valores de atributos inconsistentes: Mesma informação armazenada com valores diferentes em diferentes fontes.
Características básicas do SGBDs
Os sistemas gerenciadores de banco de dados (SGBDs) são classificados como aplicações, ou um conjunto de programas, que habilitam o usuário a manipular e administrar um banco de dados através de operações como criação, edição, atualização, etc. São responsáveis também por gerenciar os acessos conforme configurado pelo administrador, além de garantir que o banco de dados tenha as características básicas de funcionamento de transações através das propriedades: atomicidade, consistência, isolamento e durabilidade - ACID
Atomicidade: A atomicidade é uma propriedade dos SGBDs que deve garantir que transações sejam executadas em sua totalidade, ou então as transações devem ser desfeitas até um estado anterior e consistente do sistema. Isto é, a atomicidade considera que o conjunto de transações seja tratada como uma unidade única e indivisível de trabalho. Dessa forma, caso aconteça algum erro durante uma operação, como falta de energia, é necessário evitar que a transação fique parcialmente concluída, gerando inconsistências ao estado do banco de dados. Para isso, a atomicidade é implementada usando técnicas como logs de transações e mecanismos de recuperação, que registram todas as alterações realizadas por uma transação e permitem desfazer ou refazer essas alterações, dependendo do resultado.
Consistência (ou correção): Com o uso de um SGBD, o sistema de banco de dados se caracteriza pela sua padronização, tornando-o mais fácil de ser administrado e manipulado, pois as regras e diretrizes são padronizadas, permitindo uma melhor consistência. Ou seja, quando um SGBD realiza determinada transação em um banco de dados consistente, espera-se que após a transação, o banco de dados permaneça em um estado consistente. Dessa forma, qualquer transação executada deve seguir as regras de integridade do banco de dados, respeitando as restrições de integridade, a unicidade de chaves, etc;
Isolamento: Operações e manipulações realizadas no banco de dados devem permanecer isoladas de outras operações realizadas de forma concorrente, ou seja, cada processamento não deve interferir nos demais;
Durabilidade (ou disponibilidade): Um dos objetivos de qualquer SGBD é manter os dados de uma transação finalizada persistidos em definitivo no banco de dados, ou seja, os dados de transações finalizadas devem estar disponíveis em definitivo após sua inserção.
Funções de Data e Hora em SQL
localtimestamp: retorna a data e hora atuais na timezone do banco de dados local.
current_timestamp: retorna a data e hora atuais na timezone do banco de dados local.
timestamp: retorna um valor de timestamp, mas sem informação de timezone. Isso significa que o valor do timestamp seria interpretado de acordo com a timezone do sistema que está lendo os dados.
timestamp with timezone: retorna um valor de timestamp juntamente com informação de timezone. Isso significa que o valor do timestamp seria sempre interpretado corretamente, independentemente da timezone do sistema que está lendo os dados.
timestamp with local timezone: retorna um valor de timestamp que é ajustado para a timezone do sistema que está lendo os dados.
Controle de Concorrência
O sistema de controle de concorrência dos SGBDs relacionais tem como principal objetivo controlar o acesso a fim de garantir a propriedade de isolamento (ACID) em transações que ocorrem concorrentemente (diferentes usuários ao mesmo tempo) dentro de um banco de dados. Essa é uma das principais características presentes em um SGBD, pois através de seu uso é possível garantir um sistema consistente através da preservação e controle na execução de transações dentro de um banco de dados, permitindo assim, controlar conflitos de interferência de leitura e gravação. Existem muitas técnicas utilizadas por SGBDs para manter o controle de concorrência, e dentre as principais: bloqueio (locking), ordenamento de registro de timestamp, multiversão e validação ou certificação (protocolos otimistas). Grande parte dessas técnicas visa garantir a serialização, que é a garantia de execução correta das transações, igual ocorreria se fossem executadas de forma sequencial.
Caso o SGBD não ofereça o controle de concorrência, certas anomalias surgem dentro do banco de dados, 3 principais violações que podem ocorrer no banco de dados a depender do nível de isolamento utilizado:
Leitura suja: Uma transação T1 pode ler dados que foram modificados por uma transação T2, mas que ainda não foram confirmados. Se T2 falhar e for revertida, T1 terá lido dados que não existem mais e são incorretos. Ocorre somente no nível de isolamento READ UNCOMMITED.
Leitura não repetitiva: Uma transação T1 pode ler um valor de uma tabela. Se outra transação T2 atualizar esse valor posteriormente, quando T1 ler o valor novamente, verá um valor diferente do que leu inicialmente. Ocorre nos níveis de isolamento READ UNCOMMITED e READ COMMITED.
Fantasmas: Uma transação T1 pode ler um conjunto de linhas de uma tabela com base em uma condição específica na cláusula SQL WHERE. Se uma transação T2 inserir uma nova linha que também satisfaça a condição WHERE usada por T1, então ao ler novamente, T1 encontrará uma nova linha que não estava presente anteriormente. Ocorre nos níveis de isolamento READ UNCOMMITED, READ COMMITED e REPEATABLE READ.
Protocolo de Bloqueio SQL
Protocolo de bloqueio é considerado um conjunto de regras que devem ser seguidas por transação, além de serem impostas pelo SGBD, visando garantir que o resultado final será igual ao resultado da execução de todas as transações de forma serial, mesmo que as ações de várias transações sejam intercaladas. Ou seja, as técnicas para controle de concorrência servem para assegurar a serialização de planos de execução usando determinados conjuntos de regras (protocolos).
Em resumo, bloqueios binários possuem apenas dois estados possíveis:
Bloqueado - Quando uma transação está bloqueando o acesso ao item de dado e nenhuma outra transação pode acessar;
Desbloqueado -O item de dado está desbloqueado e pode ser acessado através de bloqueio.
Por sua vez, os bloqueios de modo múltiplo (chamado também de bloqueio compartilhado/exclusivo) permitem três estados possíveis:
Bloqueado para compartilhado/ bloqueio de leitura - Neste estado, um recurso está bloqueado para leitura por uma ou mais transações. Isso significa que outras transações podem ler o recurso simultaneamente, mas não podem modificá-lo enquanto o bloqueio estiver em vigor. Esse tipo de bloqueio é chamado de “bloqueio compartilhado” ou “bloqueio de leitura”.
Bloqueado para escrita /bloqueio exclusivo - Neste estado, um recurso está bloqueado para escrita por uma transação. Isso significa que nenhuma outra transação pode ler ou modificar o recurso enquanto o bloqueio estiver em vigor. Esse tipo de bloqueio é chamado de “bloqueio exclusivo” ou “bloqueio para escrita”. O item fica bloqueado a fim de evitar que outras transações acessem o mesmo item enquanto uma transação precisa modificar o recurso, garantindo assim a atomicidade e a consistência das operações de escrita.
Desbloqueado - Neste estado, o recurso não está bloqueado por nenhuma transação e está disponível para leitura ou escrita por qualquer transação que deseje acessá-lo. Quando uma transação completa suas operações de leitura ou escrita em um recurso, ela libera o bloqueio e o recurso volta ao estado desbloqueado, permitindo que outras transações o acessem conforme necessário.
Banco de Dados Híbrido
Um banco de dados híbrido combina as vantagens de ambientes locais (on-premises) com a flexibilidade da nuvem, muitas vezes envolvendo modelos de bancos de dados relacionais e NoSQL. O conceito de banco de dados híbrido refere-se ao uso de uma infraestrutura mista, onde parte dos dados e das operações de um banco de dados é gerenciada em servidores locais, enquanto outra parte é alocada em um ambiente de nuvem pública ou privada.
Essa abordagem é adotada por organizações que desejam equilibrar controle, segurança, e desempenho, enquanto aproveitam os benefícios de escalabilidade, elasticidade e custo-benefício da nuvem.
Vejamos os principais aspectos de bancos de dados híbridos:
Flexibilidade: Um banco de dados híbrido permite que as organizações mantenham dados críticos ou sensíveis em seus próprios servidores locais (por questões de compliance, privacidade ou segurança), ao mesmo tempo que movem dados menos críticos para a nuvem. Isso oferece maior flexibilidade na gestão de recursos e dados.
Escalabilidade: A capacidade de escalar os recursos de armazenamento e processamento de dados é uma das maiores vantagens da nuvem. Em um ambiente híbrido, a organização pode utilizar a escalabilidade da nuvem para demandas pontuais (picos de acesso, por exemplo) sem ter que expandir sua infraestrutura local.
Resiliência e Recuperação de Desastres: Um banco de dados híbrido pode ser configurado para backup e recuperação de desastres utilizando a nuvem como um destino secundário. Isso melhora a resiliência da operação, permitindo que a organização recupere dados rapidamente em caso de falhas no ambiente local.
Eficiência de Custos: O modelo híbrido pode reduzir custos de capital (CAPEX), já que a infraestrutura local não precisa ser constantemente expandida. Em vez disso, a organização paga pelos recursos da nuvem conforme necessário (modelo pay-as-you-go), especialmente útil para lidar com variações de demanda.
Baixa Latência: Dados e operações mais sensíveis, que requerem baixa latência, podem permanecer no ambiente local, enquanto dados de menor prioridade ou que não são acessados com frequência podem ser movidos para a nuvem, equilibrando custos e desempenho.
Segurança e Conformidade: Muitos bancos de dados híbridos são usados para atender a requisitos de conformidade, como o GDPR ou outras regulamentações de proteção de dados. A organização mantém o controle dos dados sensíveis em seus servidores locais, enquanto dados menos sensíveis podem ser armazenados na nuvem.
Linguagem Python
A linguagem Python é uma linguagem em que não é necessário informar o tipo de dado na declaração. As variáveis assumem um tipo de dado no momento da atribuição, logo, podemos atribuir a uma variável um valor de qualquer tipo.
Um objeto em Python é considerado uma abstração e todo objeto, sem exceção, possui uma identidade, um tipo e um valor. A identidade de cada objeto é única e possibilita distinguir um objeto do outro. O tipo é para definir quais as operações podem ser realizadas pelo objeto e é definido a partir de sua classe. Por fim, o valor de um objeto é que foi atribuído a ele em sua declaração.
Amazon Web Services - AWS
AWS (Amazon Web Services), que é uma plataforma de serviços de nuvem, oferecendo uma ampla variedade de produtos, como bancos de dados, armazenamento, redes, machine learning, entre outros.
AWS SageMaker - avalia serviços, frameworks e modelos de base de IA e ML. Fornece aos desenvolvedores e cientistas de dados a capacidade de construir, treinar e implantar modelos de machine learning (ML) rapidamente.
AWS EC2 (Elastic Compute Cloud) - Cria e executa servidores virtuais na nuvem, permitindo aos usuários alugar servidores virtuais na nuvem.
AWS Database Migration Service - Avalia bancos de dados e descobre como migrar do banco de dados atual, auxiliando a migração do bancos de dados para a AWS de maneira fácil e segura.
AWS RDS (Relational Database Service) - Configura, opera e ajusta a escala de um banco de dados relacional na nuvem.
AWS Lambda - Executa código, sem se preocupar com servidores. Ele executa seu código em resposta a eventos, como alterações em dados em um bucket do Amazon S3 ou uma atualização em uma tabela do Amazon DynamoDB, e gerencia automaticamente os recursos de computação para você, tornando mais fácil a construção de aplicações que respondem rapidamente a novas informações.
Serviço de Computação em Nuvem
IaaS (Infrastructure as a Service) - oferece infraestrutura de TI virtualizada, como máquinas virtuais, armazenamento e redes. Embora IaaS forneça flexibilidade, ainda requer que o usuário gerencie o sistema operacional e a infraestrutura subjacente.
PaaS (Platform as a Service) - fornece uma plataforma que inclui sistema operacional, ambiente de execução, banco de dados e servidores web. Isso permite que os desenvolvedores foquem no desenvolvimento de aplicativos sem se preocupar com a gestão da infraestrutura e do sistema operacional. Exemplos incluem Google App Engine, Microsoft Azure App Services e Heroku.
SaaS (Software as a Service) - fornece software completo como um serviço acessível pela internet. O usuário utiliza o software, mas não tem controle sobre a plataforma ou a infraestrutura subjacente. Exemplos incluem Google Workspace, Salesforce e Office 365.
BDaaS (Database as a Service) - oferece um banco de dados gerenciado como um serviço.
STaaS (Storage as a Service) - oferece armazenamento de dados como um serviço.
Processamento de Linguagem Natural (PLN)
Morfema - O objeto principal de estudo da morfologia é o morfema, definido linguisticamente como “unidade mínima significativa”. Segundo essa definição, o morfema é a menor unidade linguística dotada de significado, considerando que há outras unidades linguísticas que também possuem significado, como a palavra, o sintagma, a frase, a oração, o período, o texto etc.
Lema - é a representação das propriedades sintático-semânticas de um item lexical. Isso significa que, a partir de um lema, é possível saber quais argumentos a ele se relacionam.
Lexema - é sinônimo de unidade lexical, o que implica características de som, forma e significado.
Radical - raiz ou radical é o morfema nuclear de uma palavra, ou seja, aquele constituinte básico que expressa sua base significativa, que designa o significado lexical da palavra. Portanto, ele é o componente comum a todas as palavras que pertencem à mesma família.
Machine learning
1) Aprendizado supervisionado
Nesse tipo de aprendizado, os computadores são treinados usando exemplos de entrada e saída correspondente. Por exemplo, imagine que estamos construindo um modelo para classificar e-mails entre e-mails de spam e e-mails legítimos. Para isso, utilizamos diversos e-mails que contêm a resposta à pergunta “É spam?”. Através das características dos e-mails, como palavras-chave, comprimento do texto e presença de links, o algoritmo aprende a rotular o conteúdo como spam. Esse modelo é conhecido como modelo de classificação. Ele identifica padrões associados a cada categoria, permitindo que, posteriormente, o modelo classifique novos e-mails com base no treinamento recebido. Dessa forma, é possível filtrar e organizar a caixa de entrada de maneira mais eficiente.
2) Aprendizado não supervisionado
Nesse tipo de aprendizado, os computadores exploram dados não rotulados para descobrir padrões e estruturas ocultas. Uma técnica comum utilizada nesse tipo de aprendizado é o clustering, que é o processo de agrupar e categorizar grupos de dados. Em um contexto de e-commerce, por exemplo, podemos identificar padrões e grupos de compras semelhantes. Você pode descobrir grupos de clientes que tendem a comprar produtos de moda, outros grupos que preferem produtos eletrônicos, e assim por diante.
3) Semi-supervisionado
Em sistemas que utilizam técnicas de aprendizado semi-supervisionado, temos uma situação onde uma parte dos dados é rotulada e outra parte não é rotulada. Imagine uma plataforma como a Netflix, por exemplo, onde os dados rotulados seriam as classificações dos usuários em relação aos filmes e séries assistidos, enquanto os dados não rotulados seriam os filmes e séries não avaliados por eles.
Para aproveitar ao máximo essas informações, podemos usar um algoritmo de aprendizado supervisionado, como a regressão logística ou a árvore de decisão. Esses algoritmos analisam os dados rotulados, identificam padrões e relacionamentos entre as preferências dos usuários e, em seguida, aplicam esses padrões aos dados não rotulados. Assim, o sistema pode fazer previsões e recomendações mais precisas e personalizadas, mesmo para filmes e séries não avaliados anteriormente.
4) Aprendizado por reforço
Esse tipo de aprendizado é o que mais se diferencia dos outros que falamos. No aprendizado por reforço, um agente é treinado para tomar sequências de decisões, recebendo recompensas ou penalidades em troca. O objetivo é que o agente aprenda a tomar as melhores ações para maximizar as recompensas ao longo do tempo. Esse tipo de aprendizado é amplamente aplicado na robótica e em jogos.
Support Vector Machine - SVM
O algoritmo SVM, ou Support Vector Machine, é um algoritmo de aprendizado de máquina supervisionado que pode ser usado para problemas de classificação e regressão. Ele é baseado na ideia de encontrar um hiperplano que melhor separe os dados em diferentes classes.
Em um problema de classificação, o SVM busca encontrar um hiperplano que maximize a distância entre os pontos de cada classe. Essa distância é chamada de margem de separação. Os pontos que estão na margem de separação são chamados de vetores de suporte. Ao encontrar um hiperplano com a maior margem de separação, o SVM está garantindo que os dados de cada classe serão classificados corretamente com maior probabilidade.
O SVM é um algoritmo poderoso que pode ser aplicado a uma ampla gama de problemas. Ele é especialmente eficaz em problemas de classificação com dados não lineares.
Aqui estão alguns exemplos de aplicações do algoritmo SVM:
Detecção de spam
Diagnóstico médico
Reconhecimento facial
Rede Neural Convolucional - CNN
Rede Neural Convolucional (ConvNet / Convolutional Neural Network / CNN) é um algoritmo de Aprendizado Profundo que pode captar uma imagem de entrada, atribuir importância (pesos e vieses que podem ser aprendidos) a vários aspectos / objetos da imagem e ser capaz de diferenciar um do outro. O pré-processamento exigido em uma ConvNet é muito menor em comparação com outros algoritmos de classificação. Enquanto nos métodos primitivos os filtros são feitos à mão, com treinamento suficiente, as ConvNets têm a capacidade de aprender esses filtros / características.
Long Short-Term Memory (LSTM)
A long short-term memory (LSTM), em português: memória de curto longo prazo, é uma rede neural recorrente (RNN), projetada para lidar com o problema do gradiente desvanecente presente em RNNs tradicionais.