自然语言处理模型的分词与输出部分
  SkyPJX5vy5h5 2023年11月02日 65 0

1,使用tokenizer对用户输入分词。①把单个汉字转为编号id(就是vocab.txt中该字对应的行号)所以说一个汉字会对应一个id②在输入的开头加上[CLS],结尾加上[SEP]。

2,模型的输出:logits。即logistic unit逻辑单元

(1)logits其实就是每个字对应的概率,他还没有经过softmax层处理,所以概率和不是1。Logits里面的值都是tensor类型,通过比较tensor值的大小判断下一个字可能是什么,tensor最大的就是最有可能的字。可以通过“logits.shape或size”查看它的维度。

(2)当用户输入一个字时,torch.Size([1, 3, 13317])。

Ⅰ,其中13317是vocab_size,vocab.txt中正好有有13317行。也就是说字表中的每一个字都有对应的概率。

Ⅱ,logits.shape的第二个数是3,这是因为input有三个数:[CLS]你[SEP]。

Input中有几个tokenizer  id,最后的logits就会有几层。

第一层是输入了[CLS]之后,模型预测[CLS]后面可能是什么字对应的概率

第二层是输入了[CLS]与你之后,模型预测你之后可能会是什么字

第三层是输入了[CLS]你[SEP]之后,模型预测这三个字后面可能的字

所以说,我们想要得到输入数据的下一个字是什么?只需要取logits中的最后一层。

(3)因为GPT模型会把新生的字追加到输入中,所以input会越来越长,所以logits的的层数会越来越多(且前几层数据不变,因为input中前几个字没有变,只是追加了输出)。

①在一些要把用户多次输入联系起来的应用场景下【用户输入是有联系的,就像电视连续剧,每一集之间剧情连续】,input可以是n次的用户输入或机器输出句子。N可以自己设置。

比如说,chatbot聊天机器人,若n=3,而聊天轮数为10时,input中存的是第9轮的机器回答,第10轮用户输入,第10轮机器回答。

②有一种情况,2次的用户输入是没有关系的。比如疾病问答GPT,用户输入病名,机器输出详情。这种情况用户2次输入都是独立的,不需要把当前输入和上次输入联系起来(诗词自动生成GPT也是,用户每次输入没有关联)

3,torch.cat(tensor1,tensor2,dim)用来拼接tensor。它的dim正好与softmax一样,0表示最外层(列)。下图是2个2*3的tensor拼接结果。


dim=0时,把它们的列拼在一起了。维度一般是0(最小值)表示最外层,-1表示最里面那层

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
SkyPJX5vy5h5