7

一个绝妙的idea:变长文本序列转换成定长向量

 3 years ago
source link: https://allenwind.github.io/blog/6336/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client
Mr.Feng Blog

NLP、深度学习、机器学习、Python、Go

一个绝妙的idea:变长文本序列转换成定长向量

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

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

直到遇到词袋模型(BOW,Bag of Words)一切都迎刃而解。BOW把文档看做是词的集合,不考虑词序信息,不考虑语法。例如文档d=c1c2c3…ckd=c1c2c3…ck​,BOW直接把它看做是词cici​的集合,

dbow={c1,c2,…,ck}dbow={c1,c2,…,ck}

然后统计大量的文档D=[d1,d2,…,dm]D=[d1,d2,…,dm]​​,获得词汇表V=c1,c2,…,cnV=c1,c2,…,cn​​​,对于文档didi​的向量化为,

vetorize(di)=[wi,1,wi,2,…,wi,n]vetorize⁡(di)=[wi,1,wi,2,…,wi,n]

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

wi,j={10wi,j={10

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

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

Dm,n=⎡⎢ ⎢ ⎢ ⎢ ⎢⎣w1,1w1,2…w1,nw2,1w2,2…w2,n⋮⋮⋮⋮wm,1wm,2…wm,n⎤⎥ ⎥ ⎥ ⎥ ⎥⎦Dm,n=[w1,1w1,2…w1,nw2,1w2,2…w2,n⋮⋮⋮⋮wm,1wm,2…wm,n]

矩阵的第ii行表示文档didi​的向量化特征。

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

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

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

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

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


Recommend

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK