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
दत्तांशसमूहस्वरूपं निम्नलिखितम् अस्ति ।
label--text_a
0--谁骂人了?我从来不骂人,我骂的都不是人,你是人吗 ?
1--我有事等会儿就回来和你聊
2--我见到你很高兴谢谢你帮我
यन्त्रशिक्षणप्रक्रियायां आँकडाभारणं पूर्वसंसाधनं च महत्त्वपूर्णपदार्थाः सन्ति ।वयं प्रयुक्तवन्तः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)
मॉडल् बिल्डिंग् भागे वयं प्रयुक्तवन्तः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")
मॉडल् प्रमाणीकरणविभागे वयं मॉडलस्य कार्यप्रदर्शनस्य मूल्याङ्कनार्थं सत्यापनदत्तांशसमूहस्य उपयोगं कुर्मः । प्रमाणीकरणसमूहे प्रतिरूपस्य सटीकतायां गणनां कृत्वा वयं प्रतिरूपस्य सामान्यीकरणक्षमतां वास्तविकप्रभावं च अवगन्तुं शक्नुमः । इदं पदं अतीव महत्त्वपूर्णं यतः एतत् अस्मान् आदर्शप्रशिक्षणप्रक्रियायां सम्भाव्यसमस्यानां आविष्कारं कर्तुं तदनुरूपं समायोजनं अनुकूलनं च कर्तुं साहाय्यं कर्तुं शक्नोति।
evaluator = Evaluator(network=model, eval_dataset=dataset_test, metrics=metric)
evaluator.run(tgt_columns="labels")
आदर्शानुमानविभागे नूतनदत्तांशयोः भाववर्गीकरणं कर्तुं प्रशिक्षितप्रतिरूपस्य उपयोगः कथं करणीयः इति दर्शितम् अस्ति ।वयं क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)
अन्ते वयं दर्शयामः यत् कस्टम् इनपुट् इत्यत्र भावनापरिचयार्थं मॉडलस्य उपयोगः कथं भवति । एतत् पदं न केवलं मॉडलस्य व्यावहारिकं अनुप्रयोगक्षमतां प्रदर्शयति, अपितु भिन्न-भिन्न-निवेशानां अन्तर्गतं मॉडलस्य कार्यक्षमतां सत्यापयति । एवं प्रकारेण वयं प्रतिरूपस्य सामान्यीकरणक्षमतां वास्तविकप्रभावं च अधिकं अवगन्तुं शक्नुमः ।
predict("家人们咱就是说一整个无语住了 绝绝子叠buff")