Spaces:
Sleeping
Sleeping
| import polars as pl | |
| from iterstrat.ml_stratifiers import MultilabelStratifiedShuffleSplit | |
| from langchain_text_splitters import RecursiveCharacterTextSplitter | |
| import numpy as np | |
| from datasets import Dataset | |
| from scripts.eda import training_set, class_cols | |
| WORD_LIMIT=512 | |
| CHAR_LIMIT = WORD_LIMIT * 6 | |
| CHUNK_OVERLAP = 0 | |
| splitter = RecursiveCharacterTextSplitter( | |
| chunk_size=CHAR_LIMIT, | |
| chunk_overlap=CHUNK_OVERLAP, | |
| separators=["\n\n", "\n", ". ", " ", ""], | |
| ) | |
| #trying this kind of coding haha | |
| def word_count(text: str) -> int: | |
| return len(text.split()) | |
| def split_row(row: dict) -> list[dict]: | |
| chunks = splitter.split_text(row["comment_text"]) | |
| result = [] | |
| for n, chunk in enumerate(chunks): | |
| new_row = row.copy() | |
| new_row["comment_text"] = chunk | |
| new_row["id"] = f"{row["id"]}__chunk{n}" | |
| result.append(new_row) | |
| return result | |
| def process_df(df:pl.DataFrame) -> pl.DataFrame: | |
| kept_rows: list[dict] = [] | |
| expanded_rows: list[dict] = [] | |
| for row in df.iter_rows(named=True): | |
| if word_count(row["comment_text"]) > WORD_LIMIT: | |
| expanded_rows.extend(split_row(row)) | |
| else: | |
| kept_rows.append(row) | |
| all_rows = kept_rows + expanded_rows | |
| return pl.DataFrame(all_rows, schema=df.schema) | |
| bert_training_set = process_df(training_set) | |
| y = bert_training_set.select(class_cols).to_numpy() | |
| X_dummy = np.zeros((bert_training_set.height, 1)) | |
| msss = MultilabelStratifiedShuffleSplit( | |
| n_splits=1, test_size=0.1, random_state=42 | |
| ) | |
| train_idx, val_idx = next(msss.split(X_dummy, y)) | |
| train_set = bert_training_set[train_idx] | |
| val_set = bert_training_set[val_idx] | |
| print(train_set.height) | |
| train_ds = Dataset.from_polars(train_set) | |
| val_ds = Dataset.from_polars(val_set) | |