自然语言处理-第三期-Bag of Word
Posted 好奇宝宝与机器学习
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自然语言处理-第三期-Bag of Word相关的知识,希望对你有一定的参考价值。
背景
前两期提到了NLP面对的问题还有情感分析的一个最最基础的方法。 希望有引起大家的兴趣。
本期给大家介绍 Bag of Word 词袋法。这是将词转化为向量。
老规矩,我们将按照 解析面对的问题------->解析方法解决该问题的内在逻辑-------->该方法的优缺点 的顺序。
Bag of Word 词袋法
面对的问题
NLP面对的问题当然是语言处理。但是在第一期有提到,自然语言是Symbol或者说是符号化。Rocket之所以为火箭是因为大家约定俗成所致。
所以换一个角度看这个问题,人类语言虽然都是符号,但是其背后是有规律的或者共性的。比如“北京”,“上海”都代表着地方。所以自然语言处理是要找到其背后的特性;
上一段提到的是NLP的大目标,更进一步,我们非常粗略的将其分为 原始语言处理 和 分类及学习 两部分。我自己的简单理解是,原木加工成木材,木材加工成家具。 今天我们要涉及的是第一部分,原木加工部分。
一段文字,比如'I',"love","Music". 这段文字对于机器来说,就是原木,无法直接使用。那么首先,要做的就是将其变成向量。
我之前有一个疑问,能理解为什么机器不能直接处理文本,但是为什么要转化为【0,1,1,1,1】这种向量,为什么不用自然数1,2,3,4 来代替呢?
可能是问题比较傻,我也没有找到标准答案。我自己的理解:
最重要的原因是多维数据能有更多的含义,比如我们站在“北京”,“上海”,“广州” 这个维度。假设要数学上表达这三个词意思相近,100维度的向量很容易就能涵盖。但是如果是1,2,3,4 就很困难了。 比如1是北京,2是上海,3是广州,那代表着北京与上海的意思表达 比 北京与广州 更接近?
另一个理解就是,如果是1,2,3,4 实际上就是一维度数据,这其实也是某种程度上的Symbolize符号化,只是换了个样子。机器对其能做的也就是调换下顺序,整数变小数等等。
Bag of Word内在逻辑
OK,上一段确定了,我们需要将文本向量化。 那么下一个问题是How? 如何向量化呢?
其实转化为向量,最直接的问题就是,如何确定向量的纬度,如何确定每个纬度的数字。 Bag of Word 提供了一个简单的思路。
提取出文本独特的word,然后给每个word赋予一个one hot vector,即【0,0,0,0,1】这种只有一个维度为1,其他为0。这类似于建立了一个词库;
在有一个词库之后,每个句子对应的向量就出来了。
下面举个例子来说明,假设我们有以下这个文本库:
“It was the best of times”
“It was the worst of times”
“It was the age of wisdom”
“It was the age of foolishness”
那么我们的词库就是【‘It’, ‘was’, ‘the’, ‘best’, ‘of’, ‘times’, ‘worst’, ‘age’, ‘wisdom’, ‘foolishness’】10个数字
那么“It was the best of times” 对应的向量就是【1,1,1,1,1,1,0,0,0,0】
如果是“It was the best best of times” 对应的向量是【1,1,1,2,1,1,0,0,0,0】
Bag of word 的解决办法真的很直接,不是要向量吗? 我就把所有的词丢到一起,做一个大的向量。然后就出来了。
我个人看到这里的时候,有想到一个问题,为什么要这么转换向量呢? 虽然感觉简单但是总觉得哪里不对?
个人思考的结果:首先,这个问题的思路就反了。 正确的思路顺序是 我们拿到纯文本无法处理,需要转化为向量。 Bag of Word提出了某种思路,将其向量化。 然后,我们再需要考虑这个方案的优缺点。 最后,我们如何评价这个方法最终是以应用结果来看的,并不是太简单之类的。
Bag of Word 优缺点
优点:
很明显,Bag of Word的最明显的优点就是简单,方便。除了初始词库建立起来简单,如果新增一个词也能做到很简单;
从结果来看,很多不大样本的情况下,其准确率也很可观。具体的数据我并没有验证,但是通过学习资料的得出的结论;
缺点:
Bag of Word第一个缺点是,其只关注了词出现的次数,并没有考虑其顺序;
其实Bag of Word最大的缺点是在于Sparsity(稀疏,太离散)。这个大家肯定能想象到,当出现一个大样本的情况下,词库的数量级可能达到10000+,这种情况下‘I love Musc' , 可能是【1,1,1,0,0,0........】 10000纬的数据里面只有三个数字代表。这种情况最直接的后果是,1. 效率低, 当你做了10000次矩阵运算实际上只得到三个数, 2. 内存不够用
下期预告
本期bag of word的方法是类似于将词变成one hot vector 【0,0,0,1】这种形式。其最大的问题也很明显,就是Sparsity 太离散。
那么解决的思路也很直接,那就是降低纬度,矩阵中不再是0,1 而是自然数。那么这个问题自然就迎刃而解了。
Word2Vec提供了一种普遍接受的思路,下一期会给大家带来
原创码字,感兴趣的朋友请关注~
以上是关于自然语言处理-第三期-Bag of Word的主要内容,如果未能解决你的问题,请参考以下文章
第63讲 Python自然语言处理(NLP)—word2vec
论文阅读:《Bag of Tricks for Efficient Text Classification》
词袋模型(BOW,bag of words)和词向量模型(Word Embedding)概念介绍
R语言构建文本分类模型:文本数据预处理构建词袋模型(bag of words)构建xgboost文本分类模型基于自定义函数构建xgboost文本分类模型