Download data.py from srajam696/mlops-assignment2-distilbert: direct link, hf CLI and curl.
- Browser
- Download file 2.55 kB
-
https://huggingface.co/srajam696/mlops-assignment2-distilbert/resolve/refs%2Fpr%2F1/data.py
- Command line
-
hf download hf://srajam696/mlops-assignment2-distilbert@refs/pr/1/data.py
-
curl -L -o data.py https://huggingface.co/srajam696/mlops-assignment2-distilbert/resolve/refs%2Fpr%2F1/data.py
2.55 kB
| import json | |
| import gzip | |
| import random | |
| import requests | |
| from transformers import DistilBertTokenizerFast | |
| genre_url_dict = { | |
| 'poetry': 'https://mcauleylab.ucsd.edu/public_datasets/gdrive/goodreads/byGenre/goodreads_reviews_poetry.json.gz', | |
| 'children': 'https://mcauleylab.ucsd.edu/public_datasets/gdrive/goodreads/byGenre/goodreads_reviews_children.json.gz', | |
| 'comics_graphic': 'https://mcauleylab.ucsd.edu/public_datasets/gdrive/goodreads/byGenre/goodreads_reviews_comics_graphic.json.gz', | |
| 'fantasy_paranormal': 'https://mcauleylab.ucsd.edu/public_datasets/gdrive/goodreads/byGenre/goodreads_reviews_fantasy_paranormal.json.gz', | |
| 'history_biography': 'https://mcauleylab.ucsd.edu/public_datasets/gdrive/goodreads/byGenre/goodreads_reviews_history_biography.json.gz', | |
| 'mystery_thriller_crime': 'https://mcauleylab.ucsd.edu/public_datasets/gdrive/goodreads/byGenre/goodreads_reviews_mystery_thriller_crime.json.gz', | |
| 'romance': 'https://mcauleylab.ucsd.edu/public_datasets/gdrive/goodreads/byGenre/goodreads_reviews_romance.json.gz', | |
| 'young_adult': 'https://mcauleylab.ucsd.edu/public_datasets/gdrive/goodreads/byGenre/goodreads_reviews_young_adult.json.gz' | |
| } | |
| def load_reviews(url, head=10000, sample_size=2000): | |
| reviews = [] | |
| response = requests.get(url, stream=True) | |
| with gzip.open(response.raw, 'rt', encoding='utf-8') as file: | |
| for i, line in enumerate(file): | |
| if i >= head: break | |
| reviews.append(json.loads(line)['review_text']) | |
| return random.sample(reviews, min(sample_size, len(reviews))) | |
| def prepare_data(model_name='distilbert-base-cased'): | |
| tokenizer = DistilBertTokenizerFast.from_pretrained(model_name) | |
| train_texts, train_labels, test_texts, test_labels = [], [], [], [] | |
| for genre, url in genre_url_dict.items(): | |
| reviews = load_reviews(url, head=1000, sample_size=200) | |
| split = int(len(reviews) * 0.8) | |
| train_texts.extend(reviews[:split]) | |
| train_labels.extend([genre] * split) | |
| test_texts.extend(reviews[split:]) | |
| test_labels.extend([genre] * (len(reviews) - split)) | |
| unique_labels = sorted(list(set(train_labels))) | |
| label2id = {label: i for i, label in enumerate(unique_labels)} | |
| train_encodings = tokenizer(train_texts, truncation=True, padding=True, max_length=512) | |
| test_encodings = tokenizer(test_texts, truncation=True, padding=True, max_length=512) | |
| return train_encodings, [label2id[l] for l in train_labels], test_encodings, [label2id[l] for l in test_labels], label2id | |