प्रौद्योगिकी साझेदारी

[MindSpore Learning Check-in] अनुप्रयोगः अभ्यासः-LLM सिद्धान्तः तथा अभ्यासः-कार्यन्वयनं BERT संवादः MindSpore इत्यस्य आधारेण भावनापरिचयः

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

अद्यतनस्य प्राकृतिकभाषाप्रक्रियाकरणस्य (NLP) क्षेत्रे भावनापरिचयः अतीव महत्त्वपूर्णः अनुप्रयोगपरिदृश्यः अस्ति । बुद्धिमान् ग्राहकसेवायां, सामाजिकमाध्यमविश्लेषणे वा, भावनात्मकगणनाक्षेत्रे वा, उपयोक्तृणां भावनानां समीचीनपरिचयः उपयोक्तृअनुभवे, प्रणाल्याः बुद्धिस्तरस्य च महतीं सुधारं कर्तुं शक्नोति BERT (Bidirectional Encoder Representations from Transformers), एकस्य शक्तिशाली पूर्वप्रशिक्षितभाषाप्रतिरूपस्य रूपेण, बहुषु एनएलपी कार्येषु स्वस्य उत्तमं प्रदर्शनं प्रदर्शितवान् अस्ति अस्मिन् ब्लोग् मध्ये वयं MindSpore-रूपरेखायाः आधारेण संभाषणात्मक-भावन-परिचयं प्राप्तुं BERT-प्रतिरूपस्य उपयोगः कथं करणीयः इति विस्तरेण परिचयं करिष्यामः | चरण-चरण-सङ्केत-उदाहरणैः विस्तृत-व्याख्यानैः च एतत् तकनीकं निपुणतां कर्तुं भवतः सहायतां कुर्वन्तु ।

आदर्श परिचय

BERT (Bidirectional Encoder Representations from Transformers) इति Transformer-आधारितं द्विदिशा-एन्कोडर-प्रतिपादन-प्रतिरूपम् अस्ति । इदं मुख्यतया पूर्वप्रशिक्षणकार्यद्वयस्य माध्यमेन शब्दस्य वाक्यस्तरस्य च प्रतिनिधित्वं गृह्णाति: मुखौटायुक्तभाषाप्रतिरूपं (MLM) तथा अग्रिमवाक्यपूर्वसूचना (NSP)

  • मुखौटाधारी भाषा प्रतिरूप: कोर्पस् मध्ये १५% शब्दान् यादृच्छिकरूपेण मास्कं कुर्वन्तु, तथा च मॉडल् इत्यनेन एतेषां मुखौटकृतानां शब्दानां पूर्वानुमानस्य आवश्यकता वर्तते ।
  • अग्रिमः वाक्यपूर्वसूचना: आदर्शेन पूर्वानुमानं करणीयम् यत् द्वयोः वाक्ययोः क्रमिकः सम्बन्धः अस्ति वा इति।

BERT इत्यस्य पूर्वप्रशिक्षणानन्तरं पाठवर्गीकरणं, समानतानिर्णयः, पठनबोधः इत्यादिषु विविधेषु अधःप्रवाहकार्येषु तस्य उपयोगः कर्तुं शक्यते ।

दत्तांशसमूहस्य निर्माणम्

डाटा सेट् सज्जीकरणभागे वयं Baidu Feipiao दलेन प्रदत्तं रोबोट् चैट् डाटा सेट् डाउनलोड् कृत्वा डिकम्प्रेस् कृतवन्तः। अयं दत्तांशसमूहः पूर्वसंसाधितः अस्ति, तत्र भावनालेबलानि सन्ति । प्रत्येकं दत्तांशपङ्क्तौ लेबलं शब्दखण्डितं पाठं च भवति । लेबल भाववर्गस्य प्रतिनिधित्वं करोति (० इत्यस्य अर्थः नकारात्मकः, १ इत्यस्य अर्थः तटस्थः, २ इत्यस्य अर्थः सकारात्मकः), पाठः च उपयोक्तुः वार्तालापसामग्री अस्ति । एतस्य संरचितदत्तांशस्य उपयोगेन वयं भाववर्गीकरणकार्यं अधिकसुलभतया कर्तुं शक्नुमः ।

# 下载数据集
!wget https://baidu-nlp.bj.bcebos.com/emotion_detection-dataset-1.0.0.tar.gz -O emotion_detection.tar.gz
!tar xvf emotion_detection.tar.gz
  • 1
  • 2
  • 3

दत्तांशसमूहस्वरूपं निम्नलिखितम् अस्ति ।

label--text_a
0--谁骂人了?我从来不骂人,我骂的都不是人,你是人吗 ?
1--我有事等会儿就回来和你聊
2--我见到你很高兴谢谢你帮我
  • 1
  • 2
  • 3
  • 4

दत्तांशभारः पूर्वसंसाधनं च

यन्त्रशिक्षणप्रक्रियायां आँकडाभारणं पूर्वसंसाधनं च महत्त्वपूर्णपदार्थाः सन्ति ।वयं प्रयुक्तवन्तःGeneratorDataset दत्तांशं लोड् कर्तुं तथा च पाठं मॉडल् कृते स्वीकार्यरूपेण परिवर्तयितुं मैपिंग ऑपरेशन्स् इत्यस्य उपयोगं कर्तुं ।विशेषतः वयं प्रयुक्तवन्तःBertTokenizer पाठं शब्दावली ID मध्ये टोकेनिज कृत्वा पैड् ऑपरेशनं कुर्वन्तु । अस्य उद्देश्यं सर्वेषां निवेश-अनुक्रमानाम् दीर्घता सुसंगता भवति इति सुनिश्चितं भवति, तस्मात् प्रशिक्षण-दक्षतायां, आदर्श-प्रदर्शने च सुधारः भवति ।

import numpy as np
from mindspore.dataset import text, GeneratorDataset, transforms
from mindnlp.transformers import BertTokenizer

def process_dataset(source, tokenizer, max_seq_len=64, batch_size=32, shuffle=True):
    is_ascend = mindspore.get_context('device_target') == 'Ascend'
    column_names = ["label", "text_a"]
    
    dataset = GeneratorDataset(source, column_names=column_names, shuffle=shuffle)
    type_cast_op = transforms.TypeCast(mindspore.int32)
    
    def tokenize_and_pad(text):
        if is_ascend:
            tokenized = tokenizer(text, padding='max_length', truncation=True, max_length=max_seq_len)
        else:
            tokenized = tokenizer(text)
        return tokenized['input_ids'], tokenized['attention_mask']
    
    dataset = dataset.map(operations=tokenize_and_pad, input_columns="text_a", output_columns=['input_ids', 'attention_mask'])
    dataset = dataset.map(operations=[type_cast_op], input_columns="label", output_columns='labels')
    
    if is_ascend:
        dataset = dataset.batch(batch_size)
    else:
        dataset = dataset.padded_batch(batch_size, pad_info={'input_ids': (None, tokenizer.pad_token_id), 'attention_mask': (None, 0)})

    return dataset

tokenizer = BertTokenizer.from_pretrained('bert-base-chinese')
dataset_train = process_dataset(SentimentDataset("data/train.tsv"), tokenizer)
dataset_val = process_dataset(SentimentDataset("data/dev.tsv"), tokenizer)
dataset_test = process_dataset(SentimentDataset("data/test.tsv"), tokenizer, shuffle=False)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32

अत्र चित्रविवरणं सम्मिलितं कुर्वन्तु

आदर्श भवन

मॉडल् बिल्डिंग् भागे वयं प्रयुक्तवन्तःBertForSequenceClassification भाववर्गीकरणकार्यं कर्तुं। एतत् पूर्वप्रशिक्षितं प्रतिरूपं बृहत्-परिमाणे निगमेषु प्रशिक्षितम् अस्ति, भाषाबोधक्षमता च दृढा अस्ति । पूर्वप्रशिक्षितभारं लोड् कृत्वा वयं भावनावर्गीकरणकार्येषु मॉडलस्य कार्यप्रदर्शने महत्त्वपूर्णतया सुधारं कर्तुं शक्नुमः। तस्मिन् एव काले वयं स्वयम् मिश्रित-सटीक-प्रौद्योगिकीम् उपयुञ्ज्महे, यत् न केवलं प्रशिक्षण-प्रक्रियायाः त्वरिततां करोति, अपितु विडियो-स्मृतेः उपयोगं न्यूनीकरोति, तस्मात् सीमित-हार्डवेयर-संसाधनानाम् अन्तर्गतं अधिकं कुशलं प्रशिक्षणं प्राप्नोति

अनुकूलकाः मूल्याङ्कनमापकाः च आदर्शप्रशिक्षणे महत्त्वपूर्णाः घटकाः सन्ति । बृहत्-परिमाणस्य आँकडानां जटिलप्रतिमानानाम् च व्यवहारे उत्तमं प्रदर्शनं भवति इति कारणेन वयं एडम् अनुकूलकं चयनं कृतवन्तः । मूल्याङ्कनसूचकानाम् दृष्ट्या वयं प्रतिरूपस्य कार्यप्रदर्शनस्य मापनार्थं सटीकतायाः उपयोगं कुर्मः । एतैः सेटिङ्ग्स् इत्यनेन वयं सुनिश्चितं कर्तुं शक्नुमः यत् प्रशिक्षणस्य समये मॉडल् निरन्तरं अनुकूलितं भवति तथा च सत्यापनसमूहे उत्तमं प्रदर्शनं प्राप्नोति ।

आदर्शप्रशिक्षणप्रक्रियायां कॉलबैक् कार्याणि महत्त्वपूर्णां भूमिकां निर्वहन्ति । वयं द्वौ callback functions स्थापयामः:CheckpointCallbackतथाBestModelCallback . पूर्वस्य उपयोगः नियमितरूपेण मॉडलस्य भारस्य रक्षणार्थं भवति, उत्तरं तु स्वयमेव सर्वोत्तमप्रदर्शनस्य मॉडलस्य भारं भारयति । एतेषां कॉलबैक् कार्याणां माध्यमेन वयं सुनिश्चितं कुर्मः यत् प्रशिक्षणकाले महत्त्वपूर्णाः मॉडल् मापदण्डाः न नष्टाः भवन्ति तथा च सर्वोत्तमप्रदर्शनस्य मॉडलस्य उपयोगः सर्वदा अनुमानस्य मूल्याङ्कनस्य च कृते भवति

from mindnlp.transformers import BertForSequenceClassification
from mindspore import nn
from mindnlp._legacy.amp import auto_mixed_precision

model = BertForSequenceClassification.from_pretrained('bert-base-chinese', num_labels=3)
model = auto_mixed_precision(model, 'O1')

optimizer = nn.Adam(model.trainable_params(), learning_rate=2e-5)
metric = Accuracy()
ckpoint_cb = CheckpointCallback(save_path='checkpoint', ckpt_name='bert_emotect', epochs=1, keep_checkpoint_max=2)
best_model_cb = BestModelCallback(save_path='checkpoint', ckpt_name='bert_emotect_best', auto_load=True)

trainer = Trainer(network=model, train_dataset=dataset_train,
                  eval_dataset=dataset_val, metrics=metric,
                  epochs=5, optimizer=optimizer, callbacks=[ckpoint_cb, best_model_cb])
trainer.run(tgt_columns="labels")
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

आदर्श प्रमाणीकरणम्

मॉडल् प्रमाणीकरणविभागे वयं मॉडलस्य कार्यप्रदर्शनस्य मूल्याङ्कनार्थं सत्यापनदत्तांशसमूहस्य उपयोगं कुर्मः । प्रमाणीकरणसमूहे प्रतिरूपस्य सटीकतायां गणनां कृत्वा वयं प्रतिरूपस्य सामान्यीकरणक्षमतां वास्तविकप्रभावं च अवगन्तुं शक्नुमः । इदं पदं अतीव महत्त्वपूर्णं यतः एतत् अस्मान् आदर्शप्रशिक्षणप्रक्रियायां सम्भाव्यसमस्यानां आविष्कारं कर्तुं तदनुरूपं समायोजनं अनुकूलनं च कर्तुं साहाय्यं कर्तुं शक्नोति।

evaluator = Evaluator(network=model, eval_dataset=dataset_test, metrics=metric)
evaluator.run(tgt_columns="labels")
  • 1
  • 2

आदर्श तर्कः

आदर्शानुमानविभागे नूतनदत्तांशयोः भाववर्गीकरणं कर्तुं प्रशिक्षितप्रतिरूपस्य उपयोगः कथं करणीयः इति दर्शितम् अस्ति ।वयं कpredict पाठं निवेश्य भावपूर्वसूचनं कृत्वा भविष्यवाणीपरिणामान् निर्गच्छति इति कार्यम् । एतत् पदं मॉडलस्य व्यावहारिकं अनुप्रयोगक्षमतां प्रदर्शयति तथा च मॉडलस्य सामान्यीकरणप्रदर्शनस्य सत्यापनम् करोति ।

dataset_infer = SentimentDataset("data/infer.tsv")

def predict(text, label=None):
    label_map = {0: "消极", 1: "中性", 2: "积极"}
    text_tokenized = Tensor([tokenizer(text).input_ids])
    logits = model(text_tokenized)
    predict_label = logits[0].asnumpy().argmax()
    info = f"inputs: '{text}', predict: '{label_map[predict_label]}'"
    if label is not None:
        info += f" , label: '{label_map[label]}'"
    print(info)

for label, text in dataset_infer:
    predict(text, label)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

अत्र चित्रविवरणं सम्मिलितं कुर्वन्तु

कस्टम अनुमान दत्तांश

अन्ते वयं दर्शयामः यत् कस्टम् इनपुट् इत्यत्र भावनापरिचयार्थं मॉडलस्य उपयोगः कथं भवति । एतत् पदं न केवलं मॉडलस्य व्यावहारिकं अनुप्रयोगक्षमतां प्रदर्शयति, अपितु भिन्न-भिन्न-निवेशानां अन्तर्गतं मॉडलस्य कार्यक्षमतां सत्यापयति । एवं प्रकारेण वयं प्रतिरूपस्य सामान्यीकरणक्षमतां वास्तविकप्रभावं च अधिकं अवगन्तुं शक्नुमः ।

predict("家人们咱就是说一整个无语住了 绝绝子叠buff")
  • 1

अत्र चित्रविवरणं सम्मिलितं कुर्वन्तु