使用python对transformer库进行预训练的操作步骤

对于测试人员来说,使用python进行语序那脸数据操作太正常不过了,那python语言下使用transformer库进行预训练从哪里开始呢,下面我们就一步一步带大家使用Transformers库(Hugging Face)进行预训练语言模型的应用涉及几个步骤:

1、安装库

包括 transformer库、pytorch库、TensorFlow 库、spacy(用于中文/英文语法分词)

1)安装 transformer:

pip install 'transformers[torch]'

检查是否安装成功:

运行以下命令以检查Transformers 是否已被正确安装。该命令将下载一个预训练模型:

python -c "from transformers import pipeline; print(pipeline('sentiment-analysis')('we love you'))"

然后打印标签以及分数:

[{'label': 'POSITIVE', 'score': 0.9998704791069031}]

如果运行时报错,提示连接不到Hugging Face,则可能是网络不通。

 

2)安装pytorch

     pytorch安装稍微复杂一些,具体参考这里:

1.2 PyTorch的安装 — 深入浅出PyTorch (datawhalechina.github.io)

3)TensorFlow 库安装

参考这里 使用 pip 安装 TensorFlow (google.cn)

4)安装 spacy

    打开命令行窗口,输入以下命令,进行 spacy 的安装。

pip install -U pip setuptools wheel
pip install -U spacy

上述方式,在国内安装的话,经常安装到一半,或者安装到一大半后,就报错终止了,估计是因为网络问题。建议换成下述方式安装:

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -U pip setuptools wheel
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple  -U spacy

其中,https://pypi.tuna.tsinghua.edu.cn/simple 是国内的代理,下载速度飕飕,妈妈再也不用担心我砸电脑了。

  • -i: 指定库的安装源。
  • -U: 升级 原来已经安装的包,不带U不会装新版本,带上U才会更新到最新版本。

按照上述安装完spacy后,打开命令行窗口,输入python进入python操作界面,输入import spacy后回车,没有报错就代表安装成功了。

以上库都安装成功后,我们就可以开始进行加载预训练模型了

2、加载预训练模型

     以GPT-3(或其他GPT系列模型)为例,演示如何进行文本生成。

from transformers import GPT2LMHeadModel, GPT2Tokenizer

# 加载预训练模型和分词器
model_name = "gpt2"
model = GPT2LMHeadModel.from_pretrained(model_name)
tokenizer = GPT2Tokenizer.from_pretrained(model_name)

# 输入文本
input_text = "Once upon a time"

# 编码输入文本
input_ids = tokenizer.encode(input_text, return_tensors='pt')

# 生成文本
output = model.generate(input_ids, max_length=100, num_return_sequences=1)

# 解码生成的文本
generated_text = tokenizer.decode(output[0], skip_special_tokens=True)
print(generated_text)
文本分类

以BERT为例,演示如何进行文本分类。

from transformers import BertTokenizer, BertForSequenceClassification
from transformers import TextClassificationPipeline

# 加载预训练模型和分词器
model_name = "bert-base-uncased"
tokenizer = BertTokenizer.from_pretrained(model_name)
model = BertForSequenceClassification.from_pretrained(model_name, num_labels=2)

# 创建分类管道
pipeline = TextClassificationPipeline(model=model, tokenizer=tokenizer)

# 输入文本
texts = ["I love this movie!", "I hate this movie."]

# 分类
predictions = pipeline(texts)
for text, pred in zip(texts, predictions):
    print(f"Text: {text}\nLabel: {pred['label']}, Score: {pred['score']}\n")
文本相似度

使用BERT的句子嵌入进行文本相似度计算。

from transformers import BertModel, BertTokenizer
import torch

# 加载预训练模型和分词器
model_name = "bert-base-uncased"
tokenizer = BertTokenizer.from_pretrained(model_name)
model = BertModel.from_pretrained(model_name)

# 编码文本
texts = ["I love machine learning.", "I enjoy learning about AI."]
encoded_input = tokenizer(texts, padding=True, truncation=True, return_tensors='pt')

# 获取嵌入
with torch.no_grad():
    outputs = model(**encoded_input)
    embeddings = outputs.last_hidden_state.mean(dim=1)

# 计算相似度
cosine_sim = torch.nn.functional.cosine_similarity(embeddings[0], embeddings[1], dim=0)
print(f"Cosine similarity: {cosine_sim.item()}")

3、进行文本生成或分类任务,以下是一个详细的示例流程,大家可以自己对照代码进行操作,代码跑通后再逐步理解代码的含义

import torch
from transformers import GPT2LMHeadModel, GPT2Tokenizer, BertTokenizer, BertForSequenceClassification, BertModel, TextClassificationPipeline

# GPT-2文本生成
def generate_text(input_text, max_length=100):
    model_name = "gpt2"
    model = GPT2LMHeadModel.from_pretrained(model_name)
    tokenizer = GPT2Tokenizer.from_pretrained(model_name)

    input_ids = tokenizer.encode(input_text, return_tensors='pt')
    output = model.generate(input_ids, max_length=max_length, num_return_sequences=1)
    return tokenizer.decode(output[0], skip_special_tokens=True)

# BERT文本分类
def classify_texts(texts):
    model_name = "bert-base-uncased"
    tokenizer = BertTokenizer.from_pretrained(model_name)
    model = BertForSequenceClassification.from_pretrained(model_name, num_labels=2)
    pipeline = TextClassificationPipeline(model=model, tokenizer=tokenizer)

    return pipeline(texts)

# BERT文本相似度
def compute_similarity(text1, text2):
    model_name = "bert-base-uncased"
    tokenizer = BertTokenizer.from_pretrained(model_name)
    model = BertModel.from_pretrained(model_name)

    encoded_input = tokenizer([text1, text2], padding=True, truncation=True, return_tensors='pt')
    with torch.no_grad():
        outputs = model(**encoded_input)
        embeddings = outputs.last_hidden_state.mean(dim=1)

    cosine_sim = torch.nn.functional.cosine_similarity(embeddings[0], embeddings[1], dim=0)
    return cosine_sim.item()

# 示例文本
input_text = "Once upon a time"
texts = ["I love this movie!", "I hate this movie."]
text1 = "I love machine learning."
text2 = "I enjoy learning about AI."

# 生成文本
generated_text = generate_text(input_text)
print(f"Generated Text:\n{generated_text}\n")

# 文本分类
predictions = classify_texts(texts)
for text, pred in zip(texts, predictions):
    print(f"Text: {text}\nLabel: {pred['label']}, Score: {pred['score']}\n")

# 计算文本相似度
similarity = compute_similarity(text1, text2)
print(f"Cosine similarity between \"{text1}\" and \"{text2}\": {similarity}")

作为QA测试同学,代码能力直接衡量了你的硬实力,所以我们必须做好代码基础工作,提高日常工作效率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值