Contents

Como usar o Scikit-LLM para análise de texto com modelos de linguagem grandes

Scikit-LLM é um pacote Python que ajuda a integrar grandes modelos de linguagem (LLMs) na estrutura do scikit-learn. Ajuda na realização de tarefas de análise de texto. Se estiver familiarizado com o scikit-learn, ser-lhe-á mais fácil trabalhar com o Scikit-LLM.

Deve reconhecer-se que o Scikit-LLM e o scikit-learn têm objectivos distintos, sendo o primeiro adaptado a tarefas de análise de texto, enquanto o segundo serve como uma biblioteca de aprendizagem automática de uso geral mais abrangente.

Introdução ao Scikit-LLM

Para começar a usar o Scikit-LLM , você precisará instalar a biblioteca e configurar sua chave de API. Para instalar a biblioteca, abra o IDE e crie um novo ambiente virtual. Isso ajudará a evitar possíveis conflitos de versão da biblioteca. Em seguida, execute o seguinte comando no terminal.

 pip install scikit-llm

A execução desta instrução facilitará a instalação do Scikit-LLM, juntamente com todos os pré-requisitos necessários.

Para configurar a sua chave de API para o seu fornecedor de serviços Large Language Model (LLM), é necessário obter uma. Para quem procura uma chave de API OpenAI, siga o seguinte processo:

Aceda à página da API do OpenAI . Em seguida, clique no seu perfil localizado no canto superior direito da janela. Seleccione Ver chaves da API . Isto levá-lo-á para a página de chaves da API.

/pt/images/introduction-to-langchain-api-key-page.jpeg

Para aceder à página de chaves da API e criar uma nova chave secreta, siga estes passos de forma sofisticada:1. Navegue até à página Web designada onde as chaves da API são geridas no painel de controlo ou painel de controlo da sua aplicação. Esta pode ser acedida através do menu principal em “Definições” ou “Integrações”. 2. Depois de aceder à página adequada, localize a secção dedicada à gestão das chaves da API. É provável que esteja localizada perto do topo da página ou que seja apresentada como uma opção num menu pendente.3. Nesta secção, procure um botão proeminente denominado “Criar nova chave secreta”, que iniciará o processo de geração de uma nova chave de API. Em alternativa, se esse botão não estiver presente, procure quaisquer outros avisos ou instruções que o possam orientar para

/pt/images/how-to-use-scikit-llm-for-text-analysis-with-large-language-models-api-keys.jpg

Crie uma chave de API clicando no botão “Criar chave secreta” para gerar as credenciais necessárias. É importante que guarde esta informação de forma segura, uma vez que o Open AI não oferece a opção de a recuperar mais tarde. No caso de perder a chave, deve gerar uma nova em seu lugar.

O código-fonte completo pode ser acedido através de um repositórioGitHub, que fornece acesso fácil e capacidades de partilha para os programadores colaborarem em projectos e contribuírem para os esforços de desenvolvimento de software de código aberto.

Depois de obter a sua chave API, navegue para o seu Ambiente de Desenvolvimento Integrado (IDE) preferido e incorpore o módulo SKLLMConfig na biblioteca Scikit-LLM. Esta integração permite a manipulação de parâmetros configuráveis relativos à utilização de modelos linguísticos expansivos.

 from skllm.config import SKLLMConfig

Certifique-se de que forneceu a sua chave Open AI API e as informações organizacionais relevantes para este curso, uma vez que é um pré-requisito para a sua conclusão com êxito.

 # Set your OpenAI API key
SKLLMConfig.set_openai_key("Your API key")
# Set your OpenAI organization
 SKLLMConfig.set_openai_org("Your organization ID") 

O ID da organização e o nome não são os mesmos. O ID da organização é um identificador exclusivo da sua organização. Para obter o ID da organização, vá para a página de definições OpenAI Organization e copie-o. Estabeleceu agora uma ligação entre o Scikit-LLM e o modelo de linguagem grande.

O Scikit-LLM necessita de uma subscrição de um serviço pago, uma vez que a quota limitada imposta pela conta OpenAI gratuita, com a sua restrição de três pedidos por minuto, não é suficiente para um desempenho ótimo com o Scikit-LLM.

A utilização de uma conta de avaliação gratuita pode resultar na ocorrência de um erro comparável à seguinte mensagem quando se tenta efetuar uma análise de texto.

/pt/images/how-to-use-scikit-llm-for-text-analysis-with-large-language-models-error.jpg

Para saber mais sobre limites de taxa. Vá para a página Limites de taxa do OpenAI .

A utilização de uma plataforma LLM vai para além da dependência exclusiva do Open AI; existem fornecedores de serviços LLM alternativos que podem ser considerados para as suas necessidades.

Importar as bibliotecas necessárias e carregar o conjunto de dados

Utilize a biblioteca pandas para aceder e processar o conjunto de dados. Além disso, importe as classes necessárias das bibliotecas Scikit-LLM e scikit-learn .

 import pandas as pd
from skllm import ZeroShotGPTClassifier, MultiLabelZeroShotGPTClassifier
from skllm.preprocessing import GPTSummarizer
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.preprocessing import MultiLabelBinarizer

Para começar, importe e carregue o conjunto de dados que pretende analisar quanto ao conteúdo textual. Neste exemplo, utilizaremos a base de dados de filmes IMDB como referência; no entanto, pode ajustá-la para incorporar o seu conjunto de dados preferido.

 # Load your dataset
data = pd.read_csv("imdb_movies_dataset.csv")
# Extract the first 100 rows
data = data.head(100) 

Tem a opção de utilizar todos os dados do seu conjunto de dados, em vez de ficar limitado apenas às 100 linhas iniciais.

Em seguida, procederemos à extração das colunas de características e de etiquetas do nosso conjunto de dados, dividindo-o depois num conjunto de treino e num conjunto de teste para análise posterior.

 # Extract relevant columns
X = data['Description']
# Assuming 'Genre' contains the labels for classification

y = data['Genre']
 # Split the dataset into train and test sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

A categoria de classificação inclui as designações que se destinam à previsão, o que é denotado pelo termo “Género” neste contexto.

Zero-Shot Text Classification With Scikit-LLM

Os grandes modelos de linguagem possuem a capacidade de classificação de texto zero-shot, o que implica a categorização de dados não rotulados em classes predefinidas sem necessidade de formação prévia em informações rotuladas. Esta abordagem revela-se particularmente vantajosa em situações que envolvem a classificação de textos em categorias indefinidas para além das contempladas durante a fase de desenvolvimento do modelo.

Para executar uma tarefa de classificação de texto zero-shot utilizando o Scikit-LLM, pode utilizar a classe ZeroShotGPTClassifier.

 # Perform Zero-Shot Text Classification
zero_shot_clf = ZeroShotGPTClassifier(openai_model="gpt-3.5-turbo")
zero_shot_clf.fit(X_train, y_train)
zero_shot_predictions = zero_shot_clf.predict(X_test)

# Print Zero-Shot Text Classification Report
print("Zero-Shot Text Classification Report:")
print(classification_report(y_test, zero_shot_predictions)) 

O resultado é o seguinte:

/pt/images/how-to-use-scikit-llm-for-text-analysis-with-large-language-models-zero-shot-classification.jpg

O relatório de classificação oferece medidas quantitativas relativas a cada um dos rótulos que o modelo tenta classificar.

Multi-Label Zero-Shot Text Classification With Scikit-LLM

Em determinadas situações, não é invulgar que um determinado texto se enquadre em mais do que uma categoria ao mesmo tempo. Os métodos de classificação convencionais não estão preparados para lidar com esses casos de forma eficaz. No entanto, através das suas capacidades avançadas, o Scikit-LLM tem demonstrado uma proficiência excecional na abordagem destas complexidades, permitindo a classificação de texto com vários rótulos e sem disparos. Esta abordagem envolve a atribuição de várias etiquetas descritivas a uma única amostra de texto, o que tem um grande significado na captura e categorização precisas de informações em diversos domínios.

Utilizar o MultiLabelZeroShotGPTClassifier para determinar que rótulo ou rótulos são aplicáveis a cada excerto de texto.

 # Perform Multi-Label Zero-Shot Text Classification
# Make sure to provide a list of candidate labels
candidate_labels = ["Action", "Comedy", "Drama", "Horror", "Sci-Fi"]
multi_label_zero_shot_clf = MultiLabelZeroShotGPTClassifier(max_labels=2)
multi_label_zero_shot_clf.fit(X_train, candidate_labels)
multi_label_zero_shot_predictions = multi_label_zero_shot_clf.predict(X_test)

# Convert the labels to binary array format using MultiLabelBinarizer
mlb = MultiLabelBinarizer()
y_test_binary = mlb.fit_transform(y_test)
multi_label_zero_shot_predictions_binary = mlb.transform(multi_label_zero_shot_predictions)

# Print Multi-Label Zero-Shot Text Classification Report
print("Multi-Label Zero-Shot Text Classification Report:")
print(classification_report(y_test_binary, multi_label_zero_shot_predictions_binary)) 

Acima, estabelecemos as designações potenciais que poderiam ser atribuídas ao nosso texto como concorrente.

O resultado é o seguinte:

/pt/images/how-to-use-scikit-llm-for-text-analysis-with-large-language-models-multi-label-classification.jpg

O presente documento serve para iluminar o desempenho do seu modelo em vários rótulos num cenário de classificação com vários rótulos, oferecendo informações valiosas sobre a sua eficácia em relação a cada designação individual.

Vectorização de texto com Scikit-LLM

O Scikit-LLM fornece o GPTVectorizer, que permite a conversão de dados textuais numa forma numérica compreensível por algoritmos de aprendizagem automática através da vectorização de texto.Este processo de transformação envolve a conversão de texto em vectores de dimensão fixa utilizando modelos GPT.

Uma abordagem para conseguir isto é utilizar o método Frequência de termos - Frequência inversa de documentos.

 # Perform Text Vectorization using TF-IDF
tfidf_vectorizer = TfidfVectorizer(max_features=1000)
X_train_tfidf = tfidf_vectorizer.fit_transform(X_train)
X_test_tfidf = tfidf_vectorizer.transform(X_test)

# Print the TF-IDF vectorized features for the first few samples
print("TF-IDF Vectorized Features (First 5 samples):")
print(X_train_tfidf[:5]) # Change to X_test_tfidf if you want to print the test set

Aqui está o resultado:

/pt/images/how-to-use-scikit-llm-for-text-analysis-with-large-language-models-vector-output.jpg

A informação acima mencionada diz respeito à representação transformada das características das cinco instâncias iniciais do conjunto de dados, que é denotada como o resultado da vectorização TF-IDF.

Sumarização de texto com Scikit-LLM

A sumarização de texto é um processo que envolve a compressão de um trabalho escrito, mantendo o seu conteúdo essencial. O GPTSummarizer, disponível através da biblioteca Scikit-LLM, utiliza modelos de linguagem avançados baseados na arquitetura GPT para produzir resumos sucintos de textos.

 # Perform Text Summarization
summarizer = GPTSummarizer(openai_model="gpt-3.5-turbo", max_words=15)
summaries = summarizer.fit_transform(X_test)
print(summaries)

O resultado é o seguinte:

/pt/images/how-to-use-scikit-llm-for-text-analysis-with-large-language-models-summarization.jpg

O que precede serve de resumo dos resultados experimentais.

Construir aplicações com base em LLMs

O Scikit-LLM apresenta um vasto leque de oportunidades para uma análise abrangente do texto utilizando modelos de linguagem avançados. É essencial compreender os fundamentos das bases tecnológicas destes modelos, uma vez que facilita a compreensão das suas potentes capacidades e limitações, que são fundamentais para a construção de soluções de software de elevado desempenho baseadas nesta inovação de ponta.