将文本转换为适合机器学习 (machine learning)算法的数值特征向量 (vector)有几种基本方法,包括词袋模型 (BoW)、TF-IDF 加权、N-gram 纳入、特征哈希以及像 SVD 这样的降维方法。每种方法都有其自身的优缺点,因此选择哪种方法取决于您的具体任务、数据集规模、计算资源和预期结果。此处将从几个重要方面比较这些方法。
文本表示中的主要权衡
在选择文本表示方法时,请考虑以下因素:
- 词义: 该表示法能否捕捉词语的实际含义或它们之间的关系?
- 上下文 (context)/词序: 词语的顺序是否得到保留或运用?
- 维度: 该表示法生成多少特征?是固定的还是取决于数据?
- 稀疏性: 生成的特征向量 (vector)是否大多由零填充?
- 计算成本: 生成和存储这些特征需要多少时间和内存?
- 可解释性: 我们能多容易地理解每个特征代表什么?
让我们看看我们讨论过的方法表现如何。
词袋模型 (BoW)
- 词义: 无。BoW 将词语视为独立单元,忽略同义词或相关构想。“Car”和“automobile”是不同的特征。
- 上下文/词序: 完全丢失。“狗追猫”和“猫追狗”在词汇表 (vocabulary)相同的情况下,可以有相同的 BoW 表示。
- 维度: 等于词汇量大小。对于大型语料库,维度可能变得非常高(数万或数十万)。
- 稀疏性: 通常非常高。大多数文档只包含总词汇量的一小部分。
- 计算成本: 计算词频相对较低。内存使用取决于维度和存储格式(稀疏矩阵必不可少)。
- 可解释性: 高。每个特征直接对应于特定词语的计数。
BoW 简单且常是一个好的起点,但其对词义和词序的忽视限制了它在许多任务上的作用。
词频-逆文档频率 (TF-IDF)
- 词义: 仍然没有,继承了 BoW 的局限性。
- 上下文/词序: 也已丢失,就像 BoW 一样。
- 维度: 与 BoW 相同(词汇量大小)。
- 稀疏性: 与 BoW 相同(非常高)。
- 计算成本: 略高于 BoW,因为需要计算整个语料库的 IDF 分数,但通常易于管理。内存使用相似。
- 可解释性: 高。特征对应词语,值代表计算出的重要性(根据文档频率调整的词频)而非原始计数。
TF-IDF 在 BoW 的基础上通过加权词语,通常能在文档检索和分类等任务中带来更好的表现,因为它强调了文档特有的词语。关于词义和词序的主要局限性仍然存在。
N-gram (与 BoW 或 TF-IDF 结合使用)
- 词义: 仍然有限。它捕捉 N-gram 窗口内的共现情况,但不理解更深层次的词义关系。
- 上下文/词序: 捕捉 N-gram 窗口内的局部词序(例如,“New York”与“York New”)。未能捕捉长距离依赖关系。
- 维度: 显著增加维度。词汇表现在包含 N 个词语的序列,这会呈组合式增长。
- 稀疏性: 稀疏性进一步增加,因为特定的 N-gram 出现的频率低于单个词语。
- 计算成本: 由于特征集大幅扩展,计算和内存需求更高。
- 可解释性: 中等。单个 N-gram 特征(例如“New York”)是可解释的,但其数量巨大可能使整个模型更难分析。
使用 N-gram(通常是二元和三元 N-gram)是一种向 BoW/TF-IDF 模型注入部分上下文的方法。当短语重要时,它特别有用,但代价是维度会明显升高。
特征哈希 (哈希技巧)
- 词义: 无。它纯粹是一种应用于特征(如词语或 N-gram)的降维方法。
- 上下文/词序: 取决于被哈希的输入特征。如果哈希 BoW,则无上下文。如果哈希 N-gram,则在哈希前保留局部上下文。
- 维度: 由用户固定和预先设定(哈希空间的大小)。这是控制内存使用的一个主要优势。
- 稀疏性: 可以是稠密的或稀疏的,取决于哈希大小和输入数据分布。通常比高维度的 BoW/TF-IDF 稀疏性低。
- 计算成本: 计算量非常低(哈希速度快)。由于维度固定且通常较小,内存效率极高。适合词汇表无需预先知道的在线学习场景。
- 可解释性: 低。哈希冲突是固有的,意味着多个原始特征(词语/N-gram)可以映射到相同的输出特征索引。很难或不可能准确知道特定哈希特征代表了哪些原始特征。
特征哈希在处理大量特征集或严格内存限制时很有价值。其主要缺点是可解释性的丧失。
降维 (例如:TF-IDF 上的 SVD/LSA)
- 词义: 可以捕捉一些潜在的词义关系。通过分解词项-文档矩阵,SVD 等方法可以将含义相似的词项和文档归类到相同的维度,即使它们不共享完全相同的词语。这是潜在语义分析 (LSA) 的根本。
- 上下文/词序: 仍然主要基于 BoW/TF-IDF 输入,因此固有的词序会丢失,尽管生成的维度可能隐含地捕捉到一些共现模式。
- 维度: 减少到预先设定的潜在维度数量(例如,100-300),通常远低于原始词汇量大小。
- 稀疏性: 生成稠密特征向量。
- 计算成本: 降维步骤本身(例如,执行 SVD)可能计算成本较高,特别是在大型矩阵上。使用降维后的向量速度很快。
- 可解释性: 低。生成的维度是原始特征(词语)的抽象组合,没有清晰的独立含义。
将 SVD 等降维方法应用于 TF-IDF 矩阵,是一种创建稠密、低维度表示的方法,有时可以显现出潜在的词义结构 (LSA)。它以可解释性换取紧凑性和潜在的词义理解,但在降维步骤中需要大量计算。
总结比较
| 特征 |
BoW |
TF-IDF |
N-gram (与 BoW/TF-IDF 结合) |
特征哈希 |
SVD/LSA (基于 TF-IDF) |
| 捕捉词义? |
否 |
否 |
否 (仅共现) |
否 |
部分(潜在) |
| 捕捉词序? |
否 |
否 |
仅局部 |
取决于输入 |
否 (可能隐含) |
| 维度 |
高(词汇量大小) |
高(词汇量大小) |
非常高 |
固定(用户定义) |
低(用户定义) |
| 稀疏性 |
非常高 |
非常高 |
极高 |
可变(通常稠密) |
稠密 |
| 计算成本 |
低 |
低到中等 |
高 |
非常低(哈希) |
高(降维步骤) |
| 可解释性 |
高 |
高 |
中等 |
低(冲突) |
低(抽象维度) |
文本表示方法在主要特征方面的比较。
选择合适的方法
没有一种“最佳”方法;理想的选择在很大程度上取决于您的目标:
- 简单开始/作为基线: BoW 或 TF-IDF 是极佳的起点,因为它们简单且可解释。TF-IDF 通常优于 BoW。
- 短语的重要性: 如果像“机器学习 (machine learning)”或“纽约市”这样的序列很重要,请将 N-gram 添加到您的 BoW/TF-IDF 表示中,同时注意维度增加的代价。
- 海量数据集/内存限制: 特征哈希提供了一种在固定内存限制内处理庞大特征空间的方法,但牺牲了可解释性。
- 捕捉部分词 (tokenization)义(预嵌入 (embedding)): 将 SVD/LSA 应用于 TF-IDF 可以创建更稠密的向量 (vector),捕捉一些词义相似性,但其计算量更大,可解释性较差。现代嵌入技术(稍后介绍)通常是当今捕捉词义的优选方法。
- 需要可解释性: 如果您需要解释模型为何基于特定词语的出现或其重要性做出某些预测,请坚持使用 BoW 或 TF-IDF(可能结合精心选择的 N-gram)。
理解这些权衡可以帮助您在构建 NLP 流程时做出明智的决定。随着后续学习,您将遇到更复杂的方法,如词嵌入,它们直接解决了这些基于频率的方法在词义方面的局限性。然而,本章介绍的技术仍然是基本的方法,并且仍然被广泛使用,特别是在作为基线或在资源受限的环境中。