构造词向量的方法有很多,如何评估词向量的优劣?

词的向量化从one-hot开始,到基于BOW的tf、tf-idf,到基于主题模型的LSA、pLSA、LDA,到基于神经网络的浅层固定表征word2vec、fastText,到基于预先训练模型的ELMo、BERT,整体来说可以分为四个阶段:

  • BOW思想:one-hot、tf-idf等
  • 基于主题模型:LSA(也就是SVD分解)、pLSA、非负矩阵分解等等
  • 浅层网络固定表征:word2vec
  • 考虑上下文的深层网络动态表征:GPT、BERT等Transformer模型

到目前为止,词向量依然是一个活跃的研究领域。词向量致力于寻找更好的词表示方法。好的表示应该考虑多个方面:语言学特点、能否处理上下文、计算特点、工程应用等。

如果没有统一的标准,评价好坏是一件困难的事情,但从人类学习特点出发,好的表示可以有如下优点:

  • 好的表示在同样大小的向量下应该包含更丰富的信息
  • 好的表示能够表达高层特征,以便让下游任务变得简单
  • 好的表示具有通用性,训练好的词向量或模型容易迁移到特定领域上
  • 好的表示符合语言学的特点,如相似(如水果,苹果与雪梨)、相关(如常出现在同一上下文中咖啡与杯)、同义与反义、一词多义等等

下面我们从若干角度看待词向量的优劣。

表示学习角度

从表示学习的角度,好的词向量应该具有如下特点:

  • 向量维度不变情况下,能够表达更多的信息
  • 包含高层语义特征,让下游任务变简单
  • 具备好的泛化能力,即具备任务或领域独立,便于迁移

语言学角度

人类语言具有极大的复杂性,好的表示能够对这些复杂性建模以便在运用中对这些特点进行表现与刻画。从语言学上看,包括同义词、歧义性、情感倾向性(情感分析)、多粒度长文本处理、语言惯性表达、主观性、递归性:

  • lexical meanings (语义)
  • syntactic structures(句法结构)
  • semantic roles(语义角色)
  • pragmatics(语用学)
  • polysemous words(多义词)
  • OOV
  • 通用性(跨语言)

这里使用英文是为了作为专业名称方便大家检索深入研究。

歧义性:根据不同的上下文,相同的单词可以具有不同的含义

上下文相关性

此外,还可以从是否上下文相关去评价:

  • 上下文相关 embedding(contextual embedding)
  • 上下文无关 embedding(non-contextual embedding)

一般来说,上下文相关 embedding 建立在上下文无关 embedding 上。后者是静态的,前者是动态的。也就是说上下文无关的 embedding,一个词对应一个 embedding,不管其所在的语境,于是它无法解决多义词问题。解决这个问题的方法之一可以是缩小词的粒度,对于中文来说,就是从词变为字,对于英文来说,就是从 word 变为 character。这一点,我们以后再深入。

计算效率和工程落地

从计算上看:

  • 串行
  • 并行
  • 计算性能(训练、推断)

从工程上看:

  • 是否容易迁移

从更具体的使用细节:

  • OOV(out of word) 问题
  • 好的语言学解释

总结

以上提供多个角度考察词向量优劣的方向,包括:

  • 从特征表示角度
  • 从语言学特征刻画角度
  • 从上下文相关角度
  • 从计算效率和工程落地角度

但是,没有那个方案是最优的,需要结合你的具体任务场景。

转载请包括本文地址:https://allenwind.github.io/blog/9405
更多文章请参考:https://allenwind.github.io/blog/archives/