iT邦幫忙

2023 iThome 鐵人賽

DAY 8
0
AI & Data

用R語言玩轉文字探勘系列 第 8

[Day 8] 以R語言分詞 - 概念篇

  • 分享至 

  • xImage
  •  

分詞

分詞介紹

在現今的資訊時代,文字資料無所不在,從社交媒體、新聞報導到學術研究,文字都是我們最主要的資訊來源。然而,要讓電腦能夠理解並處理這些文字資料,我們首先必須將其分割成更小、更結構化的單位,這就是所謂的「分詞」。

為什麼要分詞呢?因為單純的文字通常是非常不結構化的,而這對於資料分析或是電腦處理來說,是個巨大的挑戰。這時,分詞的角色就變得尤為重要。

詳細一點解釋,文本資料並不像數字或表格,它沒有固定的格式或結構。透過分詞,我們可以將這些文本資料轉換成一種更結構化的形式,使其更容易被分析和處理。例如,一篇文章可以被分割成句子,句子又可以被分割成單詞或詞組。這樣的層次結構,使我們能夠更深入地了解文本資料的內容和結構。

從人的觀點來看,分詞後的文本資料更易於閱讀和理解。而從機器的角度,分詞讓文本資料更容易被處理和分析。例如,當我們想要計算某個單詞在文本中出現的頻率,或是想要了解哪些單詞常常一起出現時,分詞就成了首要的步驟。此外,許多自然語言處理的技術,如文字雲、情感分析或主題模型,都需要先進行分詞。

分詞,英文稱作「Tokenization」,指的是將長文字或句子分割成單詞、詞組或其他有意義的單位的過程。例如,句子「我愛台灣」經過分詞後,可能會被分割成「我」、「愛」和「台灣」三個單詞。

自然語言處理是電腦科學和人工智慧領域中,專注於讓電腦能夠理解和生成人類語言的一門學科。而分詞是自然語言處理的基礎步驟之一。只有當我們將文字資料分割成單詞或詞組,電腦才能更有效地進行語法分析、情感分析、機器翻譯等高階任務。因此,分詞在自然語言處理中擔任著不可或缺的角色。

分詞方法

基於規則的分詞

這種方法主要依賴語言學的規則來進行分詞。例如,中文中的「,」和「。」常常用來分隔句子,而英文則可能使用空格來分隔單詞,這種差異就是不同語言中的單字、句子成形規則不同,我自己當然是最熟英文跟中文,其他語言沒有涉獵就不敢亂講太多。

通常,基於規則的分詞會有一套預先定義的規則,並按照這些規則來分割文本。雖然這種方法相對簡單,但可能不適合所有的文本或語言,特別是當文本中存在大量俚語、新詞或縮寫時。像是幾年前流行的藍瘦香菇、無言薯條,就要整句一起看,要不然統計發現欸怎麼一堆香菇?這樣其實沒有真正捕捉到意義。

基於統計的分詞

這種方法主要是透過分析大量的文本資料,來了解哪些詞組或單詞常常一起出現。透過這些統計資料,可以推測出可能的詞組邊界。例如,「中信兄弟」這個詞組在許多文本中經常一起出現,所以系統可能會將其識別為一個詞組,而不是分開為「中信」和「兄弟」。這種方法特別適用於那些沒有固定語法規則或大量新詞的語言。

混合型的分詞

混合型分詞結合了基於規則和統計的方法,旨在充分利用兩種方法的優點。它可能首先使用規則進行初步的分詞,然後再使用統計方法進行微調,或者反之。這種方法旨在提供更高的準確率和適應性,特別是在面對多變和複雜的文本資料時。

分詞流程

分詞流程牽涉到的不只有利用規則和統計分詞而已,若在預處理上(pre-processing)上多下功夫,將可以大幅提升分詞品質;分詞後也可以適當篩選結果,這樣一來,將分詞結果應用到後續分析時,也能提取更多洞見。

我們同樣運用總統演說的資料,來展示分詞流程!

library(tidytext)
library(tidyverse)
df_speech_clean <- read_csv("data/df_speech_clean.csv")
df_speech_clean %>% glimpse()

## Rows: 24
## Columns: 5
## $ id        <dbl> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24
## $ text      <chr> "大會主席、各位貴賓、各位親愛的父老兄弟姐妹:\n今天是中華民國八十六年國慶日,海內外同胞用熱烈…
## $ title     <chr> "總統蒞臨中華民國八十六年國慶大會致詞", "總統蒞臨中華民國八十七年國慶大會致詞", "總統蒞臨中華…
## $ date      <date> 1997-10-15, 1998-10-14, 1999-10-13, 2000-10-18, 2001-10-17, 2002-10-16, 2003-10-15, 2004-10-13…
## $ president <chr> "李登輝", "李登輝", "李登輝", "陳水扁", "陳水扁", "陳水扁", "陳水扁", "陳水扁", "陳水扁", "陳…

df_speech_sample <- df_speech_clean %>% select(text) %>% head(1)

分詞之前

以中文和英文語料來說,至少會有這些任務:

  • 繁體轉簡體:有些分詞引擎專門針對繁/簡體中文訓練,因此最好先轉換。
  • 大寫轉小寫:這個以英文為主,確保分詞後得到的詞彙是一致的。
  • 去除標點符號和數字:若語料規模巨大,預先篩掉後可以省下不少時間,但中文斷詞不一定要。
  • 去除或替換特定詞彙:例如網址、電子郵件地址等,可能會影響分詞結果。
  • 處理空白和縮寫:避免不必要的空白和縮寫,這都能確保分詞的一致性。
  • 編碼轉換:有些語料混雜不同編碼,在分詞前要先完成轉換。
  • 處理HTML/XML標記:有時候爬蟲時下載整包原始碼,文本就會不夠乾淨。
  • 去除非文字字元:以語音轉文字的逐字稿來說,可能有音樂或者笑聲標記。
  • 標準化:確保語料中用法一致,替換特定詞彙如台灣變成臺灣、“u”替換為”you”。
  • 去除或處理特殊字元和符號:如@、#、$等。

這些步驟主要會用stringr搭配dplyr完成任務。

分詞之後

  • 去除停用詞(stopwords):詞彙被分出後,可以直接串停用詞再刪掉。
  • 詞幹提取和詞形還原:英文語料中常見,例如將名詞複數、過去式/第三人稱單數動詞還原。
  • 處理n-gram:考慮單詞的相對順序與共同出現次數,可以在分詞時便指定,也可於分詞後計算。
  • 去除頻率過高或過低的詞:統計上太過罕見的詞可能對分析沒有幫助,甚至讓文本變得太過稀疏。
  • 詞袋模型(BoW)或詞向量:將單詞轉換為數字表示。

上一篇
[Day 7] R語言中的字串資料、路徑與編碼
下一篇
[Day 9] 以R語言分詞 - 預處理 & 使用 tidytext
系列文
用R語言玩轉文字探勘30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言