如何用BioGPT生成词嵌入并存储到Pandas DataFrame列中?
生成BioGPT词嵌入并存储到Pandas DataFrame列中
首先要明确:BioGPT的Tokenizer仅负责文本预处理,生成词嵌入需要配合对应的预训练模型使用。以下是完整的实现步骤及apply中的lambda写法:
1. 补充模型加载(假设未完成此步骤)
from transformers import BioGptTokenizer, BioGptModel import torch import pandas as pd # 你已完成的基础步骤 df = pd.read_json("data.json") tokenizer = BioGptTokenizer.from_pretrained("microsoft/biogpt") # 加载BioGPT模型并切换到评估模式 model = BioGptModel.from_pretrained("microsoft/biogpt") model.eval()
2. 定义词嵌入生成函数
单独定义函数再在lambda中调用,比直接写复杂逻辑在lambda里更易维护:
def generate_biogpt_embedding(text): # 对文本进行分词、填充/截断,转换为模型需要的张量格式 inputs = tokenizer( text, return_tensors="pt", padding=True, truncation=True, max_length=512 # 根据你的文本长度调整 ) # 关闭梯度计算,提升速度并节省显存 with torch.no_grad(): outputs = model(**inputs) # 两种常见的嵌入提取方式选其一: # 方式1:取<[BOS_never_used_51bce0c785ca2f68081bfa7d91973934]>token的最后一层隐藏状态作为句子级嵌入 embedding = outputs.last_hidden_state[:, 0, :].squeeze().numpy() # 方式2:对有效token的隐藏状态做平均池化(避免padding影响) # mask = inputs["attention_mask"].unsqueeze(-1).expand(outputs.last_hidden_state.shape) # masked_embeds = outputs.last_hidden_state * mask # embedding = torch.sum(masked_embeds, dim=1) / torch.clamp(mask.sum(dim=1), min=1e-9) # embedding = embedding.squeeze().numpy() return embedding
3. 应用到DataFrame列
直接用apply结合lambda调用上述函数即可:
df["embeddings"] = df["content"].apply(lambda x: generate_biogpt_embedding(x))
注意事项
- 若数据集较大,逐行
apply效率较低,建议改用批量处理(如Hugging Face的Dataset+DataLoader) - 需确保已安装
torch、transformers、pandas依赖库 - 可根据文本实际长度调整
max_length参数,避免过度截断关键内容
内容的提问来源于stack exchange,提问作者D. Seah
相关产品推荐
相关产品推荐

