Skip to content

Commit

Permalink
docs: transformer
Browse files Browse the repository at this point in the history
  • Loading branch information
zhongxiao37 committed Jun 3, 2024
1 parent 9909f1d commit 072d6ba
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 3 deletions.
6 changes: 3 additions & 3 deletions _posts/2024-09-29-打造个人助理-1.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ date: 2024-09-29 22:06 +0800
categories: bert
---

最近自己做了一个个人版的“小爱同学”,能够进行 NLP 处理,并进行对应的操作。
最近自己做了一个个人版的“小爱同学”,能够进行 NLP 处理,并进行对应的操作。之前做过一个版本,是依托 ChatGPT 的 API 做的聊天功能,但这次,我们可以让它干活了!

比如,我提问"what's the value of jdbc_database_url for the deployment order-service in PROD",它就会识别我的意图是想要查到生产环境上 order-service 的 jdbc_database_url 是什么,并自动连接 Kubernetes 集群查询 jdbc_database_url 的值。

Expand All @@ -20,15 +20,15 @@ categories: bert

相关代码在[这里][2],以及[中文介绍][1]

简单而言,通过 Bert 的能力,我们可以识别出语句的意图是什么,以及每个槽位是什么,进而我们可以做下一步的操作。
简单而言,通过 Bert 的能力,我们可以识别出语句的意图是什么,以及每个槽位是什么,进而我们可以做下一步的操作。举个例子,“what's the value of jdbc_database_url for the deployment order-service in PROD”这句话,对应的槽位就是`O O O O B-env-var-name O O O B-deployment-name O B-environment`,进而得到`env-var-name``jdbc_database_url``order-service``deployment-name``PROD``environment`

## 需要做哪些

### 训练语料

基于 Bert 的预训练模型,我们可以进行简单的微调,就可以完成很多 NLP 任务。但是,这里“简单的微调”并不是说没什么工作。相反,相当繁杂的人工任务是在准备语料上面,包括对意图识别打标,和槽位打标。

举个例子,“what's the value of jdbc_database_url for the deployment order-service in PROD”这句话,我们需要打一个意图的标签`kubernetes_pod_env_value`以及对应的槽位`O O O O B-env-var-name O O O B-deployment-name O B-environment`。在实例代码中,大概有 4000 多条训练数据,都需要人工一条条处理
在实例代码中,大概有 4000 多条训练数据,都需要人工一条条处理。“what's the value of jdbc_database_url for the deployment order-service in PROD”这句话,我们需要打一个意图的标签`kubernetes_pod_env_value`以及对应的槽位就是`O O O O B-env-var-name O O O B-deployment-name O B-environment`

顺便吐槽一句,网上各种流行的开源 LLM 模型,却没有一家开源了自己的语料。所以,核心才是语料,而语料的背后是人工和业务知识。

Expand Down
25 changes: 25 additions & 0 deletions _posts/2024-10-09-打造个人助理-2.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,3 +9,28 @@ categories: bert

1. 为什么是 Bert,而不用 LLM?
2. Bert 和 LLM 都是基于 Transformer,那什么是 Transformer?

![Bert Tasks](bert_tasks.png)

## NLP 的历史

每个人对于 Transformer 和 Bert 的解读都不一样,3Blue1Brown 居然都还有视频来解释[什么是 transformer](https://www.bilibili.com/video/BV1qM4m1d7is/)。但如果是现在去回顾历史,就会发现这些东西的演变真的很有意思。

要介绍 Transformer,就不得不提到 NLP 的发展过程。

最初的时候,为了解决机器翻译的问题,人们提出了 seq2seq 模型,即翻译一段句子。到了 2014 年,两篇论文[1](https://papers.nips.cc/paper/5346-sequence-to-sequence-learning-with-neural-networks.pdf)[2](http://emnlp2014.org/papers/pdf/EMNLP2014179.pdf)介绍了基于神经网络,实现的机器翻译。

encoder 和 decoder 的组合,往往都是 RNN 循环神经网络,其大致实现如下:

1. 每次读入一个单词,embedding 之后通过 encoder 转换成为上下文(可以认为是理解了整个句子或者 Hidden state),直到读完整个句子。
2. 传入最后生成的 hidden state,再通过 decoder 翻译成另外一个语言,每次蹦一个词出来,依次循环。

基于 RNN 的机器翻译,中间的 context 上下文非常关键,但也成了瓶颈,尤其是在长句子的理解上。2014 年的另外两篇论文[3](https://arxiv.org/abs/1409.0473)[4](https://arxiv.org/abs/1508.04025)提出了注意力机制,有效地让模型更加关注每个单词。
首先,hidden state 不再是最后一层,而是针对每个单词都有一个 hidden state。
其次,针对每个 hidden state,进行评分和 softmax,进而计算出相应输出。

2017 年,一篇[Attention is All you Need](https://arxiv.org/abs/1706.03762)的论文横空出世,Transformer 诞生了。上面基于 RNN 的模型,效果是不错了,但是训练速度却很慢。

## Reference

1. [https://jalammar.github.io/visualizing-neural-machine-translation-mechanics-of-seq2seq-models-with-attention/](https://jalammar.github.io/visualizing-neural-machine-translation-mechanics-of-seq2seq-models-with-attention/)
Binary file added images/bert_tasks.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit 072d6ba

Please sign in to comment.