文本特征提取

注:翻译自 scikit-learn 的 User Guide 中关于文本特征提取部分。

1. 词袋(Bag of Words)表示

文本分析是机器学习的一大应用领域,但是长度不一的字符序列是无法直接作为算法的输入。为了解决这个问题,scikit-learn 提供了几个常用的文本特征提取的方法:

  • 将字符串切分(tokenize),比如利用空格和标点符号进行切分(中文需要额外的分词),并给每一个潜在的分词分配一个 ID
  • 统计分词在每一个文本中的出现的次数(count)
  • 对统计出的词频进行归一化(normalization)或者加权(weight)以消除常见词的影响。

在这个框架下,特征和样本定义为:

  • 每个单词的(归一化的)词频作为特征
  • 对一篇给定的文档,由这个文档的词频构成的向量视为样本

如此,一个预料库可以由一个矩阵表示,它的行代表了一篇文档,它的列则表示一个单词在这个文档中出现的频率。

我们称这种将文本转换为数值特征向量的处理为向量化,这个策略(分词 tokenization、计数 counting 和归一化 normalization)称为词袋模型。词袋模型忽视了词与词之间的位置信息

2. 稀疏性(Sparsity)

大部分文档只使用了语料库中非常小的一部分单词,导致的结果就是矩阵中绝大部分(大于99%)的特征数值都是零。为了可以存储这个大型矩阵同时加速代数运算,我们必须采用稀疏表示,比如采用 scipy.sparse 包

3. 常用向量化工具(Vectorizer)用法

CountVectorizer 在一个类内实现了分词和计数

from sklearn.feature_extraction.text import CountVectorizer

CountVectorizer 有很多参数,但是默认参数是很合理的

vectorizer = CountVectorizer()

下面我们在一个小语料上,尝试下 CountVectorizer

corpus = [
     'This is the first document.',
     'This is the second second document.',
     'And the third one.',
     'Is this the first document?',
     ]
X = vectorizer.fit_transform(corpus)

你可能感兴趣的:(自然语言处理)