鱼C论坛

 找回密码
 立即注册
查看: 1533|回复: 0

[学习笔记] NLP语料的预处理

[复制链接]
发表于 2023-8-19 14:43:58 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 Handsome_zhou 于 2023-8-19 14:45 编辑

中文自然语言处理(NLP)模型的语料输入通常需要经过一系列的数据预处理步骤,以确保数据的格式和内容适合模型的训练或推理。以下是处理中文NLP语料的一般步骤:

1、文本分词:

首要任务是将中文文本分词成单词或子词。中文是一个字符密集的语言,分词有助于模型理解文本的结构。常见的分词工具包括jieba、pkuseg、HanLP等。

2、标记化:

分词后,将每个词汇映射到其对应的标记(token)。这些标记通常是词汇表中的索引或特殊标记(如[CLS]和[SEP],用于BERT等模型)。

3、填充和截断:

由于模型输入通常是固定长度的,需要对文本进行填充或截断,以确保它们具有相同的长度。这通常使用特殊的填充标记(如[PAD])或截断文本的方式来完成。

4、创建注意力掩码:

对于BERT等模型,需要创建一个注意力掩码,以指示哪些标记是真实的文本标记,哪些是填充标记。这有助于模型在训练时忽略填充部分。

5、生成批次:

将文本示例组成批次(batch),以便一次性输入多个示例,以提高训练或推理效率。

6、嵌入层:

将标记转化为向量形式。这可以使用预训练的词嵌入(如Word2Vec、GloVe)或预训练的语言模型嵌入(如BERT、GPT)。


代码示例:
import torch
from transformers import BertTokenizer

# 初始化分词器
tokenizer = BertTokenizer.from_pretrained('bert-base-chinese')

# 输入文本
text = "我喜欢自然语言处理"

# 分词、标记化、转化为张量
tokens = tokenizer.tokenize(text)
input_ids = tokenizer.convert_tokens_to_ids(tokens)

# 填充和截断
max_length = 128
if len(input_ids) < max_length:
    input_ids += [tokenizer.pad_token_id] * (max_length - len(input_ids))
else:
    input_ids = input_ids[:max_length]

# 创建注意力掩码
attention_mask = [1] * len(input_ids)

# 转化为张量
input_ids = torch.tensor(input_ids)
attention_mask = torch.tensor(attention_mask)

# 将数据加载到GPU(如果可用)
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
input_ids = input_ids.to(device)
attention_mask = attention_mask.to(device)

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +3 收起 理由
isdkz + 5 + 5 + 3 鱼C有你更精彩^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-23 19:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表