下一个排列问题

有时候我们会想要生成一个序列的「下一个排列」或者是「上一个排列」,你会怎么做呢?如果你对 C++ 很熟悉的话,不难想到可以用 next_permutation1prev_permutation2。但是 Python 并没有提供类似的 API。因此今天要探讨的就是如何用 Python 实现这 2 个 API,又因为「上一个排列」和「下一个排列」的方法其实大同小异,因此让我们聚焦其中的「下一个排列」问题

BPE 分词解密 - 实现方法与示例讲解

在 NLP 里面,一个核心的问题是,如何对文本进行分词?从分类的角度上面来说,可以分为:

  • Char level
  • Word level
  • Subword level

先看 Char level 分词,顾名思义,就是把文本拆分成一个个字符单独表示,比如 highest -> h, i, g, h, e, s, t,一个显然的好处是,Vocab 不会太大,Vocab 的大小为字符集的大小,也不会遇到 Out-of-vocabulary(OOV) 的问题,但是字符本身并没有传达太多的语义,而且分词之后会有太多的 token光是一个 highest 就可以得到 7 个 token,难以想象很长的文本分出来会有多少个😨

词袋模型

在 NLP 中,我们需要将文档(document)表示为向量,这是因为机器学习只能够处理数字。也就是说,我们要找到下面这么一个神奇的函数:

$$ f(\text{document}) = vector $$

今天要讨论的是词袋模型(bag-of-word, BoW),词袋模型可以让我们把输入的文档转变成一个向量表示