# Polarity Analysis for Sentiment Classification

## Stop Word List

This stopword list is probably the most widely used stopword list. It covers a wide number of stopwords without getting too aggressive and including too many words which a user might search upon. This wordlist contains only 11 words.

## How To Decide K-top

### Improve

#### Combine Classifier

• LM_POS : if LM.classify(x) = POS, then LM_POS = 1. Otherwise LM_POS = 0
• LM_NEG : if LM.classify(x) = NEG, then LM_NEG = 1. Otherwise LM_POS = 0
• WINNOW_POS : if Winnow.classify(x) = POS, the WINNOW_POS = Winnow.strongClassify(x).
• WINNOW_NEG : if Winnow.classify(x) = NEG, the WINNOW_NEG = Winnow.strongClassify(x).

strongClassify(x) 從 training data 中得到 h(x) 的出現的最大值，然後根據將判斷的函數大小得到，strongClassify(x) = h(x) / TRAINING_MAX_H_VALUE，之所以不直接使用 strongClassify(x) = h(x) 是因為很容易造成 overflow 或者是過度的調整判斷。在實驗結果後，將後者公式調整為前者所使用的。

#### N-grams Score

$\chi^{2}(t, c) = \frac{N \times (AD - CB)^{2} }{(A+C)\times (B + D) \times (A + B) \times (C + D)} \times Weight[t.getSize()] \times Score(t)$

#### Vector

$vector[i] = Score(ngrams(i)) + \sqrt{n-grams(i) \text{ appear times}}$

## extra data support

• AFINN-111.txt
• positive word list (ignore) 毫無幫助
• negative word list (ignore) 毫無幫助
• negation not (ignore) 目前發現只會更糟糕

# 程式撰寫

## N-grams Storing

stringinteger 標記。

## Pseudocode

### Support N-grams Sieve

• AFINN-111.txt
The file AFINN-111.txt contains a list of sentiment scores
• Stop word list
Small set, |S| < 20
• Synonymous “Not” list
unused
• Abbreviation list
Rule, |R| < 10
• No CRF, No Parsing tree, No Subjective filter

# To Do

Training Classifier with 5000 subjective and 5000 objective processed sentences.

http://www.cs.cornell.edu/People/pabo/movie-review-data/

# 分類器

## 類神經網路

### Passive-Aggressive Algorithm

\begin{align} & \text{INITIALIZE : } w_{1} = (0 ... 0) \text{ as parameters of the classifier} \\ & \text{For } t = 1, 2, ... \\ & \text{receive instance : } x_{t} \in R^{n} \\ & \text{predict : } \hat{y_{t}} = sign(w_{t}, x_{t}) \\ & \text{receive correct label : } y_{t} \in {-1, +1} \\ & \text{suffer loss : } l_{t} = max\left \{ 0, 1 - y_{t}(w_{t} \cdot x_{t}) \right \} \\ & \text{update-1: set : } \tau_{t} = \frac{l_{t}}{\left \| x_{t} \right \|^{2}} \\ & \text{update-2: update : } w_{t+1} = w_{t} + \tau_{t} y_{t} x_{t} \end{align}

## 自然語言

### Language Modeling

\begin{align} P(s) = \prod_{i = 1}^{l} P(w_{i}|w_{1}^{i-1}) \end{align}

## 機器學習

### Winnow algorithm

$h(x) = \sum_{w \in V}^{} f_{w}c_{w}(x)$ $f_{w}$ 是需要調整的參數$c_{w}(x)$ 為資料在每一個特徵的權重向量，運算內積值為$h(x)$

\begin{align} & \text{Initialize all } f_{w} \text{ to 1.} \\ & \text{For each labeled revies x in the training set : } \\ & \text{Step 1. Calculate } h(x) \\ & \text{Step 2-1. If the revies is positive but Winnow predicts it as negative } \\ & h(x) < V \text{ , update the weight} f_{w} \text{ where } c_{w}(x) = 1 \text{ by } f'_{w} = f_{w} \times 2 \\ & \text{Step 2-2. If the revies is negative but Winnow predicts it as positive } \\ & h(x) > V \text{ , update the weight} f_{w} \text{ where } c_{w}(x) = 1 \text{ by } f'_{w} = f_{w} / 2 \\ \end{align}

# 調和

• A：同一分類下，該屬性使用的資料筆數
• B：在其他分類下，該屬性被使用的資料筆數
• C：同一分類下，該屬性不使用的資料筆數
• D：在其他分類下，該屬性不被使用的資料筆數
• t：屬性
• c：分類
\begin{align} x^{2}(t, c) = \frac{N \times (AD - CB)^{2} }{(A+C)\times (B + D) \times (A + B) \times (C + D)} \end{align}

# 自然語言處理 論文研讀 1

## Introduction

• high order n-grams
• 複合形容詞，例如 happy 被視為正，而 terrible 視為負面。
• 詞彙的相依關係
• 來自於中立文件中所描述的詞組

… 本文略

# 自然語言處理 - HW02

Dev-C++ 5.6.3

## 作業內容

• 準確度：接近正確答案的機率，在這裡可以理解為分類出來的結果等於實際結果的機率。
• 精準度：測試結果一致的機率，在這裡可以理解為分類出來的結果中，實際上是正確的機率。(是否集中於某個實際結果)

$F = \frac{1}{\alpha \frac{1}{P} + (1 - \alpha) \frac{1}{R}} = \frac{(\beta^{2} + 1) PR}{\beta^{2}P+R}$

• gold_standard.xml ： 黃金標準的 5000 筆評論
• test_outcome.xml ：原本認為是 測試用的反饋資料，用來檢測寫的分類器好不好。 後更正為助教的分類器跑出來的結果。

$$P(c) = \frac{N_{c}}{N} \\ P(w|c) = \frac{count(w,c)+1}{count(c)+|V|} \\ P(c|s) = P(c) \prod P(w_{i}|c)$$

$P(c)$ 表示該分類佔有群體的機率，也就是在 5000 筆評論中，分類 c 佔有百分比$N_{c}$ 表示有多少筆評論屬於 c 分類$N$ 表示評論筆數，這裡已知$N = 5000$ $P(w|c)$ 單詞 w 在分類 c 的出現機率為何$count(w,c)$ 單詞 w 在分類 c 中出現的次數$count(c)$ 屬於 c 分類中字詞總數 (評論總共有多少字)$|V|$ 分類 c 中使用的單詞集合大小。
*$P(c|s)$ 評論句子 s 在分類 c 的機率為何。

Truth no true negative(TN) false positive(FP)
Truth yes false negative(FN) true positive(TP)

## 代碼

• 真陽性 (TP, true positive)
正確的肯定。又稱：命中 (hit)
• 真陰性 (TN, true negative)
正確的否定。又稱：正確拒絕 (correct rejection)
• 偽陽性 (FP, false positive)
錯誤的肯定，又稱：假警報 (false alarm)，第一型錯誤
• 偽陰性 (FN, false negative)
錯誤的否定，又稱：未命中 (miss)，第二型錯誤

# 自然語言處理 - HW01

Dev-C++ 5.6.3

## Language model implementation

$$P(w_{i}) = \frac{Count(w_{i})}{\sum_{j} Count(w_{j})} \\ P(w_{i}, w_{i+1}) = \frac{Count(w_{i}, w_{i+1})}{\sum_{j} Count(w_{j}, w_{j+1})} \\ P(w_{i+1}|w_{i}) = \frac{P(w_{i}, w_{i+1})}{P(w_{i})}$$

• P(A)是A的先驗機率或邊緣機率。之所以稱為”先驗”是因為它不考慮任何B方面的因素。
• P(A|B)是已知B發生後A的條件機率，也由於得自B的取值而被稱作A的後驗機率。
• P(B|A)是已知A發生後B的條件機率，也由於得自A的取值而被稱作B的後驗機率。
• P(B)是B的先驗機率或邊緣機率，也作標准化常量（normalizing constant）.
$P(s) = P(w_{0}) \times P(w_{1}|w_{0}) \times ... \times P(w_{n-1}|w_{n-2})$

$$\begin{cases} Count^{*}(w_{i}) = (Count(w_{i})+1) \times \frac{N_{Count(w_{i})+1}}{N_{Count(w_{i})}} & \text{ if } Count(w_{i}) < k \\ Count^{*}(w_{i}) = Count(w_{i}) & \text{ if } Count(w_{i}) \geq k \end{cases} \\ \text{unigram } N_{0} = 80000$$

$$\begin{cases} Count^{*}(w_{i}, w_{i+1}) = (Count(w_{i}, w_{i+1})+1) \times \frac{N_{Count(w_{i}, w_{i+1})+1}}{N_{Count(w_{i}, w_{i+1})}} & \text{ if } Count(w_{i}, w_{i+1}) < k \\ Count^{*}(w_{i}, w_{i+1}) = Count(w_{i}, w_{i+1}) & \text{ if } Count(w_{i}, w_{i+1}) \geq k \end{cases} \\ \text{bigram } N_{0} = 80000 \times 80000$$

$$\begin{cases} P(w_{i}) = \frac{N_{1}}{N} & \text{ if } Count(w_{i}) = 0 \\ P(w_{i}) = \frac{Count^{*}(w_{i})}{N} & \text{ if } Count(w_{i}) < K \\ P(w_{i}) = \frac{Count(w_{i})}{N} & \text{ if } Count(w_{i}) \geq K \end{cases}$$ $$\begin{cases} P(w_{i}, w_{i+1}) = \frac{Count^{*}(w_{i}, w_{i+1})}{N} & \text{ if } Count(w_{i}, w_{i+1}) < K \\ P(w_{i}, w_{i+1}) = \frac{Count(w_{i}, w_{i+1})}{N} & \text{ if } Count(w_{i}, w_{i+1}) \geq K \end{cases}$$

## 實作細節

• 公式都已經給定，基本上麻煩就是在於資料紀錄而已，其他就照著流程跑。
• 雖然沒有規定語言，以下代碼在 Dev-C++ 下編過，別問 VS 到底行不行。