文章

AI 第19天:自然語言處理基礎(NLP)

自然語言處理(NLP)是人工智慧中的重要領域,主要研究如何讓機器理解、解釋和生成人類語言。今天,我們將學習 NLP 的基本概念與應用,並實作簡單的文字處理範例。


課程目標

  1. 瞭解 NLP 的核心概念與應用場景。
  2. 學習文字前處理技術(如分詞、去除停用詞、詞幹化)。
  3. 使用 Python 實作基本 NLP 操作。

課程內容

1. NLP 的核心概念

1.1 NLP 是什麼?

NLP 是一門結合語言學與計算機科學的技術,讓機器能理解和生成人類語言。

1.2 NLP 的應用場景

  • 機器翻譯:Google 翻譯、DeepL。
  • 情感分析:分析文本中情感(正面、負面、中立)。
  • 語音助手:如 Siri、Alexa 等。
  • 文本摘要:提取長文的核心內容。

2. 基本的 NLP 操作

2.1 文字前處理流程

在進行 NLP 任務前,通常需要對文本進行清理與標準化,包括以下步驟:

  1. 文字正規化:將文字轉為小寫,去除標點符號。
  2. 分詞(Tokenization):將文本拆分成單詞或句子。
  3. 去除停用詞(Stopwords Removal):移除如 “the”、”is” 等無意義詞語。
  4. 詞幹化與詞形還原(Stemming & Lemmatization):將單詞還原為其基本形式。

3. 使用 NLTK 庫進行 NLP 操作

NLTK(Natural Language Toolkit)是 Python 中最流行的 NLP 庫之一,提供多種文字處理功能。

3.1 基本文字處理範例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import nltk
from nltk.tokenize import word_tokenize, sent_tokenize
from nltk.corpus import stopwords
from nltk.stem import PorterStemmer, WordNetLemmatizer

# 確保下載必要的資源
nltk.download('punkt')
nltk.download('stopwords')
nltk.download('wordnet')

# 範例文本
text = "Natural Language Processing is a fascinating field of artificial intelligence."

# 文字正規化(轉小寫)
text = text.lower()

# 分詞(Tokenization)
words = word_tokenize(text)
print("分詞結果:", words)

# 去除停用詞
stop_words = set(stopwords.words('english'))
filtered_words = [word for word in words if word not in stop_words]
print("去除停用詞:", filtered_words)

# 詞幹化(Stemming)
stemmer = PorterStemmer()
stemmed_words = [stemmer.stem(word) for word in filtered_words]
print("詞幹化結果:", stemmed_words)

# 詞形還原(Lemmatization)
lemmatizer = WordNetLemmatizer()
lemmatized_words = [lemmatizer.lemmatize(word) for word in filtered_words]
print("詞形還原結果:", lemmatized_words)

4. 簡單的 NLP 應用:情感分析

情感分析是一個常見的 NLP 任務,用於判斷文本中的情緒傾向。

4.1 使用 TextBlob 進行情感分析

TextBlob 是一個簡單易用的 NLP 庫,適合快速原型設計。

1
2
3
4
5
6
7
8
9
10
11
from textblob import TextBlob

# 範例文本
text = "I love natural language processing. It's amazing and fun to learn."

# 建立 TextBlob 物件
blob = TextBlob(text)

# 情感分析
print("情感分數:", blob.sentiment.polarity)
print("主觀性分數:", blob.sentiment.subjectivity)

5. 深入學習 NLP 的工具與資源

  1. 進階 NLP 庫
    • Spacy:高效能 NLP 工具,適合大規模文本處理。
    • Hugging Face Transformers:深度學習 NLP 模型的領導者,支援 BERT、GPT 等。
  2. 數據集資源
    • IMDB:用於情感分析的電影評論數據集。
    • TREC:用於問題分類的數據集。

課後作業

  1. 嘗試將以上範例中的文本替換為其他內容,觀察結果差異。
  2. 使用 Spacy 的命名實體識別(NER)功能,分析文本中的人名、地點等資訊。
  3. 搜尋開源 NLP 數據集,嘗試進行初步分析。

本文章以 CC BY 4.0 授權