2020/04/04
文章[1]中对文本处理中的核心进行了说明:
- 怎么表示单词、句子
- 怎么表示单词或者句子中的语义信息
- 怎么衡量单词之间、句子之间的相似度。
(上面这几点真的跟我现在研究的这个东西,我所要追求的东西,非常相似)
文中提到了两种模型,词袋模型,也就是我之前在webshell检测中所使用的方式,但是他的使用方式更像是one-hot方式,就是只有是否出现,并没有具体的频率。可能是因为使用的范例问题。词袋模型的缺点包括1)不能计算词之间的相似度,他举出的范例是one-hot编码方式,感觉如果是词频的话,句子的相似度应该会高,跟我之前看的那本《海量数据挖掘》中提到的信息有关。
2)利用词袋模型中会产生非常巨大的向量,但是这种向量的内容是非常稀疏的。
词向量模型,这种模型把每个词都化为一个向量,这样就可以进行相似度的比较。同时维度可控。
总结:文章[1]中说的是词袋模型,具体实现是one-hot形式;然后包括了词向量。
文章[2]中对这个定义就更具体,他的语言中说法是,对于文本向量化有三种方式,包括one-hot、词袋模型、TF-IDF。所以他的定义方式跟[1]中的不一样。
文章[3]中的说法更准确, 就是说词袋模型就是你把句子拆开,然后可以利用one-hot,或者词频,甚至是tf-idf来表示,而不是[2]中的将one-hot和词袋模型分开。
文章[4]中的说法验证我的的想法,one-hot只是词袋模型的一种说法。
关于具体的词向量内容,他们都没有具体说明,但是从[1]中的书说法,他就是将词转化为了一个向量。关于具体的实现,后面再来学习。
sklearn自带了相关的文本处理api[5],这里主要设计了使用词袋模型,还有tf-idf模型。这里的词袋模型会把这个词弄成频率的样子。
关于tf-idf的实现方式有两种,一种是词袋模型CountVectorizer之后,在利用TfidfTransformer 。或者,直接TfidfVectorizer。得到的结果是一样的。
[6]是对api的详解。
参考文献
[1]从词袋模型到词向量
[2]机器学习实践:中文文本预处理(one-hot/词袋模型/TF-IDF)
[3]词袋模型和词向量模型的区别,词向量模型算不算的上文本表示模型?
[4]如何系统学习文本分类
[5]文本数据预处理:sklearn 中 CountVectorizer、TfidfTransformer 和 TfidfVectorizer
[6]sklearn——CountVectorizer详解