在NLP之词袋模型一中介绍了最基本利用词袋模型(Bag of Words)进行词向量表达对方法,本文介绍几种提升词袋模型性能的方法。
提升词袋模型性能的方法主要在以下几个方面:
- 词袋的管理
- 词向量表达方法的选择
词袋的管理
管理词袋包括:词袋的创建、词袋的维护。
为了更好的管理词袋,我们首先考虑以下几个方面:
- 词袋可能会很大,特别是当我们处理较多文本的时候。
- 词袋很大的话,容易导致词向量比较稀疏(即0值特别多)。
因此,通过合理的方法压缩词袋的大小是很有必要的。压缩词袋的方法包括且不限于:
- 忽略人名、地名等对象的名字
- 忽略标点符号
- 忽略高频且无意义的词,如:a,the,的,了
- 自动改正拼写错误的词
- 将单词的变形(如过去式、过去分词)统一转化为词干
- 。。。
此外,还有一种略微复杂点的方法:用词组来组成词袋。以前词袋中是一个个的单词,现在换成词组的形式,不仅可以减少词袋的size,而且会更有意义。这种方法就是N-gram。
N-gram
什么是N-gram,看下面几个例子就明白了。
2-gram下对上文第一句话的分词:
“it was”
“was the”
“the best”
“best of”
“of times”
词向量表达方法的选择
词向量中值的分值(数值大小)
一旦选择了词汇表,就需要对示例文档中单词的出现进行评分。
在上文的示例中,我们已经看到了一种非常简单的评分方法:对单词存在与否的二进制评分。
还有一些额外的简单评分方法包括:
- 计数:计算每个单词在文档中出现的次数。
- 频率:计算文档中所有单词中每个单词出现在文档中的频率。
使用hash算法
计算机科学中的哈希函数是一种将数据映射到固定大小的数字集的数学运算。我们可以使用hash(word)的值来表示文本。 这解决了对于大文本语料库具有非常大的词汇表的问题,因为我们可以选择哈希空间的大小,进而降低hash后的词向量的维度和稀疏程度。
Google提出的word2vec算法本质上就是一种hash算法。
TF-IDF
对单词频率进行评分的问题在于,高频率的单词在文档中开始占主导地位(例如,较大的分数),但它所包含的信息量可能没有一些中频率的单词来得多。比如在科研论文的分类里,论文中的常常会多次提及一项技术的专有名词,但该专有名词的词频可能仍然低于“验证”,“研究”这种词。
一种方法是通过它们在所有文档(即语料库)中出现的频率来重新调整单词的频率,对那些在所有文档中频繁出现的频繁单词(如“the”)的分数进行一定的衰减。这种评分方法称为TF-ID