【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 #中文 #入门 #保姆级

相关推荐
xywww1682 小时前
大模型 API 选型实战:GPT、Gemini、Claude 接入时该看哪些指标?
运维·服务器·人工智能·python·gpt·langchain
私人珍藏库6 小时前
[Android] PeakFinder AR v4.8.89 (山峰全景识别+增强现实山峰查看器)
android·人工智能·智能手机·ar·工具·软件
夜雪一千7 小时前
Python enumerate() 函数完整详解:遍历同时获取索引,告别手动计数
服务器·windows·python
CS创新实验室7 小时前
算法、齿轮与硅基大脑:数值计算发展简史
人工智能·算法·数值计算
能有时光7 小时前
PyTorch KernelAgent 源码解读 ---(4)--- ExtractorAgent
人工智能·pytorch·python
fthux8 小时前
GitZip Pro 源码解析:一个 GitHub 文件/文件夹下载扩展是如何工作的(一)整体架构与扩展入口
人工智能·ai·开源·github·open source
_Jimmy_8 小时前
Python 协程库如何使用以及有哪些使用场景
python
aqi008 小时前
15天学会AI应用开发(十七)使用LangGraph实现会话记忆功能
人工智能·python·大模型·ai编程·ai应用
第一程序员8 小时前
Rust Agent 子进程执行:Command 之前,先定义输入和超时
python·rust·github
xixixi777779 小时前
三大 AI 安全里程碑:Akamai 高危风险预警、智能体水印强制落地、PQC 量子安全全产业链统一
大数据·人工智能·安全·ai·大模型·智能体·政策