【AI总结】Python BERT 向量化入门指南

Python BERT 向量化入门指南


一、流程图一览(30 秒看懂)

否 是 数据准备 是否安装依赖? 安装依赖 加载BERT模型 批量处理文本 向量化文本 输出向量

Tips :照着流程图一步一步敲,零深度学习背景也能跑通!


二、Step-0 环境准备(1 分钟)

bash 复制代码
# 创建虚拟环境(可选,强烈建议)
conda create -n bert_py38 python=3.8 -y
conda activate bert_py38

# 安装依赖(清华镜像加速)
pip install -U transformers torch -i https://pypi.tuna.tsinghua.edu.cn/simple

验证安装:

python 复制代码
import torch, transformers
print(torch.__version__, transformers.__version__)
# 2.1.2 4.40.0

三、Step-1 数据准备(10 秒)

python 复制代码
# 任意中文文本即可
texts = ["你好",
         "今天的天气怎么样", 
         "BERT 是一种很厉害的模型"]

生产环境直接替换成 df['comment'].tolist() 即可,无需分词、去停用词


四、Step-2 加载 BERT 中文模型(20 秒)

python 复制代码
from transformers import BertTokenizer, BertModel

tokenizer = BertTokenizer.from_pretrained('bert-base-chinese')
model = BertModel.from_pretrained('bert-base-chinese')

国内下载慢?

bash 复制代码
export HF_ENDPOINT=https://hf-mirror.com

再跑代码,速度×10!


五、Step-3 批量分词(Attention Mask 一并生成)

python 复制代码
import torch
# padding=True  → 自动补零
# truncation=True → 超长截断
# return_tensors='pt' → 返回 PyTorch 张量
inputs = tokenizer(texts,
                   padding=True,
                   truncation=True,
                   return_tensors='pt')
print(inputs.keys())
# dict_keys(['input_ids', 'token_type_ids', 'attention_mask'])
字段 形状 含义
input_ids (batch_size, seq_len) 每个 token 的编号
attention_mask (batch_size, seq_len) 1 表示真 token,0 表示 pad

六、Step-4 向量化(核心 3 行)

python 复制代码
with torch.no_grad():          # 推理模式,节省内存
    outputs = model(**inputs)  # 前向传播
    last_hidden_state = outputs.last_hidden_state  # 所有 token 向量

print(last_hidden_state.shape)  # torch.Size([3, 11, 768])
# 3 条文本,11 是最大长度,768 是向量维度

七、Step-5 提取句向量(拿 [CLS] token)

BERT 在预训练时把分类任务 的符号 [CLS] 放在句首,它的向量 = 整句语义!

python 复制代码
cls_embeddings = last_hidden_state[:, 0, :]  # 第 0 列就是 [CLS]
print(cls_embeddings.shape)  # torch.Size([3, 768])
print(cls_embeddings)

输出示例:

复制代码
tensor([[-0.2314,  0.1921, ...,  0.1245],
        [-0.2819,  0.2103, ..., -0.0754],
        [-0.2547,  0.1938, ...,  0.0827]])

八、关系图(变量之间到底啥关系?)

graph LR TEXTS -->|tokenizer| INPUT_IDS INPUT_IDS -->|BERT_MODEL| LAST_HIDDEN LAST_HIDDEN -->|切片 [:,0,:]| CLS_EMB

一句话记忆:TEXTS → INPUT_IDS → BERT → 切片 → 句向量


九、一键封装函数(以后直接 import)

python 复制代码
def bert_encode(texts, model, tokenizer):
    inputs = tokenizer(texts, padding=True, truncation=True,
                       return_tensors='pt')
    with torch.no_grad():
        outputs = model(**inputs)
    return outputs.last_hidden_state[:, 0, :]  # [CLS] 向量

# 调用
vec = bert_encode(["明天会下雨吗"], model, tokenizer)
print(vec.shape)  # torch.Size([1, 768])

十、常见报错急救包

报错 原因 解决
CUDA out of memory 批太大 device='cpu' 或降 batch
403 Client Error 镜像失效 export HF_ENDPOINT=https://hf-mirror.com
维度看不懂 打印 shape 记住 (batch, seq_len, 768)
中文乱码 Windows 终端 换 VSCode / Jupyter

十一、下一步能干嘛?(进阶路线图)

  1. 相似度cosine_similarity(vec1, vec2)
  2. 聚类KMeans(n_clusters=10).fit(cls_embeddings)
  3. 检索faiss.IndexFlatIP(768) 毫秒级搜百万向量
  4. 分类 :把 cls_embeddings 喂给 sklearnLogisticRegression

十二、总结(一句话记住)

"tokenizer 先分词,BERT 再编码,切片 [:,0,:] 拿句向量!"

全文代码 ≤ 30 行,复制即可跑通。


🏷 标签

#BERT #向量化 #CLS #transformers #PyTorch #中文 #入门 #保姆级

相关推荐
草莓熊Lotso8 小时前
Linux 文件描述符与重定向实战:从原理到 minishell 实现
android·linux·运维·服务器·数据库·c++·人工智能
Coder_Boy_9 小时前
技术发展的核心规律是「加法打底,减法优化,重构平衡」
人工智能·spring boot·spring·重构
会飞的老朱11 小时前
医药集团数智化转型,智能综合管理平台激活集团管理新效能
大数据·人工智能·oa协同办公
聆风吟º12 小时前
CANN runtime 实战指南:异构计算场景中运行时组件的部署、调优与扩展技巧
人工智能·神经网络·cann·异构计算
寻星探路13 小时前
【深度长文】万字攻克网络原理:从 HTTP 报文解构到 HTTPS 终极加密逻辑
java·开发语言·网络·python·http·ai·https
Codebee14 小时前
能力中心 (Agent SkillCenter):开启AI技能管理新时代
人工智能
聆风吟º15 小时前
CANN runtime 全链路拆解:AI 异构计算运行时的任务管理与功能适配技术路径
人工智能·深度学习·神经网络·cann
uesowys15 小时前
Apache Spark算法开发指导-One-vs-Rest classifier
人工智能·算法·spark
AI_567815 小时前
AWS EC2新手入门:6步带你从零启动实例
大数据·数据库·人工智能·机器学习·aws
User_芊芊君子15 小时前
CANN大模型推理加速引擎ascend-transformer-boost深度解析:毫秒级响应的Transformer优化方案
人工智能·深度学习·transformer