1. 基本流程
- 文本输入:接收原始文本输入(示例:”我爱北京天安门”)
- 分词处理(Tokenization):采用中文分词工具(如 Jieba/HanLP )将文本转化为 token 序列。示例输出:[“我”, “爱”, “北京”, “天安门”]
- 数值映射(Token Encoding):通过预构建的词表(vocabulary)将token映射为数字索引。示例编码:[212, 761, 12, 98]
- 向量嵌入(Embedding Lookup):从预训练或随机初始化的 embedding 矩阵中查询对应向量,每个 token 转换为固定维度(如128维)的稠密向量
- 序列建模(Sequence Modeling):选用 RNN 变体(LSTM/GRU)处理向量序列,捕获上下文信息,输出动态上下文表示:每个时间步输出包含全局语义的向量
- 句子表示(Sentence Representation)对所有token向量取平均,或者选择最后一个 Token 向量作为整个句子的向量表示
- 分类层(Classification Head):将句子向量映射到标签空间,通过 Softmax 激活函数输出类别概率
2. 组件介绍
在基本流程中:
- 数值映射部分,我们需要提前构建一个词表,包含语料中所有的 Token。对于中文来讲,可以一个字作为一个 Token,也可以一个词作为一个 Token。并且在词表中,每个 Token 都有一个唯一的编号。
- 向量嵌入部分:我们需要根据词表大小构建一个(vocab_size, token_dim)形状的矩阵,每一行表示某个 Token 固定的语义表示。
- 序列建模部分:我们需要使用 GRU 或者 LSTM 模型来获得每个 Token 在句子中的动态语义表示。例如:苹果公司 和 我要吃苹果 两个句子中,苹果会有一个基本的含义,但是在具体的语境中又会有不同的含义。向量嵌入部分只是静态的描述苹果的基本含义,而序列建模部分则是为了得到苹果在不同句子、不同上下文中的语义表示。
- 句子表示部分:经过序列建模,每个 Token 都得到在上下文中的语义表示,接下来,把所有的 Token 向量表示取均值、或者取输入句子中最后一个 Token 的向量表示作为整个句子的向量表示。这里需要注意的是:取最后一个 Token 表示作为整个句子的表示,这是因为 GRU 或者 LSTM 算法在进行序列建模的时候,能够使得最后一个 Token 包含一定的之前 Token 的信息。
- 分类层部分:现在我们已经得到了句子的语义表示,接下来送入到一个分类层,输出预测标签的分数,再通过 SoftMax 函数计算出一个概率值。