Loading [MathJax]/extensions/TeX/boldsymbol.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Glove和fastText

Glove和fastText

作者头像
mathor
发布于 2020-04-10 01:43:17
发布于 2020-04-10 01:43:17
5520
举报
文章被收录于专栏:mathormathor

本文介绍两种更新一点的词向量,它们分别是2014年由Stanford团队发表的Glove和2017年由Facebook团队发表的fastText

Glove

Glove使用了词与词之间的共现(co-occurrence)信息。我们定义X为共现词频矩阵,其中元素xij表示词j出现在词i的环境(context)的次数。这里的"环境"有多种定义。举个例子,在一段文本序列中,如果词j出现在词i左边或者右边不超过10个词的距离,我们可以认为词j出现在词i的环境一次。令xi=kxik为任意词出现在词i的环境的次数。那么

Pij=P(ji)=xijxi

为词j出现在词i的环境的概率。这一概率也称为词i和词的共现概率

共现概率比值

Glove论文里展示了以下一组词对的共现概率与比值

$w_k$

solid

gas

water

fashion

$p_1=P(w_k\mid ice)$

0.00019

0.000066

0.003

0.000017

$p_2=P(w_k\mid ice)$

0.000022

0.00078

0.0022

0.000018

$p_1/p_2$

8.9

0.085

1.36

0.96

我们可以观察到以下现象:

  • 对于与ice相关而与steam不相关的词,例如=solid,我们期望共现概率比值较大,例如上面最后一栏的8.9
  • 对于与ice不相关而与steam相关的词,例如=gas,我们期望共现概率比值较小,例如上面最后一栏的0.085
  • 对于与ice和steam都相关的词,例如=water,我们期望共现概率比值接近1,例如上面最后一栏的1.36
  • 对于与ice和steam都不相关的词,例如=fashion,我们期望共现概率比值接近1,例如上面最后一栏的0.96

由此可见,共现概率比值能比较直观的表达词之间的关系。Glove试图用有关词向量的函数来表达共现概率比值

用词向量表达共现概率比值

Glove的核心在于使用词向量表达共现概率比值。而任意一个这样的比值需要三个词的词向量。对于共现概率,我们称词和词分别为中心词和背景词。我们使用分别表示中心词和背景词的词向量

我们可以用有关词向量的函数来表达共现概率比值:

需要注意的是,函数可能涉及的并不唯一。首先,我们用向量之差来表达共现概率的比值,并将上式改写成

由于共现概率比值是一个标量,我们可以使用向量之间的内积把函数的自变量进一步改写

由于任意一对词共现的对称性,我们希望以下两个性质可以同时被满足:

  • 任意词作为中心词和背景词的词向量应该相等:对任意词
  • 词与词之间共现次数矩阵应该对称:对任意词

为了满足以上两个性质,一方面我们令

并得到。以上两式右边联立

上式两边取对数可得

另一方面,我们可以把上式中的替换成两个偏移项之和,得到

将索引互换,我们可以验证对称性的两个性质可以同时被上式满足

因此,对于任意一对词,用它们的词向量表达共现概率比值最终可以被简化为表达他们共现词频的对数:

损失函数

上式中的共现词频是直接在训练数据上统计得到的,为了学习词向量和相应的偏移项,我们希望上式中的左边与右边越接近越好,给定词典大小和权重函数,我们定义损失函数为

对于权重,一个建议的选择是,当),令(例如),反之令。需要注意的是,损失函数的计算复杂度与共现词频矩阵中非零元素的数目呈线性关系。我们可以从中随机采样小批量非零元素,使用随机梯度下降迭代词向量和偏移项。当所有词向量学习得到后,Glove是用一个词的中心词向量与背景词向量之和作为该词的最终词向量

关于Glove的一些公式推导,其实并不严谨,它只是提出了一些设计思路,为了满足那两个条件,共现词频应该设计成什么样。所以如果某一步推导看不懂也很正常,忽略过去就行了,只要知道最终的损失函数的性质就行

fastText

fastText在使用负采样的skip-gram模型基础上,将每个中心词视为子词(subword)的集合,并学习子词的词向量

以where这个词为例,设子词为3个字符,它的子词包括"<wh"、"whe"、"her"、"ere"、"re>"和特殊子词(整词)"<where>",其中"<"和">"是为了将作为前后缀的子词区分出来。而且,这里的子词"her"与整词"<her>"也可被区分。给定一个词取出。假设词典中任意子词的子词向量为,我们可以把使用负采样的skip-gram模型的损失函数

直接替换成

我们可以看到,原中心词向量被替换成了中心词的子词向量的和。与整词学习(word2vec和Glove)不同,词典以外的新词的词向量可以使用fastText中相应的子词向量之和

fastText对于一些特定语言较重要,例如阿拉伯语、德语和俄语。例如,德语中有很多复合词,例如乒乓球(英文table tennis)在德语中叫"Tischtennis"。fastText可以通过子词表达两个词的相关性,例如"Tischtennis"和"Tennis"

如果遇到一个新词,对于fastText来说,它可以从训练集中找出这个新词的所有子词向量,然后做个求和,就能算出这个新词的词向量了

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
python pyqt5 弹窗
import sys from PyQt5.QtCore import * from PyQt5.QtWidgets import * from PyQt5.QtGui import *
用户5760343
2019/07/05
1.5K0
PySide6 GUI 编程(25):QMessageBox的简单使用
bowenerchen
2024/08/12
4532
PySide6 GUI 编程(25):QMessageBox的简单使用
PyQt5 输入对话框QInputDialog
(int, bool ok) QInputDialog.getInt (QWidget parent, QString title, QString label, int value = 0, int min = -2147483647, int max = 2147483647, int step = 1, Qt.WindowFlags flags = 0)
用户6021899
2019/08/14
2.8K0
Python高级进阶#007 pyqt5消息盒子QMessageBox
带有图标的消息盒子,图标可以是问号question,信息information,警告warning
刘金玉编程
2019/10/17
1.8K0
python pyqt5 QMessageBox 消息框
import sys from PyQt5.QtCore import * from PyQt5.QtGui import * from PyQt5.QtWidgets import *
用户5760343
2019/07/05
1.8K0
PyQT5基本功能
TomatoCool
2023/07/30
3020
PyQT5基本功能
PyQt5美化你的GUI界面
目录 1 圆点选择选项设置 2 选项按钮设置 3 关闭弹窗设置 4 关闭程序弹窗 5 设置关闭按钮 6 设置背景 7 下拉列表框设置 8 等待时显示进度条 ---- 1 圆点选择选项设置 效果展示 代码参考 #!/usr/bin/python # -*- coding:utf-8 -*- import sys from PyQt5 import QtWidgets, QtCore from PyQt5.QtWidgets import * class qt_view(QWidget): def
荣仔_最靓的仔
2021/09/07
4K0
[PyQt Tutorial]8.QMessageBox
https://www.tutorialspoint.com/pyqt/pyqt_introduction.htm
bsbforever
2020/08/19
4680
[PyQt Tutorial]8.QMessageBox
PyQt5安装与使用
最近偶尔会写一些小工具提升项目组的效率,由于与物理设备交互的中间模块是基于 Python 的,用 Java 难以做到与之通信,为了方便大家日常使用,所以盯上了 Python GUI 工具,试了几个 GUI 框架,最终还是看上了 PyQt5 这个使用较多,文档相对较全的工具~
幻影龙王
2021/08/22
2.1K0
PyQt5安装与使用
First PyQt
上面的代码实例会在屏幕上显示一个小的窗口。 在这里,我们进行了一些必要的模块导入,最基础的widget组件位于PyQt5.QtWidget模块中
小飞侠xp
2018/12/24
1.8K0
First PyQt
『开发技巧』PyQt5入门教程
PyQt5是一套来自Digia的Qt5应用框架和Python的粘合剂。支持Python2.x和Python3.x版本。本教程使用Pyhton 3。Qt库是最强大的GUI支持库的一种。PyQt5的官方主页是www.riverbankcomputing.co.uk/news。是Riverbank Computing开发了PyQt5。
小宋是呢
2019/06/27
4.4K0
『开发技巧』PyQt5入门教程
PyQt5 技术篇-调用消息对话框(QMessageBox)进行简单提示!
参数介绍: 参数一,有self用self,没有的话用None; 参数二,标题; 参数三,内容; 参数四,按钮,可以有多个,用|括起来,已知的还有 QMessageBox.Canel,QMessageBox.Close 等; 参数四,如果关闭的话,返回的值。 返回值是对象,形如QMessageBox.Ok。 可以用 if(a == QMessageBox.Ok) 语句判断。
小蓝枣
2020/09/23
2.2K0
【Python篇】PyQt5 超详细教程——由入门到精通(中篇二)
【Python篇】PyQt5 超详细教程——由入门到精通(序篇) 【Python篇】PyQt5 超详细教程——由入门到精通(中篇一)
半截诗
2024/10/09
1.9K0
【Python篇】PyQt5 超详细教程——由入门到精通(中篇二)
PyQt 创建自定义QWidget
QApplication是一个单例,在QWidget中可以通过QApplication.instance()获取到对象
AnRFDev
2021/02/01
1.8K0
Qt5实战第四篇:Qt5的对话框与窗口
在Qt5应用程序开发中,对话框(Dialog)和窗口(Window)是两种常见的用户界面元素。对话框用于与用户进行简短的交互,如确认操作、输入数据等;而窗口则通常用于展示应用程序的主要内容或提供复杂的交互界面。本文将详细介绍Qt5中对话框与窗口的创建、使用以及它们之间的区别和联系。
china马斯克
2024/12/27
4130
使用 Pyqt5 制作猜数游戏 GUI
在我们的 python 入门教程的最开始,用了一个 猜数字 的游戏作为讲解的案例。这个例子很小巧,但却能练习到 输入、输出、计算、条件判断、随机数 等知识点,所以是个很好的入门小程序。很多人第一次写出来之后,觉得很有成就感,想要发给别人也玩一下。但命令行的黑白文字实在太不“友好”了,所以自然而然地会想到:能不能做一个带用户界面的版本?
Crossin先生
2019/06/24
1.7K0
PyQt5案例汇总(简洁版)
### 01菜单栏 ```python import sys from PyQt5.QtWidgets import QMainWindow, QAction, qApp, QApplication from PyQt5.QtGui import QIcon class Example(QMainWindow): def __init__(self): super().__init__() self.initUI() def initUI(self):
victorfengming
2021/11/26
2.1K0
pyQt6做一个登陆界面
云帆沧海
2024/01/24
6570
Qt中各种消息框的使用
在程序运行时,经常需要提示用户一些信息,比如警告啊,提示啊,建议啊之类的东西。这些东西基本上是通过消息框与用户进行交互的,Qt中主要是用QMessageBox类来加以实现的。
mythsman
2022/11/14
1.5K0
Qt中各种消息框的使用
python pyqt5 操作sqlite
import sys from PyQt5.QtCore import * from PyQt5.QtGui import * from PyQt5.QtWidgets import * from PyQt5.QtSql import QSqlDatabase , QSqlQuery
用户5760343
2019/07/27
2.2K0
相关推荐
python pyqt5 弹窗
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档