数据平滑 (Smooth) 技术详解——解决 NLP 中稀疏矩阵问题

/ NLP / 没有评论 / 1078浏览

语言模型而言,由于数据稀疏的存在,可以使用平滑技术来解决

什么是平滑技术

把在训练样本中出现过的事件的概率适当减小,把减小得到的概率密度分配给训练语料中没有出现过的事件,这个过程有时也称为 discounting(减值)

Add-one 平滑

规定任何一个 N 元组在训练语料中至少出现一次,即规定没有出现过的 N 元组在训练语料中出现了一次

new_count(N-Gram) = old_count(N-Gram) + 1

没有出现过的 N 元组的概率不再是 0

$$P_{Add1}(w_{1}w_{2}...w_{n}) = \frac{C(w_{1}w_{2}...w_{n}) + 1}{N + V}$$

N: 训练语料中所有的 N 元组的数量 (token)
V: 所有的可能的不同的 N 元组的数量 (type)

条件概率的计算:

$$P(w_{n}| w_{1}w_{2}...w_{n-1}) = \frac{P_{Add1}(w_{1}w_{2}...w_{n})}{\sum_{k = 1}^{n-1}P_{Add1}(w_{1}w_{2}...w_{k})}$$

结论

Add-delta平滑

不是加 1,而是加一个小于 1 的正数 $\delta$

$$P_{AddD}(w_{1}w_{2}...w_{n}) = \frac{C(w_{1}w_{2}...w_{n}) + \delta }{N + \delta V}$$

效果虽然比 Add-one 好,但是仍然不理想

留存平滑

英文名:Held-out Estimation

留存数据(Held-out data)

把训练语料分作两个部分

对于每一个 N 元组 $w_1w_2...w_n$ 计算

$$T_{r} = \sum_{(w_{1}...w_{n}| C_{tr}(w_{1}...w_{n}) = r)}C_{ho}(w_{1}...w_{n})$$

T = 留存语料中所有的 N 元组个数 (token)

Good-Turing平滑

Jelinek-Mercer平滑

Katz平滑

未完待续