把文本表达为可以让计算机来理解的形式,所谓文本表示,文本向量化。文本向量化,可以分为词语的向量表达,短文本的向量表达,长文本的向量表达, 因为不同的情景需要用到不同的方法和处理方式。
忽视这些细节,对一般情况下文本的向量化做了下调查,常见的思路介绍如下:
一: 向量空间模型 VSM
一般所指的向量空间模型我认为也可以说是bag of words 词袋模型:其中最简单的模式是基于词的独热表示(one-hot reprentation), 用每一个词作为维度key,有单词对应的位置为1,其他为0,向量长度和词典大小相同。工程上比较常用的是用该词的tfidf值作为权重, (word1, word2,word3.。。。word N), itidf是文本处理里最常见的一种权重计算方式,属于入门级方案,基于此也有一系列的优化方法,诸如TFC权重/ITC权重,但是思想和tfidf差不多。 一般会进行归一化处理, 很多工具都带有相应模块来计算tfidf。 在选取不同的词来做维度特征的时候,需要先去除停用词, 又涉及了一个特征选择的问题, 并不是所有的词都适合拿来用。 一般会根据ifidf值或者词频之类的做一些简单的过滤, 也有一些专门选取特征的方法,诸如信息增益,互信息,卡方统计等, 有文章专门介绍。
文本向量化,tfidf这是90%以上的文章和相关机器学习库demo,论文里会提到的方法。关于其优点,简单好用,很大程度上就可以满足我们的需求了。举一个通俗易懂的例子
http://www.ruanyifeng.com/blog/2013/03/tf-idf.html
缺点,这里引用了别人的描述”http://www.jbingo.net/doku.php?id=mlwiki:vectorization“
“中文切词会引入误差,尤其是口语化句子,由于级联效应的存在,机器学习最终的文本分析效果会在很大程度上被影响;
这种方法虽然一定程度上弥补了语义丢失的程度,但是没有保留词顺序信息,导致还是会丢失相当一部分语义;
最终句子维度较高,汉语常用词汇在几万到几十万不等,虽然可以进行停用词过滤来降低维度,但是最终维度还是会停留在万级,用sklearn进行学习(万级训练集)可能会占用几十G到上百G内存;对于错别字来说,基本没有容错能力”
总体来说。我认为有2点:
1. 多维度灾难,词的维数比较多
2.语义丢失, 表现为,词的顺序信息丢失,近义词没办法体现,假定词都是独立的,等等
二. 文本的分布式表示方法
这里引入复旦大学邱稀鹏老师的一篇文章https://zhuanlan.zhihu.com/p/22386230 先解释两个术语
“
说到文本的分布式表示,有一定NLP背景的人都会想到两个不同英文术语。一个是Distributional Representation,另一个是Distributed Representation。这两个术语都翻译为分布式表示,因此很多人混淆。但是,这两个术语的含义和出发点完全不一样。。
Distributional Representation是从分布式假设(由Harris在1954年提出,出现在相同上下文的词语语义相似)的角度,是一类获取词表示的方法。
而Distributed Representation指的是文本表示的形式,就是低维、稠密的连续向量
”
其中LSA/LSI/pLSI方法,以及Word2Vec/Doc2Vec方法应该都属于属于分布式表示。
目前只学习了LSA主题模型,使用词和文档的概率分布来表达。其他的还没有深入研究。相关文档稍后整理在放入。
本文介绍了文本向量化的基本思路,包括向量空间模型VSM,尤其是词袋模型和TF-IDF,以及分布式表示方法,如LSA和Word2Vec。讨论了VSM的高维灾难和语义丢失问题,以及分布式表示的优势。
1万+

被折叠的 条评论
为什么被折叠?



