📱

Get Our Mobile App

Take your business learning on the go!

Download on the App StoreGet it on Google Play

LangExtract - Google's New Library for NLP Tasks

Sam Witteveen20:02

Transcription

Certo, então neste vídeo quero abordar o Lang Extract, uma nova biblioteca que surgiu do Google para nos ajudar a basicamente realizar muitas tarefas padrão de PNL. E então vou falar sobre o que eles lançaram e também vamos dar uma olhada no código. Mas antes de chegarmos a isso, quero falar sobre uma tendência interessante que tenho observado de como as pessoas estão fazendo a PNL padrão.

Então, há um monte de tarefas padrão de PNL que não são IA generativa ou nem mesmo usos generativos de LLMs, etc. Estou falando de coisas simples como classificação de texto, ser capaz de fazer coisas como análise de sentimento, ser capaz de dizer se um pedaço de texto pertence a uma classe ou a um grupo em oposição a outro, e também ser capaz de fazer tarefas como extração de entidades nomeadas, desambiguação, um monte dessas tarefas de processamento de linguagem natural tradicionais.

E por muito tempo, muitas dessas tarefas foram feitas com modelos BERT. Então o modelo BERT surgiu no final de 2018. Este artigo é, na verdade, uma versão atualizada dele que saiu mais tarde, em 2019. Mas o modelo BERT, basicamente, se voltarmos ao que muitas pessoas considerariam história antiga ao falar sobre modelos de linguagem e transformadores, o modelo BERT é um tipo de modelo muito diferente do que temos agora.

Então, a maioria das pessoas fala sobre a arquitetura do transformador e foi isso que foi inventado em 2017 e surgiu do Google. Mas, obviamente, não muito depois disso, as pessoas começaram a analisar, ok, essa arquitetura poderia ser dividida? E o transformador original continha duas partes principais: o modelo codificador e o modelo decodificador.

Então, os modelos decodificadores são o que conhecemos como modelos GPT e muitos dos modelos de linguagem abertos. Estes mudaram agora porque passaram para modelos de mistura de especialistas, mas muitos dos fundamentos ainda são os mesmos com eles. A parte codificadora do transformador foi usada para o modelo BERT. E o modelo BERT foi muito útil para realizar muitas dessas tarefas padrão.

Então, assim como os LLMs padrão de hoje, eles fazem o pré-treinamento um pouco diferente da simples previsão do próximo token, como vemos na maioria dos LLMs atualmente. Eles estão realmente fazendo coisas como preencher a lacuna, prever se uma frase seguiu semanticamente outra frase, esse tipo de coisa. Mas o ponto chave aqui era que esses modelos BERT eram realmente bons para o ajuste fino para tarefas de PNL muito específicas.

Então, se voltarmos ainda mais cedo do que os modelos BERT, as pessoas costumavam criar arquiteturas únicas para diferentes tipos de tarefas de PNL. E por volta dessa época, as pessoas começaram a pensar se poderíamos ter um tipo de modelo que fizesse tudo. E quando foi lançado, o modelo BERT era, na verdade, isso. E permitiu que as pessoas basicamente ajustassem modelos para diferentes coisas como sentimento, para classificação, e também fizessem coisas em nível de token. Embora quando este modelo foi lançado, a janela de contexto era de apenas cerca de 512 tokens. Então é bem pequeno, mas era muito maior do que o que existia com coisas como LSTMs e coisas assim antes.

Então, por muito tempo, essas foram as formas padrão de realizar tarefas tradicionais de processamento de linguagem natural. Agora as pessoas acabaram usando diferentes versões desse tipo de coisa, onde usariam algo como um BERT destilado. Então era muito pequeno. E, curiosamente, no final do ano passado, vimos a introdução do BERT moderno. E na época, achei isso realmente interessante. Esses são modelos bem pequenos em comparação com os LLMs de hoje. E, de fato, até mesmo coisas como o modelo base BERT original tinha apenas cerca de 110 milhões de parâmetros. Esses são modelos minúsculos. Os destilados eram, você sabe, muito menores do que isso.

E por muito tempo, as pessoas estavam usando esses modelos em produção para fazer várias coisas como extrair nomes, extrair entidades, fazer coisas como análise de sentimento, fazer coisas como classificação de texto e eles funcionaram muito bem. E quando este BERT moderno foi lançado, eu o experimentei e pensei, ok, isso é realmente bom. Isso vai ser algo grande. Mas então, nos últimos, digamos, seis meses, comecei a ver um padrão totalmente novo surgir: muitas grandes empresas simplesmente não estão mais usando esses modelos porque estão descobrindo que podem obter os mesmos resultados simplesmente envolvendo o texto em um prompt e, em seguida, dando-o a um GPT 40 Mini ou a um Gemini Flash ou a um modelo, algo assim.

E de muitas maneiras, embora isso seja um exagero para o que as pessoas realmente precisam, acontece que está realmente começando a ficar mais barato, o fato de executar esses modelos e, mais importante, ter coisas como ter pessoas de plantão para que, se um desses modelos cair, eles tenham pessoas que possam entrar automaticamente e consertar o sistema. Acontece que isso é muito mais eficiente para realmente usar APIs e LLM como serviço para realizar essas tarefas de processamento de linguagem natural.

E é isso que nos traz ao Lang Extract. Então, Lang Extract é uma biblioteca feita pelo Google especificamente para fazer esses tipos de tarefas com o Gemini. Então, a ideia é que, se você tiver uma quantidade muito grande de texto e quiser ser capaz de percorrê-lo e extrair essas coisas, você queira ser capaz de dar alguns exemplos do que você quer. Você quer que ele seja capaz de entrar lá e obter as entidades, etc. E de muitas maneiras, mesmo que esses modelos tenham melhorado, você quer fazer algum tipo de verificação para realmente ter certeza de que essas coisas estão de fato no texto que você está passando e não são apenas alucinações ou erros do próprio modelo.

Então, para o que o Lang Extract é realmente construído são essas tarefas de extração de informações de texto que você já possui. Então você pode ver aqui que o primeiro é basicamente o aterramento preciso da fonte. Então, isso são coisas como extrair as entidades, etc. E a ideia aqui é que ele não apenas vai te devolver isso, mas vai te dar onde eles realmente estão no texto e permitir que você faça verificações para ver se eles realmente estão lá.

E é muito engraçado que a forma como eles estão mostrando o texto aqui é, na verdade, muito reminiscente ou semelhante a uma ferramenta que existe há muito tempo e que as pessoas usam para rotular dados para treinar seus próprios modelos pequenos para fazer muitos desses tipos de tarefas. Então, apenas uma rápida menção, este é o Prodigy de uma empresa chamada Explosion AI, que faz o spaCy, ainda uma das melhores bibliotecas em produção para fazer esses tipos de tarefas com modelos muito pequenos e permitindo que você basicamente personalize e construa seus próprios pipelines, etc.

Mas você pode ver que, à medida que as pessoas estão começando a fazer isso cada vez mais com esses grandes modelos, com coisas como o Gemini Flashlight se tornando tão barato, etc., os clientes querem uma maneira de fazer isso facilmente e de poder juntar tudo, e é basicamente isso que o Lang Extract faz. Então, ele nos permite fazer o aterramento da fonte. Ele nos permite obter saídas estruturadas confiáveis. Você pode realmente dar alguns exemplos como exemplos de poucas tentativas (few-shot examples) e depois dar seu texto, o que veremos no código em um minuto. E foi até configurado para fazer um tipo de extração de informações de contexto longo. Então, se você tem algo com 100.000 palavras e quer passar por isso, isso permite que você faça isso muito rapidamente.

Eles também têm o que eu mostrei antes, a forma de visualizar essas coisas, se você quiser ter alguma maneira de visualizá-lo. E parece que eles o fizeram de forma que não será puramente para a família de modelos Gemini, mas você também pode usá-lo para modelos de código aberto. Meu palpite é que algumas pessoas podem acabar usando coisas como Gemma, como muitos dos modelos chineses interessantes que vimos surgir recentemente.

Então, vamos direto para como isso funciona. Então, eles têm um exemplo no código aqui. É bem simples. Então, você pode ver que basicamente vamos importar este Lang Extract e então podemos dar alguns exemplos de poucas tentativas (few-shot examples). Neste caso, podemos dar-lhe algum texto. Podemos dizer o que esperaríamos que ele encontrasse nesse texto. E então podemos passar um novo texto, fazer com que ele nos dê a saída. Podemos ver que eles estão usando o Gemini 2.5 Pro. Suspeito que isso seja provavelmente um exagero para isso. Você provavelmente conseguiria com o Flash, provavelmente até o Flashlight para muitas das tarefas. Você pode experimentá-los você mesmo, é claro, e ver o que funcionará para você.

E podemos ver que eles também têm algumas coisas interessantes aqui, onde você pode realmente salvar isso e, em seguida, obter a visualização. Então, ele apenas criará um arquivo HTML onde você pode ver a visualização e outras coisas.

Então, o legal desses, em comparação com os modelos BERT, é que nos modelos BERT você teria que coletar um monte de dados. Você teria que treinar um modelo e é aí que coisas como Prodigy e spaCy entram, pois eles podem te ajudar a fazer muito disso. Com isso, podemos definir as coisas muito rapidamente, aqui podemos ver que temos condição, dosagem, frequência, medicação. Ele pode descobrir quais são os nomes dos medicamentos, a dosagem, a frequência e podemos obter isso de volta em formato JSON. Então é muito fácil.

Então, houve um monte de bibliotecas por aí no passado que usaram coisas como modelos Pydantic para conseguir dados estruturados de LLMs que podem fazer muitas dessas coisas. E, de certa forma, você poderia pensar nisso como apenas uma versão mais aprimorada de algo assim.

Então, vamos pular para o código, brincar um pouco com ele, ver o que podemos fazer com isso e experimentá-lo.

Então, acabei de configurar um Colab simples aqui. Você pode executar isso no Colab ou pode executá-lo localmente em sua máquina, etc. É bem fácil de executar. Basicamente, você só precisa fazer um `pip install lang extract`. E então, se você for usar o Gemini, que é o que vou mostrar aqui, você vai querer obter uma chave para algo como o AI Studio. E então nós apenas passamos isso como a chave de API do Lang Extract aqui.

Então, começando com o exemplo deles, você pode ver que você tem um prompt que basicamente define o que você deseja extrair. E isso pode ser N. Pode ser até coisas mais vagas, como mostrarei no próximo exemplo. Você pode ver aqui que eles estão buscando personagens, emoções, relacionamentos na ordem de aparição. Você pode basicamente extrair cada um deles. Não parafraseie ou sobreponha as entidades. Forneça atributos significativos para cada entidade. Agora, meu palpite é que para muitos exemplos diferentes, você poderia brincar bastante com este prompt para obter algo que será realmente útil.

Então, o que você quer fazer é configurar os exemplos de aprendizado few-shot. Então aqui você apenas passa algum texto de exemplo. Então, isso está passando parte do texto de Romeu e Julieta. Está mostrando que as extrações que queremos daqui serão personagem, emoção e relacionamento. Então, personagem, um exemplo disso seria Romeu e então podemos declarar o estado emocional, você sabe que aqui ele está sentindo admiração, certo, nesta linha que ele está dizendo, ok, a emoção vem disso, mas suave, acho que não tenho certeza se concordaria totalmente com isso, mas de qualquer forma, e então o sentimento é um temor gentil, certo, o que, sim, acho que descreve isso muito bem, e então um relacionamento aqui neste ponto, o relacionamento Julieta é o sol, certo? Este é o texto real. E então o tipo de relacionamento lá é uma metáfora. Então isso nos dá nossos exemplos few-shot.

Nós então basicamente passamos o texto que realmente queremos passar. Neste caso, é apenas uma quantidade bem pequena de texto. E se trapacearmos um pouco, pois já definimos Romeu e Julieta em nossos dados de exemplo, mas é claro que, se você pudesse fazer isso, faria muito sentido. Vou mostrar onde você não precisa fazer isso.

Então, vamos ver. Então, a parte final é apenas executá-lo. Então, quando o executamos, basicamente fazemos `lx.extract`. Passamos o texto de entrada, aquele do qual queremos obter as extrações. Passamos nosso prompt. Passamos nosso aprendizado few-shot e então passamos o modelo que vamos usar. Então eles usaram o modelo 2.5 Pro. E você pode ver que, de fato, eles obtêm coisas como a extração da personagem Lady Julieta aqui. E tem então o local real de onde isso está. Tem um estado emocional. Tem tudo isso e eles não estão ordenados aqui. De qualquer forma, uma das coisas que você vai querer fazer é ordená-los ou colocá-los em uma ordem mais útil, talvez.

Certo. Então, o que eu fiz foi pegar um artigo, que é este artigo que está no TechCrunch, e é um artigo bastante longo também, falando sobre um monte de coisas sobre OpenAI e novos modelos, e menciona muitas pessoas diferentes. Menciona diferentes modelos. Menciona diferentes produtos e empresas também. Então, basicamente, eu apenas extraí o texto de lá. Poderíamos ter usado apenas um scraper para obter isso. E o que vou mostrar aqui é fazer a mesma coisa que o primeiro deles, exceto que vamos brincar um pouco com isso.

Então, aqui queremos extrair nomes de pessoas, modelos de IA, produtos e nomes de empresas na ordem de aparição. Use o texto exato para as extrações. Forneça entidades relacionadas significativas para cada entidade. Por exemplo, se disser Sam Altman, gostaríamos que ele fosse capaz de associar Sam Altman à OpenAI e talvez até a OpenAI a Sam Altman ou a um de seus produtos, esse tipo de coisa.

Certo. Então, o texto de exemplo que estou dando é que estou deliberadamente dando algo no mesmo tipo de mundo, mas não o que está realmente naquele artigo. Certo.

Então, quando olhamos para as extrações, podemos ver que a primeira será o nome da pessoa. Então, neste caso, é David Ha e então a empresa relacionada a ele é Sakana AI e então o nome da empresa é Sakana AI, a relação é empregado David Ha e então o nome da empresa tipo AI, o atributo aqui é empregado. Acabei de corrigir a grafia para David Ha e então temos o modelo de IA WM1 novamente, empresa Sakana AI e então o produto AI Scientist, empresa Sakana AI. Eu poderia ter brincado um pouco mais com isso e talvez até adicionado alguns se quisesse. Certo? Não estou limitado apenas a N padrão aqui. Como você pode ver em modelo de IA e produto.

Certo. O texto que vou inserir é aquele artigo do TechCrunch e vamos apenas passá-lo. Vou usar apenas o Gemini 2.5 Flash aqui. Ok. Vou executá-lo. Você pode ver o tempo que levou. Podemos ver o número de blocos, etc. Quantos caracteres processamos e podemos olhar a saída aqui.

Então, podemos ver que, em primeiro lugar, era o nome da pessoa Hunter Lightman e é bem difícil de ler assim. Então, o que podemos fazer é apenas vir aqui e imprimi-los. Então, se quisermos basicamente apenas obter os nomes das pessoas, você pode ver, ok, aqui eu estou basicamente imprimindo o nome da pessoa. Então, essa é a classe, a classe de extração. Agora, tenho o texto de extração sendo Hunter Lightman, certo? É isso que realmente nos importa. E então temos os atributos. Então, a empresa à qual ele está relacionado é a OpenAI. E então temos os caracteres onde poderíamos realmente pesquisar isso. Então, se quiséssemos verificar isso, poderíamos passar por cada um deles.

Certo. Segundo na lista. Sam Altman, OpenAI. Isso faz sentido. Mark Zuckerberg. Meta Shang Tia Xiao. Meta Super Intelligence. Então, é interessante que ele tenha classificado meta e meta e super inteligência como duas coisas separadas, o que eu acho que faz sentido dessa forma. Temos então outro nome. Temos então uma repetição como a primeira, mas onde eles estão usando apenas o sobrenome dele. E então temos algumas outras pessoas como Ilya Sutskever. Ok, é atribuído a ele à OpenAI. Meu palpite é que isso se deve ao tempo dele na OpenAI. É a isso que o artigo se refere. Mark Chen, chefe de pesquisa na OpenAI, então isso faz sentido. Certo, temos um bom conjunto de nomes saindo de lá. E podemos ver que temos duplicatas neles também.

Então, o que você pode fazer é algo assim. Então, para a menção da empresa, primeiro vamos apenas passar e obter as empresas únicas, porque se quiséssemos usar apenas as únicas, podemos fazer isso. Também vou imprimi-los para que possamos vê-los à medida que avançam. Com certeza, temos muitas menções à OpenAI, muitas menções a algumas outras empresas, e então um número de empresas mencionadas apenas uma vez lá. Mas podemos ver Google, OpenAI, filantrópico, tudo meta, tudo mencionado muitas vezes. Mas se usarmos esse único, podemos basicamente obter uma lista de todas as empresas que são realmente mencionadas lá.

Então, podemos ver aqui que provavelmente faz sentido que ele tenha associado Ilya Sutskever à OpenAI porque não estou vendo a empresa dele mencionada aqui.

Agora, finalmente, para terminar, podemos olhar os modelos de IA e os produtos. Podemos ver que, ok, ele esquece que o ChatGPT é um produto aqui, mas então também se refere ao ChatGPT como um modelo de IA. É interessante porque é isso que muitos humanos fazem. Então seria interessante analisar isso. Podemos ver, ok, modelo de IA 01, AlphaGo, série GPT, Qstar, Strawberry, todas essas coisas fazem sentido para modelos de IA, produto 01, no entanto, então meu palpite é que ele está tirando isso do contexto de quando as pessoas se referem a ele como um produto versus como um modelo de IA, e este é um bom exemplo de onde eu provavelmente fui um pouco vago em ter ambos. Talvez eu devesse ter dado mais direção no prompt se quisesse fazer esse tipo de coisa, podemos ver que ele fez um bom trabalho para alguns deles. Como Claude Code é um produto, Cursor é um produto, CodeX, eu diria que provavelmente é mais um produto do que um modelo. Comet é um produto. Então, eu diria que ele se saiu bem com a maioria das classificações reais para produto e modelo de IA, mas isso é certamente algo que poderíamos melhorar retrabalhando o prompt e brincando com isso.

A outra coisa também é que, nesta fase, eu passaria por ele e o testaria com o Flashlight e veria, ok, isso funciona? E então eu o testaria talvez com o Flash 2.0, e veria, ok, com versões mais antigas do modelo que são mais baratas, isso é uma boa troca? Mas você pode ver que, ao configurar isso muito rapidamente, poderíamos ter algo que abrangesse tudo o que raspamos, extraísse todas as ENR (Entidades Nomeadas Reconhecidas) e armazenasse isso como metadados em um sistema RAG ou como metadados em qualquer tipo de análise que quiséssemos fazer.

Então isso se torna realmente útil se você estiver fazendo algo onde está passando por notícias. Se você estiver tentando extrair informações financeiras relacionadas a empresas ou algo assim, você pode até mesmo colocar informações sobre algumas dessas coisas no prompt real.

Então é isso que permite que você faça isso em tempo real. E se você realmente ainda quisesse treinar um dos outros modelos, você pode usar algo assim para criar seus dados de treinamento para que você possa então usar talvez o 2.5 Pro, pagar o custo caro aqui, e então usar isso como dados de treinamento para fazer um modelo muito menor e mais rápido, se você quisesse fazer isso.

De qualquer forma, no geral, acho que o Lang Extract é uma pequena biblioteca legal que eles lançaram. É certamente algo que as pessoas podem usar para exemplos do mundo real e colocar em produção muito facilmente.

Certo, como sempre, se tiver alguma dúvida, por favor, coloque-a nos comentários abaixo. Se você achou o vídeo útil, por favor, clique em curtir e se inscreva, e falarei com você no próximo vídeo. Até mais.