> For the complete documentation index, see [llms.txt](https://kerasnoone.gitbook.io/garnet/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://kerasnoone.gitbook.io/garnet/shen-jing-wang-luo/yu-xun-lian-mo-xing/ge-zhong-yu-xun-lian-mo-xing-de-shi-yong-fan-wei.md).

# 各种预训练模型的适用范围

BERT及其优化模型在绝大部分NLP任务中表现都很优秀, 使用业务标注数据进行fine-tune后, 在业务上容易获得较好的表现.

回顾BERT的预训练过程, 使用的**输入形式**为:

```
[CLS] S1 [SEP] S2 [SEP]
```

预训练使用的任务为:

* NSP等简单的二分类任务: 使用`[CLS]`token的表征, 经过投影变换(Projection)再接输出层进行分类. 这使得`[CLS]`token包含了S1, S2两句话的信息
* Masked LM: 对被Masked的token进行预测, 使得每个token的表征向量融合了很多上下文信息

因此, 只要下游任务的**输入**与**训练目标**能够与预训练的形式类似, 理论上都可以取得较好的效果.

但有一些工业界常见的任务, 使用原始的BERT及其类似的优化方案, 产生的结果不能满足需求, 下面从根本上分析这些任务无法适应原始BERT的原因, 以及列举一些可以解决的方案.

## 生成任务

### 问题根本原因

原生BERT本身, 只用了Transformer结构的Encoder部分. 而观察它的预训练输入和任务, 可以发现BERT的本质是一个**双向语言模型**, 因为对于某一个token进行表征, 它可以看到前后所有的token的. 在生成时, 使用到的token信息都是这个token之前的, 符合**单向自回归语言模型**. 因此生成任务与BERT之间在模型特性上存在着巨大的GAP. 这种双向性使得BERT难以应用于生成任务.

BERT的预训练过程也是充分利用双向信息训练MLM任务, 与生成的任务目标差别很大.

直接使用BERT做生成很难取得好的效果. 原生的BERT只适合做只需要Encoder部分编码表征的任务, 如文本分类, 序列标注等.

### 改进BERT

## 相似匹配

### 任务形式
