词嵌入是所有自然语言处理任务所必须要经历的步骤,非常的重要。词向量在网络上已经有了大量的文章,但是,出于我们专栏的完整性系统性的考虑,笔者还是决定加上这样一个专题。

计划用3-4次,彻底说清楚在自然语言处理中,词向量的由来,本质和训练。公众号专栏主要讲基本原理,知识星球讲实际的操作。

本篇主要讲述词向量的由来及本质。

作者 | 小Dream哥

编辑 | 言有三

1 词的向量化

首先,我们提出这样一个问题,

一个文本,经过分词之后,送入某一个自然语言处理模型之前该如何表示?

例如,“

人/如果/没用/梦想/,/跟/咸鱼/还有/什么/差别”,向机器学习模型直接输入字符串显然是不明智的,不便于模型进行计算和文本之间的比较。那么,我们需要一种方式来表示一个文本,这种文本表示方式要能够便于进行文本之间的比较,计算等。最容易想到的,就是对文本进行向量化的表示。例如,根据语料库的分词结果,建立一个词典,每个词用一个向量来表示,这样就可以将文本向量化了。

最早的文本向量化方法是词袋模型,我们先来看看词袋模型。

2 词袋模型

要讲词向量,我们首先不得不说的就是词袋模型。词袋模型是把文本看成是由一袋一袋的词构成的。例如,有这样两个文本:

1) “人/如果/没有/梦想/,/跟/咸鱼/还有/什么/差别”

2) “人生/短短/几十/年/,差别/不大/,/开心/最/重要”

这两个文本,可以构成这样一个词典:

{“人”,“如果”,“没有”, “梦想”, “,”,“跟”, “咸鱼” , “还有”,“什么”, “差别”, “人生”, “短短”, “几十”,“年”, “不大”, “开心”, “最”, “重要”}

字典的长度为18,每个词对应有一个index,所以词“人”可以用一个18维的向量表示表示:

{1,0,0,0,····,0}

词“重要”可以用一个18维的向量表示表示:

{0,0,0,0,····,1},

那么,文本该怎么表示呢?词袋模型把文本当成一个由词组成的袋子,记录句子中包含各个词的个数:

文本1:

{1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0, 0}

文本2:

{0,0,0,0,2,0,0,0,0,1,1,1,1,1,1,1,1,1}

我们大概总结一下,

词袋模型把文本看成是一个装着词的袋子,以文本2为例,用词袋模型可以这样描述它。文本2里有0个“人”,2个“,”, 1个“差别” 等等。所以词袋模型有以下特点:

1) 文本向量化之后的维度与词典的大小相关;

2) 词袋模型没有考虑词语之间的顺序关系。

这只是两个句子,所以词典的大小是18。当语料库很大时,词典的大小可以是几千甚至几万,这样大维度的向量,计算机很难去计算。

而且就算是只有一个词的句子,它的维度仍然是几千维,存在很大的浪费。

此外,词袋模型忽略了词序信息,对语义理解来讲是一个极大的信息浪费。最后,词袋模型会造成语义鸿沟现象,即两个表达意思很接近的文本,可能其文本向量差距很大。

所以,词袋模型并不是一个好的解决方案。接下来,词向量就“粉墨登场”了。

3 词向量

相比于词袋模型,词向量是一种更为有效的表征方式。怎么理解呢?词向量其实就是用一个一定维度(例如128,256维)的向量来表示词典里的词。

经过训练之后的词向量,能够表征词语之间的关系。例如,“香蕉”和“苹果”之间的距离,会比“香蕉”和“茄子”之间的距离要近。

通过多维向量表示,也能更为方便的进行计算。例如,“女人”+“漂亮” =“女神”。

那么,该如何获取词向量呢?我们先来看看神经概率语言模型。

4 神经概率语言模型

一个语言模型通常构建为一句话的概率分布p(W),这里的p(W)实际上反映的是W作为一个句子出现的概率。 说成大白话,

语言模型就是计算某个句子出现的概率。

对于一个由T个词按顺序构成的句子,P(W)实际上求解的是字符串的联合概率,利用贝叶斯公式,链式分解如下:

从上面可以看到,一个统计语言模型可以表示成,给定前面的的词,求后面一个词出现的条件概率。

我们在求P(W)时实际上就已经建立了一个模型,这里的诸多条件概率就是模型的参数。如果能够通过语料,将这些参数已学习到,就能够计算出一个句子出现的概率。

那么该如何学习这些条件概率呢?Yoshua Bengio在2003年《A Neural Probabilistic Language Model》一文中提出了一种神经网络的方法,用于语言模型的计算。

如上图所示,是一个简单的神经网络。首先,将输入语料进行分词,并向量化(随机初始化成为一个N维的向量),然后将他们拼接起来,用如下的公式表示:

随后,将上述的拼接结果分别经过一个激活函数和线性连接,并将二者的结果直接相加。此时,y的维度是(|V|, 1),|V|表示语料词表的大小。

最后,接一个softmax函数,预测出下一个词是目标词的概率。

训练时,会设计损失函数,用梯度下降的方法,优化参数。

在训练过程中,我们优化了如下的参数:

其中C为我们之前随机初始化的向量,但是在训练过程中,得到了不断的优化。

因此,在神经网络训练完成之后,我们不但得到了一个能够预测句子出现概率的模型,也得到了一份

词向量,它能够表示词语之间的关系。

5 总结

上面详细介绍了词向量的来历和作用,并介绍了一种词向量的训练方法。

在实际过程中,并不是用上述神经网络来训练词向量的因为词向量是如此的重要,NLP工作者们设计了专门的网络来训练词向量。目前用的最多的有word2vec和GLove。这里出于篇幅,先不介绍,后面的文章来介绍。

词向量是NLP开始迈进“现代化”的关键,是各种面试必问的基础,需重视。

词向量与词向量拼接_「NLP-词向量」一文详述词向量的由来及本质相关推荐

  1. mysql区间算法_「五大常用算法」一文图解分治算法和思想

    前言 分治算法(divide and conquer)是五大常用算法(分治算法.动态规划算法.贪心算法.回溯法.分治界限法)之一,很多人在平时学习中可能只是知道分治算法,但是可能并没有系统的学习分治算 ...

  2. 多模态语义分析_「CV学霸开讲」卷积神经网络压缩、多模态的语义分析研究

    原标题:「CV学霸开讲」卷积神经网络压缩.多模态的语义分析研究 [新智元导读]2017年度百度奖学金10位候选人中,人大的陈师哲和北大的王云鹤所学专业主要集中在计算机视觉,本文将详细呈现CV学子的求学 ...

  3. 京东的商品搜索功能是如何实现的_「商品架构day8」京东几百亿的商品怎么搜索...

    本文来自京东王春明老师的分享,主要介绍京东商品搜索的整体架构. 京东商品搜索简介 京东商品搜索引擎是搜索推荐部自主研发的商品搜索引擎,主要功能是为海量京东用户提供精准.快速的购物体验.目前入口主要有P ...

  4. 搜索引擎下拉食云速捷详细_「seo推广技术」seo关键词软件首要云速捷安全

    电子邮件推广是一个针对有效客户进行推广的好办法.这种营销方式的关键是建立一个数据库.这样你就可以直接跟客户建立直接而及时的联系.这种方法还有利于你与你将来,现在和过去的客户建立一种持续的联系.企业可选 ...

  5. mysql against 中文_「against的用法」Mysql全文搜索之MATCH...AGAINST的用法介绍 - seo实验室...

    against的用法 前提:mysql只支持英文内容的全文索引,所以只考虑英文的全文搜索.假定数据表名为post,有三列:id.title.content.id是自增长序号,title是varchar ...

  6. 背景宽高随文本变化_「只要功夫深 不用关键帧」之文本图层小技巧

    「只要功夫深 不用关键帧」将不定期更新一些AE表达式和脚本的奇技淫巧,希望能给大家带来一些启发. 上周有朋友遇到这么个问题: 对一段文字,不管文字长度如何变化,想让背景到文字的边距始终保持不变,在 A ...

  7. python中字符型用什么表示_「小白学Python」Python中最常用的数据类型:字符串

    Python中有6个标准数据类型,分别是:Number(数值).String(字符串).List(列表).Tuple(元组).Sets(集合).Dictionary(字典). 其中,String(字符 ...

  8. 不等待输入_「对方正在输入……」的提示,给聊天带来什么影响?

    看着微信对话界面的「对方正在输入-」,你是否急于知道对方的输入内容?大部分时候,虽然只有十几秒,但是却感觉过了数分钟.这个功能,究竟有没有起到即时反馈的作用呢? 从时间知觉的角度看,「对方正在输入-」 ...

  9. python列表框_「每日一练」Python列表框部件的运用

    原标题:「每日一练」Python列表框部件的运用 用Python就一定要用到界面操作,有一个好的用户界面,才会有好的用户体验,下边就开始创建我们的主窗口,并设置相应的列表框部件吧! 案例 创建主窗口, ...

最新文章

  1. 蓝桥杯 2011年第二届C语言初赛试题(3)
  2. angular js实现开关效果
  3. NSThread使用总结
  4. 39 MM配置-采购-采购订单-STO配置-定义工厂的装运数据
  5. ubuntu software updater已意外关闭 解决办法
  6. 强强合体:Docker版Kali Linux发布
  7. cp和scp复制命令
  8. 导航猫(NaviCat for MySql)建立表的方法
  9. Intel 芯片集被曝漏洞,可导致加密数据被盗
  10. python476集免费教材_476. 数字的补数 | python|python爬虫|python入门|python教程
  11. 大数据要如何提高 才能满足智慧城市需求?
  12. DayDayUp:计算机技术与软件专业技术资格证书之《系统集成项目管理工程师》课程讲解之十大知识领域之4核心—项目质量管理
  13. windows11恢复ie浏览器的方法教程
  14. 小米人APK改之理(APK IDE)
  15. catia制作物料明细_CATIA课时:动力头主架详细标注及物料清单视频教程_翼狐网...
  16. 微信小程序内无法播放第三方服务器上的视频资源
  17. CNN手写汉字识别参数调整
  18. yy聊天室-创建登录界面与好友列表界面
  19. LightOJ 1071 Baker Vai(记忆化搜索)
  20. 实习--广东电信有限公司汕头市分公司讲座

热门文章

  1. 【教3妹学算法-leetcode】数组能形成多少数对
  2. WebRtc GCC、Sendside-BWE 区别
  3. Linux企业运维人员最常用150个命令汇总
  4. 磁盘被未知资源耗尽lsof -n|grep deleted
  5. redis 哨兵配置
  6. Storyboard介绍及使用1 Storyboards Part1 译文
  7. 获取js函数执行时间
  8. 火狐安装低版本hackbar插件
  9. 奇龙公关解析危机公关为何这般重要?
  10. sqlserver数据库数据类型详解