双向 RNN
普通 RNN 从左到右读,每个位置只看得到它和它左边的内容。可很多时候,一个词的含义要靠右边才能定——“我买了苹果手机”,光看“我买了苹果”还以为是水果,读到“手机”才知道是品牌。双向 RNN 的办法很直接:跑两个 RNN,一个从左往右、一个从右往左,再把两者在每个位置的隐状态拼起来。这样每个位置就同时拥有左右全部上下文,特别适合需要“读懂整句”的理解类任务。点句子里任一个词,看它在单向和双向下分别能看到哪些上下文。
点选一个词。蓝色是前向 RNN 看到的(它+左边),橙色是后向 RNN 看到的(它+右边)。双向=两者相加=整句。下面是对“苹果”一词的理解。
前向看左
从句首读到当前位置,隐状态汇总了左边的上下文。
后向看右
从句尾倒着读到当前位置,补上右边的上下文。
拼起来=全局
两个方向的隐状态一拼,每个位置都拥有整句信息——理解任务更准。