哪个网站可以做行程攻略wordpress字体旋转
2026/6/19 23:16:43 网站建设 项目流程
哪个网站可以做行程攻略,wordpress字体旋转,常州网站关键词,工程公司注册需要什么0. 你需要掌握的两句话1) BoW 假设#xff1a;文档只由词的出现次数/权重表示#xff0c;忽略词序#xff08;语法/局部上下文#xff09;。2) TF-IDF#xff1a; 用 TF 表示“这个词在当前文档的重要性”#xff0c;用 IDF 抑制“全语料到处都是的词”。1. BoW 数学形式…0. 你需要掌握的两句话1)BoW 假设文档只由词的出现次数/权重表示忽略词序语法/局部上下文。2)TF-IDF用TF表示“这个词在当前文档的重要性”用IDF抑制“全语料到处都是的词”。1. BoW 数学形式设词表大小为文档的 BoW 向量最朴素关键特性高维 稀疏大部分维度为 0为什么稀疏因为每个文档只覆盖词表里极少一部分词。2. TF 的几种常见定义设词在文档中出现次数为文档总词数为。(A) Raw count表达的是最原始的假设出现越多越重要存在的问题1.长文档天生占便宜同一个主题长文档里几乎所有的词count都大。长文档会因为“数值更大”被偏爱而不是因为”更相关“2.重复刷词会线性变强比如一篇文档里”npl“出现了100次Raw count会让它比重复10次强10倍但现实中相关性通常没这么线性。(B) Length-normalized归一化把”绝对次数“变成了”相对频率“也就是这个词在这篇文档中占了多大比例。例子文档1长度100npl出现5次 - tf0.05 文档2长度10npl出现2次 - tf0.2Raw count 会说文档1更重要5 2但频率告诉你文档2更“集中讨论”nlp。副作用对特别短的文档频率会跳得特别大只解决了”长短“问题没有解决”刷词线性增长问题“(C) Sublinear减弱重复带来的线性增长取log是在修复词偏差性你希望出现次数从1 → 2有明显增益但从50 → 51增益应该很小。log正好是边际收益递减。例子count1 - 2 是翻倍log tf(1log1)1 - (1log2)≈1.693增益约为0.693count10 - 100 是10倍log tf: (1log10)≈3.303 - (1log100)≈5.605增益约为2.302为什么要加“1”避免 f1 时 log(1)0 让 tf 变成 0失去“出现过”的信号。你在实现里可以任选一种但要能解释“为什么要归一化/对数”。3. IDF 推导直觉重点为什么有用设语料有篇文档词出现过的文档数为。为什么用 df(t)文档频次而不是词频总和因为我们关心的是这个词能不能区分文档。区分能力取决于“覆盖了多少文档”而不是“在少数文档里刷了多少次”。我们想要的性质词在越多文档出现df 大它越“不区分”文档 → 权重应该越小。词越稀有df 小它越“区分”文档 → 权重应该越大。满足“反比”直觉的一种形式是再取对数压缩动态范围这个公式是怎么来的我们想要df 大 → 权重小df 小 → 权重大最简单满足单调性的就是反比weight(t)∝1/df(t)再乘上N做尺度化让它跟语料规模有关系N/df(t)取log是为了:(1) 动态范围太夸张少量稀有词会“爆表”例如N1000000df1, N/df 1000000; df10000, N/df100. 差了10000倍模型被极少数词强行主宰。使用loglog(1000000)≈13.8; log(10000)≈4.6. 差值变得可控2“边际收益递减”更合理df 从 1 增加到 2变得更常见一倍对区分度影响很大df 从 100001 增加到 100002 基本没区别。平滑避免 df0且让常见词也有稳定数值常见写法为什么分子分母都加“1”1.避免 df0 时除零如果模型在推理的时候遇到了在训练时没见过的词即df0这时不平滑会直接爆炸idf∞。2.让数值更稳定即使 df 很小也不会无限大到离谱。为什么最后还要加“1”保证 IDF 非负并且让 dfN 的词不至于变成 0。全出现的词 idf1而不是 0。idf0意味着我们要永远丢弃这些词这在很多场景是可以的停用词但库一般不替你做“强硬裁剪”而是留一点权重再让下游比如模型/分类器/相似度去决定同时也避免了某些数值/实现里出现全 0 特征导致的边界问题。这也是很多库如 scikit-learn常用的平滑变体之一。4. TF-IDF 公式重要TF-IDF 向量是什么从“单词权重”到“文档表示”向量空间模型Vector Space Model的核心思想是把一篇文档表示成一个向量而向量的每一维对应词表里的一个词假设整个语料库的词表是V{t1, t2, t3,...,tv}. 那么向量的第j维就是tj。对于文档d我们构造一个向量d {tfidf(t1,d), tfidf(t2,d), tfidf(t3,d),...,tfidf(tv,d)}. 在文档向量中第j个分词的数值等于词tj在在文档d中的tf-idf权重。例子t1 猫t2 狗t3 鱼在某篇文档中tfidf(猫, d) 0.3tfidf(狗, d) 0tfidf(鱼, d) 0.8向量d (0.3,0,0.8)可选的向量归一化对每个文档向量做 L2 normalizeL2 normalize解决的问题向量“尺度”整体大小会影响相似度。假如使用点积做相似度计算Xa x Xb向量越大词更多/TF 总量更大点积往往越大 → 长文档/词多文档更占便宜。经过L2 normalize之后每个文档的向量长度都变成了1这样比较的时候就不会因为谁向量大就偏向谁了。L2 normalize 和 cosine 相似度的关系cosine相似度如果你先把两边都 L2 normalize那么就会得到所以结论就是对 TF-IDF 向量做 L2 normalize 点积” 等价于 “直接做 cosine 相似度normalize 把长度因素去掉让你更关注“词权重分布结构”这对检索/聚类通常更合理因为长度不等于相关性。5. 代码任务手写 TF-IDF不用 sklearn实现目标输入 List[List[str]]已分好词的语料输出vocab: Dict[str,int] 词到索引idf: List[float] 或 np.ndarrayX_tfidf: np.ndarrayimport math import numpy as np corpus [ [i, love, nlp, nlp], [i, love, deep, learning], [nlp, is, fun], ] #list[list[str]] - dict[str,int] def build_vocab(corpus): build vocabulary making token - index vocab {} for doc in corpus: for tok in doc: if tok not in vocab: vocab[tok] len(vocab) return vocab def compute_df(corpus, vocab): document frequency: df[t] number of documents containing token t V len(vocab) df np.zeros(V, dtypenp.int64) for doc in corpus: seen set(doc) for tok in seen: idx vocab.get(tok) if idx is not None: df[idx] 1 return df def compute_idf(df, N, smoothTrue): compute idf smooth True idf log((N1) / (df1)) 1 df df.astype(np.float64) if smooth: return np.log((N 1.0) / (df 1.0)) 1 else: #note: if df0, this will be inf; in practice, vocab comes from corpus so df 0. return np.log(N / df) def _tf_value(count, doc_len, variant): compute TF in a single token in a doc. if count 0: return 0.0 if variant raw: return count if variant freq: return float(count) / float(doc_len) if variant log: return np.log(float(count)) 1.0 raise ValueError(funknown TF variant: {variant}) def compute_tfidf(corpus, vocab, idf, tf_variantlog): return dense tf-idf matrix X with shape (N, V) N len(corpus) V len(vocab) X np.zeros((N, V), dtypenp.float64) for i, doc in enumerate(corpus): doc_len len(doc) counts {} for tok in doc: j vocab.get(tok) if j is None: continue counts[j] counts.get(j, 0) 1 for j, c in counts.items(): tf _tf_value(c, doc_len, tf_variant) X[i, j] tf * float(idf[j]) return X def l2_normalize_rows(X, eps1e-12): Row-wise L2 normalization norms np.linalg.norm(X, axis1, keepdimsTrue) return X / (norms eps) vocab build_vocab(corpus) df compute_df(corpus, vocab) idf compute_idf(df, Nlen(corpus), smoothTrue) X compute_tfidf(corpus, vocab, idf, tf_variantlog) X_norm l2_normalize_rows(X) print(vocab, df, idf, X, X_norm) print(\n\n) #Pretty print inv_vocab {i: t for t, i in vocab.items()} terms [inv_vocab[i] for i in range(len(inv_vocab))] print(Vocab order:, terms) print(df:, df.tolist()) print(idf:, np.round(idf, 4).tolist()) print(\nTF-IDF (dense):) print(np.round(X, 4)) print(\nTF-IDF (L2-normalized):) print(np.round(X_norm, 4))运行结果6.QAQ IDF 为什么有用提示区分性、信息量、抑制停用词AIDF 用来衡量一个词在全语料层面的区分能力。如果一个词在几乎所有文档中都出现df 很大它携带的信息量很低无法区分文档应当 被压低权重反之只在少数文档中出现的词更具判别性。因此 IDF 通过对高 df 词施加惩罚抑制停用词的干扰放大“主题词”的影响使 TF-IDF 更关注能区分文档的特征。Q 为什么要对数/归一化 TF提示重复词、文档长度偏置ARaw TF 会带来两个问题长文档天然数值更大以及词频重复会线性放大权重。Length-normalized TF 通过除以文档长度消除了文档长短带来的偏置使权重反映“相对重要性”而非“绝对次数”。Log TF 则引入边际收益递减避免某个词通过大量重复主宰向量但仍保留“出现过 vs 未出现”的关键信号。Q稀疏向量的工程影响提示内存、矩阵乘法、倒排索引/稀疏矩阵ATF-IDF 向量维度等于词表大小而单篇文档只包含极少数词因此向量高度稀疏。工程上如果用 dense 表示会造成巨大内存浪费和无效计算实际系统通常采用稀疏矩阵或倒排索引。这种表示可以显著降低存储成本并加速相似度计算和检索是搜索引擎和文本检索系统的基础。Q你会怎么处理 OOV做法 A忽略 OOV线上检索/匹配时可能还行做法 B用 UNK 统一映射做法 C子词/字符级到后面 wordpiece/BPE 再系统讲写出你更倾向哪种以及理由。A优先选择做法 C子词 / 字符级建模必要时结合 B 作为兜底。理由:从根本上解决 OOV 问题.子词BPE / WordPiece可以把任何新词拆解理论上几乎不存在 OOV。信息损失最小泛化能力更强.相比 UNK 把所有未知词混为一类子词保留了词形和语义组合信息模型能对未见词做合理推断。特别适合中文和专业领域.中文新词多、组合灵活子词/字符级比词级更鲁棒。工业界与主流模型的事实标准.BERT、GPT 等主流模型都采用子词方案工程上成熟可靠。A忽略 OOV只适合检索或规则系统不适合作为模型建模方案B实现简单但语义信息损失大只适合作为兜底

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询