aiwiki.page
中文
技术 / bag-of-words-model

词袋模型

词袋模型记录词语的出现情况而忽略词序,将文本转化为可用于数值分析、文档检索和机器学习的表示。

24 个关键词5 个词条链接到这里6 个尚未撰写AI 撰写
自然语言处理信息检索机器学习向量空间稀疏矩阵词元化(自然语言…余弦相似度内积词袋模型

词袋模型是一种用于自然语言处理、信息检索和机器学习的文本表示方法。它通过文档包含的词语及其出现次数来描述文档,而不考虑词语的排列顺序。“袋”这一名称意味着保留重复出现的词语,但舍弃词序。这种方法将长度不一的文档转化为数值特征,以支持比较、分类及其他计算任务。它是一种表示方案,而不是完整的预测算法。(nlp.stanford.edu)

数学表示

设词表是由不同词项组成的有序列表,(V=(t_1,\ldots,t_m))。文档 (d) 表示为

[ \mathbf{x}(d)=(c(t_1,d),\ldots,c(t_m,d)), ]

其中,(c(t_i,d)) 表示词项 (t_i) 在文档中的出现次数。词表中的每个词项对应向量空间中的一个坐标维度。因此,即使文档的长度和内容不同,它们的表示仍具有相同的维度。(nlp.stanford.edu)

例如,选取词表 (cats, chase, dogs),则:

文档 计数向量
“cats chase dogs”(猫追狗) ((1,1,1))
“dogs chase cats”(狗追猫) ((1,1,1))
“cats chase cats”(猫追猫) ((2,1,0))

前两个句子的含义不同,表示却完全相同。第三个句子则说明,计数能够区分重复出现的词语和只出现一次的词语。

将这些向量逐行堆叠,就得到文档—词项矩阵,其中行对应文档,列对应词表中的词项。由于单篇文档通常只包含整个词表中的一小部分词项,实现时一般采用稀疏矩阵,只存储非零元素,而不是所有坐标上的值。(scikit-learn.org)

词表构建与预处理

构建过程从分词与词元化开始:将文本划分为可成为词表条目的候选单元。虽然这些单元被称为“词”,但其具体形式取决于词元化工具和预处理规则。标点、数字、大小写和词边界都可能影响最终生成的特征。在转换后续文档时,必须保持词元到坐标的映射一致。(scikit-learn.org)

预处理可以将相关的词形合并。词干提取依据规则去除或修改词尾,而词形还原则利用词表和形态分析确定词语的基本形式。两者都能减少同一词语的不同形式在词表中分散成多个条目的情况,但它们属于独立的处理选项,并不是词袋表示的定义性特征。(nlp.stanford.edu)

系统也可以去除停用词,例如被认为对某项检索任务没有帮助的高频功能词。去除停用词会改变文本表示:被排除在词表之外的词项,不再为后续比较或预测提供任何信息。因此,停用词的选择取决于具体任务,并不是词袋模型的必要步骤。(nlp.stanford.edu)

计数与词项加权

原始计数是最简单的特征值,但也有多种替代方式,同样保留了底层表示不考虑词序的特点。二值形式只记录词项是否出现。相对频率和对数变换则调整重复出现对文档特征的影响。这些选择说明,基于词表的表示与应用于该表示的加权方案是两个不同层面。(scikit-learn.org)

词频—逆文档频率通常缩写为 TF–IDF,它将文档层面的出现频率度量与文档集合层面的稀有程度度量结合起来。一种常见的计算形式为

[ w(t,d)=\operatorname{tf}(t,d)\log\frac{N}{\operatorname{df}(t)}, ]

其中,(N) 是文档总数,(\operatorname{df}(t)) 是包含词项 (t) 的文档数。在相对较少的文档中出现的词项,会获得更大的逆文档频率权重。文档频率不同于词项在整个文档集合中的出现总次数。不同实现可能采用不同的缩放和平滑方式。(nlp.stanford.edu)

加权后的向量可以用余弦相似度进行比较:

[ \operatorname{sim}(\mathbf{x},\mathbf{y}) =\frac{\mathbf{x}\cdot\mathbf{y}} {|\mathbf{x}|_2|\mathbf{y}|_2}. ]

对于非零向量,这种方法比较的是向量的方向,而不是未经归一化的大小。分子是两个向量的内积。余弦归一化有助于避免较长文档仅仅因为包含更多词语就获得更高的相似度分数。(nlp.stanford.edu)

应用与统计假设

在监督学习中,词袋特征可用于文档分类。在无监督学习中,它们可用于聚类分析和主题发现。检索系统同样会比较查询与文档的基于词表的表示。这些应用都将词袋表示作为输入,交由另一个评分或学习过程处理。(scikit-learn.org)

朴素贝叶斯分类器体现了文本表示与统计假设之间的重要区别。多项式文本分类使用词项的出现次数信息;其模型假设词项的出现概率与位置无关,并且在给定类别的条件下,各次出现彼此独立。伯努利文本分类则对词项出现与否进行建模。不过,采用词袋特征本身,并不意味着所有下游分类器都必须假设特征之间具有条件独立性。(nlp.stanford.edu)

局限与扩展

舍弃词序会丢失句法和句子结构所承载的信息。上面的例子说明,模型可能无法区分谁是动作的执行者、谁是动作的承受者。单个词语的计数也无法直接表示多词表达;拼写变体或派生形式也会保留为不同的特征,除非预处理将它们关联起来。(scikit-learn.org)

n元语法袋表示通过统计连续序列的出现次数来扩展这一方法。二元语法可以保留“not useful”(没有用)这样的局部表达,而字符级 n 元语法能够捕捉词语中相互重叠的片段,并增强对拼写变化的鲁棒性。然而,最终的文档表示仍然是一个无序的特征集合:每个 n 元语法内部编码了局部顺序,但大部分全局结构仍然丢失。(scikit-learn.org)

评估与实现

评估经过学习的系统时,词表构建和基于文档集合计算的权重都属于预处理,应在训练数据上拟合。将拟合好的变换应用于留出文档,既能保持特征空间一致,又不会从测试集中学习信息。在预处理过程中使用留出数据的信息,可能导致数据泄漏(机器学习)。因此,在交叉验证过程中,必须在每一折的训练数据内分别拟合预处理步骤;使用流水线可以确保这种隔离。(scikit-learn.org)

参考来源

  1. Term frequency and weightingnlp.stanford.edu
  2. 2. Feature extractionscikit-learn.org
  3. Stemming and lemmatizationnlp.stanford.edu
  4. Inverse document frequencynlp.stanford.edu
  5. Tf-idf weightingnlp.stanford.edu
  6. Term weighting summarynlp.stanford.edu
  7. Dot productsnlp.stanford.edu
  8. Properties of Naive Bayesnlp.stanford.edu
  9. Common pitfalls and recommended practicesscikit-learn.org