| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> 基于 global pointer 实体抽取。 -> 正文阅读 |
|
[人工智能]基于 global pointer 实体抽取。 |
长度为n的序列 有n/2(1+n)个 子序列 ??刚好是 文本长度*文本长度 的正方形 从对角线开始向上全部的格子数量 1? 2??? 3?????? 4????????? n 1 1+2 1+2+3 1+2+3+4 …. n/2(1+n) 上图。每个格子代表一种可能都是把实体当作一个整体的可能,北京为一个地名 竖边列为起始坐标 横列为结束坐标。 代码部分简化预处理逻辑: model_state_dict_dir = os.path.join(./outputs,cluener,2022-03-15_02:47:49) ent2id = load_data(./datasets/cluener/ent2id.json)?? = {'address': 0, 'book': 1, 'company': 2, 'game': 3, 'government': 4, 'movie': 5, 'name': 6, 'organization': 7, 'position': 8, 'scene': 9} 全部类别 ent_type_size = 10? 类别个数 model = GlobalPointer(encoder, ent_type_size, 64) encoder得到bert输出,ent_type_size 10类,每个位置q,k 64维。 加载数据? 全部文本长度必须 小于预设的? 128 , 假如全部文本最长是52,那么全部长度设为52 浙商银行企业信贷部叶老桂博士则从另一个角度对五道门槛进行了解读。叶老桂认为,对目前国内商业银行而言, 转换为一下: ent2token_spans? [(10, 12, 'name'), (1, 4, 'company')] labels.shape = 10,128,128 ->name的平面 10,12 =1 和 company的平面 1,4 =1 inpus_id = tensor([ 101, 3851, 1555, 7213, ..., 6241, 8024,? 102])? len 52 attention_mask = tensor([1, 1, 1,....1, 1])???? len 52 token_type_ids = tensor([0, 0, 0,.....0, 0, 0]) ?len 52 # 了解 model.train() 启用 Batch Normalization 和 Dropout model.eval()? 不启用 Batch Normalization 和 Dropout train_dataloader : len = 79??? 79*64 =5000 条数据 一个批次推理: 1、 context_outputs = self.encoder(input_ids, attention_mask, token_type_ids) context_outputs[0]????? [64, 52, 768] context_outputs[1]????? [64, 768] 2、 self.dense = nn.Linear(self.hidden_size, self.ent_type_size * self.inner_dim * 2) = (768,10*64*2) outputs = self.dense(context_outputs[0]) 得到 torch.Size([64, 52, 1280]) 3、 生成 qw, kw =torch.Size([64, 52, 10, 64]),torch.Size([64, 52, 10, 64]) (qRm).T(Rnk) =q.T (Rn-m)k 具有相对位置关系 矩阵转置 公式( AB)^T = B^T*A^T 由于Rm的稀疏性,所以直接用矩阵乘法来实现会很浪费算力,推荐通过下述方式来实现RoPE 此处置讨论 批量1,当前类(0或者1,2,,9其中一类)时: 其中m为当前字符位置比如,0,1,2,3,4,….51。 上述公式只是 一个位置的64维度向量q所需的操作,同理k向量一样。 实际上: 句子长度(52,64) 52个64维q向量 做上面公式操作 ??????① 句子长度(52,64) 52个64维k向量 做上面公式操作 ??????② 然后①、②向量求内积就是得分 52*52个得分 10个类别,相当于(10,52,52)矩阵的得分。 其中θi=10000^?2(i/d),可以带来一定的远程衰减性 θ代码实现 indices = torch.arange(0, 64 // 2, dtype=torch.float) indices = torch.pow(10000, -2 * indices / 64) 多标签分类 公式解释 代码解释 y_true = [0,1,0,1,0,1] y_pred = [0,0.32,0,0.24,0,0.44] 处理后为这样 y_pred_neg = [ 0.e+00 -1.e+12? 0.e+00 -1.e+12? 0.e+00 -1.e+12,0]?????????????????? y_pred_pos = [-1.0e+12 -3.2e-01 -1.0e+12 -2.4e-01 -1.0e+12 -4.4e-01,0] 最后多加了一个0 是因为公式里面log(1+sumexp)中的1对应即e^0 exp^(很大的负数为0),即exp(-1.e+12) = 0 对应log(1+sumexp(负样本集合时)) 对应正样本置0 对应log(1+sumexp(正样本集合时)) 对应负样本置0 其中 0.32变成-0.32,对应公式里面的-sj ,同理 0.24变为-0.24 ,0.44变为-0.44 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 14:48:09- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |