Embedding之字词混合的两种对齐方案
本文提出字词混合的Embedding中,字词对齐的两种方案。
分词还是不分词?分词后字序列和词序列长度不一致,如何对齐?这里,提供一种简单直观的字词混合方案,对于NLU任务来看,有一定的提高。
以字为基准对齐
假设有句子“我爱北京天安门”,分词后为“[‘我’, ‘爱’, ‘北京’, ‘天安门’]”,分词后的结果与原来的句子长度不一致,为此,分词后的结果应该repeat该词所占有的字数,于是把“[‘我’, ‘爱’, ‘北京’, ‘天安门’]”转化为:
1 | ['我', '爱', '北京', '天安门'] ==> ['我', '爱', '北京', '北京', '天安门', '天安门', '天安门'] |
这样对齐后,字词混合就可以直接相加,
例如,
1 | text:我爱北京天安门 |
更直观点,如下
不过在实验时发现,有些情况下段ID反而起反作用,因此可以去掉,在优化时再引入,看是否起到负优化作用。此外,字词混合后Embedding输出需要接入LayerNormaliaztion重新归一化。
Embedding矩阵中,词的初始化也可以引入字的先验信息,避免词向量从头开始训练。对于词$ijk$,其字的向量的均值,即
通常词的引入并不是从零开始训练,而是便于引入预训练好的词向量。
以词为基准对齐
以词为基准需要词对应的字序列进行Aggregation。例如,以“天安门”为例,包括的字有['天', '安', '门']
,然后获得的词向量分别为,
为让这三个词向量对齐“天安门”这个词的词向量,Aggregration操作,通常是取平均,
或者直接通过LayerNormalization归一化。
实现
补充和更新:这里提供一些实现,见word-char-hybrid-embedding。
实践中发现在NLU任务中字词混合有1%~2%的提高。
总结
本文提供字词混合的两种对齐方案,实践发现在NLU任务有略有提高。对于需要引入词汇信息的NLP任务来说,上述不失为一种尝试。
转载请包括本文地址:https://allenwind.github.io/blog/10560
更多文章请参考:https://allenwind.github.io/blog/archives/