一个绝妙的idea:变长文本序列转换成定长向量
文章目录
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/