如何使用训练的跳跃模型预测单词?
How to predict word using trained skipgram model?
我正在使用Google的Word2vec,我想知道如何获得使用分层softmax训练的skipgram模型预测的顶级单词,给定输入单词?
例如,当使用负采样时,可以简单地将输入词的嵌入(来自输入矩阵(与输出矩阵中的每个向量相乘,然后取具有最高值的向量。但是,在分层 softmax 中,由于使用了霍夫曼树,有多个输出向量对应于每个输入词。
在这种情况下,我们如何计算给定输入词的输出词的似然值/概率?
我还没有看到任何方法可以做到这一点,并且考虑到分层软最大值 (HS( 输出的工作方式,没有明显正确的方法可以将输出节点的激活水平转换为精确的每字似然估计。请注意:
-
模拟负采样预测的
predict_output_word()
方法甚至不尝试处理 HS 模式 -
在训练期间,HS 和负采样模式都不会做出精确的预测——它们只是推动输出更像当前训练示例所需的
在某种程度上,您可以计算给定上下文的所有输出节点激活,然后检查每个单词的唯一 HS 代码点节点值,了解它们与"被预测"的接近程度,您可以合成每个单词的相对分数 - 一些衡量值与该单词的"确定"输出的距离。但是,每个节点的偏差是否以及如何导致该分数,以及该分数如何表明可解释的可能性尚不清楚。
由于HS代码严格按词频分配的方式,也可能存在问题 - 因此"邻居"单词共享大部分相同的编码可能在语义上非常不同。(在最初的word2vec.c代码中有一些提示,通过将相关单词聚类为具有相似的编码而不是严格的频率来分配HS编码可能是有益的,但从那以后我很少看到这种做法。
如果可解释的预测很重要,我建议坚持负抽样。(但也要记住,word2vec 主要用于预测,它只是使用预测训练尝试来引导对其他任务有用的向量排列。
- 文本文件中的单词链表
- 在指针的帮助下,文本文件中单词的频率
- QTableView:endMoveRows在模型中重置水平页眉大小
- 如何根据单词在文本中出现的概率输出单词
- 将IBM Rhapsody模型集成到VS 2019中
- 旋转模型矩阵时的形状失真
- 从字符串变量中逐字符读取单词
- 使用std::mt19937从字符串中返回一个随机单词
- 如何用for循环在c++中生成单词三角形
- 将数字转换为单词
- 使用if-else将数字转换为单词
- C++-字符串是否包含一个带有简单循环的单词
- 使用单词"not"作为C ++类的名称会导致VS2019错误
- 成员函数调用和C++对象模型
- 连接 dockerized 模型和 dockerized 数据库时出现"无法 SQLConnect"错误
- 打印 ONNXRUNTIME::图形没有模型
- 为什么这个程序返回最后一个单词而不是最长的单词?
- 3-3. 编写一个程序来计算每个不同单词在其输入中出现的次数
- C++内存模型和位字段的最大序列
- 如何使用训练的跳跃模型预测单词?