吴恩达团队NLP C3_W3_Assignment
任务:命名实体识别(NER)
- French:地缘政治实体
- Morocco:地理实体
- Christmas:时间指标
- 其他不被视为命名实体
Part1:数据生成器
- shuffle的好处:我们不使用索引直接访问句子列表的位置。相反,我们使用它从索引列表中选择一个索引。通过这种方式,我们可以改变遍历原始列表的顺序,保持原始列表不变。
1 | def data_generator(batch_size, x, y, pad, shuffle=False, verbose=False): |
Part2:建立模型
- 使用数据生成器产生的数据送入输入层
- 输入嵌入层
- 输入LSTM
- 通过线形层输出
- 最后通过softmax获得每个单词的预测
1 | def NER(vocab_size=35181, d_model=50, tags=tag_map): |
LSTM的介绍:
Part3:训练模型
1 | def train_model(NER, train_generator, eval_generator, train_steps=1, output_dir='model'): |
Part4:计算准确率
1 | def evaluate_prediction(pred, labels, pad): |
np.argmax(pred, axis)
:用于返回一个numpy数组中最大值的索引值,当一组中同时出现几个最大值时,返回第一个最大值的索引值。
对于多维数组,我们可以看一些例子来感受一下:
axis = 0
:外层axis = 1
:内层
1 | two_dim_array = np.array([[1, 3, 5], [0, 4, 3]]) |
1 | [0 1 0] |
三维时,假设数组为m * n * p
,则
axis = 0
:舍去m,返回一个n×p
维的矩阵axis = 1
:舍去n,返回一个m×p
维的矩阵axis = 2
:舍去p,返回一个m×n
维的矩阵
1 | three_dim_array = [[[1, 2, 3, 4], [-1, 0, 3, 5]], |
1 | [[2 1 0 2] |