【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 喂给 sklearn 的 LogisticRegression

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

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

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


🏷 标签

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

相关推荐
夏天拐跑了西瓜7 小时前
一文入门LangChain:从框架认知到构建你的第一个AI Agent
python·langchain·conda·agent
奕鼎竜瑆7 小时前
Solid 前端响应式开发从零到精通
前端·人工智能
YOLO数据集集合7 小时前
无人机桥梁损伤目标检测数据集 | 桥梁损伤 无人机巡检 结构健康监测 多类别检测9135期
人工智能·目标检测·无人机
动恰客流统计7 小时前
景区客流统计怎么做?兼顾管控与运营的实施方案解析
大数据·前端·人工智能
weixin_443883017 小时前
合规整改倒计时:高等级签名证书的应用场景
大数据·人工智能·法大大·法大大电子签·电子合同
魔猴疯猿7 小时前
从0到1用Python开发第一个智能体
人工智能·python·深度学习·神经网络·机器学习
天一生水water8 小时前
变分模态分解(VMD)的教程
人工智能
荆棘鸟智能8 小时前
林业遥感长势评估怎么做?从NDVI时序分析到LiDAR蓄积量回归
人工智能·算法·智慧林业
代码方舟8 小时前
数据科学风控实战:基于天远全能消金报告构建自动化信用评估网关
运维·人工智能·自动化