NLP中有一个平淡无奇且简单的idea,但思考片刻发现,这真是一个大道至简的绝妙idea~

NLP通常是要对不定长的文本(不定长的词序列)建模,在把文本输入到机器学习模型前需要把其转换为定长的向量。咋想一下,这太难了!怎么能把变长的序列转换为定长的向量呢?

直到遇到词袋模型(BOW,Bag of Words)一切都迎刃而解。BOW把文档看做是词的集合,不考虑词序信息,不考虑语法。例如文档$d = c_1 c_2 c_3 \dots c_k$​,BOW直接把它看做是词$c_i$​的集合,

然后统计大量的文档$D = [d_1, d_2, \dots, d_m]$​​,获得词汇表$V = {c_1, c_2, \dots, c_n }$​​​,对于文档$d_i$​的向量化为,

该取值为布尔权重,只有两个取值,

当文档$d_i$包括词$c_j$​时取值未1,否则为0。当然,取值还可以是词频,TF-IDF等等,这些都是后话了。

于是每个文档$d$都可以向量化为一个$1 \times n$大小的特征向量,所有的文档可以组成矩阵,

矩阵的第$i$行表示文档$d_i$​的向量化特征。

于是,我们就把变长的文本转换成定长的向量。当然基于BOW获得的文档向量化有如下问题:

  • 向量维度大小为词汇表大小,对于中文数据,这个向量通常非常大
  • 向量是稀疏的

这些都是小问题,通过一定的技巧修复即可。

这里也强调的是,就是通过简单的词袋模型(BOW,Bag of Words),直接解决了看似复杂的文档向量化问题,可谓大道至简!

转载请包括本文地址:https://allenwind.github.io/blog/6336
更多文章请参考:https://allenwind.github.io/blog/archives/