Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenDocCN
d2l-zh
提交
e0fe8912
D
d2l-zh
项目概览
OpenDocCN
/
d2l-zh
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
d2l-zh
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
e0fe8912
编写于
12月 14, 2018
作者:
A
Aston Zhang
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
restore 0.005
上级
303e427d
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
7 addition
and
7 deletion
+7
-7
chapter_natural-language-processing/word2vec-gluon.md
chapter_natural-language-processing/word2vec-gluon.md
+7
-7
未找到文件。
chapter_natural-language-processing/word2vec-gluon.md
浏览文件 @
e0fe8912
...
...
@@ -251,7 +251,7 @@ loss = gloss.SigmoidBinaryCrossEntropyLoss()
值得一提的是,我们可以通过掩码变量指定小批量中参与损失函数计算的部分预测值和标签:当掩码为1时,相应位置的预测值和标签将参与损失函数的计算;当掩码为0时,相应位置的预测值和标签则不参与损失函数的计算。我们之前提到,掩码变量可用于避免填充项对损失函数计算的影响。
```
{.python .input}
```
{.python .input
n=20
}
pred = nd.array([[1.5, 0.3, -1, 2], [1.1, -0.6, 2.2, 0.4]])
# 标签变量 label 中的 1 和 0 分别代表背景词和噪音词。
label = nd.array([[1, 0, 0, 0], [1, 1, 0, 0]])
...
...
@@ -261,7 +261,7 @@ loss(pred, label, mask) * mask.shape[1] / mask.sum(axis=1)
作为比较,下面将从零开始实现二元交叉熵损失函数的计算,并根据掩码变量
`mask`
计算掩码为1的预测值和标签的损失。
```
{.python .input}
```
{.python .input
n=21
}
def sigmd(x):
return -math.log(1 / (1 + math.exp(-x)))
...
...
@@ -273,7 +273,7 @@ print('%.7f' % ((sigmd(1.1) + sigmd(-0.6) + sigmd(-2.2)) / 3))
我们分别构造中心词和背景词的嵌入层,并将超参数词向量维度
`embed_size`
设置成100。
```
{.python .input n=2
0
}
```
{.python .input n=2
2
}
embed_size = 100
net = nn.Sequential()
net.add(nn.Embedding(input_dim=len(idx_to_token), output_dim=embed_size),
...
...
@@ -284,7 +284,7 @@ net.add(nn.Embedding(input_dim=len(idx_to_token), output_dim=embed_size),
下面定义训练函数。由于填充项的存在,跟之前的训练函数相比,损失函数的计算稍有不同。
```
{.python .input n=2
1
}
```
{.python .input n=2
3
}
def train(net, lr, num_epochs):
ctx = gb.try_gpu()
net.initialize(ctx=ctx, force_reinit=True)
...
...
@@ -310,15 +310,15 @@ def train(net, lr, num_epochs):
现在我们可以训练使用负采样的跳字模型了。
```
{.python .input n=2
2
}
train(net, 0.00
00
5, 8)
```
{.python .input n=2
4
}
train(net, 0.005, 8)
```
## 应用词嵌入模型
当训练好词嵌入模型后,我们可以根据两个词向量的余弦相似度表示词与词之间在语义上的相似度。可以看到,使用训练得到的词嵌入模型时,与词“chip”语义最接近的词大多与芯片有关。
```
{.python .input n=2
3
}
```
{.python .input n=2
5
}
def get_similar_tokens(query_token, k, embed):
W = embed.weight.data()
x = W[token_to_idx[query_token]]
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录