目前主要解读chat
和stream_chat
相关的内容
1 chat 方法
1 | # modeling_chatglm.py |
1.1. Logits Processor
Logits processor 是在生成过程中,每一个step的score计算完成之后,对score进行进一步的加工,改变模型输出的概率分布,从而影响后续生成结果的处理。
1 | # modeling_chatglm.py |
使用:
1 | if logits_processor is None: |
1.2 tokenizer.build_chat_input
1 | # tokenization_chatglm.py |
- transformers.PreTrainedTokenizerBase.batch_encode_plus
- param
- batch_text_or_text_pairs (
List[str]
,List[Tuple[str, str]]
,List[List[str]]
,List[Tuple[List[str], List[str]]]
, and for not-fast tokenizers, alsoList[List[int]]
,List[Tuple[List[int], List[int]]]
) — Batch of sequences or pair of sequences to be encoded. This can be a list of string/string-sequences/int-sequences or a list of pair of string/string-sequences/int-sequence (see details inencode_plus
). - return_tensors (
str
or TensorType, optional) — If set, will return tensors instead of list of python integers. Acceptable values are:'tf'
: Return TensorFlowtf.constant
objects.'pt'
: Return PyTorchtorch.Tensor
objects.'np'
: Return Numpynp.ndarray
objects.
- batch_text_or_text_pairs (
- return
- transformers.BatchEncoding: This class is derived from a python dictionary and can be used as a dictionary. In addition, this class exposes utility methods to map from word/character space to token space.
- param
2 stream_chat 方法
1 | # modeling_chatglm.py |
-
对于几个变量的解释(啊啊啊,感觉要重新去看Transformer)
-
eos_token_id
是序列结束时标记的id。可以选择使用一个列表来设置多个序列结束标记
-
past_key_value
只有Decoder模型在文本生成过程(训练过程用不上)中才能用到。顾名思义,它存储的是Decoder模型在 t 时刻前输入的token对应的key和value映射,用于减少计算,将input在、上的映射存储起来,进行下一个词预测时,就可以直接拿过来用了。它包括self_attention和cross_attention对应的key、value映射。
单个key或者value单元shape:
[batch_size, n_heads, q_len-1, dim_per_head]
-
past_key_values
将每一层的past_key_value都存在其中
-
2.1 stream_generation方法
- return
- inputs_ids
- past_key_values
2.2 process_response方法
1 | # modeling_chatglm.py |