📒
Notes
  • 个人笔记
  • Machine Learning
    • Tensorflow
      • Text
        • Keras构建RNN
        • 字词嵌入
        • 字词嵌入示例程序
      • Data processing
        • tf.data数据加载
      • Tensorflow Tricks
    • 循环神经网络概览
    • Pix2Pix
  • Assembly Language
    • DOS中的Debug模式
    • LOOP指令
    • 8086CPU
    • 标志位寄存器
    • 汇编指令
    • 汇编语言源程序格式
  • Linux System
    • Systemctl 服务脚本
    • Linux端口占用
    • Btrfs文件系统
    • C Socket网络编程细节问题
  • Hexo
    • Hexo下的Tag/Categories栏
    • Git备份博客
    • Hexo博客基本部署
  • Kernel
    • C语言中消息队列实现
    • Linux内核的进程调度函数
    • Linux内核模块的编译
    • Linux Kernel概述
  • Linux Software
    • Linux软件安装与配置
  • Docker
    • OVS+Docker网络构建
    • Docker分层垃圾清理
  • C
    • CMakeList语法
Powered by GitBook
On this page
  • 字词嵌入的方法
  • one-hot编码
  • 使用特定数字表示
  • 字词嵌入(终于)
  • Tensorflow中字词嵌入的实现
  • 参考

Was this helpful?

  1. Machine Learning
  2. Tensorflow
  3. Text

字词嵌入

PreviousKeras构建RNNNext字词嵌入示例程序

Last updated 5 years ago

Was this helpful?

字词嵌入的方法

字词嵌入是实现对于文本处理的第一步,主要是为了实现对于文字信息的量化,毕竟计算机实际只能处理数值信息。

one-hot编码

one-hot应该是首先可以想到的一种编码方式,使用和词汇量等长度的全0向量,其中一个变为1代表一个词在这里出现。

注意:使用one-hot来表示是一个低效的方法,产生的矩阵极为稀疏,会造成大量的空间浪费。

使用特定数字表示

我们还可以将每一个词映射到一个固定的数字,来表示一句话(如形如 [1,4,2,5,2,3] 的矩阵)。这样的表示方式是十分高效的,我们最后得到的矩阵是稠密的,每个位置都表示了元素。 但是这样的表示方法仍然存在问题:

  1. 这样的编码很随意:没有体现词之间的关系,编码数字大小临近的词,语义并不一定临近。

  2. 这样一个模型没法解释:由于编码结果是和他们的语义无关的,导致了对于编码结果的运算可以说是无实际意义的(对于随意给的一堆数字的加减乘除不能代表什么具体意义)。

字词嵌入(终于)

总结下上面的编码所遇到的位问题:一个是要保证编码的效率以减少性能的浪费,另一个是保证语义的编码结果之间的关联,即相似的词具有相似的编码。由此提出了字词嵌入。 字词嵌入就是要产生一种符合上述要求的编码方式,建立量化的表示并尽可能少的丢失语义联系。

图示例子将一个词转换为使用4维坐标来表示。

Tensorflow中字词嵌入的实现

☆ Embedding处理的是整数输入,不直接处理文本输入,需要先将我们的文本映射到整型数值才可以。

Tensorflow中提供了Embedding layre来处理词嵌入。 Embedding layer可以看做一个由整数下标到稠密向量的映射表。它使用以下的方法创建:

embedding_layer = layers.Embedding(1000, 5) # 定义一个输入维度和输出维度
# 参数:
# input_dim
# output_dim
# ...

这一Embedding layer会接受一个任意长度的整型张量,形状为(batch, input_length),其中要求最大的整数不能大于input_dim。

Embedding layer在定义的时候内部的权重会随机初始化(就像其他的神经网络层一样),在训练阶段其中的权重也会一同参与训练,从中学习词语之间的语义关系,逐步达到更好的编码效果。

输入到Embedding layer的张量长度是任意的,输出会比输入多一个轴。 例: (2,3) -> (2,3,N),其中N就是由之前定义的output_dim决定的。

参考

Word embeddings | TensorFlow Core
tf.keras.layers.Embedding | TensorFlow Core
Embedding projector - visualization of high-dimensional data
使用 tf.data 加载文本数据 | TensorFlow Core