使用transformers的T5模型获取输入文本的sentence embedding句向量

 

from transformers import T5Tokenizer, T5Model
import torch

MODEL_NAME = 't5-small'
print(f'Loading {MODEL_NAME} Model...')

# 加载模型和tokenizer
tokenizer = T5Tokenizer.from_pretrained('t5-small')
model = T5Model.from_pretrained(MODEL_NAME)

# 输入文本并进行tokenizer
text = ['Hello world!', 'Hello python!']
inputs = tokenizer(text, return_tensors='pt', padding=True)


output = model.encoder(input_ids=inputs['input_ids'], attention_mask=inputs['attention_mask'], return_dict=True)
pooled_sentence = output.last_hidden_state # shape is [batch_size, seq_len, hidden_size]
# pooled_sentence will represent the embeddings for each word in the sentence
# you need to sum/average the pooled_sentence
pooled_sentence = torch.mean(pooled_sentence, dim=1)

# 得到n_sample*512的句向量
print('pooled_sentence.shape', pooled_sentence.shape)
print(pooled_sentence)

# 输出:
# pooled_sentence.shape torch.Size([2, 512])
# tensor([[ 0.0123,  0.0010,  0.0202,  ..., -0.0176,  0.0122, -0.1353],
#         [ 0.0854,  0.0613, -0.0568,  ...,  0.0230, -0.0131, -0.2288]],
#        grad_fn=<MeanBackward1>)

Reference:

https://stackoverflow.com/questions/64579258/sentence-embedding-using-t5

### 如何提升向量模型的精度 为了提高向量模型的精度,可以从以下几个方面入手: #### 数据质量优化 高质量的数据对于任何机器学习模型都至关重要。通过精心挑选和构造训练数据集,能够显著改善模型性能[^1]。具体来说,应确保数据集中包含尽可能多样的样本,并减少噪声干扰。 #### 微调策略改进 采用先进的微调技术也是增强模型表现的有效手段之一。例如,“提示调整”(Prompt Tuning),这是一种在预训练语言模型输入阶段加入可训练嵌入向量作为提示的方式,在实际应用中被证明能有效引导模型生成更贴合任务需求的结果[^2]。 #### 使用专门设计的大规模语义理解模型 像 `acge_text_embedding` 这样针对中文环境特别优化过的大型向量表示模型,因其具备更强泛化能力和更低部署门槛而成为理想选择。它不仅能在多种业务场景下建立高效分类器,还能极大程度上增进复杂文本结构解析准确性[^3]。 以下是基于上述理论的一个简单实现案例展示如何利用 Python 和 Hugging Face Transformers 库来执行 Prompt Tuning 的过程: ```python from transformers import AutoModelForSeq2SeqLM, AutoTokenizer model_name = "google/t5-v1_1-base" tokenizer = AutoTokenizer.from_pretrained(model_name) model = AutoModelForSeq2SeqLM.from_pretrained(model_name) def prompt_tuning_example(input_sentence): prefix_prompt = "[TUNE]" # This is our trainable embedding placeholder. full_input = f"{prefix_prompt} {input_sentence}" inputs = tokenizer(full_input, return_tensors="pt") outputs = model.generate(**inputs) decoded_output = tokenizer.decode(outputs[0], skip_special_tokens=True) return decoded_output example_sentence = "Translate to German: Hello world." translated_result = prompt_tuning_example(example_sentence) print(translated_result) ``` 此脚本展示了怎样定义自定义前缀并将其附加到原始句子上来影响翻译方向的行为模式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值