HuggingFace学习1:tokenizer学习与将文本编码为固定长度(pytorch)

首先需要安装transformers:

pip install transformers

以bert-base-uncased为例,进入网站:https://huggingface.co/bert-base-uncased/tree/main,可以看到这个模型的所有文件,下载:

  • config.json
  • pytorch_model.bin
  • vocab.txt
    这三个文件,然后放到本地叫:bert_model的文件夹下

加载预训练模型

然后在同一目录创建python文件,测试一下读取模型:

from transformers import BertModel

bert_model = BertModel.from_pretrained("bert_model")

Huggingface基本类

Huggingface主要使用的只有以下三个类:

Tokenizer使用

Tokenizer的作用主要是把文本 ——> 词index

from transformers import BertTokenizer


def get_tokenizer():
    tokenizer = BertTokenizer.from_pretrained(pretrained_model_name_or_path="../bert_model")
    sentences = "Natural language processing is the ability of a computer program to understand human language."
    
    # 编码:句子 -> index
    # 编码方式一:
    words_list = tokenizer.tokenize(sentences)  # 分词
    print("分词:", words_list)
    tokens = ["[CLS]"] + words_list + ["[SEP]"]
    encoded_1 = tokenizer.convert_tokens_to_ids(tokens)
    print("编码方式1:", encoded_1)
    
    # 编码方法二:
    encoded_2 = tokenizer(sentences)  # 编码:句子 -> index
    print("编码方式2:", encoded_2['input_ids'])
    
    # 解码:index -> 句子
    decode_string = tokenizer.decode(encoded_2['input_ids'])
    print("解码 index -> 句子 :", decode_string)
    
    # 限制句子的输入到一个固定长度:超过截断,不足补齐
    sentence_index = tokenizer(["natural", "language is ability and nlp is useful"],
                               truncation=True,  # 超过最大长度截断
                               padding=True,  # 设置长度不足就补齐
                               max_length=5,  # 最大长度
                               add_special_tokens=True)  # 添加默认的token
    print("转换为固定长度输入:", sentence_index['input_ids'])  # 便于模型输出
    return tokenizer


if __name__ == '__main__':
    get_tokenizer()

结果如下:

分词: ['natural', 'language', 'processing', 'is', 'the', 'ability', 'of', 'a', 'computer', 'program', 'to', 'understand', 'human', 'language', '.']
编码方式1: [101, 3019, 2653, 6364, 2003, 1996, 3754, 1997, 1037, 3274, 2565, 2000, 3305, 2529, 2653, 1012, 102]
编码方式2: [101, 3019, 2653, 6364, 2003, 1996, 3754, 1997, 1037, 3274, 2565, 2000, 3305, 2529, 2653, 1012, 102]
解码 index -> 句子 : [CLS] natural language processing is the ability of a computer program to understand human language. [SEP]
转换为固定长度输入: [[101, 3019, 102, 0, 0], [101, 2653, 2003, 3754, 102]]

参考链接

### 长文本智能体的概念实现方法 长文本处理的智能体技术是一种结合自然语言处理(NLP)、图结构以及探索策略的创新性方法,旨在突破传统模型在处理超长文本时的限制[^1]。这类智能体通过高效的信息组织和多跳推理能力,在复杂任务中表现出色,例如回答需要多步逻辑推导的问题。 #### 1. 图结构智能体的结合 GraphReader 是一种典型的长文本智能体,它将文本信息以图的形式进行存储和组织,从而增强对上下文的理解能力。这种方法不仅能够有效管理大规模文本数据,还能通过图遍历的方式提取关键信息,显著提升推理效率[^1]。 #### 2. 智能体的核心组件 长文本智能体通常由以下核心部分组成: - **信息抽取模块**:负责从原始文本中提取关键实体、关系及事件,形成结构化表示。 - **图构建模块**:将提取的信息转化为节点和边,生成语义图。 - **推理模块**:基于图结构执行多跳推理,解决复杂的问答或分析任务。 - **输出生成模块**:将推理结果转化为自然语言形式,提供给用户。 #### 3. 实现方式 实现长文本智能体的技术路径主要包括以下几个方面: - **预训练语言模型**:利用大型语言模型(LLMs)作为基础框架,通过微调使其具备处理长文本的能力。这些模型可以通过情景学习(In-context Learning)完成特定任务,无需额外标注数据[^4]。 - **注意力机制优化**:为了解决传统Transformer架构在处理长序列时的计算瓶颈,可以采用稀疏注意力机制或分块处理策略。 - **外部知识库集成**:通过引入外部知识图谱,增强模型对领域知识的理解能力。 #### 4. 示例代码 以下是一个简单的代码示例,展示如何使用Python实现一个基础的长文本处理框架: ```python import transformers def process_long_text(text): # 加载预训练模型 tokenizer = transformers.AutoTokenizer.from_pretrained("bert-base-uncased") model = transformers.AutoModel.from_pretrained("bert-base-uncased") # 分块处理长文本 max_length = 512 chunks = [text[i:i+max_length] for i in range(0, len(text), max_length)] embeddings = [] for chunk in chunks: inputs = tokenizer(chunk, return_tensors="pt", truncation=True, padding=True) outputs = model(**inputs) embeddings.append(outputs.last_hidden_state.mean(dim=1).detach().numpy()) return embeddings # 示例调用 long_text = "This is a very long text..." embeddings = process_long_text(long_text) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

呆萌的代Ma

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值