自然语言处理——文本的表示

引言

分词之后,如果想要做一些有意思的事情(比如文本分类和句子相似度分析等)就需要文本的表示。

文本的表示就是通过向量来表示单词、句子以及文章。

单词的表示

首先来看下单词的表示,有很多种方法。今天我们先来介绍一个最简单的方法。

独热(One-hot)编码

单词的表示首先需要有一个词典,这里假设我们的词典是这样的:

word_dic = ['我们','去','爬山','今天','你们','昨天','跑步']

这里只是为了更好的理解,实际上的词典库是很大的,比如有10万个单词。

假设我们现在有“我们”、“爬山”、“跑步”、“昨天”这几个单词,要怎么表示呢。

我们要构造一个维度为词典大小的向量,首先来看“我们”,它出现在词典的第1个位置,索引0的位置置1,其他位置置0。

#我们  (1,0,0,0,0,0,0)

然后剩下的单词也这么表示:

#爬山  (0,0,1,0,0,0)
#跑步  (0,0,0,0,0,1)
#昨天  (0,0,0,0,1,0)

句子的表示

有了单词的表示,那么如何表示句子呢。

假设有以下三个句子:

  • 我们今天去爬山
  • 你们昨天跑步
  • 你们又去爬山又去跑步

首先要做的便是分词,如何分词可以看上一篇文章。下面直接给出一种分词的结果:

扫描二维码关注公众号,回复: 11561824 查看本文章
  • 我们 今天 去 爬山
  • 你们 昨天 跑步
  • 你们 又 去 爬山 又 去 跑步

有了这些之后,下面介绍两种句子的表示方法。

Boolean Representation

所谓布尔表示,就是非真(1)即假(0)。

word_dic = ['我们','又','去','爬山','今天','你们','昨天','跑步']

我们在这个词典中新加了一个单词“又”。
句子的表示和上面单词的表示类似,不过要同时考虑多个单词,如果某个单词出现了,则设对应位置的值为1,否则为0。来看几个例子吧。

我们\今天\去\爬山:

(1,0,1,1,1,0,0,0)

怎么来的呢,第0个位置的“我们”出现了,因此将这个位置的向量值置1,“又”没有出现,对应位置置0,“去”出现了,置1

最终得到的向量大小也是和词典大小一致。
然后来看下一个句子。

你们\昨天\跑步:

(0,0,0,0,0,1,1,1)

接着看最后一个句子,你们\又\去\爬山\又\去\跑步:

(0,1,1,1,0,1,0,1)

这里要注意的是“又”和“去”在句子中出现了两次,但是布尔只有两个值,非0即1,因此还是用1来表示。

这种表示方法没有考虑单词出现的次数,不管出现了多少次,都是通过1来表示,如果我们考虑次数,那么就是下面这种方法。

Count-based Representation

还是以上面三个句子和词典为例。

word_dic = ['我们','又','去','爬山','今天','你们','昨天','跑步']

我们\今天\去\爬山:

(1,0,1,1,1,0,0,0)

你们\昨天\跑步:

(0,0,0,0,0,1,1,1)

因为这两个句子中每个单词只出现了一次,所以和布尔表示法没啥区别。

接着看最后一个句子,你们\又\去\爬山\又\去\跑步:

(0,2,2,1,0,1,0,1)

这里是“又”和“去”在句子中出现了两次,因此对应的值就是2

此方法会考虑单词出现的次数,即词频。

有了单词和句子的表示,那么我们如何判断两个句子或两个单词之间的相似度呢,请移步下一篇文章。

参考

  1. 贪心学院课程

猜你喜欢

转载自blog.csdn.net/yjw123456/article/details/107876111