本 repo 旨在整理筆者在工作學習 NLP 的過程中曾使用的方法、參考資料及仿作案例,讓更多人瞭解 NLP 的博大精深(困難重重)。若有任何指教歡迎提交 issue 或來信 martech.tw@gmail.com
本 repo 主要介紹中文自然語言處理任務共分為 3 大類:
在語意理解中,又可以依照「字詞、句子」不同層級分成 3 種任務類型,分別包含以下任務:
- 詞法分析 (Lexical Analysis)
- 分詞 (Word Segmentation)
- 詞性標註 (Part-of-speech Tagging)
- 句法分析 (Sentence Analysis)
- 句子邊界檢測 (Sentence Boundary Detection)
- 依存句法分析 (Dependency Parsing)
- 共指消解 (Coreference Resolution)
- 語義分析 (Semantic Analysis)
- 語義角色標註 (Semantic Role Labeling)
- 詞義消歧 (Word Sense Disambiguation):處理實體詞之間「一詞多義」的問題
- 向量化表示 (Embeddings)
利用模型對語義理解,從非結構化文本中抽取結構化資訊
-
序列標註
- 命名實體識別 (Named Entity Recognition)
-
文本分類 (Classifications)
利用文本向量化進行 常見機器學習任務(分類、分群、數值預測)
- 情感分類/分數 (Sentiment Prediction)
- 關係抽取 (Relation Extraction):預測文本中兩實體之間的關係類型
- 意圖識別 (Intent Detection):分類問題背後的意圖
- 主題分類 (Topic Modeling):找出文本隱藏的主題
-
綜合
- 事件抽取 (Event Extraction)
判斷輸入文本的語義後,經過抽取、重組、生成最佳的輸出結果
- 機器翻譯 (Machine Translation)
- 文本摘要 (Text Summarization)
- 問答匹配 (Question-Answering System):選出最適合回覆用戶提問的答案
- 對話系統 (Dialogue System)
以下段落將一一整理其定義和作者練習的實現代碼。
首先由於 NLP 開源套件眾多,這邊先盤點功能較為完整的 NLP 開源平台:
- CKIP:繁體中文 NLP 工具
- ckiptagger
- CKIP Transformer
- PaddleNLP:中國第一個 NLP 開源框架
- LTP:哈爾濱工業大學
- HanLP
- StanfordNLP
- SpaCy
- JioNLP
應用 Python Requests
, Selenium
, Scrapy
等工具發送 HTTP Requests 來獲取公開資料
- 針對金融公開資料源,我將個人開發的一些爬蟲代碼都放在 Crawlers
傳統會先進行的文本清洗、排除停用詞、標點等,再開始分析或建模。現因為 BERT 等預訓練模型的出現,為了保留完整語義,則不一定會每次都排除停用詞或標點。
停用詞列表:
其中,編碼、標點、空格、換行等等應統一格式,讓不論是 Embeddings 還是文字分析時,讓語義的一致性提高。例如:標點符號統一使用全形。
從文本中定義各個詞彙的邊界。
- Jieba/ckiptagger/CKIP Transformer/LTP/HanLP/StanfordNLP/SpaCy
- 將分詞結果根據重要度再合併,形成更有意義的關鍵短語
- 使用到
JioNLP
- 計算關鍵詞頻次、佔比、隨時間的變化量,譬如可排序同一時間搜尋量增長最快關鍵詞
根據語義分類文本中每個詞彙的詞性。
分詞的其中一個缺點是,切分後最小單位的詞彙讀不出太多洞察,用於文本分析起不到具體作用 關鍵詞抽取是希望輸出更有鑑別意義的詞彙
參考 JoiNLP 的 keyphrase_extract
,透過將分詞結果根據權重和相似性合併
根據語義對文本進行合理斷句。
根據語義分類文本間的詞彙的關係。
挑出句子間意思相同的代名詞。
根據語義分類句子中每個詞彙的語義角色。
處理實體詞之間「一詞多義」的問題。
將詞彙、句子或文本段落轉換為能夠充分表達其語義的向量。
判斷文本中實體所在的邊界及類型。
預測文本中兩實體之間的關係類型。
判斷文本的情緒為正面/負面/中立,或以分數形式表示、或分為不同類型(例如:驚訝、憂傷、憤怒...)。
分類問題背後的意圖。
找出文本隱藏的主題
找到空間中的同義詞合併,避免資訊分散和雜訊
以中文為例:
- 筆畫比對
- 字符比對 (Levenshtein / LCS)
- 詞向量 (Word2Vec)
- 語義共現圖譜的節點相似度 (基於圖學 比 W2V 好 可深入了解為什都是基於共現性會有效果差異)
Ref: https://blog.csdn.net/u010960155/article/details/87285292