日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長(zhǎng)提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請(qǐng)做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747

金融市場(chǎng)中的NLP——情感分析

 

自在ImageNet上推出AlexNet以來(lái),計(jì)算機(jī)視覺(jué)的深度學(xué)習(xí)已成功應(yīng)用于各種應(yīng)用。相反,NLP在深層神經(jīng)網(wǎng)絡(luò)應(yīng)用方面一直落后。許多聲稱使用人工智能的應(yīng)用程序通常使用某種基于規(guī)則的算法和傳統(tǒng)的機(jī)器學(xué)習(xí),而不是使用深層神經(jīng)網(wǎng)絡(luò)。

2018年,在一些NLP任務(wù)中,一種名為BERT的最先進(jìn)(STOA)模型的表現(xiàn)超過(guò)了人類的得分。在這里,我將幾個(gè)模型應(yīng)用于情緒分析任務(wù),以了解它們?cè)谖宜幍慕鹑谑袌?chǎng)中有多大用處。代碼在jupyter notebook中,https://github.com/yuki678/financial-phrase-bert

介紹

NLP任務(wù)可以大致分為以下幾類。

  1. 文本分類——過(guò)濾垃圾郵件,對(duì)文檔進(jìn)行分類
  2. 詞序——詞翻譯,詞性標(biāo)記,命名實(shí)體識(shí)別
  3. 文本意義——主題模型,搜索,問(wèn)答
  4. seq2seq——機(jī)器翻譯、文本摘要、問(wèn)答
  5. 對(duì)話系統(tǒng)

不同的任務(wù)需要不同的方法,在大多數(shù)情況下是多種NLP技術(shù)的組合。在開發(fā)機(jī)器人時(shí),后端邏輯通常是基于規(guī)則的搜索引擎和排名算法,以形成自然的通信。

這是有充分理由的。語(yǔ)言有語(yǔ)法和詞序,可以用基于規(guī)則的方法更好地處理,而機(jī)器學(xué)習(xí)方法可以更好地學(xué)習(xí)單詞相似性。向量化技術(shù)如word2vec、bag of word幫助模型以數(shù)學(xué)方式表達(dá)文本。最著名的例子是:

King - Man + Woman = Queen

Paris - France + UK = London

第一個(gè)例子描述了性別關(guān)系,第二個(gè)例子描述了首都的概念。然而,在這些方法中,由于在任何文本中同一個(gè)詞總是由同一個(gè)向量表示,因此上下文不能被捕獲,這在許多情況下是不正確的。

循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)結(jié)構(gòu)利用輸入序列的先驗(yàn)信息,處理時(shí)間序列數(shù)據(jù),在捕捉和記憶上下文方面表現(xiàn)良好。LSTM是一種典型的結(jié)構(gòu),它由輸入門、輸出門和遺忘門組成,克服了RNN的梯度問(wèn)題。有許多基于LSTM的改進(jìn)模型,例如雙向LSTM,不僅可以從前面的單詞中捕捉上下文,而且可以從后面捕獲上下文。這些方法對(duì)于某些特定的任務(wù)是有用的,但在實(shí)際應(yīng)用中卻不太適用。

2017年,我們看到了一種新的方法來(lái)解決這個(gè)問(wèn)題。BERT是google在2018年推出的一個(gè)多編碼器堆棧的掩碼語(yǔ)言模型,在GLUE、SQuAD和SWAG基準(zhǔn)測(cè)試中實(shí)現(xiàn)了STOA,并有了很大的改進(jìn)。有很多文章和博客解釋了這種架構(gòu),比如Jay Alammar的文章:http://jalammar.github.io/illustrated-bert/

我在金融行業(yè)工作,在過(guò)去的幾年里,我很難看到我們?cè)贜LP上的機(jī)器學(xué)習(xí)模型在交易系統(tǒng)中的生產(chǎn)應(yīng)用方面有足夠的強(qiáng)勁表現(xiàn)。現(xiàn)在,基于BERT的模型正在變得成熟和易于使用,這要?dú)w功于Huggingface的實(shí)現(xiàn)和許多預(yù)訓(xùn)練的模型已經(jīng)公開。

我的目標(biāo)是看看這個(gè)NLP的最新開發(fā)是否達(dá)到了在我的領(lǐng)域中使用的良好水平。在這篇文章中,我比較了不同的模型,這是一個(gè)相當(dāng)簡(jiǎn)單的任務(wù),即對(duì)金融文本的情緒分析,以此作為基線來(lái)判斷是否值得在真正的解決方案中嘗試另一個(gè)研發(fā)。

此處比較的模型有:

  1. 基于規(guī)則的詞典方法
  2. 基于Tfidf的傳統(tǒng)機(jī)器學(xué)習(xí)方法
  3. 作為一種循環(huán)神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)的LSTM
  4. BERT(和ALBERT)

輸入數(shù)據(jù)

在情緒分析任務(wù)中,我采用以下兩種輸入來(lái)表示行業(yè)中的不同語(yǔ)言。

  1. 財(cái)經(jīng)新聞標(biāo)題——正式
  2. 來(lái)自Stocktwits的Tweets——非正式

我將為后者寫另一篇文章,所以這里關(guān)注前者的數(shù)據(jù)。這是一個(gè)包含更正式的金融領(lǐng)域特定語(yǔ)言的文本示例,我使用了Malo等人的FinancialPhraseBank(https://www.researchgate.net/publication/251231107_Good_Debt_or_Bad_Debt_Detecting_Semantic_Orientations_in_Economic_Texts)包括4845篇由16人手寫的標(biāo)題文本,并提供同意等級(jí)。我使用了75%的同意等級(jí)和3448個(gè)文本作為訓(xùn)練數(shù)據(jù)。

## 輸入文本示例

positive "Finnish steel maker Rautaruukki Oyj ( Ruukki ) said on July 7 , 2008 that it won a 9.0 mln euro ( $ 14.1 mln ) contract to supply and install steel superstructures for Partihallsforbindelsen bridge project in Gothenburg , western Sweden."

neutral "In 2008 , the steel industry accounted for 64 percent of the cargo volumes transported , whereas the energy industry accounted for 28 percent and other industries for 8 percent."

negative "The period-end cash and cash equivalents totaled EUR6 .5 m , compared to EUR10 .5 m in the previous year."
金融市場(chǎng)中的NLP——情感分析

 

請(qǐng)注意,所有數(shù)據(jù)都屬于來(lái)源,用戶必須遵守其版權(quán)和許可條款。

模型

下面是我比較了四款模型的性能。

金融市場(chǎng)中的NLP——情感分析

 

A、 基于詞匯的方法

創(chuàng)建特定于領(lǐng)域的詞典是一種傳統(tǒng)的方法,在某些情況下,如果源代碼來(lái)自特定的個(gè)人或媒體,則這種方法簡(jiǎn)單而強(qiáng)大。Loughran和McDonald情感詞列表。這個(gè)列表包含超過(guò)4k個(gè)單詞,這些單詞出現(xiàn)在帶有情緒標(biāo)簽的財(cái)務(wù)報(bào)表上。注:此數(shù)據(jù)需要許可證才能用于商業(yè)應(yīng)用。請(qǐng)?jiān)谑褂们皺z查他們的網(wǎng)站。

## 樣本

negative: ABANDON
negative: ABANDONED
constraining: STRICTLY

我用了2355個(gè)消極單詞和354個(gè)積極單詞。它包含單詞形式,因此不要對(duì)輸入執(zhí)行詞干分析和詞干化。對(duì)于這種方法,考慮否定形式是很重要的。比如not,no,don,等等。這些詞會(huì)把否定詞的意思改為肯定的,如果前面三個(gè)詞中有否定詞,這里我簡(jiǎn)單地把否定詞的意思轉(zhuǎn)換成肯定詞。

然后,情感得分定義如下。

tone_score = 100 * (pos_count — neg_count) / word_count

用默認(rèn)參數(shù)訓(xùn)練14個(gè)不同的分類器,然后用網(wǎng)格搜索交叉驗(yàn)證法對(duì)隨機(jī)森林進(jìn)行超參數(shù)整定。

classifiers = []
classifiers.Append(("SVC", SVC(random_state=random_state)))
classifiers.append(("DecisionTree", DecisionTreeClassifier(random_state=random_state)))
classifiers.append(("AdaBoost", AdaBoostClassifier(DecisionTreeClassifier(random_state=random_state),random_state=random_state,learning_rate=0.1)))
classifiers.append(("RandomForest", RandomForestClassifier(random_state=random_state, n_estimators=100)))
classifiers.append(("ExtraTrees", ExtraTreesClassifier(random_state=random_state)))
classifiers.append(("GradientBoosting", GradientBoostingClassifier(random_state=random_state)))
classifiers.append(("MultipleLayerPerceptron", MLPClassifier(random_state=random_state)))
classifiers.append(("KNeighboors", KNeighborsClassifier(n_neighbors=3)))
classifiers.append(("LogisticRegression", LogisticRegression(random_state = random_state)))
classifiers.append(("LinearDiscriminantAnalysis", LinearDiscriminantAnalysis()))
classifiers.append(("GaussianNB", GaussianNB()))
classifiers.append(("Perceptron", Perceptron()))
classifiers.append(("LinearSVC", LinearSVC()))
classifiers.append(("SGD", SGDClassifier()))

cv_results = []
for classifier in classifiers :
    cv_results.append(cross_validate(classifier[1], X_train, y=Y_train, scoring=scoring, cv=kfold, n_jobs=-1))
# 使用隨機(jī)森林分類器
rf_clf = RandomForestClassifier()

# 執(zhí)行網(wǎng)格搜索
param_grid = {'n_estimators': np.linspace(1, 60, 10, dtype=int),
              'min_samples_split': [1, 3, 5, 10],
              'min_samples_leaf': [1, 2, 3, 5],
              'max_features': [1, 2, 3],
              'max_depth': [None],
              'criterion': ['gini'],
              'bootstrap': [False]}

model = GridSearchCV(rf_clf, param_grid=param_grid, cv=kfold, scoring=scoring, verbose=verbose, refit=refit, n_jobs=-1, return_train_score=True)
model.fit(X_train, Y_train)
rf_best = model.best_estimator_

B、 基于Tfidf向量的傳統(tǒng)機(jī)器學(xué)習(xí)

輸入被NLTK word_tokenize()標(biāo)記化,然后詞干化和刪除停用詞。然后輸入到TfidfVectorizer ,通過(guò)Logistic回歸和隨機(jī)森林分類器進(jìn)行分類。

### 邏輯回歸
pipeline1 = Pipeline([
    ('vec', TfidfVectorizer(analyzer='word')),
    ('clf', LogisticRegression())])

pipeline1.fit(X_train, Y_train)

### 隨機(jī)森林與網(wǎng)格搜索
pipeline2 = Pipeline([
    ('vec', TfidfVectorizer(analyzer='word')),
    ('clf', RandomForestClassifier())])

param_grid = {'clf__n_estimators': [10, 50, 100, 150, 200],
              'clf__min_samples_leaf': [1, 2],
              'clf__min_samples_split': [4, 6],
              'clf__max_features': ['auto']
             }

model = GridSearchCV(pipeline2, param_grid=param_grid, cv=kfold, scoring=scoring, verbose=verbose, refit=refit, n_jobs=-1, return_train_score=True)
model.fit(X_train, Y_train)
tfidf_best = model.best_estimator_

C、 LSTM

由于LSTM被設(shè)計(jì)用來(lái)記憶表達(dá)上下文的長(zhǎng)期記憶,因此使用自定義的tokenizer并且輸入是字符而不是單詞,所以不需要詞干化或輸出停用詞。輸入先到一個(gè)嵌入層,然后是兩個(gè)lstm層。為了避免過(guò)擬合,應(yīng)用dropout,然后是全連接層,最后采用log softmax。

class TextClassifier(nn.Module):
  def __init__(self, vocab_size, embed_size, lstm_size, dense_size, output_size, lstm_layers=2, dropout=0.1):
    """
    初始化模型
    """
    super().__init__()
    self.vocab_size = vocab_size
    self.embed_size = embed_size
    self.lstm_size = lstm_size
    self.dense_size = dense_size
    self.output_size = output_size
    self.lstm_layers = lstm_layers
    self.dropout = dropout

    self.embedding = nn.Embedding(vocab_size, embed_size)
    self.lstm = nn.LSTM(embed_size, lstm_size, lstm_layers, dropout=dropout, batch_first=False)
    self.dropout = nn.Dropout(dropout)

    if dense_size == 0:
      self.fc = nn.Linear(lstm_size, output_size)
    else:
      self.fc1 = nn.Linear(lstm_size, dense_size)
      self.fc2 = nn.Linear(dense_size, output_size)

    self.softmax = nn.LogSoftmax(dim=1)

def init_hidden(self, batch_size):
    """
    初始化隱藏狀態(tài)
    """
    weight = next(self.parameters()).data
    hidden = (weight.new(self.lstm_layers, batch_size, self.lstm_size).zero_(),
              weight.new(self.lstm_layers, batch_size, self.lstm_size).zero_())
    return hidden

def forward(self, nn_input_text, hidden_state):
    """
    在nn_input上執(zhí)行模型的前項(xiàng)傳播
    """
    batch_size = nn_input_text.size(0)
    nn_input_text = nn_input_text.long()
    embeds = self.embedding(nn_input_text)
    lstm_out, hidden_state = self.lstm(embeds, hidden_state)
    # 堆疊LSTM輸出,應(yīng)用dropout
    lstm_out = lstm_out[-1,:,:]
    lstm_out = self.dropout(lstm_out)
    # 全連接層
    if self.dense_size == 0:
      out = self.fc(lstm_out)
    else:
      dense_out = self.fc1(lstm_out)
      out = self.fc2(dense_out)
    # Softmax
    logps = self.softmax(out)

    return logps, hidden_state

作為替代,還嘗試了斯坦福大學(xué)的GloVe詞嵌入,這是一種無(wú)監(jiān)督的學(xué)習(xí)算法,用于獲取單詞的向量表示。在這里,用6百萬(wàn)個(gè)標(biāo)識(shí)、40萬(wàn)個(gè)詞匯和300維向量對(duì)Wikipedia和Gigawords進(jìn)行了預(yù)訓(xùn)練。在我們的詞匯表中,大約90%的單詞都是在這個(gè)GloVe里找到的,其余的都是隨機(jī)初始化的。

D、 BERT和ALBERT

我使用了Huggingface中的transformer實(shí)現(xiàn)BERT模型。現(xiàn)在他們提供了tokenizer和編碼器,可以生成文本id、pad掩碼和段id,可以直接在BertModel中使用,我們使用標(biāo)準(zhǔn)訓(xùn)練過(guò)程。

與LSTM模型類似,BERT的輸出隨后被傳遞到dropout,全連接層,然后應(yīng)用log softmax。如果沒(méi)有足夠的計(jì)算資源預(yù)算和足夠的數(shù)據(jù),從頭開始訓(xùn)練模型不是一個(gè)選擇,所以我使用了預(yù)訓(xùn)練的模型并進(jìn)行了微調(diào)。預(yù)訓(xùn)練的模型如下所示:

  • BERT:bert-base-uncased
  • ALBERT:albert-base-v2

預(yù)訓(xùn)練過(guò)的bert的訓(xùn)練過(guò)程如下所示。

tokenizer = BertTokenizer.from_pretrained('bert-base-uncased', do_lower_case=True)
model = BertForSequenceClassification.from_pretrained('bert-base-uncased', num_labels=3)

def train_bert(model, tokenizer)
  # 移動(dòng)模型到GUP/CPU設(shè)備
  device = 'cuda:0' if torch.cuda.is_available() else 'cpu'
  model = model.to(device)

  # 將數(shù)據(jù)加載到SimpleDataset(自定義數(shù)據(jù)集類)
  train_ds = SimpleDataset(x_train, y_train)
  valid_ds = SimpleDataset(x_valid, y_valid)

  # 使用DataLoader批量加載數(shù)據(jù)集中的數(shù)據(jù)
  train_loader = torch.utils.data.DataLoader(train_ds, batch_size=batch_size, shuffle=True)
  valid_loader = torch.utils.data.DataLoader(valid_ds, batch_size=batch_size, shuffle=False)

  # 優(yōu)化器和學(xué)習(xí)率衰減
  num_total_opt_steps = int(len(train_loader) * num_epochs)
  optimizer = AdamW_HF(model.parameters(), lr=learning_rate, correct_bias=False) 
  scheduler = get_linear_schedule_with_warmup(optimizer, num_warmup_steps=num_total_opt_steps*warm_up_proportion, num_training_steps=num_total_opt_steps)  # PyTorch scheduler

  # 訓(xùn)練
  model.train()

  # Tokenizer 參數(shù)
  param_tk = {
    'return_tensors': "pt",
    'padding': 'max_length',
    'max_length': max_seq_length,
    'add_special_tokens': True,
    'truncation': True
  }

  # 初始化
  best_f1 = 0.
  early_stop = 0
  train_losses = []
  valid_losses = []

  for epoch in tqdm(range(num_epochs), desc="Epoch"):
    # print('================     epoch {}     ==============='.format(epoch+1))
    train_loss = 0.

    for i, batch in enumerate(train_loader):
      # 傳輸?shù)皆O(shè)備
      x_train_bt, y_train_bt = batch
      x_train_bt = tokenizer(x_train_bt, **param_tk).to(device)
      y_train_bt = torch.tensor(y_train_bt, dtype=torch.long).to(device)

      # 重設(shè)梯度
      optimizer.zero_grad()

      # 前饋預(yù)測(cè)
      loss, logits = model(**x_train_bt, labels=y_train_bt)

      # 反向傳播
      loss.backward()

      # 損失
      train_loss += loss.item() / len(train_loader)

      # 梯度剪切
      torch.nn.utils.clip_grad_norm_(model.parameters(), max_grad_norm)

      # 更新權(quán)重和學(xué)習(xí)率
      optimizer.step()
      scheduler.step()

    train_losses.append(train_loss)

    # 評(píng)估模式
    model.eval()

    # 初始化
    val_loss = 0.
    y_valid_pred = np.zeros((len(y_valid), 3))

    with torch.no_grad():
      for i, batch in enumerate(valid_loader):
        # 傳輸?shù)皆O(shè)備
        x_valid_bt, y_valid_bt = batch
        x_valid_bt = tokenizer(x_valid_bt, **param_tk).to(device)
        y_valid_bt = torch.tensor(y_valid_bt, dtype=torch.long).to(device)
        loss, logits = model(**x_valid_bt, labels=y_valid_bt)
        val_loss += loss.item() / len(valid_loader)
    valid_losses.append(val_loss)

    # 計(jì)算指標(biāo)
    acc, f1 = metric(y_valid, np.argmax(y_valid_pred, axis=1))

    # 如果改進(jìn)了,保存模型。如果沒(méi)有,那就提前停止
    if best_f1 < f1:
      early_stop = 0
      best_f1 = f1
    else:
      early_stop += 1

    print('epoch: %d, train loss: %.4f, valid loss: %.4f, acc: %.4f, f1: %.4f, best_f1: %.4f, last lr: %.6f' %
          (epoch+1, train_loss, val_loss, acc, f1, best_f1, scheduler.get_last_lr()[0]))

    if device == 'cuda:0':
      torch.cuda.empty_cache()

    # 如果達(dá)到耐心數(shù),提前停止
    if early_stop >= patience:
      break

    # 返回訓(xùn)練模式
    model.train()
  return model

評(píng)估

首先,輸入數(shù)據(jù)以8:2分為訓(xùn)練組和測(cè)試集。測(cè)試集保持不變,直到所有參數(shù)都固定下來(lái),并且每個(gè)模型只使用一次。由于數(shù)據(jù)集不用于計(jì)算交叉集,因此驗(yàn)證集不用于計(jì)算。此外,為了克服數(shù)據(jù)集不平衡和數(shù)據(jù)集較小的問(wèn)題,采用分層K-Fold交叉驗(yàn)證進(jìn)行超參數(shù)整定。

金融市場(chǎng)中的NLP——情感分析

 

由于輸入數(shù)據(jù)不平衡,因此評(píng)估以F1分?jǐn)?shù)為基礎(chǔ),同時(shí)也參考了準(zhǔn)確性。

def metric(y_true, y_pred):
    acc = accuracy_score(y_true, y_pred)
    f1 = f1_score(y_true, y_pred, average='macro')
    return acc, f1

scoring = {'Accuracy': 'accuracy', 'F1': 'f1_macro'}
refit = 'F1'
kfold = StratifiedKFold(n_splits=5)

模型A和B使用網(wǎng)格搜索交叉驗(yàn)證,而C和D的深層神經(jīng)網(wǎng)絡(luò)模型使用自定義交叉驗(yàn)證。

# 分層KFold
skf = StratifiedKFold(n_splits=5, shuffle=True, random_state=rand_seed)

# 循環(huán)
for n_fold, (train_indices, valid_indices) in enumerate(skf.split(y_train, y_train)):
  # 模型
  model = BertForSequenceClassification.from_pretrained('bert-base-uncased', num_labels=3)

  # 輸入數(shù)據(jù)
  x_train_fold = x_train[train_indices]
  y_train_fold = y_train[train_indices]
  x_valid_fold = x_train[valid_indices]
  y_valid_fold = y_train[valid_indices]

  # 訓(xùn)練
  train_bert(model, x_train_fold, y_train_fold, x_valid_fold, y_valid_fold)

結(jié)果

基于BERT的微調(diào)模型在花費(fèi)了或多或少相似的超參數(shù)調(diào)整時(shí)間之后,明顯優(yōu)于其他模型。

金融市場(chǎng)中的NLP——情感分析

 

模型A表現(xiàn)不佳,因?yàn)檩斎脒^(guò)于簡(jiǎn)化為情感得分,情感分?jǐn)?shù)是判斷情緒的單一值,而隨機(jī)森林模型最終將大多數(shù)數(shù)據(jù)標(biāo)記為中性。簡(jiǎn)單的線性模型只需對(duì)情感評(píng)分應(yīng)用閾值就可以獲得更好的效果,但在準(zhǔn)確度和f1評(píng)分方面仍然很低。

金融市場(chǎng)中的NLP——情感分析

 


金融市場(chǎng)中的NLP——情感分析

 

我們沒(méi)有使用欠采樣/過(guò)采樣或SMOTE等方法來(lái)平衡輸入數(shù)據(jù),因?yàn)樗梢约m正這個(gè)問(wèn)題,但會(huì)偏離存在不平衡的實(shí)際情況。如果可以證明為每個(gè)要解決的問(wèn)題建立一個(gè)詞典的成本是合理的,這個(gè)模型的潛在改進(jìn)是建立一個(gè)自定義詞典,而不是L-M詞典。

模型B比前一個(gè)模型好得多,但是它以幾乎100%的準(zhǔn)確率和f1分?jǐn)?shù)擬合了訓(xùn)練集,但是沒(méi)有被泛化。我試圖降低模型的復(fù)雜度以避免過(guò)擬合,但最終在驗(yàn)證集中的得分較低。平衡數(shù)據(jù)可以幫助解決這個(gè)問(wèn)題或收集更多的數(shù)據(jù)。

金融市場(chǎng)中的NLP——情感分析

 


金融市場(chǎng)中的NLP——情感分析

 

模型C產(chǎn)生了與前一個(gè)模型相似的結(jié)果,但改進(jìn)不大。事實(shí)上,訓(xùn)練數(shù)據(jù)的數(shù)量不足以從零開始訓(xùn)練神經(jīng)網(wǎng)絡(luò),需要訓(xùn)練到多個(gè)epoch,這往往會(huì)過(guò)擬合。預(yù)訓(xùn)練的GloVe并不能改善結(jié)果。對(duì)后一種模型的一個(gè)可能的改進(jìn)是使用類似領(lǐng)域的大量文本(如10K、10Q財(cái)務(wù)報(bào)表)來(lái)訓(xùn)練GloVe,而不是使用維基百科中預(yù)訓(xùn)練過(guò)的模型。

金融市場(chǎng)中的NLP——情感分析

 

模型D在交叉驗(yàn)證和最終測(cè)試中的準(zhǔn)確率和f1分?jǐn)?shù)均達(dá)到90%以上。它正確地將負(fù)面文本分類為84%,而正面文本正確分類為94%,這可能是由于輸入的數(shù)量,但最好仔細(xì)觀察以進(jìn)一步提高性能。這表明,由于遷移學(xué)習(xí)和語(yǔ)言模型,預(yù)訓(xùn)練模型的微調(diào)在這個(gè)小數(shù)據(jù)集上表現(xiàn)良好。

金融市場(chǎng)中的NLP——情感分析

 


金融市場(chǎng)中的NLP——情感分析

 


金融市場(chǎng)中的NLP——情感分析

 

結(jié)論

這個(gè)實(shí)驗(yàn)展示了基于BERT的模型在我的領(lǐng)域中應(yīng)用的潛力,以前的模型沒(méi)有產(chǎn)生足夠的性能。然而,結(jié)果不是確定性的,如果調(diào)整下超參數(shù),結(jié)果可能會(huì)有所不同。

值得注意的是,在實(shí)際應(yīng)用中,獲取正確的輸入數(shù)據(jù)也相當(dāng)重要。沒(méi)有高質(zhì)量的數(shù)據(jù)(通常被稱為“垃圾輸入,垃圾輸出”)就不能很好地訓(xùn)練模型。

這里使用的所有代碼都可以在git repo中找到:https://github.com/yuki678/financial-phrase-bert

分享到:
標(biāo)簽:金融市場(chǎng) NLP
用戶無(wú)頭像

網(wǎng)友整理

注冊(cè)時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會(huì)員

趕快注冊(cè)賬號(hào),推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過(guò)答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫(kù),初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績(jī)?cè)u(píng)定2018-06-03

通用課目體育訓(xùn)練成績(jī)?cè)u(píng)定