本文關鍵詞:文字資料預處理、中文文字預處理、自然語言處理
摘要: 要進行自然語言處理相關工作,文字資料預處理是個必不可少的過程。本文將對文字資料預處理相關的內容進行歸納整理,主要包括以下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.hanzi 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主題,歡迎留言交流討論,共同撰文分享。
原文首發於微信公眾號:實用自然語言處理