---
# System prepended metadata

title: NLP技術之文字表示法 - 1 (NLP 技術*3 + BOW)
tags: [NLP]

---

---
title: 'NLP技術之文字表示法 - 1 (NLP 技術*3 + BOW)'
tags: NLP
---

NLP技術之文字表示法 - 1 (NLP 技術*3 + BOW)
===

## Table of Contents

[TOC]

## 學習目標
* NLP 技術：
    * Word segmentation (斷詞)
    * Part of speech tagging (POS)(詞性標註)
    * Stemming

---

自然語言處理技術
---

1. ==Word segmentation (斷詞)==
2. Part of speech tagging (POS)(詞性標註)
3. ==Stemming==
4. Syntactic Parsing (句法分析)
5. Named entity recognition (命名實體識別)
6. Co-reference resolution (共同引用解析)
7. Text categorization (文本分類)



### ==1. Word segmentation (斷詞)==

* 中文、日文...等少數語言才需要
    * 字與字之間沒有明顯的分界
* 中文的斷詞工具
    1. [Jieba](https://github.com/fxsjy/jieba)
        * 中國研發，支援繁體分詞
    2. [CKIP(Sinica)](http://ckipsvr.iis.sinica.edu.tw)
        * 台灣中研院研發，目前沒有可大量使用的API
    3. 其他相關的統計方法
        * 較不會被斷詞工具裡的詞彙綁住

### ==2. POS tagging (詞性標註)==

* 透過文本分析，幫每個詞做詞性標註。
    * `名詞`(N)、`形容詞`(A)、`動詞`(V)、`URL`(U)...
* 標註方式可以有很多種，也會有==不同種類的標註集==。
    * 不同的詞性標註工具，有==不同的標註方式==，依據不同的應用領域而定。
        * 詞性分的細：詞句更精準、切成更小的單位
        * 詞性分的粗：句子重組時，歸類可能會混淆
    
    ![](https://i.imgur.com/NP9pb4H.png)


### ==3. Stemmer==

* 將經過變化的字，==簡化到其字根或原型的狀態==。
    > Ex: toys -> toy 
    > [Porter Stemmer](http://textanalysisonline.com/nltk-porter-stemmer) 
    
* 緣起：因為在不同的語言之下，其變形的方式更多種，甚至比英文更複雜(`-s` `-ed`...)，不方便用字典的方式將字詞都記錄下來。
    * 希望把變形都集合起來 => 利用 `Stemmer`
        > 西班牙文：`跑步` 18種變形
        > ![](https://i.imgur.com/R1m2oBj.png =160x300)

* 優點：字詞頻率的統計更正確！
* 缺點：尚未回到原型的狀態。
    * Ex: poised -> pois ~~poise~~ ； large -> larg
        ![](https://i.imgur.com/CwkVk9F.png)

* 並非所有資料都需要Porter Stemming。
    * Ex: 醫學，因為差了一個`s`意義可能完全不同。

:::info
## ==1 & 2 & 3 為了知道NLP的`字詞如何表示`！==

* NLP最常見的表示法：
    * 向量表示法 (Bag of Words, BOW)
:::

---

向量表示法 (Bag of Words, BOW)
---

* 用`字詞向量`來表示文章
    * `字詞`：基本概念 -> 描述事物的關鍵字。
        * Ex: `Bag` `Word`...
    * 每一個字詞都是向量中的其中一個維度
        * 向量裡的每一個維度，都是一個Bag of Words(一袋的字)。
        * `Bag of Words (一袋的字)` 想像成裡面可能有 `一個字`、`兩個字`... ==N-gram== 放進袋子裡。 
    * 向量中的每一個數值代表：該字詞在向量中的==重要程度==

```gherkin=
> 字詞的順序並不重要

  # 維度
  "我" "欠" "你" "一個人情" -> 4個維度

  # 每一個字詞，都只出現一次
  "我 欠 你 一個人情" = "你 欠 我 一個人情"
  [1, 1, 1, 1]      = [ 1, 1, 1, 1]          

> 通常每個向量可能會有多個字詞組成(N-gram features)

  # N = 1    "我" "欠" "你" "一" "個" "人" "情"
  # N = 2    "我欠" "欠你" "你一" "一個" "個人" "人情" 
  # N = 3    "我欠你" "欠你一" "你一個" "一個人" "個人情"
```

* 一個句子，可以有多種字詞組合。
    * ==這些`字詞組合`，都要`放在向量裡面`嗎？== 並不是！
    * 我們只需要取`重要的字詞`即可！
        
---

詞頻以及反向文件頻率(TFIDF)
---

* 目的：
    * ==取出重要的字詞！==
* `字詞的重要性`可以 ==從該字詞在`文本中的頻率推估`==。
    * 詞頻(Term frequency)：`TF(d,t)`
        * 該字詞在 文件`d` 中出現的 次數`t`
    * 反向文件頻率(TFIDF)：`IDF(t)`
        * 將常常在大部份的文件都出現過的字詞扣分
        * Ex: `的` `是`... 

    :::info
    ### TFIDF 舉例

    ![](https://i.imgur.com/AbOSyxN.png)

    * `股市` `中國`，何種字詞比較重要？
        * `中國` 重要！
        * 因為`中國` 出現次數多，且沒有出現在所有文章中，故足以代表其與其他文件間的差別。
    * `股市`：
        * TF = 4 (3篇文章內，共出現4次)
        * DF = 3 (出現在3篇文章內)
    * `中國`：
        * TF = 5 (3篇文章內，共出現5次)
        * DF = 2 (出現在2篇文章內)
    * ==$idf_{i} = { log\left( \frac{N}{df_{i}} \ + 1 \right) }$==
    :::

### 詞頻(TF) 正規化

* 目的：
    * ==確保詞頻不會因為`文本的長短`，而`影響字詞的重要性`。==
* 問題：
    * 當文本數量愈來愈多時，有些代表詞可能會出現非常多次，有些則很少次。若今天有兩種不同的文本，一個文本很長，另一個文本很短。
    * 對於長文本而言，其字詞可能會比較重要，因為其字詞出現的次數必定比短文本還要多。 => 我們不希望此情況發生！

* `詞頻正規化` 基本原則：讓 $tf_{ij}$ 是介於 0 和 1 之間的數值
* $n_{ij}$ 代表 `詞`$t_{i}$ 出現在 `文件`$d_{j}$ 的次數
* $tf_{ij}$ 是經過正規化後的數字
    * $tf_{ij} = {n_{ij} \over NormalizedValue}$
    * $NormalizedValue$ 的選擇，與應用領域、資料集有關。$NormalizedValue$ 可以是：
      1. 所有字詞出現的總次數
      2. 最大的字詞出現次數
      3. 其他可以讓 $tf_{ij}$ 介於 0 和 1 之間的數值
      * 方法：$BM25^*： tf_{ij} = { n_{ij} \times (k + 1) \over n_{ij} + k }$ -> 效果不錯！




### 反向文件頻率(IDF)

* 目的：
    * ==IDF將常常在`大部分的文件都出現過`的字詞扣分。==
* 舉例：
    * 冠詞或連接詞(the, a, of, to, and...)可能會大量出現在文本中，但在大部分的情況下並不重要。
        * ==Stop words(停用詞)==

* ==$idf_{i} = { log\left( \frac{N}{df_{i}} \ + 1 \right) }$==
    * $df_{i}$：`字詞` $t_{i}$ 出現的文件頻率
    * 使用 $log$ 來轉換`出現次數非常高的情況`
        * 線性轉換，希望差距變小。(為了將數值==收斂==，方便比較)

* IDF可以被反向分類頻率替換，或是其他的概念
    * TFIDF是從`Information Retrieval`的Search Engine概念而來。
    * `IDF`的使用時機：
        * 找文件
        * 不希望把`所有`文件找出來，而是希望找出`最重要的幾個文件`。
    * `IPF`的使用時機：
        * 找段落
        * 反向段落頻率(IPF)替換之。
* 理論上，TF 和 IDF 應具有相等的效力。
    * 若TF的數值極多，IDF的數值極少，效果不好。

---

BOW向量
---

![](https://i.imgur.com/yRb5F6h.png)

* 不需要用到AI的技術，`TDIDF + BOW` 仍然有非常好的表現
* 非常好的比較基準點

---
* ##### tags: `NLP技術之文字表示法 - 1 (NLP 技術*3 + BOW)`
* [英文自然語言處理基礎](https://ithelp.ithome.com.tw/articles/10191922)