BASICS · NLP · 从分词到大模型

自然语言处理:机器怎么读懂人话

从分词、TF-IDF 到词向量与 Transformer,一条线讲清机器处理文本的完整流水线。读完你能亲手搭一个中文情感分类器,并且明白今天的大模型踩在哪几块积木之上。

python3 — jieba
>>> import jieba
>>> words = jieba.lcut("这手机性能不错,电池耐用")
>>> words
['这', '手机', '性能', '不错', ',', '电池', '耐用']
>>> score = sum({"不错": 0.6, "耐用": 0.5}.get(w, 0) for w in words)
>>> "好评" if score > 0 else "差评"
'好评' — 分词 + 词典打分,就是最朴素的情感分类器
本页目录

01

NLP 是什么:把人话变成机器能算的东西

自然语言处理(NLP)研究怎么让机器处理人类语言——听懂、读懂、生成。它从规则时代一路走到统计时代再到深度学习时代,而今天所有大模型(ChatGPT、Kimi 这些对话产品)本质上就是一个超大规模的语言模型。所以理解 NLP 的基本概念,等于理解了大模型的每一块积木从哪来。

按技术手段看,这门学科走过三个时代:规则时代(词表 + 正则 + 语法树,人力堆出来的精确但脆弱)、统计时代(n-gram、HMM、CRF,从数据里学概率)、神经网络时代(词向量、RNN、Transformer,直到今天的大模型)。每个时代的工具都还在服役:正则依然在清洗文本,jieba 依然在分词,大模型则把后面的所有环节一肩挑。

不管任务怎么变,数据流万变不离其宗:原始文本 → 切成单元(token)→ 变成数字(表示)→ 模型处理 → 输出标签或新文本。差别只在于每一环用什么技术。下面的任务地图是这门学科的「目录页」:

分词 / 分句
把字符串切成词或子词(token),一切的第一步
词性标注
标出名词 / 动词 / 形容词,后续规则的抓手
命名实体识别 NER
找出人名、地名、机构名、时间
情感分析
判断好评还是差评、正面还是负面
文本分类
垃圾邮件识别、新闻归类、意图识别
机器翻译
跨语言生成,seq2seq 架构的诞生地
自动摘要
长文变短文:抽取式摘句 / 生成式重写
问答与对话
阅读理解、检索问答、客服机器人

本页代码环境:Python 3.12、jieba 0.42.1、scikit-learn 1.9;文中代码输出均为实际运行结果。

这一页的用法建议:

  • 按顺序读:第 04 节「表示方法的四级台阶」是全页主轴,前面都是它的铺垫。
  • 边读边跑:所有代码在 jieba + scikit-learn 环境即可复现,逐行对照输出。
  • 速查表当词典:忘了指标、库名、术语,回这里搜。
  • 第 06 节两条路都要跑:跑完你就知道「手搓流水线」与「预训练模型」各自意味着什么。
大模型时代的分工:很多任务如今被「提示词」统一了,上面这张表看似过时——但恰恰相反,分词与文本表示这两层依然是理解一切的地基:大模型读你的输入时做的第一件事,仍是切 token、查向量表。指标因任务而异(准确率 / F1 / BLEU / ROUGE / 困惑度),第 05 节速查表有完整对照。
那还需要学经典方法吗:需要。真实项目里文本清洗、分词、规则兜底永远少不了;而且不懂 TF-IDF 和朴素贝叶斯,你连大模型检索增强(RAG)里的「相关性排序」都看不懂。经典方法是地基,不是古董。

02

环境准备:三步装齐经典 NLP 工具箱

推荐用虚拟环境。经典路线(jieba + scikit-learn)轻到几十 MB,深度学习路线(transformers)需要 torch 作底座、首次运行还要下载模型。

Terminal
python3 -m venv .venv
source .venv/bin/activate      # Windows 是 .venv\Scripts\activate

# 分词 + 传统机器学习,本页第 03、06 节只需要这两个
pip install jieba scikit-learn
python -c "import jieba, sklearn; print('ok')"
jieba + scikit-learn 加起来不到 50MB,纯 CPU 即可,没有任何版本坑;jieba 0.42.1 已多年未大更新,胜在稳定。

验证装好的标志:终端里 python -c "import jieba, sklearn; print('ok')" 能打印 ok;transformers 路线则是 python -c "import transformers; print(transformers.__version__)" 能出版本号。

先装哪条路线:先装经典三件套把第 03、06 节跑通,再按需装 transformers——直接从大模型开始学 NLP,容易把「调 API」误当成「懂原理」。各库对 Python 版本的要求以官方文档为准。

03

快速上手:五分钟用 jieba 切好第一段中文

python3 · jieba_warmup.py
import jieba
import jieba.posseg as pseg

# 精确模式:默认,最常用
print(jieba.lcut("自然语言处理让机器读懂人话"))
# ['自然语言', '处理', '让', '机器', '读懂', '人', '话']

# 搜索引擎模式:长词再切细,提高召回
print(jieba.lcut_for_search("小明硕士毕业于中国科学院计算所"))
# ['小明', '硕士', '毕业', '于', '中国', '科学', '学院',
#  '科学院', '中国科学院', '计算', '计算所']

# 领域词保护:先 add_word,再切
jieba.add_word("计算所")
print(jieba.lcut("他在中国科学院计算所实习"))
# ['他', '在', '中国科学院', '计算所', '实习']

# 词性标注:n 名词 / v 动词 / a 形容词 / r 代词
print([(w.word, w.flag) for w in pseg.lcut("这个手机性能不错")][:4])
# [('这个', 'r'), ('手机', 'n'), ('性能', 'n'), ('不错', 'a')]
python3 · 三种模式一句话记住
s = "小明硕士毕业于中国科学院计算所"
jieba.lcut(s)                   # 精确模式:默认,句子级分析用这个
jieba.lcut(s, cut_all=True)    # 全模式:穷举所有成词可能,宁可错切不漏切
jieba.lcut_for_search(s)        # 搜索模式:长词再切细,检索召回用
  • 01

    精确模式起步

    jieba.lcut 返回列表(jieba.cut 返回生成器),一次切完,句子级别够用。

  • 02

    长文本换搜索引擎模式

    搜索引擎模式把「中国科学院」这种长词再切出「科学院」「计算所」,检索场景召回率更高。

  • 03

    专有名词先喂词典

    单次用 jieba.add_word,成批用 jieba.load_userdict("user_dict.txt")(一行一个词)。领域文本这一步几乎必做。

  • 04

    词性标注做过滤

    pseg 给每个词带词性标签——只保留名词和动词当关键词、找形容词判断情感,都靠它。

常见词性标记:n 名词、nr 人名、ns 地名、nt 机构名、v 动词、a 形容词、d 副词、r 代词——与北大词性标记体系一致,日常过滤够用,完整对照表见 jieba 仓库说明。
首次分词时 jieba 会在终端打印 Building prefix dict…——那是在构建词典缓存(打印到 stderr),不是报错,第二次起就快了。

顺手做个词频统计

分词最常见的下游用途——数词。配合 Python 自带的 collections.Counter,三行就是一个词频工具:

python3 · wordfreq.py
from collections import Counter

words = jieba.lcut("自然语言处理让机器读懂人话,自然语言处理很难")
print(Counter(words).most_common(3))
# [('自然语言', 2), ('处理', 2), ('让', 1)]

再抽一下关键词

jieba 自带基于 TF-IDF 思想的关键词抽取,从一段话里挑最有信息量的几个词——第 04 节讲完原理,这里先看看它能多省事:

python3 · keywords.py
import jieba.analyse

tags = jieba.analyse.extract_tags(
    "自然语言处理是人工智能的核心问题,机器学习与深度学习推动了它",
    topK=5,
)
print(tags)
# ['学习', '自然语言', '人工智能', '深度', '机器']
打分逻辑:本文档常见 × 全局稀有的词得分高——正是 TF-IDF 的思想,第 04 节展开。

04

从字符串到语义:表示方法的四级台阶

预处理:分词、停用词与词干化

中英文第一处分水岭就在分词:英文天然有空格,按空格切就有七八成正确率,剩下的是 don't、New York 这类边界情况;中文没有任何分隔符,同一串字可以有多种切法,必须靠词典 + 统计模型。第二处分水岭是词干化 / 词形还原:英文有形态变化(running → run、better → good),切完要归一;中文没有形态变化,这步通常省掉。停用词(的、了、a、the)几乎不带信息量,做文本分类前通常过滤掉。

英文侧用 NLTK 时注意:首次使用要先 nltk.download("punkt") 下载数据,新版本可能提示还需要 punkt_tab,照提示补装即可。

python3 · preprocess.py
stops = {"的", "了", ",", "、"}
words = jieba.lcut("这个手机性能不错的,体验很流畅了")
print([w for w in words if w not in stops])
# ['这个', '手机', '性能', '不错', '体验', '很', '流畅']

from nltk.stem import PorterStemmer      # 英文侧:词干化
print(PorterStemmer().stem("running"))   # run
停用词表从哪来:不要手写。哈工大、百度都有公开的中文停用词表可下载。但要小心任务适配——「不」在很多停用词表里,情感分析把它删了,「不好用」就变成「好用」了。对任务敏感的词,宁可留下。

spaCy 是另一条预处理路线:zh_core_web_sm 模型把分词、词性、命名实体识别装进同一条流水线,nlp(text) 一次返回全部结果,适合做成服务长期跑。jieba 胜在轻量好嵌入,spaCy 胜在工程化,两者不冲突——很多项目的组合是正则粗洗 + jieba 细切 + 重活交给模型。

表示:one-hot → TF-IDF → 词向量 → 上下文相关

one-hot:每个词一根「独热」向量,维度等于词表大小,任意两个词都互相垂直——「猫」和「狗」的相似度是 0,语义完全丢失。TF-IDF 给出文档级表示:TF(这个词在本文档出现得多不多)× IDF(这个词在全体文档里稀不稀罕),越「本文专属、全局稀有」的词权重越高。它常配朴素贝叶斯、逻辑回归做分类,几十年不过时。词向量(word2vec,Mikolov 等,2013)把词映射成稠密低维向量,语义相近的词距离就近,经典类比 king − man + woman ≈ queen;用 gensim 可以训练或加载现成词向量。但它一词一向量——「苹果手机」和「吃苹果」里的「苹果」没法区分。

上下文相关表示由预训练模型给出:同一个词在不同句子里向量不同,多义词的歧义就此解决。今天任何大模型的第一层,都是把 token 查表映射成这样的稠密向量——这四级台阶不是进化史上的化石,而是层层叠加着用。

python3 · tfidf_demo.py
from sklearn.feature_extraction.text import TfidfVectorizer
vec = TfidfVectorizer()
X = vec.fit_transform(["I love NLP", "NLP is fun and love is great"])
print(sorted(vec.vocabulary_))   # 6 个词各占一列
print(X.shape)                   # (2, 6):2 篇文档 × 6 维

one-hot 的缺陷一行代码就能看到:任意两个词的内积都是 0,「猫」和「狗」跟「猫」和「汽车」一样不像——语义完全丢失,这就是要学向量表示的理由:

python3 · onehot_demo.py
import numpy as np

cat, dog, car = np.eye(3)[0], np.eye(3)[1], np.eye(3)[2]   # 三根独热向量
print(cat @ dog, cat @ car)
# 0.0 0.0:猫和狗、猫和汽车,一样「不像」

词向量用 gensim 就能训一个玩具版(真实词向量要大语料,通常直接加载现成的):

python3 · word2vec_toy.py
from gensim.models import Word2Vec

sents = [["我", "爱", "自然语言", "处理"],
         ["词", "向量", "很", "有用"],
         ["自然语言", "处理", "很", "有趣"]]
model = Word2Vec(sents, vector_size=16, min_count=1, epochs=10, seed=1)
print(len(model.wv))                 # 9:词表共 9 个词
print(model.wv["自然语言"].shape)     # (16,):每个词变成 16 维向量
玩具语料训不出语义,这里只看机制:词真的进了低维稠密空间。真实场景用 gensim 加载预训练词向量,或直接用大模型的 embedding 层。

语言模型演化:n-gram → RNN → Transformer → 预训练 + 大模型

语言模型回答一个的问题:「给定前文,下一个词的概率分布是什么」。n-gram(上世纪八九十年代)用马尔可夫假设只看前 n−1 个词,简单高效,但词组合爆炸、见过的才认识,泛化差。RNN / LSTM(2010 年代前期)按顺序逐词读入、用一个隐状态记住上文,LSTM 的门控机制缓解了长距离依赖,但依然是串行计算,难以并行、难以上规模。

n-gram 的意思很直白:bigram 只看前 1 个词,trigram 看前 2 个——「今天 天气」之后接「不错」的概率,直接从语料里数出来。数不出来的组合概率为零,这就是它泛化差的原因,也是「让神经网络学语言」要解决的第一件事。

把 RNN 的困境说透:第 100 个词想「看到」第 1 个词,信息要在隐状态里传递 99 步,一路上被不断改写——距离一长就忘。n-gram 是「看不远」,RNN 是「看得远但记不住还跑不快」,三个毛病各占其半。

2017 年《Attention Is All You Need》提出 Transformer,换了打法:自注意力让序列中任意两个 token 直接互相打分、按分数加权取信息(打分用的就是 AI 数学页讲的点积),位置编码补回「谁在谁前面」的顺序信息,多头机制让模型同时关注几种不同关系——而且整个计算天然并行,这才打开了「把模型做大」的大门。随后 BERT(2018,双向掩码预训练,擅长理解)与 GPT 系列(逐词预测预训练,擅长生成)把自注意力推成绝对主流。

自注意力
每个 token 对所有 token 打点积打分、按分加权取信息——任意距离一步直达
多头
多组注意力并行,各自关注不同关系(语法、指代、语义……)
位置编码
注意力本身不感知顺序,必须显式注入 token 的位置信息
前馈层 + 残差
注意力之后逐位置做非线性变换;残差连接让上百层的网络训得动

2018–2020 年的主流范式是预训练 + 微调:先在无标注的海量文本上学会「语言本身」,再用少量标注数据微调到具体任务。2020 年后模型规模继续上台阶,出现了提示(prompt)与上下文学习:不再微调参数,把任务写进提示词就能用。今天的大模型,就是这条演化线的最新一环——但它读文本的每个环节,依然能对应到本节的四级台阶。

「提示」之所以可行,是因为预训练把任务逼成了「续写」:把「评论:…… 情感:」拼给模型,它自然往「好评 / 差评」上续。few-shot、思维链这些技巧,本质都是「怎么把任务写成一道好的续写题」——底层数据流,仍是本节开头那条「切 token → 查向量 → 模型处理」。

中文特有问题:歧义切分与未登录词

中文分词有两大经典难题。歧义切分:同一串字存在多种「合法」切法,例子已经写进教科书——「南京市长江大桥」,正确读法是 南京市 / 长江大桥,但也能读成 南京 / 市长 / 江大桥。jieba 的全模式会把各种切法都列出来给你看。未登录词(OOV):新词、人名、产品名不在词典里,比如「计算所」常被切碎。对策组合拳:自定义词典兜底、统计模型(HMM)猜新词;大模型则用子词切分(BPE)把词拆成更小的稳定单元,从机制上大幅缓解了 OOV。

python3 · ambiguity.py
print(jieba.lcut("南京市长江大桥"))
# ['南京市', '长江大桥']

print(jieba.lcut("南京市长江大桥", cut_all=True))   # 全模式:歧义全列出
# ['南京', '南京市', '京市', '市长', '长江', '长江大桥', '大桥']

自定义词典的文件格式一行一个词,词频和词性可省略:

user_dict.txt · 搭配 jieba.load_userdict 使用
# 词        词频(可省)  词性(可省)
计算所        3        nz
哔哩哔哩      2        nz

词典之外,jieba 还有最后一道保险:基于 HMM(隐马尔可夫模型)猜新词——对没见过的组合按字的出现规律「估」一个切法。经典演示是人名、机构名这类组合:

python3 · hmm_demo.py
print(jieba.lcut("他来到了网易杭研大厦"))
# ['他', '来到', '了', '网易', '杭研', '大厦']:杭研这类新词也认出来了

还有一条工程经验:分词粒度会一路影响下游。切太细丢语义(「计算」「所」),切太粗泛化差(新组合认不出);文本分类常取「词」粒度,检索场景偏爱「字 / 子词」粒度。没有绝对正确的粒度,只有匹配下游任务的粒度。

05

速查表:任务、模型、库与术语

这一节当词典用。忘了某任务用什么指标、某个库怎么装、Transformer 术语什么意思,直接搜——中英文关键词都支持。四张表分别覆盖:做什么(任务)、用什么(模型与库)、什么意思(术语)。

任务常用指标
分词词级 Precision / Recall / F1(SIGHAN 评测)
词性标注词级准确率
命名实体识别实体级 F1:边界和类型都对才算对
文本分类 / 情感分析Accuracy;类别不均衡时看 Macro-F1
机器翻译BLEU:与参考译文的 n-gram 重合度
自动摘要ROUGE:n-gram / 最长公共子序列重合
抽取式问答EM(完全匹配)+ F1
语言模型困惑度 PPL:越低说明模型对文本越「不意外」
词向量词类比 / 相似度评测集
开放对话生成人工评测为主,自动指标只作参考
信息检索 / 排序MRR、NDCG:正确的文档排得越靠前分越高
文本蕴含准确率:前提能否推出假设(三分类)

06

实战:中文情感分类,经典与预训练两条路

同一个任务走两条路:先用 jieba + TF-IDF + 朴素贝叶斯亲手搭一条经典流水线,再用 transformers 一行调用预训练模型对照——两条路的差距,就是「机器学习」与「预训练」的差距。全部代码真实可跑,输出为实际运行结果。

第 1 步:8 条语料,把问题定死

标签 1 = 好评、0 = 差评。真实任务需要成百上千条标注,这里 8 条只为跑通流程——别拿它评估真实效果。

python3 · sentiment_nb.py 完整可跑
import jieba
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.naive_bayes import MultinomialNB
from sklearn.pipeline import make_pipeline

# 8 条带标签语料:1=好评,0=差评
texts = [
    "界面漂亮,操作流畅,体验很好",
    "性能强悍,电池耐用,值得购买",
    "拍照清晰,系统稳定,非常满意",
    "性价比高,推荐给朋友了",
    "用了一周就卡顿,质量太差",
    "电池不耐用,售后态度也差",
    "屏幕发黄,做工粗糙,后悔了",
    "价格贵还不好用,非常失望",
]
labels = [1, 1, 1, 1, 0, 0, 0, 0]

# 一条流水线:jieba 分词 → TF-IDF 加权 → 朴素贝叶斯
model = make_pipeline(
    TfidfVectorizer(tokenizer=jieba.lcut, token_pattern=None),
    MultinomialNB(),
)
model.fit(texts, labels)

# 试几条没见过的句子
tests = ["手感不错,系统流畅", "用了两天就坏了,太差劲",
         "包装很好,很喜欢", "卡成幻灯片,后悔"]
for t, p in zip(tests, model.predict(tests)):
    print(t, "=>", "好评" if p == 1 else "差评")
实际运行输出
手感不错,系统流畅 => 好评
用了两天就坏了,太差劲 => 差评
包装很好,很喜欢 => 好评
卡成幻灯片,后悔 => 差评

注意:两条测试句里的「手感」「坏」「差劲」大多没在训练语料里出现过——分类靠的是「流畅」「太」「差」这些共享词的统计信号。样本这么少还能对,是因为任务太简单;语料扩到几千条、任务贴近真实,经典流水线的上限立刻显现。

第 2 步:切分训练 / 测试集,正经评估一次

刚才只看了预测结果,评估要按规矩来:留出一部分数据当测试集,指标才算数。

python3 · 追加到 sentiment_nb.py
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

Xtr, Xte, ytr, yte = train_test_split(
    texts, labels, test_size=0.25, stratify=labels, random_state=0)
model.fit(Xtr, ytr)                       # 只用 6 条训练
print([t for t in Xte])                   # 留出的两条测试句
print(accuracy_score(yte, model.predict(Xte)))
# 0.5:两条件对一条

0.5 不是 bug——8 条语料只留 2 条做测试,单条对错就让指标跳 50%。它的真实含义是:样本太少时,评估本身就是噪音。真实任务几千条起步,这个坑自然消失。

第 3 步:看看模型学到了哪些词

朴素贝叶斯给每个词存了好评 / 差评两套对数概率,作差就知道哪些词最「偏袒」好评:

python3 · 追加
import numpy as np

tfidf = model.named_steps["tfidfvectorizer"]
nb = model.named_steps["multinomialnb"]
names = tfidf.get_feature_names_out()
diff = nb.feature_log_prob_[1] - nb.feature_log_prob_[0]   # 好评 − 差评
top = np.argsort(diff)[::-1][:5]
print([(names[i], round(float(diff[i]), 2)) for i in top])
# [('性能', 0.34), ('值得', 0.34), ('购买', 0.34), ('强悍', 0.34), ('系统', 0.33)]

tokenizer 参数接受任何可调用对象——想顺带过滤停用词,直接传 lambda s: [w for w in jieba.lcut(s) if w not in stops],把预处理挂进流水线。

模型自己「说」出了判断依据:性能、值得、购买这些词把天平拨向好评。传统机器学习的好处就在这——每个决策都能打开看。

第 4 步:对照——预训练模型一行调用

同一个任务,用 transformers 加载一个在大众点评语料上微调过的中文 RoBERTa。它读过几十万条真实评论,「语言知识」是预训练带来的,不靠这 8 条。

python3 · sentiment_dl.py
from transformers import pipeline

pipe = pipeline(
    "sentiment-analysis",
    model="uer/roberta-base-finetuned-dianping-chinese",
)
print(pipe("手感不错,系统流畅"))
# [{'label': 'LABEL_1', 'score': 0.99…}]
# LABEL_1 = 好评,LABEL_0 = 差评;score 以实际运行为准
怎么解读差距:经典路线每一步你都能打开看(词表、权重、概率),是理解原理的最好教具;预训练路线开箱即用、泛化强,但需要 torch + 数百 MB 下载,且「它为什么懂」藏在几亿参数里。两条路不是替代关系——第 05 节速查表里的库,恰好各管一边。
要可控、可解释、部署轻
经典路线:TF-IDF + 线性模型,每一步能打开看,模型文件只有几 MB
要泛化、语义复杂、标注少
预训练路线:pipeline 或微调,模型自带「读过的书」
真实项目的常见搭配
预处理用经典工具,理解 / 生成用预训练模型——两条线各干各的活

预训练中文分类模型不止一个:上面用的是 UER-py 模型库的大众点评版,同一系列还有在电商、微博等不同语料上微调的版本,按业务场景选。

07

避坑:中文文本最常见的四个坑

坑一:TfidfVectorizer 直接喂中文

sklearn 的向量化器默认按空格切词,中文没空格,整句会被当成一个「词」——特征只剩一列,模型等于瞎的。

python3 · 对比
from sklearn.feature_extraction.text import TfidfVectorizer
vec = TfidfVectorizer()                        # 默认按空格切
X = vec.fit_transform(["界面漂亮操作流畅"])
print(X.shape)                                 # (1, 1):整句一个词!

vec = TfidfVectorizer(tokenizer=jieba.lcut, token_pattern=None)
传了 tokenizer 就顺手把 token_pattern=None 一起传,否则 sklearn 会警告该参数被忽略。另外 lowercase=True 是默认值——中文无所谓,中英混排时会顺带把英文转小写,别在下游重复处理。

坑二:专有名词被切碎

「计算所」「团建」这类领域词、新词不在默认词典里。上线前务必用真实业务语料抽查分词结果。

python3 · 词典兜底
jieba.add_word("计算所")               # 运行时加一个词

# 成批加载:先造词典文件(UTF-8),再一行加载
with open("user_dict.txt", "w", encoding="utf-8") as f:
    f.write("计算所 3 nz\n哔哩哔哩 2 nz\n")
jieba.load_userdict("user_dict.txt")

词典文件务必存成 UTF-8 编码——Windows 记事本默认的 GBK 会让 load_userdict 静默加载失败,一词不报错但全部不生效。

边界要清楚:用户词典只保证「这个词不被切开」,不改变其余词的切法,也不会让分类器变聪明——它救的是分词,不是语义。

坑三:数据没分层就切分

类别不均衡(差评远多于好评)时直接随机切,测试集可能清一色一类,指标虚高或虚低。用 stratify 按类别分层:

python3
from sklearn.model_selection import train_test_split
Xtr, Xte, ytr, yte = train_test_split(
    texts, labels,
    test_size=0.25,
    stratify=labels,      # 两边的好坏评比例一致
    random_state=0,
)

random_state 也建议固定:测试集一变,前后指标就不可比。团队协作时,把切分方式和随机种子写进代码评审清单。

坑四:transformers 第一次跑「卡住」

两个原因:多半不是卡死,而是在下载模型(数百 MB,取决于网速,终端里通常有进度条)。另外 pipeline("sentiment-analysis") 不指定 model 时加载的是英文模型——中文任务必须显式指定中文模型,否则输出无意义。
Terminal · 看看模型下到哪了
du -sh ~/.cache/huggingface      # 缓存目录的体积;在涨就说明还在下载

08

进阶:把 NLP 的地图接回大模型

按「先动手、后体系」排序,前三个是动手文档,后三个是体系教材:

读的顺序建议:先用 jieba / sklearn 的文档把本页跑通的部分吃透,再上 Hugging Face 课程学预训练模型的操作,Jurafsky 教材当词典查理论——三条线并行,别单线硬啃教材。

下一步去哪:大模型时代的工具都以本页概念为地基——接着看 Kimi Code CLI 教程 上手一个真实的模型工具,或去 AI Agent(智能体)教程 看模型怎么从「会说」进化到「会做」。

09

收尾:合上页面前,勾一遍

全勾上,你就具备了读大模型相关文章的词汇量——token、embedding、预训练这些词不再是黑话,而是你亲手用过、跑过的东西。

0 / 5

已复制