文本表示与tf-idf

博客介绍了文本表示方法,从独热编码到tf-idf,讨论了它们的优缺点和应用场景。还提及了词向量和分布式表示法在解决语义相似度问题上的优势,以及如何计算文本相似度。
摘要由CSDN通过智能技术生成

文本本身属于非结构化数据,而且我们要知道非结构化数据是不能直接作为模型的输入的。

如何把一个单词表示成向量?
第一种,也是最简单的表示法叫作独热编码的表示。

词典:[机器,学习,有,意思,人工智能,是,未来]
每个单词的表示:
机器:(1,0,0,0,0,0,0)
学习:(0,1,0,0,0,0,0)
意思:(0,0,0,1,0,0,0)
未来:(0,0,0,0,0,0,1)

单词的表示了解完了,接下来就要考虑如何表示一个句子。这里有几种常用的方法,分别是boolean表示、count表示以及tf-idf的表示。接下来一个一个来看一下,并理解它们的演进过程。

句子的表示(boolean)
机器|学习|有|意思:(1,1,1,1,0,0,0)
人工智能|学习:(0,1,0,0,1,0,0)
人工智能|学习|机器|学习:(1,1,0,0,1,0,0)

这样的表示方法使得向量非常的稀疏,而且向量的长度等于词库的长度,也就是我们的词库有多大,每一个文本向量的长度就有多大。

这种方式虽然很简单,但明显也有个缺点,就是不考虑一个单词出现的次数。出现次数越多,有可能对句子的贡献也会越大。我们希望把这部分信息也考虑进去。

为了解决上面的问题,人们就设计出了基于次数的表示法。

句子的表示(count)
词典:[机器,学习,有,意思,人工智能,是,未来]
机器|学习|有|意思:(1,1,1,1,0,0,0)
人工智能|学习:(0,1,0,0,1,0,0)
人工智能|学习|机器|学习:(1,2,0,0,1,0,0)

次数的表示法要比布尔表示法更优秀一些,所以一般情况下前者使用的更多一点。

但基于次数的表示法能否进一步改进?

首先思考一下该表示法会出现什么问题?
其实上面的表示法是有些问题的,因为出现次数越多代表不了它就越重要,有可能反倒是更不重要。所以呢,我们希望把一个单词的重要性也考虑进去,而不仅仅考虑单词出现的次数。这个新的方法叫作tf-idf表示法。
在这里插入图片描述
tf-idf里面有一个重要的思想:
一个单词在越少的文档里面出现,有可能这个单词的重要性是越强的.

tf-idf非常重要,基本上任何的文本领域,我们都有大概率用到它,所以一定要掌握它的细节。接下来,为了巩固对tf-idf的认知,我们通过一个例子来解释一下计算tf-idf的完整的过程。

词典:{机器学习,课程,有,意思,数据}
机器学习|课程(1log 3 2 \frac{3}{2} 23,1log 3 3 \frac{3}{3} 33,0,0,0}
课程|有|意思(0,1log 3 3 \frac{3}{3} 33,1log 3 1 \frac{3}{1} 13,1log 3 1 \frac{3}{1} 13,0}
数据|机器学习|课程(1
log 3 2 \frac{3}{2} 23,1log 3 3 \frac{3}{3} 33,0,0,1log 3 1 \frac{3}{1} 13}

此外,在文本分析领域,还有一个工作特别重要,就是计算两个文本之间的相似度。计算相似度是理解文本语义来说也是很重要的技术,因为一旦我们理解了某一个单词或者句子,我们可以通过相似度计算方法来寻找跟这个语义类似的单词或者文本。

计算文本相似度有很多种方法,这里我们重点来讲解两个方法:计算欧式距离的方法和计算余弦相似度的方法。

它们都可以用来评估文本的相似度,但前者是基于距离的计算,后者是基于相似度的计算。需要注意的一点是:距离越大相似度越小。

欧式距离简单且有效,但实际上用得其实并太多。目前来看,用的最多的方法仍然是余弦相似度的计算方法。
余弦相似度的核心思想其实就是计算两个向量的夹角,夹角越小,则说明相似度越大
在这里插入图片描述
以上所有方法论都是基于独热编码技术。接下来我们重点来看一下独热编码的缺点以及如何把单词或者文本通过分布式表示法来表示。

在独热编码的情况下是没有办法实现语义相似度评估的。不管使用欧式距离、余弦相似度还是其他的计算方法都没有办法比较出两个单词之间的相似度。

所以,这就意味着我们必须要改变单词的表示方法,也就是除了独热编码的形式,需要探索其他的方法论。

幸运的是,确实存在这样的一个方法论叫作分布式表示法(Distributional Representation)。

使用词向量的情况下确实可以计算出语义相似度。而且这种表示方法克服了之前独热编码的稀疏性。

我们可以把学出来的词向量可视化在二维空间里。当然,可视化之前我们需要做降维处理的。对于词向量的降维,最经典的方法叫做T-SNE, 具体可以查一下网上的资料。

当我们把词向量可视化之后即可以发现很多拥有类似含义的单词都聚在一起。 比如”人工智能”和“学习”, “有趣”和“无趣”等。从这个角度,我们也可以理解为词向量确实能用来表示语义的相似度。

那么如何学习每一个单词的分布式表示(词向量)?

具体训练词向量的方法很多,各有各的优缺点。在这里,我们就把它当作是一个黑盒子就可以了。而且网上有大量已经训练好的词向量,我们可以直接把它拿过来用。

理解了如何通过词向量来表示一个单词之后,接着我们来看一下如何表示一个句子? 这里我给出最为简单的方法,就是平均法,也叫作average pooling。
在这里插入图片描述
假如我们用100维来表示单词,则在独热编码的情况下我们最多能表示100个不同的单词。 但是在分布式表示法的情况下可以表示无穷多个单词。从这里也可以看出两个表示方法在容量上的差异。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值