我正在解决一个在文本中使用英文字母但语言不是英文的问题。它是英语和不同语言文本的混合体。但是所有单词都是用英文字母写的。现在,基于单词的预训练嵌入模型在这里不起作用,因为它为词汇表之外的单词提供了随机嵌入。
现在我的问题是,基于上下文的预训练嵌入如何处理“超出词汇量”的单词?
此外,基于上下文的嵌入和基于字符的嵌入有什么区别?
我正在解决一个在文本中使用英文字母但语言不是英文的问题。它是英语和不同语言文本的混合体。但是所有单词都是用英文字母写的。现在,基于单词的预训练嵌入模型在这里不起作用,因为它为词汇表之外的单词提供了随机嵌入。
现在我的问题是,基于上下文的预训练嵌入如何处理“超出词汇量”的单词?
此外,基于上下文的嵌入和基于字符的嵌入有什么区别?
基于上下文或上下文的意味着向量包含有关在句子(或很少是文档)上下文中使用单词的信息。因此,在句子上下文之外谈论词嵌入是没有意义的。
诸如BERT之类的模型使用输入分割成所谓的子词,这基本上是一种统计启发式。常用词保持完整,而不常用词被分割成更小的单元(这通常类似于词干或形态分析,而且通常看起来很随机),最终将输入的某些部分分割成字符(这通常是罕见的专有名称的情况)。结果,您得到的是子词而不是词的上下文向量。
基于字符的嵌入通常意味着从字符输入推断出的词级嵌入。例如,ELMo使用字符级输入来获得词嵌入,这些词嵌入使用双向 LSTM 进一步上下文化。因此,ELMo 嵌入既是基于字符的,也是基于上下文的。
无论是使用子词还是使用从字符派生的嵌入时,技术上都没有 OOV 词。使用子词,输入中断为字符(并且所有字符始终在词汇表中)。使用字符级方法,您始终可以从字符中获取向量。当然不能保证字符被合理处理,但在大多数情况下是这样。
使用静态词嵌入的模型(例如Universal Sentence Encoder)通常为所有未知词(通常<unk>
)保留一个特殊的标记,因此模型在推理时不会对随机向量感到惊讶。如果提前限制词汇量,OOV 标记自然会出现在训练数据中。