训练一个文本标签

训练一个文本标签

本教程系列将涵盖txtai的主要用例,这是一个 AI 驱动的语义搜索平台。该系列的每章都有相关代码,可也可以在colab 中使用。
colab 地址

Hugging Face Model Hub 具有广泛的,可以处理很多任务的机型。虽然这些模型表现良好,但在使用特定于任务的数据对模型进行微调时,通常会发现最佳性能。
Hugging Face 提供了许多功能齐全的示例,可用于帮助训练特定于任务的模型。从命令行构建模型时,这些脚本是一种很好的入门方式。

txtai 提供了一个训练管道,可用于使用 Transformers Trainer 框架以编程方式训练新模型。训练管道支持以下内容:

  • 无需输出目录即可构建瞬态模型
  • 从 Hugging Face 数据集、pandas DataFrames 和 dicts 列表加载训练数据
  • 文本序列分类任务(单/多标签分类和回归)包括所有 GLUE 任务
  • 所有训练参数

本文展示了如何使用 txtai 训练/微调新模型的示例。

安装依赖

安装txtai和所有依赖项。

pip install txtai

Train a model

让我们开始吧!以下示例使用 sst2 数据集微调一个小型 Bert 模型。

训练器管道基本上是一个单线,可以微调任何可用的文本分类/回归模型(本地和/或来自 HF Hub)。

from datasets import load_dataset

from txtai.pipeline import HFTrainer

trainer = HFTrainer()

# Hugging Face dataset
ds = load_dataset("glue", "sst2")
model, tokenizer = trainer("google/bert_uncased_L-2_H-128_A-2", ds["train"], columns=("sentence", "label"))

默认训练器管道功能不会将任何日志、检查点或模型存储到磁盘。培训师可以采用任何标准 TrainingArguments 来启用持久模型。

下一部分使用新构建的模型创建标签管道,并针对 sst2 验证集运行模型。

from txtai.pipeline import Labels

labels = Labels((model, tokenizer), dynamic=False)

# Determine accuracy on validation set
results = [row["label"] == labels(row["sentence"])[0][0] for row in ds["validation"]]
sum(results) / len(ds["validation"])

--------------------------------------------------------输出--------------------------------------------------------

0.8188073394495413

81.88% 的准确率——对于一个很小的 ​​Bert 模型来说还不错。

Train a model with Lists

如前所述,训练器管道支持 Hugging Face 数据集、pandas DataFrames 和 dicts 列表。下面的示例使用列表训练模型。

data = [{"text": "This is a test sentence", "label": 0}, {"text": "This is not a test", "label": 1}]

model, tokenizer = trainer("google/bert_uncased_L-2_H-128_A-2", data)

使用 DataFrames 训练模型

下一部分使用存储在 Pandas DataFrame 中的数据构建一个新模型。

import pandas as pd

df = pd.DataFrame(data)

model, tokenizer = trainer("google/bert_uncased_L-2_H-128_A-2", data)

回归训练模型

之前的模型是分类任务。下面的模型训练一个句子相似性模型,每个句子对的回归输出在 0(不同)和 1(相似)之间。

ds = load_dataset("glue", "stsb")
model, tokenizer = trainer("google/bert_uncased_L-2_H-128_A-2", ds["train"], columns=("sentence1", "sentence2", "label"))
labels = Labels((model, tokenizer), dynamic=False)
labels([("Sailing to the arctic", "Dogs and cats don't get along"), 
        ("Walking down the road", "Walking down the street")])
[[(0, 0.551963746547699)], [(0, 0.9760823845863342)]]

参考

https://dev.to/neuml/tutorial-series-on-txtai-ibg

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,下面是使用GloVe预训练模型进行文本分类的一般步骤: 1. 下载GloVe预训练模型 您可以从官网下载GloVe预训练模型,也可以在GitHub上找到已经训练好的模型。模型的训练数据集包括维基百科、Common Crawl等公共数据集。在这里,我们以维基百科的词向量为例,下载地址为:http://nlp.stanford.edu/data/glove.6B.zip。 2. 加载GloVe预训练模型 使用Python的NumPy库,可以方便地加载GloVe预训练模型。代码如下: ```python import numpy as np def load_glove_embeddings(glove_file_path): embeddings_index = {} with open(glove_file_path, encoding='utf-8') as f: for line in f: values = line.split() word = values[0] coefs = np.asarray(values[1:], dtype='float32') embeddings_index[word] = coefs return embeddings_index ``` 其中,`glove_file_path`是GloVe预训练模型文件的路径。函数返回一个字典,其中键为单词,值为对应的词向量。 3. 加载文本数据集 您可以使用Python的pandas库,将CSV或TSV格式的文本数据集加载为数据帧。例如: ```python import pandas as pd data = pd.read_csv('data.csv') ``` 其中,`data.csv`是文本数据集的文件名。数据集应该至少包含一个文本列和一个标签列。 4. 准备训练数据 将文本数据集中的单词转换为GloVe预训练模型中的词向量。可以使用以下代码: ```python def prepare_data(data, embeddings_index, max_words, max_seq_length): tokenizer = Tokenizer(num_words=max_words) tokenizer.fit_on_texts(data['text']) sequences = tokenizer.texts_to_sequences(data['text']) word_index = tokenizer.word_index data = pad_sequences(sequences, maxlen=max_seq_length) num_words = min(max_words, len(word_index)) + 1 embedding_matrix = np.zeros((num_words, 300)) for word, i in word_index.items(): if i > max_words: continue embedding_vector = embeddings_index.get(word) if embedding_vector is not None: embedding_matrix[i] = embedding_vector labels = to_categorical(data['label']) return data, labels, embedding_matrix ``` 其中,`data`是数据集,`embeddings_index`是GloVe预训练模型中的词向量,`max_words`是词汇表中单词的最大数量,`max_seq_length`是每个文本序列的最大长度。函数返回处理好的数据和标签。 5. 构建模型 使用Keras构建深度神经网络模型。可以使用以下代码: ```python from keras.models import Sequential from keras.layers import Embedding, LSTM, Dense def build_model(embedding_matrix, max_seq_length): model = Sequential() model.add(Embedding(embedding_matrix.shape[0], embedding_matrix.shape[1], weights=[embedding_matrix], input_length=max_seq_length, trainable=False)) model.add(LSTM(128, dropout=0.2, recurrent_dropout=0.2)) model.add(Dense(2, activation='softmax')) model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy']) return model ``` 其中,`embedding_matrix`是处理好的词向量矩阵,`max_seq_length`是每个文本序列的最大长度。在这个例子中,我们使用一个LSTM层来处理序列数据,然后使用一个Dense层来输出分类结果。 6. 训练模型并评估 使用准备好的数据和构建好的模型进行训练。可以使用以下代码: ```python history = model.fit(X_train, y_train, epochs=10, batch_size=64, validation_split=0.2) score = model.evaluate(X_test, y_test, verbose=0) print('Test loss:', score[0]) print('Test accuracy:', score[1]) ``` 其中,`X_train`和`y_train`是训练数据和标签,`X_test`和`y_test`是测试数据和标签。在这个例子中,我们使用了10个epoch来训练模型,并在测试集上评估了模型的性能。 这些是使用GloVe预训练模型进行文本分类的一般步骤。您可以根据您的数据集和任务特点进行适当的修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

发呆的比目鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值