带得科技 大模型应用开发 一面
1. 文章分类大概有多少文章?
文章量一般从三个口径说:
训练集、验证集、线上累计处理量。实际项目里常见是几万到几十万篇,线上累计处理量会更大。真正影响效果的不只是数量,还有类别是否均衡、长短文本分布是否正常。
2. 怎么做的这个分类?怎么实现的呀?
就是文本分类标准流程:
先做文本清洗,再做标签体系,再做编码表示,最后接分类模型输出结果。如果用的是 BERT,就是文本经过 tokenizer 编码,输入 BERT,取 [CLS] 或池化向量,接线性层做分类。单标签分类一般用 softmax,多标签分类一般用 sigmoid。
from transformers import BertTokenizer
tokenizer = BertTokenizer.from_pretrained("bert-base-chinese")
text = "这是一篇待分类文章"
inputs = tokenizer(
text,
max_length=512,
truncation=True,
padding="max_length",
return_tensors="pt"
)
3. 你这个用 BERT,是把整篇文章都放进去吗?还是怎么识别出来的?
不是所有文章都整篇放进去。因为 BERT 一般有最大长度限制,常见是 512 token 左右。
短文章可以直接截断后输入。长文章一般按段落、页或者滑窗切分,再分别做分类,最后聚合结果。也可以抽标题、摘要、关键词、前几段一起做分类。
def split_text(text, max_len=400, stride=200):
chunks = []
start = 0
while start < len(text):
chunks.append(text[start:start + max_len])
if start + max_len >= len(text):
break
start += stride
return chunks
4. 审批里的 word 文档分类可能不止一个维度,是多个维度的,这个自动分类应该怎么做?
这种一般按 多标签分类 或 层级分类 做。不是一个文档只分到一个类,而是一个文档可以同时命中多个标签。
实现上就是:
BERT 编码后输出多个标签分数,每个标签独立 sigmoid,超过阈值就打上该标签。如果标签有一级、二级关系,也可以先做一级,再细分二级。
import torch logits = torch.tensor([[1.8, -0.2, 2.3]]) probs = torch.sigmoid(logits) preds = (probs > 0.5).int() print(probs) print(preds)
5. 最夸张见过 5000 页的文档,怎么去分类?
5000 页不能整本直接喂模型。做法就是先解析文档,再切块,再块级分类,最后文档级聚合。
切块可以按:
章节、标题、页、段落、固定窗口。
每个块出一个分类结果,最后用投票、平均分、最大分或者加权聚合成整份文档结果。如果有目录、标题结构,优先按结构切,不要只按固定长度硬切。
from collections import Counter chunk_preds = ["合同", "合同", "制度", "合同", "合同"] fina
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
本专栏聚焦 AI-Agent 面试高频考点,内容来自真实面试与项目实践。系统覆盖大模型基础、Prompt工程、RAG、Agent架构、工具调用、多Agent协作、记忆机制、评测、安全与部署优化等核心模块。以“原理+场景+实战”为主线,提供高频题解析、标准答题思路与工程落地方法,帮助你高效查漏补缺.
查看5道真题和解析