文字資料預處理:可能需要關注這些點

2023-01-31 15:02:02

本文關鍵詞:文字資料預處理、中文文字預處理、自然語言處理

摘要: 要進行自然語言處理相關工作,文字資料預處理是個必不可少的過程。本文將對文字資料預處理相關的內容進行歸納整理,主要包括以下4個方面內容:

  • 文字資料獲取
  • 常規文字資料預處理
  • 任務相關的文字資料預處理
  • 文字預處理工具

1、文字資料獲取

「巧婦難為無米之炊」,要做文字資料處理,首先需要獲得文字資料。對於此問題,大家可以「八仙過海,各顯神通」,藉助一切合法、合理方式收集資料集。一般的,可以通過:自有資料整理、公開資料爬取和開源資料參照三個渠道獲取資料。

  • 自有資料:收集整理自有或者組織內部的可用資料集。

  • 爬取資料:爬蟲是獲取資料的重要手段,但是在執行該操作前需遵守相關法規和Robots協定,在爬取資料後合法應用資料。通常,可以通過requests、BeautifulSoup4和Selenium等python工具完成絕大多數爬取任務。


圖片豆瓣電影評論爬取可參考:
https://www.cnblogs.com/fengxi177/p/16939376.html


  • 開源資料:當前已有很多公開的NLP資料集支撐相關的研究和應用分析,如github專案:
專案名 專案連結 專案概述
CLUEDatasetSearch https://github.com/CLUEbenchmark/CLUEDatasetSearch 收集了眾多中英文NLP資料集
funNLP https://github.com/fighting41love/funNLP 分門別類的組織了眾多的NLP資料集和專案
awesome-chinese-nlp https://github.com/crownpku/Awesome-Chinese-NLP 收集了中文自然語言處理相關資料
Chinese_medical_NLP https://github.com/lrs1353281004/Chinese_medical_NLP 收集了醫療NLP領域(主要關注中文)評測資料集與論文相關資源

由此,在收集好原始資料集後便可進行後續相關的NLP分析了。

特別的,資料集可以儲存為txt、json、csv、tsv、sql表等等格式,只要你喜歡,都可以(哈哈哈,有些格式可能會比較佔用記憶體,較巨量資料集時需要留意)。
圖片此處分享一個csv超大檔案資料讀取技巧,即利用pandas的chunksize分塊讀取。

import pandas as pd

df = pd.read_csv("data.csv", chunksize=10000)  # 每次讀取1w行資料
for df_chunk in df:
    print(df_chunk)

2、常規文字資料預處理

文字資料作為一種非結構化資料,除了特別處理過的資料集,大多數直接收集的文字資料會摻雜或多或少的無用資訊,如果直接將其進行相關的文字分析於建模是無益的。通常,需要先對文字資料進行預處理操作。
文字資料預處理的主要目的一般有兩個,即:
(1)將文字資料淨化乾淨(標準自定)
(2)將文字資料格式化(需求自定)

2.1 將文字資料淨化乾淨

  • 空格換行符,利用replace操作將原始文字中的空格、tab鍵、換行符\n、\r等與文字無關的字元直接替換為空。

  • 無用資訊剔除,如:停用詞表構建。

  • 標點符號去除,利用正規表示式去除標點符號,中英文標點符號可以通過如下兩個方式獲取。
    中文標點符號:from zhon.hanzo import punctuation (需要安裝包:pip install zhon)
    英文標點符號:from string import punctuation
    特別的,文字情感分析中,可保留有情感傾向的標點符號,如:?和!

  • 在噪聲資料中提取需要資料,利用正規表示式完成資料提取。如:只需要提取漢字時可以利用正則[\u4e00-\u9fa5]

  • 簡體繁體轉換,可安裝包:pip install opencc

  • 英文資料:詞形還原、大小寫轉換等 (推薦python包:NLTK)

2.2 將文字資料格式化

  • 文字分句,根據標點符號分句。
  • 文字分段,根據換行符或其他資料規律分段。
  • 文字根據欄位儲存:半結構化文字資料儲存
  • excel資料提取,推薦安裝python包pandas,pip install pandas
    docx格式資料提取,推薦安裝python包python-docx,pip install python-docx
  • pdf資料提取,可安裝包pdfminer.six,pip install pdfminer.six

至此,經過常規預處理後,文字資料會變的比較乾淨與規整,可以用於後續nlp研究與應用。(說明,適用於自己任務的操作才是必須的,其他的參照奧卡姆剃刀「如無必要,勿增實體」)。

3、任務相關的文字資料預處理

前面介紹了通常情況下文字預處理可能涉及的注意點,但是要真正的做好資料預處理,應該與具體的任務相結合起來。比如:資料不平衡問題,資料增強問題、資料標註問題等等。

3.1 不平衡問題

  • 不平衡分類問題:實際應用中資料存在長尾分佈現象,需要注意處理不平衡分類問題。python包imbalanced-learn提供了幾個不錯的過取樣和欠取樣方法,可以試用。
  • 不平衡迴歸問題,一篇好文連結:https://zhuanlan.zhihu.com/p/369627086

特別的,如需獲得泛化效能好的模型,首先需要關注解決不平衡問題。

3.2 資料增強問題

資料太少,那就需要利用規則和演演算法增強資料,使資料多樣化。

3.3 資料標註問題

  • 人工標註,好處:畢竟人多力量大,有多少人工有多少智慧。壞處:成本昂貴。
  • 主動學習標註,目的:通過一定的技術手段和方法降低標註成本。具體的,可利用單個機器學習模型或整合學習的思想,提取需要人工稽核標註的資料。
  • 標註平臺與工具:可開發相應的自動化預標註平臺,通過人工稽核獲得標註後的高質量資料集。

4、一些可用的文字預處理工具

對於文字預處理工作,目前已有一些專門的工具包,功能比較多樣,大家可以試用一下,提升自己處理資料的效率和質量。

5、總結

本文對文字預處理,特別是中文文字預處理做了一個簡要的概述,希望於相關的nlper有所幫助。後續,將依次遞進分享相應的NLP文章,敬請關注。


你是如何看待「文字預處理」的呢? 歡迎關注留言討論


特別的,如本文有疏漏,麻煩留言指出,以期校正提升。
如看到文章的小夥伴有感興趣的nlp主題,歡迎留言交流討論,共同撰文分享。


原文首發於微信公眾號:實用自然語言處理