Hexo

凡事预则立,不预则废


  • Home

  • Tags

  • Archives

  • Navigation

  • Search

Hexo——Next主题搜索窗口无法弹出

  • 参考博客: https://www.sqlsec.com/2017/12/hexosearch.html

问题描述

  • 有时候会遇到在Mac上Next主题窗口无法弹出的问题
  • 问题分为两类
    • 一类为找不到 search.xml 文件:加载 search.xml 时错误为404
    • 另一类为文章中有特殊字符:加载 search.xml 检查时错误为304

解决方案

404类

  • 修改最外层配置文件./_config.yml,添加以下语句(实测这一步非必须)

    1
    2
    3
    4
    5
    search:
    path: search.xml
    field: post
    format: html
    limit: 10000
  • 安装搜索插件

    1
    npm install hexo-generator-searchdb --save

304类

  • 304状态说明是加载文件存在,但是无法正常解析文件
  • 直接用浏览器访问 search.xml 文件链接,然后查看文件解析异常出现在哪个地方,然后删除特殊字符即可
    • 个人理解,从哪个文件不能搜索,特殊字符就出现在哪个文件中
    • 说明:目前还没遇到过这种情况,后面遇到会再补充

NLP——困惑度-Perplexity-PPL

本文主要介绍困惑度(Perplexity,简称为 PPL)在语言模型评估中的作用


困惑度的整体说明

  • 困惑度(Perplexity,PPL)本质是交叉熵损失 \(H(p|q)\) 的一个等价指标
    $$\text{Perplexity} = e^{H(p|q)}$$

    • 其中 \(H(p|q)\) 衡量真实标签和模型输出概率之间的差异
  • 语言模型中损失函数即交叉熵损失,此时有 \(loss = H(p|q)\),即:
    $$\text{Perplexity} = e^{\text{loss}}$$

    • 特别是预训练和 SFT 阶段,一般符合这个情况,RL 阶段则根据不同的损失归一化方式有所不同
    • 注:一般语言模型中是先计算单个样本的困惑度(对应指数上是单个样本的 Loss),然后再平均后上报
    • 参考链接:How to calculate perplexity for a language model using Pytorch, StackOverflow
      1
      perplexity = torch.exp(loss)
  • 给测试集的句子赋予较高概率值的语言模型较好,在测试集上困惑度越小,模型越好

  • 当一个语言模型训练完成后,测试集中的句子(一般是正常的自然语言句子)出现概率越高越好,概率越大,困惑度越小

  • 在当前 LLM 的强化学习场景中,因为样本 Response 是从当前策略采样得到的,此时直接计算无偏估计即可得到熵的近似:

    • 注:原本计算单个 Token 的熵是需要遍历所有词表的:
      $$ H_t(\pi) = - \sum_{v \in \mathcal{V}}\log \pi(v|x,y_{< t}) $$
    • 由于 \(y_t\) 是从当前策略 \(\pi\) 采样得到的,于是这里可以使用单个 Token 的熵的无偏估计
      $$ H_t^{\text{sampled}}(\pi) = - \log \pi(y_t|x,y_{< t}) $$
      • 可以看到这个值就是交叉熵损失函数的定义(当然,RL 中没有交叉熵损失,这里只是说形式一样)
    • 由于 PPL 此时等于:
      $$ \text{Perplexity} = e^{H(p|q)} = e^{(H_t^{\text{sampled}}(\pi))} $$
    • 故而进一步有,这里的 \(H_t^{\text{sampled}}(\pi)\) 和 PPL 的对数一致,即:
      $$ \log(\text{Perplexity}) = H(p|q) = H_t^{\text{sampled}}(\pi) $$
      • 在 RL 训练时的上报动态中可以看到,在使用 \(H_t^{\text{sampled}}(\pi)\) 作为熵的近似估计时,\(\log(\text{Perplexity})\) 和 \(H_t^{\text{sampled}}(\pi)\) 的上报值完全相等

单文档困惑度的定义

  • 给定模型 \(\mathcal{M}\),测试文档 \(d = (w_{1}, w_{2},\cdots,w_{N})\),则模型 \(\mathcal{M}\) 下评估测试文档 \(d\) 的困惑度 \(\text{Perplexity}_\mathcal{M}(d)\) 原始定义为:
    $$
    \begin{align}
    \text{Perplexity}_\mathcal{M}(d) &= P_\mathcal{M}(d)^{-\frac{1}{N}} \\
    &= P_\mathcal{M}(w_{1}, w_{2},\cdots,w_{N})^{-\frac{1}{N}}
    \end{align}
    $$
  • 常常会使用以下形式:
    $$ \text{Perplexity}_\mathcal{M}(d) = \exp\left (-\frac{1}{N}\log P_\mathcal{M}(w_{1}, w_{2},\cdots,w_{N})\right ) $$
  • 进一步有:
    $$
    \begin{align}
    \text{Perplexity}_\mathcal{M}(d) &= \exp\left (-\frac{1}{N}\log P_\mathcal{M}(w_{1}, w_{2},\cdots,w_{N})\right ) \\
    &= \exp\left (-\frac{1}{N}\log\prod_{n=1}^{N}P_\mathcal{M}(w_{n}|w_1,\cdots,w_{n-1})\right ) \\
    &= \exp\left (-\frac{1}{N}\sum_{n=1}^{N}\log P_\mathcal{M}(w_{n}|w_1,\cdots,w_{n-1})\right ) \\
    \end{align}
    $$
    • 计算时,常常使用上面加法的形式
  • 以上多种形式等价,两边取对数在变成自然数的指数即可证明:
    • 取对数:
      $$
      \begin{align}
      Log(\text{Perplexity}_\mathcal{M}(d) ) &= -\frac{1}{N}\log P_\mathcal{M}(w_{1}, w_{2},\cdots,w_{N}) \\
      \end{align}
      $$
    • 变指数:
      $$
      \begin{align}
      \text{Perplexity}_\mathcal{M}(d) &= e^{-\frac{1}{N}\log P_\mathcal{M}(w_{1}, w_{2},\cdots,w_{N})} \\
      &= \exp\left (-\frac{1}{N}\log P_\mathcal{M}(w_{1}, w_{2},\cdots,w_{N})\right ) \\
      \end{align}
      $$
    • 特别说明,一些地方会将对数和指数的底同时换成 2,实际上从推导上看,可以换成任意底数

多文档困惑度的定义

  • 基本思路:将多文档拼接起来,视作单个文档,然后计算困惑度即可(但需要考虑文档间词概率相互独立)
  • 以上是一个文档的表述,对于多个文档 \(D = (d_{1}, d_{2},\cdots,d_{M})\) ,其中 \(d_m = (w_{1}^{m}, w_{2}^{m},\cdots,w_{N_{m}})\),则多文档的困惑度定义为:
    $$
    \begin{align}
    \text{Perplexity}_\mathcal{M}(D) &= P_\mathcal{M}(D)^{-\frac{1}{\sum_{m=1}^{M}N_{m}}} \\
    &= \left(\prod_{m=1}^{M} P_\mathcal{M}(d_{m})\right)^{-\frac{1}{\sum_{m=1}^{M}N_{m}}}
    \end{align}
    $$
    • 文档之间互相独立,所以能推出上面的结论
  • 也常常写作如下形式
    $$
    \begin{align}
    \text{Perplexity}_\mathcal{M}(D) &= \exp\left(-\frac{1}{\sum_{m=1}^{M}N_{m}}\sum_{m=1}^{M}\log P_\mathcal{M}(w_{1}^{m}, w_{2}^{m},\cdots,w_{N_{m}}^{m})\right) \\
    \end{align}
    $$
  • 进一步可得
    $$
    \begin{align}
    \text{Perplexity}_\mathcal{M}(D) &= \exp \left ( -\frac{1}{\sum_{m=1}^{M}N_{m}}\sum_{m=1}^{M}\log P_\mathcal{M}(w_{1}^{m}, w_{2}^{m},\cdots,w_{N_{m}}^{m}) \right ) \\
    &= \exp \left ( -\frac{1}{\sum_{m=1}^{M}N_{m}}\sum_{m=1}^{M}\log\prod_{n=1}^{N_{m}}P_\mathcal{M}(w_{n}^{m}|w_{1}^{m},\cdots,w_{n-1}^{m}) \right ) \\
    &= \exp \left ( -\frac{1}{\sum_{m=1}^{M}N_{m}}\sum_{m=1}^{M}\sum_{n=1}^{N_{m}}\log P_\mathcal{M}(w_{n}^{m}|w_{1}^{m},\cdots,w_{n-1}^{m}) \right ) \\
    \end{align}
    $$
  • 注意:多个文档的困惑度不是简单的等于所有文档困惑度的积或和 ,而是等于把所有文档合并成一个大文档,大文档的困惑度则是最终所有文档的困惑度
  • 特别说明:一些地方也会使用平均法,使用每个文档的平均困惑度代表示多文档的困惑度

LDA 的困惑度

  • LDA中 \(w_{1},w_{2},\cdots,w_{n}\) 在参数已知的情况下是互相独立的,则有
    $$
    \begin{align}
    \text{Perplexity}_\mathcal{M}(d) &= e^{-\frac{1}{\sum_{m=1}^{M}N_{m}}\sum_{m=1}^{M}\log P_\mathcal{M}(w_{1}^{m}, w_{2}^{m},\cdots,w_{N_{m}}^{m})} \\
    &= \exp \left ( -\frac{1}{\sum_{m=1}^{M}N_{m}}\sum_{m=1}^{M}\log P_\mathcal{M}(w_{1}^{m}, w_{2}^{m},\cdots,w_{N_{m}}^{m}) \right ) \\
    &= \exp \left ( -\frac{1}{\sum_{m=1}^{M}N_{m}}\sum_{m=1}^{M}\log\prod_{n=1}^{N_{m}}P_\mathcal{M}(w_{n}) \right ) \\
    &= \exp \left ( -\frac{1}{\sum_{m=1}^{M}N_{m}}\sum_{m=1}^{M}\log\prod_{n=1}^{N_{m}}\sum_{k=1}^{K}P_\mathcal{M}(w_{n}=t|z_{n}=k;\mathcal{M})P_\mathcal{M}(z_{n}=k|d=d_{m};\mathcal{M})\right ) \\
    &= \exp \left ( -\frac{1}{\sum_{m=1}^{M}N_{m}}\sum_{m=1}^{M}\log\prod_{n=1}^{N_{m}}\sum_{k=1}^{K}\theta_{m,k}\phi_{k,t}\right ) \\
    &= \exp \left ( -\frac{1}{\sum_{m=1}^{M}N_{m}}\sum_{m=1}^{M}\log\prod_{n=1}^{N_{m}}\theta_{m,:}\phi_{:,t}\right ) \\
    &= \exp \left ( -\frac{1}{\sum_{m=1}^{M}N_{m}}\sum_{m=1}^{M}\sum_{n=1}^{N_{m}}\log\theta_{m,:}\phi_{:,t}\right ) \\
    \end{align}
    $$
  • 其中 \(\phi_{k,t}\) 表示单词t在主题k中出现的概率,\(\theta_{m,k}\) 表示主题k在文档m中出现的概率
  • \(\sum_{k=1}^{K}\theta_{m,k}\phi_{k,t} = (\theta_{m,:}\phi_{:,t})\) 就是单词t出现在文档m中的概率(对隐变量主题k积分)
  • 上面式子中 \((\theta_{m,:}\phi_{:,t})\) 就是两个向量的内积,在这里: \(\theta_{m,:}\) 代表行向量,表示当前文档 \(d_{m}\) 的主题分布, \(\phi_{:,t}\) 代表列向量,表示当前每个主题生成词 \(w_{t}\) 的概率
  • 计算公式的代码可参考L-LDA模型的实现GitHub仓库: Labeled-LDA-Python 中的perplexity函数和log_perplexity函数
1…214215216…352
San Ye

San Ye

Stay Hungry. Stay Foolish.

704 posts
53 tags
© 2026 San Ye
Powered by Hexo
|
Theme — NexT.Gemini v5.1.4