Rumah > pembangunan bahagian belakang > Tutorial Python > Bermula dengan NLP Menggunakan Bert on Kaggle

Bermula dengan NLP Menggunakan Bert on Kaggle

Barbara Streisand
Lepaskan: 2025-01-29 16:17:10
asal
278 orang telah melayarinya

1 、 Import dan EDA

1

2

3

4

5

import os

iskaggle = os.environ.get('KAGGLE_KERNEL_RUN_TYPE', '')

from pathlib import Path

if iskaggle:

    path = Path('/kaggle/input/us-patent-phrase-to-phrase-matching')

Salin selepas log masuk

1

2

3

4

import pandas as pd

df = pd.read_csv(path/'train.csv')

df['input'] = 'TEXT1: ' + df.context + '; TEXT2: ' + df.target + '; ANC1: ' + df.anchor

df.input.head()

Salin selepas log masuk

2 、 tokenisasi

1

2

3

4

5

6

7

8

9

10

from datasets import Dataset, DatasetDict

ds = Dataset.from_pandas(df)

import warnings,logging,torch

warnings.simplefilter('ignore')

logging.disable(logging.WARNING)

model_nm = 'anferico/bert-for-patents'

# Load model directly

from transformers import AutoModelForSequenceClassification, AutoTokenizer

model = AutoModelForSequenceClassification.from_pretrained(model_nm, num_labels=1)

tokenizer = AutoTokenizer.from_pretrained('anferico/bert-for-patents')

Salin selepas log masuk

1

2

3

4

5

def tok_func(x):

    return tokenizer(x['input'])

# Tokenize all the sentences using the tokenizer

tok_ds = ds.map(tok_func, batched=True)

tok_ds = tok_ds.rename_columns({'score':'labels'})

Salin selepas log masuk

3 、 Ujian dan set pengesahan

1

2

3

4

eval_df = pd.read_csv(path/'test.csv')

dds = tok_ds.train_test_split(0.25, seed=42)

eval_df['input'] = 'TEXT1: ' + eval_df.context + '; TEXT2: ' + eval_df.target + '; ANC1: ' + eval_df.anchor

eval_ds = Dataset.from_pandas(eval_df).map(tok_func, batched=True)

Salin selepas log masuk

4 、 metrik dan korelasi

1

2

3

4

5

import numpy as np

def corr(x,y):

    ## change the 2-d array into 1-d array

    return np.corrcoef(x.flatten(), y)[0,1]

def corr_d(eval_pred): return {'pearson': corr(*eval_pred)}

Salin selepas log masuk

5 、 Latihan model kami

1

2

3

4

5

6

7

8

9

10

from transformers import TrainingArguments,Trainer

bs = 128

epochs = 4

lr = 8e-5

args = TrainingArguments('outputs', learning_rate=lr, warmup_ratio=0.1, lr_scheduler_type='cosine', fp16=True,

    evaluation_strategy="epoch", per_device_train_batch_size=bs, per_device_eval_batch_size=bs*2,

    num_train_epochs=epochs, weight_decay=0.01, report_to='none')

trainer = Trainer(model, args, train_dataset=dds['train'], eval_dataset=dds['test'],

                  tokenizer=tokenizer, compute_metrics=corr_d)

trainer.train()

Salin selepas log masuk

Image description

6 、 Dapatkan ramalan pada set ujian

1

2

3

4

5

6

7

8

9

10

preds = trainer.predict(eval_ds).predictions.astype(float)

preds = np.clip(preds, 0, 1)

import datasets

 

submission = datasets.Dataset.from_dict({

    'id': eval_ds['id'],

    'score': preds

})

 

submission.to_csv('submission.csv', index=False)

Salin selepas log masuk

Atas ialah kandungan terperinci Bermula dengan NLP Menggunakan Bert on Kaggle. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan