今天又读了一篇刘知远老师团队2015年在顶会Ijcai上发表的论文《Joint Learning of Character and Word Embeddings》,同样是有关于在词向量生成部分进行了改进,引入了词语组成成分的单个汉字的信息(论文主要针对的是中文),提升了词向量生成的质量。因为模型名称叫做“character-enhanced word embeddding model”,故模型简称为CWE。

从论文的题目可以看出,这篇paper在进行词向量训练的时候,讲词语中把组成词语的汉字单独抽取出来,和词语一起进行训练。这样就使那些共享汉字的词语之间产生了联系,因为paper的假设是“semantically compositional”的词语中的汉字对词语的意思具有一定的表征作用,比方说词语“智能”。但是在汉语中并不是所有的词语都是semantically compositional,比方说一些翻译过来的词语“巧克力”,“沙发”,再比方说一些实体的名称,比方说一些人名、地名和国家名。在这些词语中,单个汉字的意思可能和本来这个词语要表达的意思是完全没有关系的。在本篇paper中,作者做了大量的工作去把这些没有semantically compositional性质的词语全部人工的挑选出来,对于这些词语不去进行单个字的拆分处理。

这篇论文提出的模型,是在word2vec的CBOW基础之上进行改进的,模型整体的优化函数如下所示:
∑ i = k N − k l o g P r ( x i ∣ x i − k , . . . . , x i + k ) \sum_{i=k}^{N-k}logPr(x_i|x_{i-k},....,x_{i+k}) i=kNklogPr(xixik,....,xi+k)
P r ( x i ∣ x i − k , . . . . , x i + k ) = e x p ( x o . x i ) ∑ x j ∈ D i c t i o n a r y e x p ( x o . x j ) Pr(x_i|x_{i-k},....,x_{i+k})=\frac{exp(x_o.x_i)}{\sum_{x_j\in{Dictionary}}exp(x_o.x_j)} Pr(xixik,....,xi+k)=xjDictionaryexp(xo.xj)exp(xo.xi)
x o = 1 2 k ∑ j = i − k , . . . . i + k x j x_o=\frac{1}{2k}\sum_{j=i-k,....i+k}x_j xo=2k1j=ik,....i+kxj
从中可以明显的看出,在CBOW模型中,context的表示是 w i w_i wi前后窗口内的词向量的相加求均值。

介绍完了传统的CBOW模型之后,就要介绍这篇paper提出的模型,模型示意图如下所示:

从上图可以清楚的看出,在传统的CBOW模型中,target word“时代”的context信息是直接把“智能”和“到来”的词向量形式进行相加;而在CWE模型中,对于context中的词语的表征,一方面来自于词向量,还有一部分在自于这些词语中的字的向量,具体的计算方式如下:
x j = w j ⨁ 1 N j ∑ k = 1 N j c k x_j=w_j\bigoplus\frac{1}{N_j}\sum_{k=1}^{N_j}c_k xj=wjNj1k=1Njck
其中, N j N_j Nj是单词 w j w_j wj中的汉字个数, c k c_k ck是字向量。
⨁ \bigoplus 对应的操作有拼接和相加两种方式,paper里说拼接方式虽然增加了模型的复杂度,但是对于效果的提升并不明显,因此后面的模型中直接就采用了相加的方式,公式如下所示:
x j = 1 2 ( w j + 1 N j ∑ k = 1 N j c k ) x_j=\frac{1}{2}(w_j+\frac{1}{N_j}\sum_{k=1}^{N_j}c_k) xj=21(wj+Nj1k=1Njck)
注意上述公式中的 1 2 \frac{1}{2} 21非常重要,它保证了具有semantically compositional的词语和不具有semantically compositional词语在计算距离时的一致性。同时paper指出,为了简化起见只对context的生成考虑字向量信息,target部分不予考虑。其中对于 ∑ k = 1 N j c k \sum_{k=1}^{N_j}c_k k=1Njck计算部分知识把一个词语中的汉字向量进行等权相加,如果利用attention机制,可能效果更好。

上述只是一个大概的框架模型,还有一些细节问题没有考虑,其中最主要的一个问题就是:同一个汉字,在不同的词语中可能具有完全不同的语义,如果使用一个向量来表征一个字,那么很可能会无法标识出这些差异性,故使用多个向量来表征同一个汉字,有下面几种方式:

1 Position-based Character Embedding

从名字可以看出,在该模型中同一个汉字根据其在词语中出现的位置不同,对应不同位置的向量表示形式。分析可知,汉字在词语中出现的位置有:Begin,Middle,End这三种情况,故每一个汉字都有三种向量表示形式,在进行 x j = 1 2 ( w j + 1 N j ∑ k = 1 N j c k ) x_j=\frac{1}{2}(w_j+\frac{1}{N_j}\sum_{k=1}^{N_j}c_k) xj=21(wj+Nj1k=1Njck) 生成向量操作的时候,对于 c k c_k ck按照其在词语中出现的位置进行合理的筛选。这种方式比较简单,但是缺点也是比较明显的,它假设的前提是同一个汉字只要位于不同单词的同一个位置就具有相同的语义,这显然在一些情况下是不成立的。

2 Cluster_based Character Embedding

该模型运用了k-means算法思想的部分原理,也就是对于每一个汉字提前分配x个字向量,x的个数是模型的一个超参数,代表了潜在定义的每个汉字所对应的语义模式(我们也可以称之为模式向量)。至于在利用式子 x j = 1 2 ( w j + 1 N j ∑ k = 1 N j c k ) x_j=\frac{1}{2}(w_j+\frac{1}{N_j}\sum_{k=1}^{N_j}c_k) xj=21(wj+Nj1k=1Njck)生成词向量的时候,如何选取合适的 c k c_k ck,paper给出了一种方法:
r k m a x = a r g m a x r k c o s ( v c o n t e x t , c k r k ) r_k^{max}=arg max_{r_k}cos(v_{context},c_k^{r_k}) rkmax=argmaxrkcos(vcontext,ckrk)
v c o n t e x t = ∑ t = j − k j + k x t = ∑ t = j − k j + k 1 2 ( w t + 1 N t ∑ c u ∈ x t c u m o s t ) v_{context}=\sum_{t=j-k}^{j+k}x_t=\sum_{t=j-k}^{j+k}\frac{1}{2}(w_t+\frac{1}{N_t}\sum_{c_u\in{x_t}}c_u^{most}) vcontext=t=jkj+kxt=t=jkj+k21(wt+Nt1cuxtcumost)
x j = 1 2 ( w j + 1 N j ∑ k = 1 N j c k r k m a x ) x_j=\frac{1}{2}(w_j+\frac{1}{N_j}\sum_{k=1}^{N_j}c_k^{r_k^{max}}) xj=21(wj+Nj1k=1Njckrkmax)
其中 c u m o s t c_u^{most} cumost代表了汉字u曾经被选择最多次的模式向量
也就是说,在对汉字x进行模式向量筛选的时候,利用了该汉字对应词语的context信息,而context信息就是该汉字对应词语前后窗口内的2k个词语,而这些词语的向量形式由词向量和字向量叠加形成,只不过在挑选字向量的模式向量的时候,直接选了过去被挑选最多次的模式向量(这也是这篇paper里面一个比较大的具有缺陷的地方,为什么选取曾经被最多次选取的向量呢??这显然也是不合理的)。
利用context向量,从一个汉字的所有模式向量中选择一个和context语义计算上最相似的作为该汉字对应的向量。

3 Nonparametric Cluster-based Character Embeddings
该模型和2中的Cluster_based Character Embedding模型是很相似的,唯一不同的是,Cluster_based Character Embedding中的每一个汉字对应的模型向量的数量是一个预先设定的固定值,也就是作为模型的超参数。而在Nonparametric Cluster-based Character Embeddings模型中,该值是一个模型自动学习的值。我刚开始很好奇,我直观感觉模型怎么可能学习出这个参数来,后来看了具体的实现才恍然大悟,其具体方法如下式所示:
if( c o s ( v c o n t e x t , v k r k ) < γ cos(v_{context},v_k^{r_k})<\gamma cos(vcontext,vkrk)<γ)
r k = n e w v e c t o r r_k=new\ vector rk=newvector
else
r k = r k m a x r_k=r_k^{max} rk=rkmax
也就是说还是计算汉字对应的所有模式向量(每个汉字在刚开始的时候会被分配初始的少量的模式向量)和context的语义相似度,当相似度小于一定阈值的时候,说明当前所有的模式向量都不太适合,那么就新添加一个更加适合的模式向量。这样来看每个汉字对应的模式向量个数,不仅仅与刚开始的初始数量有关,还和整个算法的计算过程有关。

总之作者通过大量的对比实验证明了该paper提出的模型,能够比传统的词向量生成策略word2vec和Glove提高性能。
下面是我认为比较有价值的作者的未来工作:
1 本文提出的汉字和词语结合的方式就是简单的向量相加操作,其实也许应用矩阵变换等方式可以把二者更加合理地结合在一起;
2 在相加的时候,需要给以每一个汉字不同权重,这也和我之前说的一致,可以利用attention机制,只不过在2015年的时候还没有attention的概念。

ps:最后这篇paper一句话解决我的一个困惑,就是为什么大家再生成词向量的时候选择的方法从来都不考虑Bengio刚开始提出的那个比较复杂的模型:“The training process of most previous word embedding models exhibits high computational complexity, which makes them unable to work for large-scale text corpora efficiently.”
总之一句话,就是Bengio提出的模型太复杂了,不适合训练大规模语料。

字和词语联合训练的词向量模型相关推荐

  1. NLP 利器 Gensim 来训练 word2vec 词向量模型的参数设置

    使用 Gensim 来训练 word2vec 词向量模型的参数设置 文章目录 一.最小频次 min_count 二.词向量维度 size 三.并行处理核心数 workers 我们可以使用一些参数设置来 ...

  2. 【NLP】维基百科中文数据训练word2vec词向量模型——基于gensim库

    前言   本篇主要是基于gensim 库中的 Word2Vec 模型,使用维基百科中文数据训练word2vec 词向量模型,大体步骤如下: 数据预处理 模型的训练 模型的测试 准备条件: Window ...

  3. 【从零开始学习深度学习】48.Pytorch_NLP实战案例:如何使用预训练的词向量模型求近义词和类比词

    目录 1. 下载预训练的词向量 2. 应用预训练词向量 2.1 求近义词 2.2 求类比词 本文将介绍如何使用已经在大规模语料上预训练的词向量模型来求近义词和类比词. 1. 下载预训练的词向量 基于P ...

  4. 从零开始构建基于textcnn的文本分类模型(上),word2vec向量训练,预训练词向量模型加载,pytorch Dataset、collete_fn、Dataloader转换数据集并行加载

    伴随着bert.transformer模型的提出,文本预训练模型应用于各项NLP任务.文本分类任务是最基础的NLP任务,本文回顾最先采用CNN用于文本分类之一的textcnn模型,意在巩固分词.词向量 ...

  5. 深度学习之循环神经网络(12)预训练的词向量

    深度学习之循环神经网络(12)预训练的词向量  在情感分类任务时,Embedding层是从零开始训练的.实际上,对于文本处理任务来说,领域知识大部分是共享的,因此我们能够利用在其它任务上训练好的词向量 ...

  6. 【NLP】word2vec词向量模型训练——基于tensorflow

    前言   维基百科中文数据训练word2vec词向量模型--基于gensim库   上文我们使用了 gensim 库中的 Word2vec 模块训练词向量模型,本篇我们通过 tensorflow 自己 ...

  7. NLP-分类模型-2016-文本分类:FastText【使用CBOW的模型结构;作用:①文本分类、②训练词向量、③词向量模型迁移(直接拿FastText官方已训练好的词向量来使用)】【基于子词训练】

    <原始论文:Bag of Tricks for Efficient Text Classification> <原始论文:Enriching Word Vectors with Su ...

  8. 使用 rnn 训练词向量模型

    词向量说明如下: 词向量模型表征的是词语与词语之间的距离和联系,词向量也叫词嵌入 word embedding CBOW 模型: 根据某个词的上下文,计算中间词出现的概率,预测的是中心词 Skip-G ...

  9. 维基百科简体中文语料训练word2vec词向量

    步骤: 1.下载维基百科中文语料 2.使用工具从压缩包中抽取正文文本 3.将繁体字转简体字 4.分词 5.训练模型 6.测试模型 1.下载维基百科中文语料 语料下载地址:https://dumps.w ...

最新文章

  1. spring中间scope详细解释
  2. 05-WIFI通讯客户端搭建
  3. 著名开源项目_著名开源项目案例研究
  4. 苹果面向Mac发布英特尔处理器漏洞缓解措施
  5. (228)FPGA岗位有哪些?
  6. 【Elasticsearch】es 各种 日志 慢日志 慢查询
  7. 刘鹏教授为江苏移动大数据和网络部门作报告
  8. tomcat中 JVM 内存溢出及合理配置
  9. 泰山游记:晚上爬并无乐趣,什么也看不到
  10. 将运算放大器(运放)用作比较器
  11. Dymola — 多学科系统仿真平台
  12. 看看世界各地牛人的彪悍乘车功夫
  13. wx.getImageInfo(Object object)获取图片信息
  14. 鸿蒙开发工具在哪下载,【鸿蒙开发工具下载】华为鸿蒙开发工具软件下载 v2.1.8 最新版-七喜软件园...
  15. 小程序二进制图片 buffer存储_可能没有想象的那么美好——微信小程序存储占用与清理实测...
  16. Redis-有序集合(Zset)数据结构
  17. 多云管理平台解决方案
  18. 计算机读博ccfc有用吗,考研复试面试用细节赢得导师认可
  19. 基于AM1808粗略概要
  20. python中docx模块的使用_python使用docx模块读写docx文件的方法与docx模块常用方法详解...

热门文章

  1. C++后端开发的一些工具
  2. 杭州的海王星辰将健美生的保健品全部突然下架拉,有谁知道是什么
  3. 计算机科技手抄报内容,科技手抄报内容:云计算
  4. 流体机械原理及设计08
  5. Android12之OpenSL ES基础数据结构总结(十)
  6. 未授权下载导致的信息泄露
  7. 一步一步做高性能服务器(C++) -- Day 0
  8. 什么是看门狗?如何操作?喂狗?工作流程?定时器,计数器,看门狗的关系。
  9. 前端工资涨不上去?可能是你没掌握构建工具:关于 Webpack、Babel、esbuild、Vite、Rollup、Parcel、SWC......的那些事
  10. django管理后台列表页,TextField字段展示换行等格式(format_html)