如果句向量通过计算词向量的平均而获得会产生什么问题?有没有更好的句向量获取方法?

贪心学院AI学习挑战赛(奖学金活动)第4周第2个问题
关注者
45
被浏览
13,913

45 个回答

关于句子向量,一种简单的做法是就像课程里所说的一样,通过计算词向量的平均而获得,你觉得这种方式有什么问题? 能不能想到更好的句子向量获取方法?

两个问题,先单刀直入给答案:

  1. 很有问题!因为平均不一定反映客观情况,举个栗子——你和马云爸爸的收入一平均,不也打工人立马人上人了吗(◔‸◔);
  2. 这样的方法很多,例如——tf-idf、word2vec、GloVe、ELMo、OpenAI GPT以及Bert,嘻嘻(๑ `▽´๑);

接下去简单展开如下:

(I)关于词向量以平均计算 :不是说完全不可以,在短文本分析中是可以用,因为平均简单粗暴,在短文本分析的简单prototype可以这么使用;一旦拓展为长文本分析,句子中词语具有重要性,那必须赋予权重二不能一视同仁来表达;另外,这种方式也体现不出词语的先后顺序从而影响语义分析。

(II)从词向量拓展至句向量 :最常见的有tf-idf,详见此回答: 文本表示有独热编码,tf-idf, (静态/动态)词向量等等,能说下这些表示之间的区别以及优缺点吗?

tf-idf就是one-hot的一种优化,还是存在维度灾难以及语义鸿沟的问题,实际上tf-idf是一种比较传统的文本表示方法,缺点是它是词袋模型,无法考虑词的位置信息、上下文信息以及一些分布特征。因此后来的工作着重于构建“分布式低维稠密词向量”,word2vec就是它们的开山之作,word2vec基于这种思想提出了更专注于词向量学习的模型(比如舍弃隐藏层),用滑动窗口来指定固定大小的上下文,试图用当前词来预测上下文(skip-gram)或用上下文来预测当前词(CBOW)。最后,提一下当前流行的bert,这类预训练模型生成句向量来解决不同词在不同语境中的差别问题。


参考文献

ymmy.(2020). NLP词向量发展历程. NLP所感所想: zhuanlan.zhihu.com/p/10

问题1:词向量平均法表示句向量有什么问题?

回答:首先这种表达方式是可以的,因为简单,在短文本分析中是可以用的,如果说成词向量求和法理解起来应该更容易些,通过词向量的相加来表达句子向量:可以理解为对词频进行了加权。在句子较长时,相加的意义是说不清楚的,每个词在句子中的起的作用都是不同,词的顺序、位置、重要性、语义逻辑上是不能相加的,简单的相加或求平均无法表示出一个长句子的含义的。比如“不”,“好”的两个词向量相加能表示出“不好”的含义么,存疑。

问题2:更好的表示方法?

1、直接搭建句子向量,使用词袋模型,意思是指将句子中所有的词组合成一个向量,可以根据是否出现、出现次数、词的重要性搭建成一个句子向量,方法简单也很有效,单页没有考虑词的顺序和语义度。

2、对词向量文本进行扩展,结合TF-IDF来表示句子。

  • 步骤1将文本预处理后的文本Sn,采用词集合S'n表示。
  • 步骤2采用Word2vec工具扩展文本中的每一个词,在扩展时选取和每个词语相似度最高的词用来扩展,形成新的词集S″n
  • 步骤3使用TF-IDF值分别计算词集S″n前N个关键词形成样本向量词集Sv;
  • 步骤4计算S″n在样本向量词集Sv中的词语的频率,形成词频句向量Sv1;

3、构建高维词库,利用词库映射句子语义,从而形成句向量

思想是豆瓣电影评论中,常用的几千个词就可以表示出绝大多数评论的内容和倾向了。

  • 首先构建一个具有N个词的常用词词库
  • 附加每个词的词向量,
  • 将每一个文本映射成一个N维的向量,向量的每一维是词库中与该维对应的词语和文本中每个词语的相似度的最大值。
    此思想相较于基于上下文的方法,将赋予每个词语更加丰富的语义分布。这种做法对于解决BagOfWords的稀疏性问题效果较好。

部分内容引自文章《微博文本的句向量表示及相似度计算方法研究》