0%

LLM之分词器(tokenizer)

一、引言

大语言模型在自然语言处理领域取得了巨大成功,而分词器作为其关键组成部分,对模型的性能和效果有着显著影响。今天,我们将探讨四种常见的分词方法:BPE、WordPiece、SentencePiece 和 unigram,剖析它们的技术原理、实现细节及应用场景。

在此之前,我们需要了解一下什么是tokenizition。

任何一段文本,输入给模型,都是要转换成一串embedding。这个过程简单概括为:

  1. 分词,并把词转换为token(即词的ID)
  2. token转换成embedding

而tokenization就是在做这第一步。而对于第二步就是常见的Embedding查表操作,即根据token_id的值,去Embedding矩阵中查找第token_id行的数据作为embedding。

阅读全文 »

Unix/Linux 中的 AWK 命令及示例

AWK简介

Awk 是一种用于处理数据和生成报告的脚本语言。awk 命令编程语言不需要编译,并允许用户使用变量、数字函数、字符串函数和逻辑运算符。

Awk 是一种实用程序,它使程序员能够以语句的形式编写小巧但有效的程序,这些语句定义要在文档的每一行中搜索的文本模式以及在行中找到匹配项时要采取的操作。Awk 主要用于模式扫描和处理。它搜索一个或多个文件以查看它们是否包含与指定模式匹配的行,然后执行相关操作。

句法

1
awk options 'selection _criteria {action }' input-file > output-file

Options:

1
2
3
4
-f program-file : Reads the AWK program source from the file 
program-file, instead of from the
first command line argument.
-F fs : Use fs for the input field separator
阅读全文 »

检索增强生成(RAG)

引言

检索增强生成(Retrieval Augmented Generation),简称 RAG,已经成为当前最火热的LLM应用方案。

检索增强生成 (RAG) 是一种使用来自私有或专有数据源的信息来辅助文本生成的技术。它将检索模型(设计用于搜索大型数据集或知识库)和生成模型(例如大型语言模型 (LLM),此类模型会使用检索到的信息生成可供阅读的文本回复)结合在一起。

通过从更多数据源添加背景信息,以及通过训练来补充 LLM 的原始知识库,检索增强生成能够提高搜索体验的相关性。这能够改善大型语言模型的输出,但又无需重新训练模型。额外信息源的范围很广,从训练 LLM 时并未用到的互联网上的新信息,到专有商业背景信息,或者属于企业的机密内部文档,都会包含在内。

阅读全文 »

Agent介绍

什么是 AI 代理

AI代理(AI agent)是指使用 AI 技术设计和编程的一种计算机程序,其可以独立地进行某些任务并对环境做出反应。AI代理可以被视为一个智能体,它能够感知其环境,通过自己的决策和行动来改变环境,并通过学习和适应来提高其性能。这种智能体同时使用短期记忆(上下文学习)和长期记忆(从外部向量存储中检索信息),有能力通过逐步“思考”来计划、将目标分解为更小的任务 ,并反思自己的表现。AI代理通常包含多种技术,如机器学习、自然语言处理、计算机视觉、规划和推理等,这些技术使代理能够自主地处理信息并作出决策。

阅读全文 »

Flask快速上手

环境下载

1
pip install flask

Flask服务(Flask Server)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
from flask import Flask, request, send_file, make_response
from model import *
import os
import torch
import cv2

# Use CUDA
os.environ['CUDA_VISIBLE_DEVICES'] = '0'
os.environ['CUDA_LAUNCH_BLOCKING'] = '1'
use_cuda = torch.cuda.is_available()

app = Flask(__name__)

# 载入模型
model=...
root_dir = ...
if not os.path.exists(root_dir):
os.makedirs(root_dir)

# 定义服务接口
@app.route('/predict_from_file', methods=['POST'])
def predict():
file = request.files.get('file') # 获取上传的文件
if file:
file.save(root_dir + '/' + file.filename) # 将上传文件保存到本地
input_file = load(root_dir + '/' + file.filename) # 读取本地文件
results = model.inference(input_file) # 对本地文件进行推理计算
# 返回预测结果
return make_response(results)
else:
return 'No file uploaded'


# 定义服务接口
@app.route('/get_file', methods=['GET'])
def getresult():
filename = request.args.get('file') # 获取请求参数中的文件名
if not filename:
return "Missing parameter: file" # 没有提供文件名
filepath = root_dir + '/' + filename # 生成完整的文件路径
try:
return send_file(filepath, as_attachment=True, attachment_filename=filename)
except FileNotFoundError:
return "The file does not exist" # 文件不存在

if __name__ == '__main__':
app.run(host='0.0.0.0', port=8000)
阅读全文 »

容器命令

1. 启动容器

以下命令使用 ubuntu 镜像启动一个容器,参数为以命令行模式进入该容器:

1
$ docker run -it ubuntu /bin/bash

参数说明:

  • -i: 交互式操作。
  • -t: 终端。
  • ubuntu: ubuntu 镜像。
  • /bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。

要退出终端,直接输入 exit:

1
root@ed09e4490c57:/# exit
阅读全文 »

Docker介绍

Docker 是一个开源的应用容器引擎,基于 [Go 语言] 并遵从 Apache2.0 协议开源。

Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

阅读全文 »

Vim

Vim介绍

VIM 是 Linux 系统上一款文本编辑器,它是操作 Linux 的一款利器。

Vim 常用的四个模式:

  • 正常模式 (Normal-mode)

    一般用于浏览文件,也包括一些复制、粘贴、删除等操作。这时击键时,一些组合键就是vim的功能键,而不会在文本中键入对应的字符。

  • 插入模式 (Insert-mode)

    简单的来说,就是编辑文本的模式。

  • 命令模式 (Command-mode)

    在正常模式中,按下:(冒号)键或者/ (斜杠),会进入命令模式。在命令模式中可以执行一些输入并执行一些 VIM 或插件提供的指令,就像在shell里一样。这些指令包括设置环境、文件操作、调用某个功能等等。

  • 可视模式 (Visual-mode)

    在正常模式按下v, V, <Ctrl>+v,可以进入可视模式。可视模式中的操作有点像拿鼠标进行操作,选择文本的时候有一种鼠标选择的即视感,有时候会很方便。

    阅读全文 »

Pdb介绍

网址:pdb — The Python Debugger

介绍:模块pdb为Python程序定义了一个交互式源代码调试器。它支持在源行级别设置(条件)断点和单步执行,检查堆栈帧,列出源代码,以及在任何堆栈帧的上下文中评估任意Python代码。它还支持死后调试,并且可以在程序控制下调用。

阅读全文 »