Modelos de linguagem poderosos + Scikit-learn = Scikit-LLM. Execute tarefas de análise de texto em qualquer lugar com a ajuda desta biblioteca.
Scikit-LLM é um pacote Python que ajuda a integrar grandes modelos de linguagem (LLMs) na estrutura scikit-learn. Ajuda na realização de tarefas de análise de texto. Se você estiver familiarizado com o scikit-learn, será mais fácil trabalhar com o Scikit-LLM.
É importante observar que o Scikit-LLM não substitui o scikit-learn. scikit-learn é uma biblioteca de aprendizado de máquina de uso geral, mas o Scikit-LLM foi projetado especificamente para tarefas de análise de texto.
Primeiros passos com Scikit-LLM
Para começar Scikit-LLM, você precisará instalar a biblioteca e configurar sua chave de API. Para instalar a biblioteca, abra seu IDE e criar 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
Este comando instalará o Scikit-LLM e suas dependências necessárias.
Para configurar sua chave de API, você precisa adquirir uma de seu provedor LLM. Para obter a chave da API OpenAI, siga estas etapas:
Prossiga para o Página da API OpenAI. Em seguida, clique no seu perfil localizado no canto superior direito da janela. Selecione Ver chaves de API. Isto o levará ao Chaves de API página.
No Chaves de API página, clique no Crie uma nova chave secreta botão.
Nomeie sua chave de API e clique no botão Criar chave secreta botão para gerar a chave. Após a geração, você precisa copiar a chave e armazená-la em um local seguro, pois o OpenAI não exibirá a chave novamente. Se você perdê-lo, precisará gerar um novo.
O código-fonte completo está disponível em um Repositório GitHub.
Agora que você tem sua chave API, abra seu IDE e importe SKLLMConfig classe da biblioteca Scikit-LLM. Esta classe permite definir opções de configuração relacionadas ao uso de grandes modelos de linguagem.
from skllm.config import SKLLMConfig
Esta classe espera que você defina sua chave de API OpenAI e detalhes da organização.
# 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 iguais. ID da organização é um identificador exclusivo da sua organização. Para obter o ID da sua organização, vá para o Organização OpenAI página de configurações e copie-a. Agora você estabeleceu uma conexão entre o Scikit-LLM e o modelo de linguagem grande.
Scikit-LLM exige que você tenha um plano pré-pago. Isso ocorre porque a conta OpenAI de teste gratuito tem um limite de taxa de três solicitações por minuto, o que não é suficiente para o Scikit-LLM.
Tentar usar a conta de teste gratuita causará um erro semelhante ao abaixo durante a análise do texto.
Para saber mais sobre limites de taxa. Prossiga para o Página de limites de taxa OpenAI.
O provedor LLM não está limitado apenas ao OpenAI. Você também pode usar outros provedores de LLM.
Importando as bibliotecas necessárias e carregando o conjunto de dados
Importe pandas que você usará para carregar o conjunto de dados. Além disso, do Scikit-LLM e do scikit-learn, importe as classes necessárias.
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
Em seguida, carregue o conjunto de dados no qual deseja realizar a análise de texto. Este código usa o conjunto de dados de filmes IMDB. No entanto, você pode ajustá-lo para usar seu próprio conjunto de dados.
# Load your dataset
data = pd.read_csv("imdb_movies_dataset.csv")
# Extract the first 100 rows
data = data.head(100)
Usar apenas as primeiras 100 linhas do conjunto de dados não é obrigatório. Você pode usar todo o seu conjunto de dados.
Em seguida, extraia os recursos e as colunas de rótulos. Em seguida, divida seu conjunto de dados em conjuntos de treinamento e teste.
# 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)
O Gênero coluna contém os rótulos que você deseja prever.
Classificação de texto Zero-Shot com Scikit-LLM
A classificação de texto zero-shot é um recurso oferecido por modelos de linguagem grandes. Classifica o texto em categorias predefinidas sem a necessidade de treinamento explícito em dados rotulados. Esse recurso é muito útil ao lidar com tarefas nas quais você precisa classificar o texto em categorias que não previu durante o treinamento do modelo.
Para realizar a classificação de texto zero-shot usando Scikit-LLM, use o ZeroShotGPTClassificador aula.
# 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))
A saída é a seguinte:
O relatório de classificação fornece métricas para cada rótulo que o modelo está tentando prever.
Classificação de texto multi-rótulo Zero-Shot com Scikit-LLM
Em alguns cenários, um único texto pode pertencer a múltiplas categorias simultaneamente. Os modelos de classificação tradicionais lutam contra isso. O Scikit-LLM, por outro lado, torna essa classificação possível. A classificação de texto zero-shot com vários rótulos é crucial na atribuição de vários rótulos descritivos a uma única amostra de texto.
Usar MultiLabelZeroShotGPTClassificador para prever quais rótulos são apropriados para cada amostra 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))
No código acima, você define os rótulos candidatos aos quais seu texto pode pertencer.
A saída é mostrada abaixo:
Este relatório ajuda você a entender o desempenho do seu modelo para cada rótulo na classificação de vários rótulos.
Vetorização de texto com Scikit-LLM
Na vetorização de texto, os dados textuais são convertidos em um formato numérico que os modelos de aprendizado de máquina podem compreender. Scikit-LLM oferece o GPTVectorizer para isso. Ele permite transformar texto em vetores de dimensão fixa usando modelos GPT.
Você pode conseguir isso usando o termo Frequency-Inverse Document Frequency.
# 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á a saída:
A saída representa os recursos vetorizados do TF-IDF para as primeiras 5 amostras do conjunto de dados.
Resumo de texto com Scikit-LLM
O resumo de texto ajuda a condensar um trecho de texto, preservando suas informações mais críticas. Scikit-LLM oferece o GPTSummarizer, que usa os modelos GPT para gerar resumos concisos de texto.
# Perform Text Summarization
summarizer = GPTSummarizer(openai_model="gpt-3.5-turbo", max_words=15)
summaries = summarizer.fit_transform(X_test)
print(summaries)
A saída é a seguinte:
O acima é um resumo dos dados de teste.
Crie aplicativos com base em LLMs
Scikit-LLM abre um mundo de possibilidades para análise de texto com grandes modelos de linguagem. Compreender a tecnologia por trás de grandes modelos de linguagem é crucial. Isso o ajudará a compreender seus pontos fortes e fracos que podem ajudá-lo a construir aplicativos eficientes com base nessa tecnologia de ponta.