妖媚琉璃
81.71M · 2026-03-26
日期:2026-03-25
定位:在「三国演义」语料上跑通 本地 Word2Vec 与 DashScope 文本向量 API 两条链路,理解 词级 vs 段级 表示,以及 Embedding 与向量索引在 RAG 链路中的位置;能把 问句 接到各自的检索方式上,并复盘 切块与额度 等工程坑。
data/课程练习/source/{语料名}/ 下各文件。segmented/{语料名}/,与 source 同级(不要放在 source/.../segmented),避免 PathLineSentences 把未分词正文和分词行混在一起读。vectorModels/{语料名}/{语料名}_word2vec.model。model.save:参数必须是 字符串路径 或带 write 的文件对象;传 pathlib.Path 会在内部 .endswith 等处报错。most_similar 与「句子查询」wv.most_similar("曹操"):只接受 词表里存在的 token;不能把整句当作一个词 key(会 KeyError)。jieba 分词 → 过滤 OOV → 对剩余词向量 取平均 → wv.similar_by_vector。练习里封装为 similar_words_for_sentence。类比任务:demo_query_changban_adou_similarity 与 API 侧同名函数使用同一问句 「谁在长坂坡救了阿斗?」,便于两条路线对照(默认不在 __main__ 里自动调用)。
TextEmbedding.call → 默认 pickle 写入 vectorModels/{语料名}/{语料名}_API.model(脚本:embedding_API_pickle.py)。embeddings 结构:output["embeddings"] 是 列表,每项含 embedding(浮点向量) 与 text_index;取单条输入的向量用 [0]["embedding"]。skip_if_exists:本地已有 *_API.model 时 跳过重新编码,省 API;但对 新问句 做相似度仍要对 query 再调一次 Embedding(除非自行传入已算好的 query_vector)。snippet 便于肉眼扫结果。额度(403 / AllocationQuota.FreeTierOnly):免费额度用尽时需在控制台关闭「仅使用免费额度」或开通按量付费;脚本可对失败信息做 中文说明,并用 本地第一条语料向量 做 离线 TopK 演示(不调 API)。开发阶段应 避免对同一语料反复全量重算,优先复用本地 *.model / *.faiss;已有本地模型时务必 skip_if_exists=True 以免无谓请求。
{语料名}_API.model(向量与条目一锅端,便于起步)。{语料名}_API_FAISS.faiss(二进制索引)+ {语料名}_API_FAISS.meta.json(file / chunk_index / snippet 等,不含向量);可从 pickle 迁移建索引,无需再调 Embedding。FaissVectorStore 类(faiss_vector_store.py):封装 索引 + 与 id 对齐的 items,提供 save / load / search。max_chars_per_chunk 很大(例如 3500)时,搜「桃园结义」可能排到与主题无关的段落(核心情节被同块里的序言、史论等 冲淡)。| 维度 | Word2Vec(本地) | 文本 Embedding API |
|---|---|---|
| 粒度 | 词 | 整段 / 切块文本 |
| 典型查询 | 单词近邻、加减类比 | 问句 → 与语料块相似度 |
| 依赖 | 分词语料、训练时间 | 网络、Key、配额 |
| 离线 | 训练后可完全本地 | 库可离线读;新 query 一般仍要联网 |
text_type(query / document)、切块与 overlap 对排序的影响,可在有额度时做小实验。data/课程练习/Embeddings和向量数据库/embedding_Word2Vec.pydata/课程练习/Embeddings和向量数据库/embedding_API_pickle.py(原 pickle 建库与 TopK)data/课程练习/Embeddings和向量数据库/embedding_API_FAISS.py(FAISS 建库 / 检索)data/课程练习/Embeddings和向量数据库/faiss_vector_store.py(FAISS + 元数据封装类)source/、segmented/、vectorModels/(含 *.model、*.faiss、*.meta.json 等,均在 data/课程练习/ 下)前端往往追求 像素级确定;检索与生成链路更多是在 概率与阈值 上做权衡——同一套代码,换 chunk 大小或语料覆盖,结果可从「看似胡扯」变为「基本可用」。Day9 把这条因果链从目录结构一直拉到了 额度、本地复用与 FAISS 落盘,便于以后接正式向量库与 RAG 时少踩重复坑。