5.2 Utilização de Chatbot DL
5.2.2 Experimento 1 – Base de dados cornell moveis dialog corpus
Como referiu-se na secção dos casos de uso, a presente parte prática será descrita da seguinte maneira: etapa de preparação de dados, nesta, descreve-se as diferentes fases de preparação de dados desde a conversão do texto à vectorização. Após o processo de vectorização os dados estão preparados para o processo de treino do modelo, sendo esta a segunda etapa, a terceira refere-se à avaliação do modelo, nesta, faz-se a análise da performance do modelo com recurso a métricas e discussão dos resultados.
Etapa I: Preparação de dados
Para que os dados possam ser utilizados no treino do modelo, é necessária preparação dos dados (data preparation) e organizar os dados em pares de entrada/saída que serão convertidos em pares de variáveis X/Y para treino e validação dos modelos. De referir que nesta etapa ira-se implementar o exemplo prático de Osipenko [67].
Na base de dados movies cornell, os dados encontram-se no ficheiro “movie_lines.txt”, conforme se vê na Tabela 12. Antes do processo da vectorização procede-se com a leitura do ficheiro.
Tabela 12: Leitura dos dados antes da vectorização
User Interação
Bianaca t's a gay cruise line, but I'll be, like, wearing a uniform and stuff
Joey o yeah, I've got the Sears catalog thing going -- and the tube sock gig " that's gonna be huge. And then I'm up for an ad for Queen Harry next week
A segunda técnica de preparação de dados refere-se ao split (processo de separação do texto em
Tabela 13: Split das palavras do ficheiro movie.txt
Index Type Size
0 str Start
1 str Kidding
2 str You
A terceira técnica aplicada foi a de lowercanse (conversão de todas palavras do texto em minúsculas). E ainda a técnica de wordcount (processo de contagem de números de vezes que uma palavra aparece no ficheiro, com base no tamanho e número de ocorrência da palavra). Mais detalhes pode se ver na Tabela 14.
Tabela 14: processo de contagem de palavras no ficheiro
Key Type value
m int 27
and int 18
A quarta técnica é do dicionário (processo de conversão do texto em palavras, com base em critérios palavra, tipo de variável o tamanho e número de vezes que aparece repetido. Em cada dicionário conta-se o número de máximo de vocabulário criado. Depois das etapas anteriores iniciam-se o processo da validação de dados para o teste e treino no final são convertidos em vetores para garantir a leitura dos mesmos. Pode se ver de forma detalhada na Tabela 15 e Tabela 16.
Tabela 15: Entrada do x (dados ainda em texto)
Index Type Size Value
0 list 10 ‘Start’, ‘did’, ‘n’, ‘play’, ‘this’, ‘scene’, ‘before’ 1 list 16 ‘Start’, ‘I’, ‘m’, ‘just’, ‘here’, ‘about’. ‘my’
‘brother, ‘I’
3 List 7 ‘Stard’ ‘chill’, ‘marion’
Tabela 16: Entrada do x (dados ainda em texto)
Index Type Size Value
0 List 19 [14,12,1,21,52,8,1,26,1,3] 1 List 9 [5,1,4.82,97,15,3,1,26]
3 List 5 [1,47,7,1,2]
No processo de treino e validação. O teste foi de 60890 e o treino de 243556. Sendo a soma 304446, equivalente ao tamanho da base de dados cornell dialog corpus.
Tabela 17: teste e treino base de dados cornell dialog corpus
Etapa II: Treino do modelo
Nesta etapa, se apresenta o treino e validação da base de dados cornell movies dialog. A apresentação será com recursos a gráficos de loss, accuracy e perplexity. Portanto para o treino usou-se os seguintes parâmetros:
• O Batch_Size para este caso de uso é de 128. Segundo Chollet (2017), um batch_Size é um hiper parâmetro que define o número de amostras a serem trabalhadas antes de atualizar os parâmetros internos do modelo. E umas das vantagens de aumentar um batch_size deve se ao fato de diminuir o tempo de convergência que o modelo precisa para aprender;
• Max_Input:Seq_Lenth=20:O Max_Input: Seq_Lenth refere ao tamanho da frase de entrada no processo de interação;
• Max_Target:Seq_Lenth=20:O Max Target:Seq_Lenth refere ao tamanho da frase de resposta;
• Optimizador Adam: é um algoritmo que é usado como alternativa ao Stochastic Gradiente
Descent (SGD). O mesmo serve para atualizar os pesos da rede de forma interativa tendo
em conta os dados de treinamento [60];
Após o treino do modelo, pode se fazer uma análise preliminar com recurso a métrica de accuracy e loss (categorical_crossentropy) de quão o modelo aprendeu. Na base destas métricas ira se avaliar o quão o modelo alcançou o resultado pretendido. [67].
No exemplo desenvolvido por Osipenko , apresenta como resultado a loss (categorical_crossentropy).
Figura 33: Teste da loss proposta no artigo de ([67])
Pela Figura 33, loss apresentada no artigo, tende a afastar-se do ponto 0. Um indicador, que mostra que o resultado tende a se afastar do pretendido. O mesmo resultado foi confirmado na validação
da loss conforme vê se na Figura 34. Uma curva de aprendizagem que tende a afastar-se do 0 ao
longo do treino das 100 épocas. Um resultado que mostra que loss tende a não atingir a saída pretendida.
Figura 34: Loss do exemplo implementado em ([69])
Além da loss, no exemplo proposto por Osinpenko, não foi aplicado a accuracy. Ao aplicar a métrica da accuracy, a curva de aprendizagem na validação tende a decrescer, neste caso atingindo
overfitting. (incapacidade de o modelo generalizar), como se pode ver na Figura 35. Por outro lado,
pode se ver pela figura, que tanto o treino e a validação da accuracy ao fim de 20 épocas não consegue generalizar. O fato de o modelo não generalizar, implica não conseguir responder a perguntas além do seu dataset ou melhor não aprendeu.
Em suma, o modelo proposto por Osipenko, ao adicionar métricas de accuracy (medir a performance do modelo), conclui-se que não consegue generalizar [69]. O que de certa forma torna-se um desafio para o presente caso de estudo uma vez que, ira obrigar no decurso de estudo aplicar técnicas de otimização (ajustes de parâmetros) para o modelo generalizar melhor.
Figura 35: Accuracy e validação ([69])
Etapa III: Avaliação do modelo
As figuras (Figura 35 e Figura 34) referenciam a loss e accuracy do modelo implementado por Osipenko [69]. Pelos gráficos o modelo não consegue generalizar. Na validação a loss chega a atingir uma pontuação máxima de 1.26, sendo que quando mais a afasta do 0 o modelo não alcança a saída pretendida. Além disso pela accuracy o modelo atingi o overfitting ao fim e 20 épocas (a curva de aprendizagem tende a decrescer). Portanto, com estes resultados da avaliação, sugere que as fases posteriores sejam aplicadas técnicas de otimização no sentido de o modelo generalizar melhor.
Etapa IV: Discussão dos resultados
Ainda no caso 1, uma vez que o modelo atinge overfitting, irá se aplicar técnicas de otimização para melhorar o modelo proposto por Osipenko, sendo as seguintes [69]:
• A primeira técnica passou por inclusão da técnica de remoção de virgulas, uma vez, que a preparação da base de dados no modelo proposto Osinkpenko, apresenta estes tipos de ruido [69];
Figura 36: Processo de stripped da base de dados
• Treino do modelo com menos parâmetros, as épocas passaram de 100 para 40 e 250 épocas; • Camadas intermediárias de 256 passaram para 100;
• Tensorboard, no sentido de acompanhar a performance dos gráficos; • Dropout nas duas camadas LSTM (0.2 %, 0.4% e 0.8%);
• Optimizador Adam para RMSprop; • Regularização de L1 e L2.
• Métrica da avaliação de chatbot perplexity.
A seguir, apresenta-se os gráficos da loss e accuracy, obtidos mediante a aplicação das técnicas de otimização citadas acima. Para apresentação dos gráficos, optou-se em agrupar os gráficos, no sentido de evitar repetição dos gráficos, pois foram aplicados vários testes, por outro lado, para facilitar a comparação e perceber quais técnicas de otimização fazem o modelo convergir melhor. No final será aplicado o modelo com melhor performance ainda no caso 1.
Figura 38: Accuracy dos modelos treinados com outros parâmetros
Avaliação dos modelos com técnicas de otimização
As figuras (Figura 37 e Figura 38) respondem a necessidade de ajuste dos parâmetros no sentido de o modelo generalizar melhor. Nos primeiros dois gráficos (loss e accuracy) a curva de aprendizagem tem de a decrescer no treino, sendo o mesmo confirmado na validação ao fim de 40 épocas (overfitting), obedecendo assim o ajuste de treino do modelo com menos parâmetros. A remoção das virgulas e a redução das épocas, não foi capaz de combater o overfitting. Dando seguimento ao ajuste de parâmetros aplicou-se uma dropout (0.2 e 0.4) em cada camada de LSTM, ao adicionar este ajuste notou melhorias, sendo que ao fim de treino de 40 épocas o modelo não
para se compreender se o modelo entrava em o overfitting. Umas das conclusões destes ajustes é o modelo com uma dropout de 0.2 teve melhor pontuação comparado com o de 0.4 e o adicionar mais épocas não fez diferença em relação ao overfitting.
Ainda nos ajustes de parâmetros, no modelo com uma dropout de 0.2%, 100 épocas, um batch_size de 512, adicionou-se um novo dado, uma mudança do optimizador do adam para RMSprop. Com estes ajustes o modelo generalizou melhor, ao fim de 50 épocas houve uma melhor validação de 0.64, comparado com outros modelos. Por fim, aplicou-se técnicas de de regularização L1 e L2 (com 250 épocas), sendo que ao integrar este ajuste o modelo atingiu overfitting comparado com outro modelo.
Em suma, pelos dados acima, o modelo que aprendeu melhor foi com os seguintes parâmetros: • batch_size =512; • num_epochs =100; • hidden_units =256; • max_input_seq_length = 20; • max_target_seq_length = 20; • max_vocab_size = 100;
• data_path = 'data/cornell movie-dialogs corpus/movie_lines.txt'; • encoder_lstm=lstm(units=hidden_units,return_state=true,dropout=),
name='encoder_lstm');
• decoder_lstm=lstm (units=hidden_units, return_state=true, return_sequences=true,dropout = 0.2,),name='decoder_lstm');
• loss=categorical_crossentropy; • metrics ='accuracy & perplexity; • optimizer='RMSprop.
Os parâmetros descritos acima, são os que apresentaram o modelo com melhor performance, por esta razão, serão de base para o treino dos modelos do caso 1 (cornell movie dialogs) e 2 (ubuntu
dialog corpus) e para sua análise serão utilizadas métricas como loss, accuracy e perplexity. Nos
casos anteriores não foi utilizada a perplexity como métrica. Umas das razões da inclusão desta métrica, deve ao fato que no desenvolvimento de chatbot baseados em gerar respostas ser aplicado.
E por ser um indicador de previsão da amostra ou de sequências de frases baseado na distribuição da probabilidade.
A fase posterior refere-se a análise do melhor modelo do caso 1, os critérios de análise será na base da loss, accuracy, perplexity discutindo os resultados apresentados.
Resultados do melhor modelo (caso 1) Loss
Para este modelo foi utilizada, categorical_crossentropy calcula a pontuação que resume a diferença entre as médias e as distribuições da probabilidade reais e previstas para todas as classes do problema, a pontuação perfeita é que estiver mais próxima de 0.
Na Figura 39, apresenta-se a loss equivalente ao treino e validação. No início do treino, o ponto alto atinge 1.32 e na validação 1.28. Considerando que quanto mais a loss tiver próxima do 0 é melhor pontuação, é um dado que sugere que o modelo na validação tende a aprender melhor. Ainda na Figura 39 ao fim de 20 épocas, no treino a curva de loss desce até 1.23. na validação até 1.21, mais um dado que sugere que a curva da loss, tende a obter o resultado pretendido. Nas épocas 21 a 35 a validação tende a ter um valor superior comparado ao treino. Um resultado que contradiz os princípios da minimização para o 0, sendo uma pontuação perfeita. Por último, nota- se que a validação da loss nas épocas 80 a 100, mostram um valor de minimização considerável, chegando a atingir uma pontuação de 1.19, um valor não atingindo no treino.
Em suma uma pontuação perfeita, seria a que estivesse próximo do 0, todavia, temos uma modelo em que ao longo do treino das épocas vai descendo consideravelmente, comparando a curva de aprendizagem do treino e validação do loss.
Figura 39: Loss melhor modelo (cornell movies dialog)
Acurracy
Outra métrica utilizada para medir o modelo foi a accuracy. Ao contrário da Loss, esta métrica, quão mais distante do 0, significa que o modelo aprende melhor em relação ao treino e validação. Ao fim de 20 épocas comparando a curva de aprendizagem de treino e validação percebe-se que o modelo converge melhor. Na época 24 pela curva de aprendizagem o modelo não aprendeu, como se pode ver pelos dados de treino (0.62) e validação (0.58) atingindo overfitting. Nas épocas 40 a 80 assiste um processo de o modelo aprendeu e/ não aprender, uma vez que, a curva cresce e decresce. Por fim, pelas Figura 40 pelo processo de treino e validação, pode assumir que o modelo converge melhor, ou por outras, consegue generalizar, uma vez que, na validação da accuracy o modelo mostrou estar a aprender durante o processo de treino. Outro dado que mostra que o modelo converge melhor, comparado a
Figura 35 e a Figura 40. Sendo que, a primeira mostra o gráfico da accuracy do modelo implementado por Osipenko e atual, percebe uma melhoria uma vez que, a curva atual mostra ligeiramente melhorias e modelo pela curva converge melhor [69].
Figura 40: Acc melhor modelo
Perplexity
A perplexidade tem uma relação com a probabilidade, entretanto uma baixa perplexidade indica que a distribuição da probabilidade é eficaz a prever uma amostra. Entretanto, nas primeiras 20 épocas pela curva de aprendizagem tem de a baixar tanto no treino e na validação. um dado que sugere melhorias modelo, baseado nos princípios da perplexity.
As figuras 39 referente a loss e 40 a accuracy, no intervalo das 20 a 40 épocas apresentam um ruido igual ao da perplexity. Um dado em comum no treino e na validação destas épocas.
Por último nas 40 a 100 épocas assiste um decréscimo da perplexity referente ao treino e validação, um dado que mostra nesse intervalo o ruido dos dados tem de a diminuir.
Figura 41: Perplexity cornell database