{"id":109,"date":"2024-04-21T14:47:53","date_gmt":"2024-04-21T14:47:53","guid":{"rendered":"https:\/\/thedataprocessblog.com\/?p=109"},"modified":"2024-04-21T14:47:53","modified_gmt":"2024-04-21T14:47:53","slug":"por-que-os-transformers-mudaram-tudo-input-embeddings","status":"publish","type":"post","link":"https:\/\/thedataprocessblog.com\/?p=109&lang=pt","title":{"rendered":"Por que os transformers mudaram tudo: Input embeddings"},"content":{"rendered":"\n<p>Para entender como um <em>Transformer<\/em> funciona, vamos dissecar o diagrama abaixo que mostra todas as etapas do processo. <\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img decoding=\"async\" loading=\"lazy\" width=\"480\" height=\"501\" src=\"https:\/\/thedataprocessblog.com\/wp-content\/uploads\/2024\/04\/image.png\" alt=\"\" class=\"wp-image-105\" srcset=\"https:\/\/thedataprocessblog.com\/wp-content\/uploads\/2024\/04\/image.png 480w, https:\/\/thedataprocessblog.com\/wp-content\/uploads\/2024\/04\/image-287x300.png 287w\" sizes=\"(max-width: 480px) 100vw, 480px\" \/><figcaption class=\"wp-element-caption\">Mechanism of the Transformer. (https:\/\/www.researchgate.net\/figure\/1-Mechanism-of-the-Transformer_fig2_340659282)<\/figcaption><\/figure><\/div>\n\n\n<h2>Input embeddings<\/h2>\n\n\n\n<p class=\"has-text-align-left\">Quando falamos no uso de redes neurais e mais amplamente t\u00e9cnicas de aprendizado de m\u00e1quina trabalhamos exclusivamente com n\u00fameros. O que quero dizer com isso \u00e9 que todo tipo de dado n\u00e3o estruturado, ou at\u00e9 mesmo estruturado, mas que esteja na forma de texto, por exemplo, tem que primeiro ser transformado em n\u00fameros para que possa ser &#8220;aprendido&#8221; pelos modelos de aprendizado de m\u00e1quina. <\/p>\n\n\n\n<p class=\"has-text-align-left\">Da\u00ed surge a quest\u00e3o: como transformar texto em n\u00fameros? <\/p>\n\n\n\n<h3><em>Bag of words<\/em><\/h3>\n\n\n\n<p>Existem algumas formas de fazer isso, e foram-se descobrindo novas alternativas para tentar resolver esse problema. Uma das primeiras solu\u00e7\u00f5es encontradas foi de dar uma &#8220;posi\u00e7\u00e3o&#8221; a cada palavra e contar o n\u00famero de apari\u00e7\u00f5es de cada uma das palavras no texto de entrada, a t\u00e9cnica chamada de <em>bag of words<\/em> . A imagem abaixo demonstra como isso \u00e9 feito: cada palavra tem uma posi\u00e7\u00e3o na tabela abaixo (cada palavra do vocabul\u00e1rio \u00e9 uma coluna) e o valor de cada c\u00e9lula \u00e9 a contagem de quantas vezes cada palavra apareceu no texto de entrada, representado pelas linhas.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" loading=\"lazy\" width=\"1024\" height=\"297\" src=\"https:\/\/thedataprocessblog.com\/wp-content\/uploads\/2024\/04\/image-1-1024x297.png\" alt=\"\" class=\"wp-image-106\" srcset=\"https:\/\/thedataprocessblog.com\/wp-content\/uploads\/2024\/04\/image-1-1024x297.png 1024w, https:\/\/thedataprocessblog.com\/wp-content\/uploads\/2024\/04\/image-1-300x87.png 300w, https:\/\/thedataprocessblog.com\/wp-content\/uploads\/2024\/04\/image-1-768x222.png 768w, https:\/\/thedataprocessblog.com\/wp-content\/uploads\/2024\/04\/image-1-1536x445.png 1536w, https:\/\/thedataprocessblog.com\/wp-content\/uploads\/2024\/04\/image-1-2048x593.png 2048w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">BOW on Surfin\u2019 Bird (https:\/\/openclassrooms.com\/en\/courses\/6532301-introduction-to-natural-language-processing\/8081284-apply-a-simple-bag-of-words-approach)<\/figcaption><\/figure>\n\n\n\n<p>Uma caracter\u00edstica dessa representa\u00e7\u00e3o textual \u00e9 que a matriz resultante \u00e9 extremamente esparsa (palavra muito usada no contexto de aprendizado de m\u00e1quina, nesse caso indica que existem muitos &#8220;0&#8221; na matriz). Pode-se imaginar que para contemplar a maior parte do vocabul\u00e1rio de uma l\u00edngua, para que o modelo seja satisfat\u00f3rio, seria necess\u00e1rio muito mais colunas do que as representadas, sendo uma matriz de muitos &#8220;0&#8221; e apenas algumas colunas preenchidas com algum n\u00famero. Como \u00e9 de se imaginar, o &#8220;desperd\u00edcio&#8221; computacional aqui \u00e9 enorme, o portugu\u00eas \u00e9 uma l\u00edngua com aproximadamente 370 mil palavras, imagine ter uma matriz de 370 mil (!) colunas para realizar os c\u00e1lculos, e a maioria disso serem multiplica\u00e7\u00f5es por 0. Outra informa\u00e7\u00e3o que \u00e9 perdida aqui \u00e9 a posi\u00e7\u00e3o das palavras, algo que \u00e9 extremamente importante para a interpreta\u00e7\u00e3o de um texto. Pense nas seguintes frases: &#8220;Orlando \u00e9 pai de Leandro&#8221; \u00e9 completamente diferente de &#8220;Leandro \u00e9 pai de Orlando&#8221; e as frases seriam representadas da mesma forma.<\/p>\n\n\n\n<p>Da\u00ed pode surgir uma outra d\u00favida: por que n\u00e3o associar um identificador a cada palavra e ter uma matriz em que os valores s\u00e3o o \u00edndice (ou identificador de cada palavra) e as colunas serem a posi\u00e7\u00e3o de cada palavra no texto, por exemplo? Pela natureza de redes neurais (e da maioria das t\u00e9cnicas de aprendizado de m\u00e1quina) as <em>features<\/em>, no exemplo acima as colunas, s\u00e3o sempre vari\u00e1veis quantitativas. Em outras palavras, se eu digo que a palavra &#8220;eu&#8221; tem o identificador 1 e a palavra &#8220;voc\u00ea&#8221; tem o identificador 2 isso n\u00e3o significa que &#8220;voc\u00ea&#8221; \u00e9 maior que &#8220;eu&#8221;, pois apesar de 1 &lt; 2, esses n\u00fameros s\u00e3o apenas identificadores, por\u00e9m, um modelo &#8220;entenderia&#8221; que isso seria uma grandeza quantitativa, gerando uma confus\u00e3o enorme e sendo imposs\u00edvel chegar em um resultado satisfat\u00f3rio para aplica\u00e7\u00f5es reais.<\/p>\n\n\n\n<h3>Palavras como vetores<\/h3>\n\n\n\n<p>Para resolver os problemas citados acima, algumas alternativas foram propostas com uma ideia principal em mente: <strong>palavras que aparecem juntas t\u00eam significados semelhantes e contextos semelhantes<\/strong>. A ideia aqui \u00e9 que palavras podem ser representadas de acordo com <em>n<\/em> caracter\u00edsticas arbitr\u00e1rias. Para ilustrar essa ideia, temos o seguinte exemplo: a palavra &#8220;des\u00e1gio&#8221; e a palavra &#8220;juros&#8221; s\u00e3o ambas palavras bastante utilizadas em contextos de textos financeiros, portanto, poder\u00edamos definir uma grandeza quantitativa que seria o &#8220;financeir\u00eas&#8221;, ou seja, o quanto uma palavra \u00e9 utilizada no contexto de textos financeiros, e teria seu dom\u00ednio entre 0 e 1, quanto mais pr\u00f3ximo de 1, mais essa palavra \u00e9 utilizada nesses contextos. As duas palavras citadas certamente estariam pr\u00f3ximas de 1, o que indica que se cri\u00e1ssemos <em>n <\/em>grandezas, poder\u00edamos classificar todas as palavras do vocabul\u00e1rio e palavras semelhantes teriam valores semelhantes para essas grandezas.<\/p>\n\n\n\n<p>Nessa linha de pensamento surgem ent\u00e3o algor\u00edtmos como o GloVe: Global Vectors for Word Representation, que representam palavras em <em>n <\/em>dimens\u00f5es no espa\u00e7o. Essas dimens\u00f5es n\u00e3o tem nenhum significado que possa ser interpretado facilmente por n\u00f3s seres humanos, como o &#8220;financeir\u00eas&#8221;, mas para os modelos esses significados existem.<\/p>\n\n\n\n<p>Essa ent\u00e3o \u00e9 a primeira etapa de um <em>Transformer<\/em> e de grande import\u00e2ncia! Nos vemos na pr\u00f3xima etapa, a de <em>positional encoding.<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Para entender como um Transformer funciona, vamos dissecar o diagrama abaixo que mostra todas as etapas do processo. Input embeddings Quando falamos no uso de redes neurais e mais amplamente t\u00e9cnicas de aprendizado de m\u00e1quina trabalhamos exclusivamente com n\u00fameros. O que quero dizer com isso \u00e9 que todo tipo de dado n\u00e3o estruturado, ou at\u00e9 &hellip; <a href=\"https:\/\/thedataprocessblog.com\/?p=109&#038;lang=pt\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">Por que os transformers mudaram tudo: Input embeddings<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[9],"tags":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/thedataprocessblog.com\/index.php?rest_route=\/wp\/v2\/posts\/109"}],"collection":[{"href":"https:\/\/thedataprocessblog.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/thedataprocessblog.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/thedataprocessblog.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/thedataprocessblog.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=109"}],"version-history":[{"count":1,"href":"https:\/\/thedataprocessblog.com\/index.php?rest_route=\/wp\/v2\/posts\/109\/revisions"}],"predecessor-version":[{"id":110,"href":"https:\/\/thedataprocessblog.com\/index.php?rest_route=\/wp\/v2\/posts\/109\/revisions\/110"}],"wp:attachment":[{"href":"https:\/\/thedataprocessblog.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=109"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/thedataprocessblog.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=109"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/thedataprocessblog.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=109"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}