预训练的 GloVe 矢量文件(例如 glove.6B.50d.txt)中的“unk”是啥?

     2023-03-12     154

关键词:

【中文标题】预训练的 GloVe 矢量文件(例如 glove.6B.50d.txt)中的“unk”是啥?【英文标题】:What is "unk" in the pretrained GloVe vector files (e.g. glove.6B.50d.txt)?预训练的 GloVe 矢量文件(例如 glove.6B.50d.txt)中的“unk”是什么? 【发布时间】:2018-08-20 18:01:47 【问题描述】:

我在from https://nlp.stanford.edu/projects/glove/ 下载的手套矢量文件 glove.6B.50d.txt 中找到了“unk”标记。其值如下:

unk -0.79149 0.86617 0.11998 0.00092287 0.2776 -0.49185 0.50195 0.00060792 -0.25845 0.17865 0.2535 0.76572 0.50664 0.4025 -0.0021388 -0.28397 -0.50324 0.30449 0.51779 0.01509 -0.35031 -1.1278 0.33253 -0.3525 0.041326 1.0863 0.03391 0.33564 0.49745 -0.070131 -1.2192 -0.48512 -0.038512 -0.13554 -0.1638 0.52321 -0.31318 -0.1655 0.11909 -0.15115 -0.15621 -0.62655 -0.62336 -0.4215 0.41873 -0.92472 1.1049 -0.29996 -0.0063003 0.3954

它是用于未知单词的标记还是某种缩写?

【问题讨论】:

【参考方案1】:

预训练的 GloVe 文件中的 unk 令牌不是未知令牌!

见google groups thread Jeffrey Pennington(GloVe 的作者)写道:

预训练的向量没有未知标记,目前代码在生成共现计数时只是忽略了词汇表外的单词。

这是在语料库中出现“unk”时学习到的任何其他嵌入(这似乎偶尔会发生!)

相反,Pennington 建议(在同一篇文章中):

...我发现只取所有或部分词向量的平均值就可以生成一个很好的未知向量。

您可以使用以下代码执行此操作(应该适用于任何预训练的 GloVe 文件):

import numpy as np

GLOVE_FILE = 'glove.6B.50d.txt'

# Get number of vectors and hidden dim
with open(GLOVE_FILE, 'r') as f:
    for i, line in enumerate(f):
        pass
n_vec = i + 1
hidden_dim = len(line.split(' ')) - 1

vecs = np.zeros((n_vec, hidden_dim), dtype=np.float32)

with open(GLOVE_FILE, 'r') as f:
    for i, line in enumerate(f):
        vecs[i] = np.array([float(n) for n in line.split(' ')[1:]], dtype=np.float32)

average_vec = np.mean(vecs, axis=0)
print(average_vec)

对于glove.6B.50d.txt,这给出:

[-0.12920076 -0.28866628 -0.01224866 -0.05676644 -0.20210965 -0.08389011
  0.33359843  0.16045167  0.03867431  0.17833012  0.04696583 -0.00285802
  0.29099807  0.04613704 -0.20923874 -0.06613114 -0.06822549  0.07665912
  0.3134014   0.17848536 -0.1225775  -0.09916984 -0.07495987  0.06413227
  0.14441176  0.60894334  0.17463093  0.05335403 -0.01273871  0.03474107
 -0.8123879  -0.04688699  0.20193407  0.2031118  -0.03935686  0.06967544
 -0.01553638 -0.03405238 -0.06528071  0.12250231  0.13991883 -0.17446303
 -0.08011883  0.0849521  -0.01041659 -0.13705009  0.20127155  0.10069408
  0.00653003  0.01685157]

由于使用较大的手套文件执行此操作需要大量计算,因此我继续为您计算 glove.840B.300d.txt 的向量:

0.22418134 -0.28881392 0.13854356 0.00365387 -0.12870757 0.10243822 0.061626635 0.07318011 -0.061350107 -1.3477012 0.42037755 -0.063593924 -0.09683349 0.18086134 0.23704372 0.014126852 0.170096 -1.1491593 0.31497982 0.06622181 0.024687296 0.076693475 0.13851812 0.021302193 -0.06640582 -0.010336159 0.13523154 -0.042144544 -0.11938788 0.006948221 0.13333307 -0.18276379 0.052385733 0.008943111 -0.23957317 0.08500333 -0.006894406 0.0015864656 0.063391194 0.19177166 -0.13113557 -0.11295479 -0.14276934 0.03413971 -0.034278486 -0.051366422 0.18891625 -0.16673574 -0.057783455 0.036823478 0.08078679 0.022949161 0.033298038 0.011784158 0.05643189 -0.042776518 0.011959623 0.011552498 -0.0007971594 0.11300405 -0.031369694 -0.0061559738 -0.009043574 -0.415336 -0.18870236 0.13708843 0.005911723 -0.113035575 -0.030096142 -0.23908928 -0.05354085 -0.044904727 -0.20228513 0.0065645403 -0.09578946 -0.07391877 -0.06487607 0.111740574 -0.048649278 -0.16565254 -0.052037314 -0.078968436 0.13684988 0.0757494 -0.006275573 0.28693774 0.52017444 -0.0877165 -0.33010918 -0.1359622 0.114895485 -0.09744406 0.06269521 0.12118575 -0.08026362 0.35256687 -0.060017522 -0.04889904 -0.06828978 0.088740796 0.003964443 -0.0766291 0.1263925 0.07809314 -0.023164088 -0.5680669 -0.037892066 -0.1350967 -0.11351585 -0.111434504 -0.0905027 0.25174105 -0.14841858 0.034635577 -0.07334565 0.06320108 -0.038343467 -0.05413284 0.042197507 -0.090380974 -0.070528865 -0.009174437 0.009069661 0.1405178 0.02958134 -0.036431845 -0.08625681 0.042951006 0.08230793 0.0903314 -0.12279937 -0.013899368 0.048119213 0.08678239 -0.14450377 -0.04424887 0.018319942 0.015026873 -0.100526 0.06021201 0.74059093 -0.0016333034 -0.24960588 -0.023739101 0.016396184 0.11928964 0.13950661 -0.031624354 -0.01645025 0.14079992 -0.0002824564 -0.08052984 -0.0021310581 -0.025350995 0.086938225 0.14308536 0.17146006 -0.13943303 0.048792403 0.09274929 -0.053167373 0.031103406 0.012354865 0.21057427 0.32618305 0.18015954 -0.15881181 0.15322933 -0.22558987 -0.04200665 0.0084689725 0.038156632 0.15188617 0.13274793 0.113756925 -0.095273495 -0.049490947 -0.10265804 -0.27064866 -0.034567792 -0.018810693 -0.0010360252 0.10340131 0.13883452 0.21131058 -0.01981019 0.1833468 -0.10751636 -0.03128868 0.02518242 0.23232952 0.042052146 0.11731903 -0.15506615 0.0063580726 -0.15429358 0.1511722 0.12745973 0.2576985 -0.25486213 -0.0709463 0.17983761 0.054027 -0.09884228 -0.24595179 -0.093028545 -0.028203879 0.094398156 0.09233813 0.029291354 0.13110267 0.15682974 -0.016919162 0.23927948 -0.1343307 -0.22422817 0.14634751 -0.064993896 0.4703685 -0.027190214 0.06224946 -0.091360025 0.21490277 -0.19562101 -0.10032754 -0.09056772 -0.06203493 -0.18876675 -0.10963594 -0.27734384 0.12616494 -0.02217992 -0.16058226 -0.080475815 0.026953284 0.110732645 0.014894041 0.09416802 0.14299914 -0.1594008 -0.066080004 -0.007995227 -0.11668856 -0.13081996 -0.09237365 0.14741232 0.09180138 0.081735 0.3211204 -0.0036552632 -0.047030564 -0.02311798 0.048961394 0.08669574 -0.06766279 -0.50028914 -0.048515294 0.14144728 -0.032994404 -0.11954345 -0.14929578 -0.2388355 -0.019883996 -0.15917352 -0.052084364 0.2801028 -0.0029121689 -0.054581646 -0.47385484 0.17112483 -0.12066923 -0.042173345 0.1395337 0.26115036 0.012869649 0.009291686 -0.0026459037 -0.075331464 0.017840583 -0.26869613 -0.21820338 -0.17084768 -0.1022808 -0.055290595 0.13513643 0.12362477 -0.10980586 0.13980341 -0.20233242 0.08813751 0.3849736 -0.10653763 -0.06199595 0.028849555 0.03230154 0.023856193 0.069950655 0.19310954 -0.077677034 -0.144811

【讨论】:

这是作者的有趣指导,但它似乎也忽略了给定语料库中单词的相对频率。也就是说,这里是质心,而不是重心,更深一点。您是否同意我的评估,如果同意,您可能会推荐哪些替代方案?例如,为什么不简单地使用原点?【参考方案2】:

由于无法发表评论,写另一个答案。

如果有人在使用@jayelm 给出的上述向量时遇到问题,因为复制粘贴不起作用。我正在编写 2 行代码,它们将为您提供准备好在 python 中使用的向量。

vec_string = '0.22418134 -0.28881392 0.13854356 0.00365387 -0.12870757 0.10243822 0.061626635 0.07318011 -0.061350107 -1.3477012 0.42037755 -0.063593924 -0.09683349 0.18086134 0.23704372 0.014126852 0.170096 -1.1491593 0.31497982 0.06622181 0.024687296 0.076693475 0.13851812 0.021302193 -0.06640582 -0.010336159 0.13523154 -0.042144544 -0.11938788 0.006948221 0.13333307 -0.18276379 0.052385733 0.008943111 -0.23957317 0.08500333 -0.006894406 0.0015864656 0.063391194 0.19177166 -0.13113557 -0.11295479 -0.14276934 0.03413971 -0.034278486 -0.051366422 0.18891625 -0.16673574 -0.057783455 0.036823478 0.08078679 0.022949161 0.033298038 0.011784158 0.05643189 -0.042776518 0.011959623 0.011552498 -0.0007971594 0.11300405 -0.031369694 -0.0061559738 -0.009043574 -0.415336 -0.18870236 0.13708843 0.005911723 -0.113035575 -0.030096142 -0.23908928 -0.05354085 -0.044904727 -0.20228513 0.0065645403 -0.09578946 -0.07391877 -0.06487607 0.111740574 -0.048649278 -0.16565254 -0.052037314 -0.078968436 0.13684988 0.0757494 -0.006275573 0.28693774 0.52017444 -0.0877165 -0.33010918 -0.1359622 0.114895485 -0.09744406 0.06269521 0.12118575 -0.08026362 0.35256687 -0.060017522 -0.04889904 -0.06828978 0.088740796 0.003964443 -0.0766291 0.1263925 0.07809314 -0.023164088 -0.5680669 -0.037892066 -0.1350967 -0.11351585 -0.111434504 -0.0905027 0.25174105 -0.14841858 0.034635577 -0.07334565 0.06320108 -0.038343467 -0.05413284 0.042197507 -0.090380974 -0.070528865 -0.009174437 0.009069661 0.1405178 0.02958134 -0.036431845 -0.08625681 0.042951006 0.08230793 0.0903314 -0.12279937 -0.013899368 0.048119213 0.08678239 -0.14450377 -0.04424887 0.018319942 0.015026873 -0.100526 0.06021201 0.74059093 -0.0016333034 -0.24960588 -0.023739101 0.016396184 0.11928964 0.13950661 -0.031624354 -0.01645025 0.14079992 -0.0002824564 -0.08052984 -0.0021310581 -0.025350995 0.086938225 0.14308536 0.17146006 -0.13943303 0.048792403 0.09274929 -0.053167373 0.031103406 0.012354865 0.21057427 0.32618305 0.18015954 -0.15881181 0.15322933 -0.22558987 -0.04200665 0.0084689725 0.038156632 0.15188617 0.13274793 0.113756925 -0.095273495 -0.049490947 -0.10265804 -0.27064866 -0.034567792 -0.018810693 -0.0010360252 0.10340131 0.13883452 0.21131058 -0.01981019 0.1833468 -0.10751636 -0.03128868 0.02518242 0.23232952 0.042052146 0.11731903 -0.15506615 0.0063580726 -0.15429358 0.1511722 0.12745973 0.2576985 -0.25486213 -0.0709463 0.17983761 0.054027 -0.09884228 -0.24595179 -0.093028545 -0.028203879 0.094398156 0.09233813 0.029291354 0.13110267 0.15682974 -0.016919162 0.23927948 -0.1343307 -0.22422817 0.14634751 -0.064993896 0.4703685 -0.027190214 0.06224946 -0.091360025 0.21490277 -0.19562101 -0.10032754 -0.09056772 -0.06203493 -0.18876675 -0.10963594 -0.27734384 0.12616494 -0.02217992 -0.16058226 -0.080475815 0.026953284 0.110732645 0.014894041 0.09416802 0.14299914 -0.1594008 -0.066080004 -0.007995227 -0.11668856 -0.13081996 -0.09237365 0.14741232 0.09180138 0.081735 0.3211204 -0.0036552632 -0.047030564 -0.02311798 0.048961394 0.08669574 -0.06766279 -0.50028914 -0.048515294 0.14144728 -0.032994404 -0.11954345 -0.14929578 -0.2388355 -0.019883996 -0.15917352 -0.052084364 0.2801028 -0.0029121689 -0.054581646 -0.47385484 0.17112483 -0.12066923 -0.042173345 0.1395337 0.26115036 0.012869649 0.009291686 -0.0026459037 -0.075331464 0.017840583 -0.26869613 -0.21820338 -0.17084768 -0.1022808 -0.055290595 0.13513643 0.12362477 -0.10980586 0.13980341 -0.20233242 0.08813751 0.3849736 -0.10653763 -0.06199595 0.028849555 0.03230154 0.023856193 0.069950655 0.19310954 -0.077677034 -0.144811'
import numpy as np
average_glove_vector = np.array(vec_string.split(" "))
print(average_glove_vector)

【讨论】:

使用github--stanfordnlp--glove训练自己的数据词向量(代码片段)

...将语料×××.txt添加到GloVe-master文件夹下3.修改训练语料地址打开demo.sh文件,由于默认是下载TXT8作为语料,故将这段代码删除,并修改CORPUS=×××.txt,最终文件内容如下:其他应该都可以自行修改。 4.执... 查看详情

glove词向量

...而向量和就是要不断更新学习的参数。因此,本质上它的训练方式和监督学习的训练方式没有什么不同,都是基于梯度下降的。训练的具体 查看详情

使用 glove-python 模型获取词嵌入字典

...02【问题描述】:我使用Maciejkula的实现(githubrepo)在python中训练了一个Glove模型。下一步我需要一个词嵌入词典。但是,我似乎找不到从我训练的手套模型中提取这样一个字典的简单方法。我可以通过访问model. 查看详情

glove损失函数的理解

  简介GloVe是一种非常简单快速的训练词向量的算法。与复杂的word2vec相比,其是一个log双线性模型,仅通过一个简单的损失函数就能够得到很好的结果。(1)J=∑i,jNf(Xi,j)(viTvj+bi+bj−log(Xi,j))2其中,vi和vj是i和j的词向量... 查看详情

加载glove或者word2vec训练好的词向量进行训练lstm等模型的训练(代码片段)

...ize=tokenizer,lower=True,fix_length=self.config.max_length)#对训练数据创建一个字典,出现最多的前10000个单词,词向量为100d的,如果没有会自己下载的TEXT.build_vocab(train_data,max_size=10000,vectors='glove.6B.100d')#max_si... 查看详情

文本情感分析:基于word2vec和glove词向量的文本表示(代码片段)

...征,也就是用word2vec词向量和glove词向量进行文本表示,训练随机森林分类器。一、训练word2vec词向量Kaggle情感分析题给出了三个数据集,一个是带标签的训练集,共25000条评论,一个是测试集,无 查看详情

glove理解

...dn.net/leyounger/article/details/78206832 2018.10.28大概了解了下glove思想:先构造文档中出现的共现矩阵,Xij的意义为:在整个语料库中,单词i和单词j共同出现在一个窗口中的次数。然后通过代价函数 学习词向量。(具体的推导公... 查看详情

深度双向transformer预训练bert第一作者分享

目录NLP中的预训练语境表示语境表示相关研究存在的问题BERT的解决方案任务一:MaskedLM任务二:预测下一句BERT输入表示模型结构——Transformer编码器Transformervs.LSTM模型细节在不同任务上进行微调GLUESQuAD1.1SQuAD2.0SWAG分析预训练的影... 查看详情

Word2Vec 和 Glove 向量是不是适合实体识别?

...正在研究命名实体识别。我评估了基于传统nlp技术的库,例如MITIE、StanfordNER、NLTKNER等。我还研究了用于在向量空间中表示单词 查看详情

GloVe for Python 3.7 版本

】GloVeforPython3.7版本【英文标题】:GloVeforPython3.7version【发布时间】:2020-05-3120:43:13【问题描述】:我正在尝试在Python3.7版上从Pypi安装GloVe包,但它一直返回下面写的相同错误。有什么方法可以使用手套吗?我也尝试从https://githu... 查看详情

keras深度学习实战——使用glove模型构建单词向量(代码片段)

Keras深度学习实战——使用GloVe模型构建单词向量0.前言1.GloVe算法模型1.1模型目标1.2GloVe算法计算细节3.实现GloVe模型构建单词向量3.1数据集3.2模型实现相关链接0.前言在《使用fastText模型构建单词向量》一节中,我们学习了如何构... 查看详情

keras深度学习实战——使用glove模型构建单词向量(代码片段)

Keras深度学习实战——使用GloVe模型构建单词向量0.前言1.GloVe算法模型1.1模型目标1.2GloVe算法计算细节3.实现GloVe模型构建单词向量3.1数据集3.2模型实现相关链接0.前言在《使用fastText模型构建单词向量》一节中,我们学习了如... 查看详情

glove:globalvectorsforwordrepresentation阅读总结

论文:GloVe:GlobalVectorsforWordRepresentationcs224视频:https://www.bilibili.com/video/BV1pt411h7aT?t=4017&p=3目录一、背景介绍二、实验方法三、模型理解1、和其他模型的关系2、模型复杂度四、实验结果0、实验设置1、单词类比任... 查看详情

glove原理详细解读

...我们可以通过大量的语料文本来构建一个共现统计矩阵。例如,有语料如下:Ilikedeeplearning.IlikeNLP.Ienjoyflying.以窗半径为1来指定上下文环境,则共现矩阵就应该是:X01:它表示like出现在I的环境(Ilike区间)中的次数(在整个语料库中... 查看详情

使用带有 LSTM 的预训练 word2vec 进行单词生成

】使用带有LSTM的预训练word2vec进行单词生成【英文标题】:Usingpre-trainedword2vecwithLSTMforwordgeneration【发布时间】:2017-06-2305:05:27【问题描述】:LSTM/RNN可用于文本生成。This展示了将预训练的GloVe词嵌入用于Keras模型的方法。如何将... 查看详情

情感分析:使用循环神经网络(代码片段)

...循环神经网络1-使用循环神经网络表示单个文本2-加载预训练的词向量3-训练和评估模型4-小结情感分析:使用循环神经网络与词相似度和类比任务一样,我们也可以将预先训练的词向量应用于情感分析。由于IMDb评论数据... 查看详情

nlp:languagemodel(n-gram/word2vec/glove)

...在线广告、推荐系统、问答系统等,给我们提出了挑战。例如在效果广告系统中,需要将Query(UserorPage)和广告Ad投影到相同的特征语义空间做精准匹配,如果Query是用户,需要基于用户历史数据离线做用户行为分析,如果Query是网... 查看详情

glove----共现矩阵与概率概率比值

一、共现矩阵矩阵的行和列都是词典中的所有词,Xij的定义为,在所有词i的上下文中,Xj出现的次数。因此Xi定义为,所有的Xij之和,也就是词i出现的上下文中的词数总和,基本和词i的出现次数成正比。 二、概率Pij定义为Xi... 查看详情