文本表示方法

文本表示就是将文本转化成数学上的向量表示,怎么把字符串转化为向量,就是文本表示的核心问题。

离散表示

1.One-hot

这种编码格式首先建立一个全局的完备的词典,该词典包含所有文本中的词,因此该方式表示后的形式为一个很大的vector,vector中只在该词出现的位置设置为1,表示该词出现,其余全部为0。
例:

小明喜欢看电影,小红喜欢听歌。
小张喜欢打篮球。

这两个句子中包含的词去重后构建一个词典,(需要进行文本的预处理-分词,去停用词)

{“小明”:1,“喜欢”:2,“看电影”:3,“小红”:4,“听歌”:5,“小张”:6,“打篮球”:7}

每个词的表示向量为(7维的向量,该词的位置为1,其余位置均为0):
喜欢:{0,1,0,0,0,0,0}
听歌:{0,0,0,1,0,0,0}
。。。。。
一句话的表示:
小张喜欢打篮球:{0,1,0,0,0,1,1}
缺点:当语料库非常大时,需要建立一个很大的字典对所有单词进行索引编码。比如100W个单词,每个单词就需要表示成100W维的向量,而且这个向量是很稀疏的,只有一个地方为1其他全为0。还有很重要的一点,这种表示方法无法表达单词与单词之间的相似程度

2.词袋模型(Bag of Words)

词袋模型就是将字符串看成一个装满词的袋子,词是在袋子里随机放着的,也称为计数向量表示(Count Vectors)。文档的向量表示可以直接用单词的向量进行求和得到。
向量的维度和one-hot一样大,只是在句子的表示是将出现的词进行计数。

例:小明喜欢看电影,小红喜欢听歌。在这个句子中,喜欢出现了两次,向量对应位置的值应为2,向量表示就为{1,2,1,1,1,0,0}

3.TF-IDF

上面的词袋模型是基于计数得到的,而TF-IDF则是基于频率统计得到的。TF-IDF的分数代表了词语在当前文档和整个语料库中的相对重要性。TF-IDF 分数由两部分组成:第一部分是词语频率(Term Frequency),第二部分是逆文档频率(Inverse Document Frequency)。其中计算语料库中文档总数除以含有该词语的文档数量,然后再取对数就是逆文档频率。
https://blog.csdn.net/liusisi_/article/details/107028905
向量表示直接将每个词的tf-idf值对应于该位置。
TF-IDF算法的优点是简单快速,结果比较符合实际情况。缺点是,单纯以"词频"衡量一个词的重要性,不够全面,有时重要的词可能出现次数并不多。而且,这种算法无法体现词的位置信息,出现位置靠前的词与出现位置靠后的词,都被视为重要性相同,这是不正确的。

4.共现矩阵 (Cocurrence matrix)

共现:即共同出现,如一句话中共同出现,或一篇文章中共同出现。这里给共同出现的距离一个规范——窗口,如果窗口宽度是2,那就是在当前词的前后各2个词的范围内共同出现。可以想象,其实是一个总长为5的窗口依次扫过所有文本,同时出现在其中的词就说它们共现。

小明喜欢看电影,小红喜欢听歌。
小明喜欢打篮球。

上面两句话设窗口宽度为1,则共现矩阵如下:
在这里插入图片描述
共现矩阵是对角矩阵。
实际应用中,我们用共现矩阵的一行(列)作为某个词的词向量,其向量维度还是会随着字典大小呈线性增长,而且存储共生矩阵可能需要消耗巨大的内存。一般配合PCA或SVD将其进行降维,如将原来 m×n 的矩阵降为 m×r的矩阵,其中 r<n,即将词向量的长度进行缩减。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/liusisi_/article/details/107149750
今日推荐