多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# 介绍 到目前为止,我们只考虑过主要使用数字输入的机器学习算法。如果我们想要使用文本,我们必须找到一种方法将文本转换为数字。有很多方法可以做到这一点,我们将在本章中探讨一些常用的方法。 如果我们考虑句子`TensorFlow makes machine learning easy`,我们可以按照我们观察它们的顺序将单词转换为数字。这将使句子成为`1 2 3 4 5`。然后,当我们看到一个新句子`machine learning is easy`时,我们可以将其翻译为`3 4 0 5,`,表示我们没有看到的索引为零的单词。通过这两个例子,我们将词汇量限制为六个数字。对于大块文本,我们可以选择我们想要保留多少单词,并且通常保留最常用的单词,用零索引标记其他所有单词。 如果单词`learning`的数值为 4,单词`makes` 的数值为 2,则自然会认为`learning`是`makes`的两倍。由于我们不希望单词之间存在这种类型的数字关系,我们可以假设这些数字代表的是类别,而不是关系数字。 另一个问题是这两个句子的大小不同。我们所做的每个观察(在这种情况下,句子)需要具有与我们希望创建的模型相同的大小输入。为了解决这个问题,我们必须在稀疏向量中创建每个句子,如果该单词出现在该索引中,则该特定索引中的值为 1: | `TensorFlow` | `makes` | `machine` | `learning` | `easy` | | --- | --- | --- | --- | --- | | 1 | 2 | 3 | 4 | 5 | ```py first_sentence = [0,1,1,1,1,1] ``` 为了进一步解释前面的向量,我们的词汇由六个不同的单词组成(五个已知单词和一个未知单词)。对于这些单词中的每一个,我们要么具有零值或 1 值。零表示单词不出现在我们的句子中,1 表示它至少出现一次。因此值为零表示该单词不会出现,值为 1 表示它出现 | `machine` | `learning` | `is` | `easy` | | --- | --- | --- | --- | | 3 | 4 | 0 | 5 | ```py second_sentence = [1,0,0,1,1,1] ``` 这种方法的缺点是我们失去了任何词序的指示。两个句子`TensorFlow makes machine learning easy`和`machine learning makes TensorFlow easy`将产生相同的句子向量。 值得注意的是,这些向量的长度等于我们选择的词汇量的大小。选择非常大的词汇量是很常见的,因此这些句子向量可能非常稀疏。这种类型的嵌入称为词袋。我们将在下一节中实现这一点。 另一个缺点是单词`is`和`TensorFlow`具有相同的数字索引值:1。有意义的是,单词`is`可能不如单词`TensorFlow`的出现重要。 我们将在本章中探索不同类型的嵌入,试图解决这些问题,但首先我们将开始实现字袋算法。