4.1 文本相似度(二)

目录

[1 文本相似度评估](#1 文本相似度评估)

[2 代码](#2 代码)

[2.1 load_dataset 方法](#2.1 load_dataset 方法)

[2.2 AutoTokenizer、AutoModelForSequenceClassification](#2.2 AutoTokenizer、AutoModelForSequenceClassification)


1 文本相似度评估

对两个文本拼接起来,然后作为一个样本喂给模型,作为一个二分类的任务;

数据处理的方式以及训练的基本流程与上文相似。

2 代码

  1. 数据预处理,把需要对比的文本放置一起,作为一个样本;tokenizer: 输入的语句是两个。分类标签的类型必须是 int,不能是其他的类型;
  2. 加载模型。
  3. 输出结果;


2.1 load_dataset 方法

datasets是抱抱脸开发的一个数据集python库,可以很方便的从Hugging Face Hub里下载数据,也可很方便的从本地加载数据集,本文主要对load_dataset方法的使用进行详细说明。

def load_dataset(

path: str,

name: Optionalstr = None,

data_dir: Optionalstr = None,

data_files: UnionDict, List = None,

split: OptionalUnion\[str, Split] = None,

cache_dir: Optionalstr = None,

features: OptionalFeatures = None,

download_config: OptionalDownloadConfig = None,

download_mode: OptionalGenerateMode = None,

ignore_verifications: bool = False,

save_infos: bool = False,

script_version: OptionalUnion\[str, Version] = None,

**config_kwargs,

) -> UnionDatasetDict, Dataset:

path:参数path表示数据集的名字或者路径。可以是如下几种形式(每种形式的使用方式后面会详细说明)

数据集的名字,比如imdb、glue

数据集文件格式,比如json、csv、parquet、txt

数据集目录中的处理数据集的脚本(.py)文件,比如"glue/glue.py"

name:参数name表示数据集中的子数据集,当一个数据集包含多个数据集时,就需要这个参数,比如glue数据集下就包含"sst2"、"cola"、"qqp"等多个子数据集,此时就需要指定name来表示加载哪一个子数据集

data_dir:数据集所在的目录

data_files:数据集文件

cache_dir:构建的数据集缓存目录,方便下次快速加载。

2.2 AutoTokenizer、AutoModelForSequenceClassification

|------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 类名称 | 介绍 |
| AutoTokenizer | AutoTokenizer 是 Hugging Face Transformers 库中的一个类,用于自动选择适合特定预训练模型的 tokenizer。该类可以根据指定的模型名称或路径,自动选择对应的 tokenizer 类型,无需手动指定。这样可以方便地在不同的预训练模型之间切换,而无需更改代码中的 tokenizer 类型。 |
| AutoModelForSequenceClassification | AutoModelForSequenceClassification 是 Hugging Face Transformers 库中的一个类,用于自动选择适合特定预训练模型的用于序列分类任务的模型。这个类会根据指定的模型名称或路径自动选择对应的模型类型,无需手动指定。这样可以方便地在不同的预训练模型之间切换,而无需更改代码中的模型类型。 |
| Trainer | Trainer 是 Hugging Face Transformers 库中用于训练和评估模型的高级 API。它提供了一个简单而强大的接口,用于管理训练循环、验证循环、日志记录、保存模型等任务。使用 Trainer 可以方便地训练和微调预训练模型,同时还支持分布式训练和混合精度训练等功能。 |
| TrainingArguments | TrainingArguments 是 Hugging Face Transformers 库中用于配置训练参数的类。通过 TrainingArguments 类,可以指定训练过程中的各种参数,如训练轮数、学习率、批次大小、日志路径、模型保存路径等。这些参数可以帮助控制训练过程的行为,并对训练过程进行定制。 |

复制代码
from transformers import AutoTokenizer, AutoModelForSequenceClassification, Trainer, TrainingArguments
from datasets import load_dataset,load_from_disk
import traceback
from sklearn.model_selection import train_test_split

#dataset = load_dataset("json", data_files="../data/train_pair_1w.json", split="train")
dataset = load_dataset("csv", data_files="/Users/user/studyFile/2024/nlp/text_similar/data/Chinese_Text_Similarity.csv", split="train")

datasets = dataset.train_test_split(test_size=0.2,shuffle=True)

import torch

tokenizer = AutoTokenizer.from_pretrained("../chinese_macbert_base")
def process_function(examples):
    tokenized_examples = tokenizer(examples["sentence1"], examples["sentence2"], max_length=128, truncation=True)
    #  注意int(label)
    tokenized_examples["labels"] = [int(label) for label in examples["label"]]
    return tokenized_examples

tokenized_datasets = datasets.map(process_function, batched=True, remove_columns=datasets["train"].column_names)
#tokenized_datasets

# 创建模型
from transformers import BertForSequenceClassification 
model = AutoModelForSequenceClassification.from_pretrained("../chinese_macbert_base")

import evaluate
acc_metric = evaluate.load("./metric_accuracy.py")
f1_metirc = evaluate.load("./metric_f1.py")
# 
# acc_metric = evaluate.load("accuracy")
# f1_metirc = evaluate.load("f1")
def eval_metric(eval_predict):
    predictions, labels = eval_predict
    #print(predictions,labels)
    predictions = predictions.argmax(axis=-1)
    #predictions = [int(p > 0.5) for p in predictions]
    labels = [int(l) for l in labels]
    # predictions = predictions.argmax(axis=-1)
    acc = acc_metric.compute(predictions=predictions, references=labels)
    f1 = f1_metirc.compute(predictions=predictions, references=labels)
    acc.update(f1)
    return acc
train_args = TrainingArguments(output_dir="./cross_model",      # 输出文件夹
                               per_device_train_batch_size=32,  # 训练时的batch_size
                               per_device_eval_batch_size=32,  # 验证时的batch_size
                               logging_steps=10,                # log 打印的频率
                               evaluation_strategy="epoch",     # 评估策略
                               save_strategy="epoch",           # 保存策略
                               save_total_limit=3,              # 最大保存数
                               learning_rate=2e-5,              # 学习率
                               weight_decay=0.01,               # weight_decay
                               metric_for_best_model="f1",      # 设定评估指标
                               load_best_model_at_end=True)     # 训练完成后加载最优模型
train_args
from transformers import DataCollatorWithPadding
trainer = Trainer(model=model, 
                  args=train_args, 
                  train_dataset=tokenized_datasets["train"], 
                  eval_dataset=tokenized_datasets["test"], 
                  data_collator=DataCollatorWithPadding(tokenizer=tokenizer),
                  compute_metrics=eval_metric)
trainer.train()
相关推荐
陈奕昆4 分钟前
Wand-Enhancer 图像增强工具新手实战指南
人工智能·图像增强
m4Rk_8 分钟前
【论文阅读】Agent 记忆机制(57):MemSearch-o1——从查询词元生长证据,重组 Deep Search 记忆路径
论文阅读·人工智能·学习·开源·github
xierui12312318 分钟前
NotionAgent 新增建议修改:如何用Patch、Diff 与人工确认设计 AI 改稿工作流
人工智能·ai·自然语言处理
国科安芯21 分钟前
星载CAN总线通信网络中抗辐射MCU的通信可靠性设计分析
网络·人工智能·分布式·单片机·嵌入式硬件·架构
AI程序员41 分钟前
MCP Apps 能直接返回 HTML,为什么还需要 A2UI?
人工智能·agent·mcp
思考着亮41 分钟前
1.MCP
人工智能
MindUp1 小时前
企业私有化文件管理系统选型实录:从部署架构到AI能力的技术调研笔记
人工智能·笔记·架构
长江后浪博客1 小时前
无人机AI识虫:用“空中巡检 + GIS地图 + AI识别”解决大规模种植虫害问题
人工智能·无人机·智慧农业·植保无人机·无人机ai识虫·空中巡检·gis地图
ITresearchGuest1 小时前
AI 是怎么操作浏览器的——browser use 实现原理
人工智能