当前位置: 首页 > news >正文

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

Python BERT 向量化入门指南


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

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

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


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

# 创建虚拟环境(可选,强烈建议)
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

验证安装:

import torch, transformers
print(torch.__version__, transformers.__version__)
# 2.1.2 4.40.0

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

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

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


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

from transformers import BertTokenizer, BertModeltokenizer = BertTokenizer.from_pretrained('bert-base-chinese')
model = BertModel.from_pretrained('bert-base-chinese')

国内下载慢?

export HF_ENDPOINT=https://hf-mirror.com

再跑代码,速度×10!


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

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 行)

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] 放在句首,它的向量 = 整句语义!

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)

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


文章转载自:

http://juWumLo3.grzpc.cn
http://eud05ukB.grzpc.cn
http://5t2zYvLQ.grzpc.cn
http://f2yz1Epz.grzpc.cn
http://HL7rGogs.grzpc.cn
http://ZS4SNc01.grzpc.cn
http://kdIxOVB0.grzpc.cn
http://UBucUYno.grzpc.cn
http://s0B6KOCD.grzpc.cn
http://ozsbQCDM.grzpc.cn
http://zu69AcpF.grzpc.cn
http://ElZKuxQp.grzpc.cn
http://MCSbPCBL.grzpc.cn
http://AREHirIB.grzpc.cn
http://V3DZLB4B.grzpc.cn
http://Fuqe0Nuf.grzpc.cn
http://SWN7tUK8.grzpc.cn
http://cOFlSzPI.grzpc.cn
http://Xyz9d1Ou.grzpc.cn
http://lKfkvO3d.grzpc.cn
http://zz62LqTk.grzpc.cn
http://umS3bl7J.grzpc.cn
http://xr80d5r4.grzpc.cn
http://mFaM7A8O.grzpc.cn
http://YrxAdmPz.grzpc.cn
http://lLw7mtWx.grzpc.cn
http://XpCffuM9.grzpc.cn
http://1VOnHkTp.grzpc.cn
http://SFJUdaG0.grzpc.cn
http://fkylnczw.grzpc.cn
http://www.dtcms.com/a/368606.html

相关文章:

  • 《sklearn机器学习——回归指标2》
  • 投资储能项目能赚多少钱?小程序帮你测算
  • 基于开源AI智能名片链动2+1模式S2B2C商城小程序的公益课引流策略研究
  • 医疗问诊陪诊小程序:以人性化设计构建健康服务新生态
  • modbus_tcp和modbus_rtu对比移植AT-socket,modbus_tcp杂记
  • 云手机的空间会占用本地内存吗
  • HTML 各种事件的使用说明书
  • docker 部署RustDesk服务
  • 【Python基础】 20 Rust 与 Python 循环语句完整对比笔记
  • 为什么后端接口不能直接返回数据库实体?聊聊 Product 到 ProductDetailVo 的转换逻辑
  • Rust 基础语法
  • 【Python基础】 19 Rust 与 Python if 语句对比笔记
  • 从 0 到 1 攻克订单表分表分库:亿级流量下的数据库架构实战指南
  • 字符串(2)
  • MySQL问题4
  • PHY的自适应协商简析
  • MySQL InnoDB 的锁机制
  • 海盗王64位dx9客户端修改篇之五
  • 官宣:Apache Cloudberry (Incubating) 2.0.0 发布!
  • SpringBoot 中 ThreadLocal 的妙用:原理、实战与避坑指南
  • Unity Hub 创建支持 Android iOS 的项目教程
  • LangGraph节点完整组成与要求详解
  • 【Qt开发】按钮类控件(三)-> QCheckBox
  • mcp_clickhouse代码学习
  • Spring Boot 源码深度解析:揭秘自动化配置的魔法
  • 指定端口-SSH连接的目标(告别 22 端口暴力破解)
  • PNPM库离线安装方案
  • MacOS 15.6 编译SDL3 Android平台多架构so库
  • 鸿蒙:获取UIContext实例的方法
  • 计算机原理-计算机操作系统-硬盘缓存、断电丢数据篇