- 关于RNN和LSTM的介绍可以看我之前的文章:RNN与LSTM
自然语言处理-词向量模型-Word2Vec
- 输入两个词, 输出一个词语的概率, 也就是分类任务,
- 输入其实用了
torch.nn.Embedding
层, 是顺着索引找到对应的向量, 所以embedding的维度很好知道,就是索引×需要的维度, 举个例子, 假如我们有4个词, 每个词想用10维向量表示, 那么embedding的维度就是4*10
现在有个问题, 假如是多分类任务, 如果我的数据中有5w个词, 难道最后的输出是5w个吗?
构建训练数据
CBOW和Skip-gram模型
Skipgram是输入中间值预测上下文,CBOW是输入上下文预测中间值
负采样方案
- 之前提到假如是按多分类来处理会很难, 那么就可以转化一下训练方案, 原来是输入一个词预测一个词, 现在可以变成输入两个词, 看看属于上下文的概率值, 这样就是个二分类任务,训练数据中满足的target为1
- 为了满足训练要求,再人为构建target为0的数据, 一般5个左右就够了
语言分类任务
-
先来看一下数据集:
也就是类似新闻标题对应标签, 那么对应的每个字的embedding怎么办呢? 比如‘我’这个词, 假如它对应的是300维向量,那么我们可以有一个文件提前设置好这个参数, 不用训练(暂时的理解) -
每句话长度不一, 我们可以选取最长的作为标准, 或者选取一个中位数, 太长的截断, 不够的可以用0或者特定的padding字符