特征

是表示 的特征向量,向量中的 )被称为特征(feature)。每个特征都有一个与之相关的参数 的值需要从训练集中估计出来。训练集由样本序列 组成,其中

语言模型的特征

语言模型中,输入 是单词序列 ,标签 是一个单词 。下图展示了一些特征的例子,每个特征都是一个返回 0 或 1 的指示函数(indicator functions):

example-features-lm

前三个特征 与三元模型中的一元、二元、三元特征类似,特征 则考虑了其他的信息

特征模板

上例中,前三个特征指向的是特定的 unigram,bigram 或 trigram。而**特征模板(feature template)**可以用来生成考虑了训练集中所有 unigram,bigram 或 trigram 的特征集。

定义 3.2(三元特征模板,Trigram feature template):

对训练集中出现过的任意三元组 ,定义特征:

其中 是将训练集中的三元组映射到一个唯一整数的的函数。

值得注意的是:

  • 该模板只能生成训练集中出现过的三元组的特征。因为所有可能的三元组有 个,这个数字非常庞大,所以对所有三元组生成特征是不可行的。而且对于训练集中未出现过的三元组,我们没有证据去估计它们的参数。(但考虑 在训练集中出现过,而 却未在训练集中出现过的三元组是有道理的,之后会讨论这个问题。)

  • 会将训练集中的三元组映射到一个唯一整数,即对任意满足 的三元组 ,有:

    在实现特征模板时, 会用哈希函数(hash function)来实现。如可以用一个哈希表把字符串 映射到一个整数。每个不同的字符串都会被映射到一个不同的整数。

 

定义 3.3(二元特征模板,Bigram feature template):

对训练集中出现过的任意二元组 ,定义特征:

其中 是将训练集中的二元组映射到一个唯一整数的的函数。

 

定义 3.4(一元特征模板,Unigram feature template):

对训练集中出现过的任意 unigram ,定义特征:

其中 是将训练集中的 unigram 映射到一个唯一整数的的函数。

 

需要避免一元、二元、三元特征重合,否则就会出现两个不同的 n-gram 被映射到同一个特征的情况。

定义 为训练集中出现过的三元组、二元组和一元组的集合。定义:

即需要满足:

在对数线性模型中,可以在使用哈希表时,通过把类似于 等的字符串分别映射到不同的整数来实现这个约束。

 

当然我们也可以定义其他的特征模板,如:

定义 3.5(Length-4 Suffix Template):

对训练集中出现过的任意 ,其中 ,定义特征:

其中 是将训练集中的 映射到一个唯一整数的的函数(映射值不能与其他特征模板重复)。

特征的稀疏性

从特征模板的定义可以看出,最终生成的特征数量 可能会非常大,而通常只极少部分 )能满足 。这就导致特征可能会非常稀疏,只有极少部分特征为非零值。比如在一个只用了一元、二元、三元特征模板的语言模型中,特征数量等于训练集中出现过的所有 unigram,bigram 和 trigram 的数量,但对任意 ,最多只可能有三个特征是非零值。

因为特征的稀疏性(sparsity),在实现对数线性模型时就不需要直接操作 维特征向量 了,只需要用一个哈希表对每对 记录其非零特征的索引就行:

这个哈希函数计算 的时间复杂度为 ,而 (比如在一个只用了一元、二元、三元特征模板的语言模型中, 最大为 3),所以这个方法相比直接计算所有 个特征(时间复杂度 )会高效很多。

比如在计算向量内积 时,理论上需要 的复杂度,但因为 ,所以只需要考虑非零特征,所以只需要 的复杂度。