{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"For this project, I first pre-trained a training set in Hugging Face's AutoTrain service, which can be downloaded directly if anyone would like to use it.I hope this project can help many NLP beginners like me.","metadata":{}},{"cell_type":"code","source":"import pandas as pd \nimport seaborn as sns\nimport torch\nimport matplotlib.pyplot as plt\nfrom matplotlib.pyplot import figure\nimport warnings\nimport time\n\nfrom sklearn.model_selection import train_test_split,GridSearchCV\nfrom sklearn.metrics import accuracy_score\nfrom sklearn.pipeline import Pipeline\n\nfrom sklearn.linear_model import LinearRegression, LogisticRegression\nfrom sklearn.neighbors import KNeighborsClassifier\nfrom sklearn.svm import SVC\nfrom xgboost import XGBClassifier\nfrom lightgbm import LGBMClassifier\nfrom catboost import CatBoostClassifier\nfrom sklearn.naive_bayes import GaussianNB\nfrom sklearn.experimental import enable_iterative_imputer \nfrom sklearn.impute import IterativeImputer\n\nwarnings.filterwarnings('ignore')\ntrain_df = pd.read_csv('/kaggle/input/goodreads-books-reviews-290312/goodreads_train.csv')\ntest_df = pd.read_csv('/kaggle/input/goodreads-books-reviews-290312/goodreads_test.csv')\n","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2023-01-14T15:06:08.313525Z","iopub.execute_input":"2023-01-14T15:06:08.313953Z","iopub.status.idle":"2023-01-14T15:06:50.868077Z","shell.execute_reply.started":"2023-01-14T15:06:08.313872Z","shell.execute_reply":"2023-01-14T15:06:50.867060Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"class ClassificationDataset:\n    def __init__(self, data, tokenizer):\n        self.data = data\n        self.tokenizer = tokenizer\n\n    def __len__(self):\n        return len(self.data)\n\n    def __getitem__(self, item):\n        text = str(self.data[\"review_text\"].values[item])\n        target = int(self.data[\"rating\"].values[item])\n        inputs = self.tokenizer(\n            text,\n            max_length=512, \n            padding=\"max_length\", \n            truncation=True\n        )\n\n        ids = inputs[\"input_ids\"]\n        mask = inputs[\"attention_mask\"]\n\n        return {\n            \"input_ids\": torch.tensor(ids, dtype=torch.long),\n            \"attention_mask\": torch.tensor(mask, dtype=torch.long),\n            \"labels\": torch.tensor(target, dtype=torch.long),\n        }","metadata":{"execution":{"iopub.status.busy":"2023-01-14T15:06:50.870053Z","iopub.execute_input":"2023-01-14T15:06:50.870425Z","iopub.status.idle":"2023-01-14T15:06:50.878386Z","shell.execute_reply.started":"2023-01-14T15:06:50.870391Z","shell.execute_reply":"2023-01-14T15:06:50.877323Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\nfrom transformers import AutoModelForSequenceClassification, AutoTokenizer,Trainer\n# 在AutoTrain上预训练的模型\nmodel = AutoModelForSequenceClassification.from_pretrained(\"LewisShanghai/autotrain-books-rating-analysis-2885184365\")\n# 对于预训练模型tokenize化\ntokenizer = AutoTokenizer.from_pretrained(\"LewisShanghai/autotrain-books-rating-analysis-2885184365\")\n# 将所有的rating初始值赋值为0\ntest_df.loc[:, \"rating\"] = 0\n# 分类数据集\ndataset = ClassificationDataset(test_df, tokenizer)\n# 训练预模型\ntrainer = Trainer(model)\n# 预测\npreds = trainer.predict(dataset).predictions\npreds\n","metadata":{"execution":{"iopub.status.busy":"2023-01-14T15:06:50.880041Z","iopub.execute_input":"2023-01-14T15:06:50.880752Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import numpy as np\nsample_submission = pd.read_csv(\"../input/goodreads-books-reviews-290312/goodreads_sample_submission.csv\")\npreds = np.argmax(preds, axis=1)\nsample_submission.rating = preds\nsample_submission.to_csv(\"submission.csv\", index=False)","metadata":{"trusted":true},"execution_count":null,"outputs":[]}]}