使用 char 级 one-hot 编码时如何处理字长可变性?

数据挖掘 神经网络 深度学习
2022-02-21 13:07:26

我正在尝试对形态丰富的语言(俄语)的内部单词结构进行一些实验。

每个有效字符都经过 1-hot 编码,然后将固定长度的向量连接起来生成词向量:

 c             a             t

(0... 1... 0) (0... 1... 0) (0... 1... 0)

这种方法为不同长度的单词生成不同长度的向量。为了统一它们,我应用了零填充:

c a t 0 0 0 0 0 0 0 0

k i t t e n 0 0 0 0 0

t r a n q u i l i t y

h a p p i n e s s 0 0

这种方法听起来有效吗?所描述问题的最佳实践是什么?

1个回答

您的填充向量应该可以作为起始模型。您可以更进一步,使用特定的“无字符”编码,因为这将是一个更清晰的学习信号。

你说你正在使用前馈神经网络。在这种情况下,您的模型可能会发生变化和改进,即使用递归神经网络 (RNN),这可能是一种长短期记忆 (LSTM)变体,因为这在语言模型中取得了一些成功。

在 RNN 中,不是让字符编码重复 N 次,而是只表示一次,然后为每个样本运行网络 N 次,依次输入每个字符。而不是“无字符”符号,您将有一个“序列结束”符号。对于没有特定目标的开放式模型,通常让网络的输出是对下一个字符的预测。这使您可以通过从预测中采样来探索模型所学到的东西——很像使用 n-gram 生成看起来逼真的单词。

RNN 用于字符级语言建模的优势在于,该模型是围绕每个输入在某种程度上等价的假设构建的——每个时间步都使用相同的编码。这对于字符串显然是正确的,因此它可以从更少的训练数据中产生更好的模型。

使用 RNN 的主要缺点是理解、构建和训练这样的模型更加复杂。