深度學習@文本分析

Deep Learning for Text Analysis

王柳鋐

Last Updated: 2022/11/25

文本分析

Text Analysis

文本分析基本任務: 斷詞、詞性標記、實體辨識 

"我和順仔早上5點登上「福建號」"

我和<person>順仔</person>早上5點登上「<ship>福建號</ship>

斷詞(tagger)

(命名)實體辨識
name-entity-recognition

原文

我  和  順仔  早上  5點   登上   福建號

          r   c    nr        t        t         v        nr

詞性標記
part-of-speech

專業術語 + 分類

應用:索引、Hyperlink

資料來源:DocuSky 數位人文學術研究平臺:視覺化與統計分析,2020數位人文培訓營

文本分析統計應用文字雲 

統計單元:斷詞(實體辨識)的結果

中文文本分析開發工具 

中文文本分析開發工具2018之後

BERT

Bidirectional Encoder Representations from Transformers

中文文本分析開發工具2018之後 

斷詞、實體辨識的困難(1/2)

拜訪    普林斯    神學院    老同  學麥克  切斯  尼  先生    幾位  宣教  師 。 晚上 介紹 加拿大 , 哈巴  安德  醫師  翻譯

斷詞

困難: 斷詞錯誤    雜訊

"拜訪我普林斯頓(Princeton)神學院的老同學麥克切斯尼(McChesney)先生和幾位宣教師。晚上介紹加拿大,哈巴安德醫師翻譯。"

Icons made by Freepik from www.flaticon.com
Icons made by Eucalyp from www.flaticon.com

自訂辭典

停用字列表

普林斯頓

老同學

麥克切斯尼先生

哈巴安德醫師

宣教師

晚上

幾位

拜訪   普林斯  神學院    老同學   麥克切斯尼先生   宣教師 。 介紹 加拿大 , 哈巴安德醫師  翻譯

困難: 錯別字、同義詞(不同稱呼/不同翻譯)

Icons made by Eucalyp from www.flaticon.com

拜訪南勢番(南方的原住民),在包干李流(Li-lau),薄薄、斗蘭(Tau-lan)和七腳川拍了一些照片。

台灣堡圖

1904

我們拜訪流流、薄薄、里腦,又回到大社

問題:究竟是里腦,李流還是流流?

不同翻譯

回到五股坑,蔥仔在前往領事館費里德(A.Frater)先生那裡後和我們一起。

偕師母及閏虔益一起到五股坑,然後去洲裡,在晚上回來。

同義詞

專家

修正與建議

里漏社

自訂辭典

停用字列表

斷詞、實體辨識的困難(2/2)

文本分析任務

by Deep Learning

機器學習Process

訓練資料

❶¹ 前處理

🅐 訓練集

🅑 驗證集

🅒 測試集

❷ 訓練參數

決定最終預測模型

❸ 產生預測用模型

➍ 測試模型

特徵萃取

❶² 資料集分割

文本分析常見任務

情感分析(Sentiment Analysis)

負面評價Negative

這家店的售後服務完全不行

餐點還不錯啦,但是還有改進空間

中性評價neutral

中性評價neutral

正面評價positive

很讚喔,超喜歡你們家的產品

分類問題

情感分析

文本分析常見任務

編碼

輸入層

隱藏層

輸出層

輸出結果分類

真實

政治宣傳

惡搞

反諷

假新聞

帶風向

片面資訊

新聞分類

分類問題

文本分析常見任務

機器翻譯

迴歸問題

Transformer

輸入英文: milk drink I

輸出法文: Je bois du lait <eos>

編碼器

解碼器

編碼器輸出

 

解碼器輸入

<sos>: 開始符號

<eos>: 結束符號

文本分析常見任務

文本生成

輸入: 一句話

輸出: 一篇短文!

經過多個語言模型...

迴歸問題

文本生成預訓練模型GPT-3

96個Transformer解碼器

句子 ➠ 預測下一個字

Deep Learning 訓練參數量不斷增加

GPT-3: 175,000(175B)

MT-NLG: 530,000M(530B)

GLaM: 1,200,000M(1.2T)

17B

文本分析任務資料集問題

1. 訓練資料很難取得

文本分析任務資料集問題

遷移學習(transfer learning): 研究者可以專注於目標領域資料集

機器學習傳統做法

資料集1

資料集2

資料集3

任務1

任務2

任務3

Transfer Learning

來源領域任務

資料集S

來源領域知識

目標領域任務

大量

資料集T

小量

預訓練

兩階段

2. 需進行編碼: 

文本分析任務編碼問題

訓練模型擅長直接處理數值資料

[編碼方法1] One-hot encoding: 一字一編號

<SOS> I played the piano

1

2

3

4

5

6

7

8

編碼

輸入層

隱藏層

輸出層

以向量表示

編號

詞彙

<SOS>

編號

0     0      0      0      0      0      0      0  

文本分析任務編碼問題

One-hot encoding問題: 詞彙很多(資料稀疏)、編碼與語意無關...

dog

文本分析的詞彙很多

字詞編碼:向量很長、資料稀疏

 向量長度 =詞彙數量(10000)

one-hot encoding

文本分析任務編碼問題

One-hot encoding問題: 詞彙很多(資料稀疏)、編碼與語意無關...

one-hot encoding

字彙語意相近,不一定有比較近的「距離」

近?

遠?

Coffee跟Laptop的距離比Tea近?

文本分析任務編碼問題

[編碼方法2]: Word Embedding(詞嵌入)

字彙語意相近,編碼必須給予比較近的「距離」

文本分析任務編碼問題

[編碼方法2]: 常見的Word Embedding方法—Word2Vec

Word2Vec學習大量詞彙,將字詞對應到100-300維度的空間

100-300

Word Embedding

深度學習文字任務Word Embedding演算法

Word Embedding

詞彙

7D to 2D

7D to 2D

維度

Word2Vec

文本分析任務脈絡(context)

Word Embedding就是編碼問題的解答嗎?

千金散盡還復來

千金最近好嗎?

他向來一諾千金,說到做到

同樣的詞 會有相同的 詞嵌入

But...

同樣的詞,不同前後文,經常有不同意涵

脈絡(Context)的影響

Self-Attention, Transformers, BERT

RNN vs. Transformers模型

輸入:Anthony Hopkins admired Michaeal Bay as a great director.

RNN循環神經網路

詞嵌入

詞嵌入

詞嵌入

詞嵌入

詞嵌入

詞嵌入

依序

Transformer

平行

平行

平行

詞嵌入

詞嵌入

詞嵌入

詞嵌入

詞嵌入

詞嵌入

詞嵌入

詞嵌入

詞嵌入

特點1. Transformers架構可採用平行計算

RNN vs. Transformers模型

Vaswani et al., Attention is All You Need https://arxiv.org/abs/1706.03762

Transformers模型

自注意(self-attention)機制

Encoder

Decoder

Attention Layer

Attention Layer

Attention Layer

Attention Layer

Key

Query

Value

Attention Layer

Attention Layer

Key

Query

Value

輸入

答案

Attention Layer

Key

Query

Value

Attention Layer

範例計算

Self-Attention Layer

BERT使用Transformer's Encoder

Bidirectional Encoder Representations from Transformers

BERT fine-tunning

Ckip Transformers

Ckip Transformers安裝與使用

Ckip Transformers安裝與使用

使用方法ㄧ: 透過HuggingFace Transformers

圖片來源:Transformers, PyTorch, TensorFlow

pip install -U transformers

❶ 安裝transformers套件

❷ 安裝深度學習套件(擇一)

pip install -U torch
pip install -U tensorflow

* 後續以PyTorch為例

from ckip_transformers.nlp import CkipWordSegmenter, CkipPosTagger, CkipNerChunker
## 將斷詞結果words與 part-of-speech結果pos打包在一起
def pack_ws_pos_sentece(words, pos):
   assert len(words) == len(pos), f'words{len(words)}和pos{len(pos)}長度必須一樣'
   result = []   # 最終結果串列
   for word, p in zip(words, pos):  # zip將words,pos對應位置鏈在一起
      result.append(f"{word}({p})")
   return "\u3000".join(result)  #\u3000是全形空白字元

# Input text
text = [
   "華氏80度,氣壓30-6,整天下雨。前進到奇武荖,聆聽朗誦。然後珍珠里簡和冬瓜山,晚間在珍珠里簡的禮拜有一百五十人,拔了七十六顆牙。",
   "相當涼爽舒適,與阿華出去鄉間拜訪他的一位老朋友,是一位農人。我們被看見,認出來,且受排斥。遭到兩隻大黑狗攻擊,孩童吼叫,狂暴的辱罵。 我們回家,在吃過飯之後,我們比過去更勤奮的研讀各自的功課。",
   "華氏84度,陰天,氣壓30-10。上午七點離開大里簡,大部分都用走的,上午時點三十分來到頭城,拔了一些牙。十一點到打馬煙,我們剛到雨就來了。禮德醫師在路上幫一個傢伙縫手指。新漆好的禮拜堂到處都是用藍色和紅色漆,全部由他們自費花了十二元。禮德醫師拍團體照。我們照顧了十四名病人,還拔了一些牙。主持聖餐禮,聆聽十七個人背誦。大家都做得很好,我們發禮物給他們。"
   ]

ws_driver = CkipWordSegmenter(model="bert-base") # 載入 斷詞模型
pos_driver = CkipPosTagger(model="bert-base")    # 載入 POS模型
ner_driver = CkipNerChunker(model="bert-base")   # 載入 實體辨識模型
print('all loaded...')

# 執行pipeline 產生結果
ws = ws_driver(text)   # 斷詞
pos = pos_driver(ws)   # 詞性: 注意斷詞-詞性是依序完成
ner = ner_driver(text) # 實體辨識

##列印結果
for sentence, word, p, n in zip(text, ws, pos, ner):
    print(sentence)
    print(pack_ws_pos_sentece(word, p))
    for token in n:
        print(f"({token.idx[0]}, {token.idx[1]}, '{token.ner}', '{token.word}')")
    print()

華氏80度,氣壓30-6,整天下雨。前進到奇武荖,聆聽朗誦。然後珍珠里簡和冬瓜山,晚間在珍珠里簡的禮拜有一百五十人,拔了七十六顆牙。


華氏(Na) 80(Neu) 度(Nf) ,(COMMACATEGORY) 氣壓(Na) 30-6(Neu) ,(COMMACATEGORY) 整(Neqa) 天(Nf) 下雨(VA) 。(PERIODCATEGORY) 前進(VA) 到(P) 奇武荖(Nc) ,(COMMACATEGORY) 聆聽(VC) 朗誦(VC) 。(PERIODCATEGORY) 然後(D) 珍珠里簡(Na) 和(Caa) 冬瓜山(Nc) ,(COMMACATEGORY) 晚間(Nd) 在(P) 珍珠里簡(Nc) 的(DE) 禮拜(Na) 有(V_2) 一百五十(Neu) 人(Na) ,(COMMACATEGORY) 拔(VC) 了(Di) 七十六(Neu) 顆(Nf) 牙(Na) 。(PERIODCATEGORY)


(0, 5, 'QUANTITY', '華氏80度')
(8, 12, 'QUANTITY', '30-6')
(37, 40, 'LOC', '冬瓜山')
(41, 43, 'TIME', '晚間')
(52, 56, 'CARDINAL', '一百五十')
(60, 63, 'CARDINAL', '七十六')

實體辨識

11類專有名詞

7類數量詞

Part-of-Speech(POS)

61種詞性

華氏80度,氣壓30-6,整天下雨。前進到奇武荖,聆聽朗誦。然後珍珠里簡和冬瓜山,晚間在珍珠里簡的禮拜有一百五十人,拔了七十六顆牙。


華氏(Na) 80(Neu) 度(Nf) ,(COMMACATEGORY) 氣壓(Na) 30-6(Neu) ,(COMMACATEGORY) 整(Neqa) 天(Nf) 下雨(VA) 。(PERIODCATEGORY) 前進(VA) 到(P) 奇武荖(Nc) ,(COMMACATEGORY) 聆聽(VC) 朗誦(VC) 。(PERIODCATEGORY) 然後(D) 珍珠里簡(Na) 和(Caa) 冬瓜山(Nc) ,(COMMACATEGORY) 晚間(Nd) 在(P) 珍珠里簡(Nc) 的(DE) 禮拜(Na) 有(V_2) 一百五十(Neu) 人(Na) ,(COMMACATEGORY) 拔(VC) 了(Di) 七十六(Neu) 顆(Nf) 牙(Na) 。(PERIODCATEGORY)


(0, 5, 'QUANTITY', '華氏80度')
(8, 12, 'QUANTITY', '30-6')
(37, 40, 'LOC', '冬瓜山')
(41, 43, 'TIME', '晚間')
(52, 56, 'CARDINAL', '一百五十')
(60, 63, 'CARDINAL', '七十六')

只辨識出1個實體

且分類錯誤

應為GPE

3個地名,共出現四次

珍珠里簡: 不同詞性?

Na:普通名詞,Nc: 地方詞

BERT模型fine-tuning

新增classifier layer

fine-tuned(微調)

訓練下游任務資料集

下游任務: 每個字賦予一個類別

從頭訓練

1. 準備文本資料(下游任務資料集)
InputEample 轉換成 Bert 相容的格式
定義Bert 的訓練和預測 function
實際 fine-tune Bert 來執行分類任務

BERT模型fine-tuning

文字分類任務-111微課程之二

By Leuo-Hong Wang

文字分類任務-111微課程之二

  • 497