1. 向量化 

1.1 概念

词袋模型在分词之后,通过统计每个词在文本中出现的次数,就可以得到该文本基于词的特征,如果将各个文本样本的这些词与对应的词频放在一起,就是我们常说的向量化。向量化完毕后一般也会使用TF-IDF进行特征的权重修正,再将特征进行标准化。 再进行一些其他的特征工程后,就可以将数据带入机器学习算法进行分类聚类了。

在词袋模型的统计词频这一步,会得到该文本中所有词的词频,有了词频,我们就可以用词向量表示这个文本。

1.2 向量化方式

(1)One-hot表示方式/词袋模型

优点:

  • 解决了分类器不好处理离散数据的问题
  • 在一定程度上也起到了扩充特征的作用

缺点:

  • 不考虑词与词之间的顺序
  • 其假设词与词之间相互独立(大多数情况下,词与词之间是相互有关联的)
  • 得到的特征是离散稀疏的

(2)N-gram

优点:

  • 考虑了词的顺序,信息量更充分

缺点:

  • 词表迅速膨胀,数据出现大量的稀疏化问题
  • 每增加一个词,模型参数增加40万倍
  • 无法衡量词项量之间的关系

(3)word2vec

3.  Hash Trick

     将文本做了词频统计后,我们一般会通过TF-IDF进行词特征值修订。向量化的方法很好用,也很直接,但是在有些场景下很难使用,比如分词后的词汇表非常大,达到100万+,此时如果我们直接使用向量化的方法,将对应的样本对应特征矩阵载入内存,有可能将内存撑爆,在这种情况下怎么办呢?第一反应是要进行特征的降维,说的没错!而Hash Trick就是常用的文本特征降维方法。

在大规模的文本处理中,由于特征的维度对应分词词汇表的大小,所以维度可能非常恐怖,此时需要进行降维,不能直接用上一节的向量化方法。而最常用的文本降维方法是Hash Trick。说到Hash,一点也不神秘,学过数据结构的同学都知道。这里的Hash意义也类似。

那么,这种方法来处理特征,哈希后的特征是否能够很好的代表哈希前的特征呢?从实际应用中说,由于文本特征的高稀疏性,这么做是可行的。理论研究参考论文:Feature hashing for large scale multitask learning.。

  在scikit-learn的HashingVectorizer类中,实现了基于signed hash trick的算法,其为hash trick的变种。这里就用HashingVectorizer来实践一下Hash Trick,为了简单,使用上面的19维词汇表,并哈希降维到6维。当然在实际应用中,19维的数据根本不需要Hash Trick,这里只是做一个演示,代码如下:

向量化:

# 向量化
from sklearn.feature_extraction.text import CountVectorizer# 实例化分词对象
vec = CountVectorizer(min_df=1)
# 将文本进行词袋处理
corpus=["I come to China to travel","This is a car polupar in China","I love tea and Apple ","The work is to write some papers in science"]X = vec.fit_transform(corpus)
print('CountVectorizer:\n',X)

CountVectorizer:
  (0, 16)    1
  (0, 3)    1
  (0, 15)    2
  (0, 4)    1
  (1, 5)    1
  (1, 9)    1
  (1, 2)    1
  (1, 6)    1
  (1, 14)    1
  (1, 3)    1
  (2, 1)    1
  (2, 0)    1
  (2, 12)    1
  (2, 7)    1
  (3, 10)    1
  (3, 8)    1
  (3, 11)    1
  (3, 18)    1
  (3, 17)    1
  (3, 13)    1
  (3, 5)    1
  (3, 6)    1
  (3, 15)    1

特例:Hsah trick

# 特例:Hsah trick
from sklearn.feature_extraction.text import HashingVectorizervectorizer2=HashingVectorizer(n_features=6,norm=None)
X2 = vectorizer2.fit_transform(corpus)print('HashingVectorizer:\n', X2)

HashingVectorizer:
   (0, 1)    2.0
  (0, 2)    -1.0
  (0, 4)    1.0
  (0, 5)    -1.0
  (1, 0)    1.0
  (1, 1)    1.0
  (1, 2)    -1.0
  (1, 5)    -1.0
  (2, 0)    2.0
  (2, 5)    -2.0
  (3, 0)    0.0
  (3, 1)    4.0
  (3, 2)    -1.0
  (3, 3)    1.0
  (3, 5)    -1.0

  和PCA类似,Hash Trick降维后的特征,已经不知道它代表的特征名字和意义。此时不能像向量化时候可以知道每一列的意义,所以Hash Trick的解释性不强。

4. 向量化与Hash Trick小结

  在特征预处理的时候,什么时候用一般意义的向量化,什么时候用Hash Trick呢?标准也很简单。

  一般来说,只要词汇表的特征不至于太大,大到内存不够用,肯定是使用一般意义的向量化比较好。因为向量化的方法解释性很强,我们知道每一维特征对应哪一个词,进而我们还可以使用TF-IDF对各个词特征的权重修改,进一步完善特征的表示。

  而Hash Trick用大规模机器学习上,此时我们的词汇量极大,使用向量化方法内存不够用,而使用Hash Trick降维速度很快,降维后的特征仍然可以帮我们完成后续的分类和聚类工作。当然由于分布式计算框架的存在,其实一般我们不会出现内存不够的情况。因此,实际工作中我使用的都是特征向量化

文本挖掘预处理:向量化与Hash Trick相关推荐

  1. 文本挖掘预处理之向量化与Hash Trick

    在文本挖掘的分词原理中,我们讲到了文本挖掘的预处理的关键一步:"分词",而在做了分词后,如果我们是做文本分类聚类,则后面关键的特征预处理步骤有向量化或向量化的特例Hash Tric ...

  2. 中文文本挖掘预处理流程总结

    在对文本做数据分析时,我们一大半的时间都会花在文本预处理上,而中文和英文的预处理流程稍有不同,本文就对中文文本挖掘的预处理流程做一个总结. 1. 中文文本挖掘预处理特点 首先我们看看中文文本挖掘预处理 ...

  3. 文本挖掘预处理流程总结(2)— 英文

    目录 1.  英文文本挖掘预处理特点 2.  英文文本挖掘预处理 2.1 预处理一:数据收集 2.2  预处理二:除去数据中非文本部分 2.3  预处理三:拼写检查更正 2.4  预处理四:词干提取( ...

  4. 文本挖掘预处理流程总结(1)— 中文

    目录 1. 中文文本挖掘预处理特点 2.  中文文本挖掘预处理 2.1 预处理一:数据收集 2.2  预处理二:除去数据中非文本部分 2.3 预处理三:处理中文编码问题 2.4 预处理四:中文分词 2 ...

  5. 中文 lda数据预处理_英文文本挖掘预处理流程总结

    点击上方"AI遇见机器学习",选择"星标"公众号 重磅干货,第一时间送达 整理:AI算法之心 作者:刘建平Pinard   博客地址:https://www.c ...

  6. 文本挖掘预处理之TF-IDF

    1. 文本向量化特征的不足 在将文本分词并向量化后,我们可以得到词汇表中每个词在各个文本中形成的词向量,比如在文本挖掘预处理之向量化与Hash Trick这篇文章中,我们将下面4个短文本做了词频统计: ...

  7. python英文文本分析和提取_英文文本挖掘预处理流程总结

    在中文文本挖掘预处理流程总结中,我们总结了中文文本挖掘的预处理流程,这里我们再对英文文本挖掘的预处理流程做一个总结. 1. 英文文本挖掘预处理特点 英文文本的预处理方法和中文的有部分区别.首先,英文文 ...

  8. Hash Trick在机器学习中的应用

    一.我们探讨下哈希技术的各种应用. 1.一致性哈希.在分布式系统用途广泛. 2.局部敏感哈希LSH:simhash和minhash.可以用于相似度检测等.谷歌有篇文章利用LSH进行网页去重. 3.布隆 ...

  9. hash trick在机器学习中的使用

    普通的哈希算法暂且不讲了,我们探讨下哈希技术的各种应用.具体细节在以后博文中会有讲述. 1.一致性哈希.在分布式系统用途广泛. 2.局部敏感哈希LSH:simhash和minhash.可以用于相似度检 ...

最新文章

  1. java自学难点_java学习重难点
  2. DSA签名算法 - Java加密与安全
  3. Windows下给SourceTree配置外部比较工具BeyondCompare
  4. 乐视网回击贾跃亭:债务处理没有进展,先拿出57亿再说
  5. javascript实现java的StringBuffer功能
  6. 自己使用的文本编辑器全部采用Tahoma字体
  7. 路由器中宽带密码查看
  8. MongoDB 4.2.3 安装以及安装遇到的问题“service MongoDB failed to start,verify that you have sufficient privilege”
  9. java 动态密码错误_什么是OTP:Java一次动态密码、付款码原理
  10. VS Code语言切换
  11. 前端网页生成二维码方法
  12. 青少年学习机器人教育的收获
  13. 带你搞明白单侧双侧T检验
  14. 中华英才网居然出现如此错误
  15. Spring、Spring MVC、Spring Boot对比
  16. 设计模式系列-Builder模式(高效构建参数)
  17. Win10没有本地用户和组
  18. C语言每日一练——第72天:打印杨辉三角(使用两种方法)
  19. matlab 一元函数最大值,一个用MATLAB编写的基于遗传算法的求一元函数最大值的程序...
  20. 高速数据传输系统市场现状研究分析-

热门文章

  1. AutoBench的使用分析
  2. python 底层原理_Python 探针实现原理
  3. coco关键点标注json_COCO 数据集中目标检测标注说明
  4. 北京低利用率数据中心将有序关闭腾退
  5. 2020年全球十大数据中心趋势
  6. 因误开 IDC 灭火器,导致 Azure 在欧洲罢工超过 7 小时!
  7. 成功解决ValueError: DataFrame.dtypes for label must be int, float or bool
  8. 成功解决Visual Studio 2015安装时,点击vs_community.exe 没有反应
  9. DL之DNN优化技术:神经网络算法简介之GD/SGD算法(BP的梯度下降算法)的简介、理解、代码实现、SGD缺点及改进(Momentum/NAG/Ada系列/RMSProp)之详细攻略
  10. HighNewTech:横向、纵向动图查看《Why资本寒冬》——根据中国四大行每年(2004年~2018年)贷款主要流向来看当下的资本寒冬