Files
wehub-resource-sync 2aaeece67c
Codestyle Check / Lint (push) Has been cancelled
Codestyle Check / Check bypass (push) Has been cancelled
Pipelines-Test / Pipelines-Test (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 13:37:14 +08:00

131 lines
4.5 KiB
ReStructuredText

========
10-Minute Guide to High-Accuracy Chinese Sentiment Analysis
========
1. Install PaddleNLP
========
For installation procedures and troubleshooting, please refer to the [Installation Documentation](https://paddlenlp.readthedocs.io/en/latest/gettingstarted/install.html).
.. code-block::
>>> pip install --upgrade paddlenlp -i https://pypi.org/simple
2. One-Click Loading of Pretrained Models
========
Sentiment analysis is essentially a text classification task. PaddleNLP provides various pretrained models including ERNIE, BERT, RoBERTa, and Electra, along with fine-tuning networks for different downstream tasks. Let's use ERNIE as an example.
Load ERNIE model:
.. code-block::
>>> MODEL_NAME = "ernie-3.0-medium-zh"
>>> ernie_model = paddlenlp.transformers.ErnieModel.from_pretrained(MODEL_NAME)
Load text classification head:
.. code-block::
>>> model = paddlenlp.transformers.ErnieForSequenceClassification.from_pretrained(
... MODEL_NAME, num_classes=len(label_list))
3. Data Processing with Tokenizer
========
Load tokenizer:
.. code-block::
>>> tokenizer = paddlenlp.transformers.ErnieTokenizer.from_pretrained(MODEL_NAME)
Text processing example:
.. code-block::
>>> encoded_text = tokenizer(text="Please input test sample")
Convert to tensor:
.. code-block::
>>> input_ids = paddle.to_tensor([encoded_text['input_ids']])
>>> token_type_ids = paddle.to_tensor([encoded_text['token_type_ids']])
Model inference:
.. code-block::
>>> sequence_output, pooled_output = ernie_model(input_ids, token_type_ids)
>>> print(f"Token wise output: {sequence_output.shape}, Pooled output: {pooled_output.shape}")
4. Load Dataset
========
Load ChnSenticorp dataset:
.. code-block::
>>> train_ds, dev_ds, test_ds = paddlenlp.datasets.load_dataset(
... 'chnsenticorp', splits=['train', 'dev', 'test'])
Get label list:
.. code-block::
>>> label_list = train_ds.label_list
>>> print(label_list)
Sample data:
.. code-block::
>>> for idx in range(5):
... print(train_ds[idx])
5. Model Training and Evaluation
========
(Note: The original content ends here, so the translation stops accordingly while maintaining consistency.)
The :func:`paddle.io.DataLoader` interface asynchronously loads data with multi-threading, while configuring dynamic learning rates, loss functions, optimization algorithms, and evaluation metrics suitable for Transformer models like ERNIE.
The model training process typically follows these steps:
#. Fetch a batch of data from the dataloader.
#. Feed the batch data to the model for forward computation.
#. Pass the forward computation results to the loss function to calculate loss, and to evaluation metrics to compute performance metrics.
#. Perform backpropagation with the loss to update gradients. Repeat the above steps.
#. After each epoch, the program evaluates the model's current performance.
This example is also available on AIStudio for _online model training experience_.
.. _online model training experience: https://aistudio.baidu.com/aistudio/projectdetail/1294333
Finally, save the trained model for prediction.
6. Model Prediction
==================
After saving the trained model, define the prediction function :func:`predict` to perform sentiment analysis.
Example with custom prediction data and labels:
.. code-block::
>>> data = [
... 'This hotel is rather outdated, and the discounted rooms are mediocre. Overall average',
... 'Started watching with great excitement, but found a Mickey Mouse cartoon appearing after the main feature',
... 'As an established four-star hotel, the rooms remain well-kept and impressive. The airport shuttle service is excellent, allowing check-in during the ride to save time.',
... ]
>>> label_map = {0: 'negative', 1: 'positive'}
Prediction results:
.. code-block::
>>> results = predict(
... model, data, tokenizer, label_map, batch_size=batch_size)
>>> for idx, text in enumerate(data):
... print('Data: {} \t Label: {}'.format(text, results[idx]))
Data: This hotel is rather outdated, and the discounted rooms are mediocre. Overall average Label: negative
Data: Started watching with great excitement, but found a Mickey Mouse cartoon appearing after the main feature Label: negative
Data: As an established four-star hotel, the rooms remain well-kept and impressive. The airport shuttle service is excellent, allowing check-in during the ride to save time. Label: positive