自然語言處理 (NLP)
自然語言處理是人工智能的一個領域,專注於通過自然語言實現計算機與人類之間的交互。它結合了計算語言學、機器學習和深度學習,使計算機能夠以有用的方式處理、理解和生成人類語言。
NLP的最終目標是以有價值的方式閱讀、解碼、理解和理解人類語言。NLP是許多現代應用中機器智能的驅動力,從語音助手和聊天機器人到搜索引擎和內容分析工具。

NLP核心組件
- 標記化: 將文本分解為單詞、短語、符號或其他有意義的元素,稱為標記。
- 詞性標註: 識別每個單詞的詞性(名詞、動詞、形容詞等),以理解句子的語法結構。
- 命名實體識別: 在文本中定位和分類命名實體到預定義的類別,如人名、組織、地點等。
- 句法分析: 分析句子的語法結構,通常表示為解析樹。
- 語義分析: 通過理解單詞和概念之間的關係從文本中提取含義。
NLP流程
- 文本預處理:清理和標準化文本(去除噪音、處理特殊字符等)
- 標記化:將文本分解為標記(單詞、子詞、字符)
- 特徵提取:將文本轉換為數值表示(嵌入)
- 模型應用:應用NLP模型執行特定任務
- 後處理:為最終應用精煉模型輸出
現代NLP系統通常將這些步驟整合到端到端的神經模型中,可以學習同時執行多個步驟。
文本表示
NLP中的一個基本挑戰是將文本(計算機無法直接理解)轉換為機器學習算法可以處理的數值表示。已經開發了幾種方法:
詞袋模型
將文本表示為每個單詞的計數,忽略語法和詞序,但保留多重性。
TF-IDF
根據術語在文檔中的頻率和在所有文檔中的稀有性來加權術語。
詞嵌入
捕捉語義含義的密集向量表示(Word2Vec、GloVe、FastText)。
上下文嵌入
根據單詞出現的上下文而變化的表示(BERT、ELMo)。
句子嵌入
整個句子或段落的向量表示(通用句子編碼器)。
變換器
基於自注意力的模型,捕捉序列中所有單詞之間的關係。
NLP模型架構
現代NLP系統使用各種神經網絡架構來處理和理解語言。每種架構都有其優勢,適合不同類型的任務:
遞歸神經網絡 (RNNs)
RNN通過維護捕獲來自先前輸入信息的隱藏狀態來處理序列。它們非常適合理解順序依賴關係很重要的任務,如語言建模和語音識別。然而,由於梯度消失問題,它們難以處理長距離依賴關係。
長短期記憶 (LSTM)
LSTM是一種專門設計用於解決梯度消失問題的RNN。它們使用單元狀態和各種門(輸入、遺忘、輸出)來控制信息流,使它們能夠更有效地學習長距離依賴關係。在Transformer興起之前,它們被廣泛用於序列建模任務。
Transformer
Transformer使用自注意力機制來衡量處理每個單詞時序列中不同單詞的重要性。這使它們能夠比RNN更有效地捕捉長距離依賴關係,並並行處理所有單詞(而不是順序處理),從而實現更高效的訓練。該架構由具有多頭注意力和前饋神經網絡的編碼器和解碼器塊組成。
BERT風格模型
BERT(來自Transformer的雙向編碼器表示)和類似模型僅使用Transformer架構的編碼器部分。它們在掩蔽語言建模等任務上進行預訓練,在這些任務中,它們學習通過考慮來自兩個方向的上下文來預測缺失的單詞。這種雙向理解使它們特別適合分類、命名實體識別和問答等任務。
GPT風格模型
GPT(生成式預訓練Transformer)和類似模型僅使用Transformer架構的解碼器部分。它們被訓練來預測序列中的下一個標記,使它們自然適合生成任務。這些模型從左到右(單向)處理文本,在文本生成、摘要和翻譯等任務中表現出色。
編碼器-解碼器模型
像T5和BART這樣的模型使用具有編碼器和解碼器組件的完整Transformer架構。編碼器處理輸入序列,而解碼器生成輸出序列。這種架構特別適合序列到序列任務,如翻譯、摘要和問答,其中輸入和輸出可能具有不同的長度和結構。
與其他AI領域的關係
NLP與其他AI領域密切相關:它使用機器學習算法進行模型訓練,在多模態系統中與計算機視覺重疊,與語音處理連接以實現語音界面,並為AI系統中的知識表示和推理做出貢獻。像GPT-4這樣的大型語言模型代表了NLP與通用AI能力的融合。
常見的NLP任務
NLP中的挑戰
自然語言本質上是有歧義的。單詞、短語和句子可以根據上下文有多種含義。例如,「銀行」可以指金融機構或河岸。
理解語言使用的更廣泛上下文,包括文化參考、世界知識和對話歷史,對NLP系統來說仍然具有挑戰性。
由於語言差異、資源可用性不同以及語言之間知識轉移的挑戰,構建在多種語言中都能良好工作的NLP系統很困難。
NLP模型可以學習和放大其訓練數據中存在的偏見,導致在現實世界應用中部署時產生不公平或歧視性結果。
NLP系統通常難以進行人類認為直觀的常識推理,例如理解物理約束、因果關係或關於世界如何運作的基本事實。
最先進的NLP模型通常需要大量計算資源進行訓練和推理,使它們在大規模開發和部署時成本高昂。
常見問題
學習資源
初學者
- Speech and Language Processing - Dan Jurafsky & James H. Martin
- Natural Language Processing with Python - Steven Bird, Ewan Klein & Edward Loper
- Introduction to Natural Language Processing - Jacob Eisenstein
進階閱讀
- Neural Network Methods for NLP - Yoav Goldberg
- Foundations of Statistical NLP - Christopher Manning & Hinrich Schütze
- Transformers for NLP - Denis Rothman
- CS224n: Natural Language Processing with Deep Learning
Stanford University (free lectures on YouTube)
- Natural Language Processing Specialization
Coursera - deeplearning.ai
- Applied NLP
fast.ai
- NLP with Transformers
Hugging Face
- Natural Language Processing
edX - Microsoft
基礎論文
- "Attention Is All You Need" (2017) - Vaswani et al.
- "BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding" (2018) - Devlin et al.
- "Efficient Estimation of Word Representations in Vector Space" (2013) - Mikolov et al.
- "GloVe: Global Vectors for Word Representation" (2014) - Pennington et al.
近期有影響力的論文
- "Language Models are Few-Shot Learners" (GPT-3) (2020) - Brown et al.
- "Training language models to follow instructions with human feedback" (2022) - OpenAI
- "LLaMA: Open and Efficient Foundation Language Models" (2023) - Meta AI
- "Self-Instruct: Aligning Language Model with Self Generated Instructions" (2022) - Wang et al.
博客和網站
- Hugging Face Blog - Updates on transformer models and NLP
- Sebastian Ruder's Blog - NLP research updates
- arXiv Sanity Preserver - AI paper navigation
- Papers with Code - NLP section
社群
- r/LanguageTechnology - Reddit community
- NLP News - Newsletter by Seb Ruder
- ACL Anthology - NLP research papers
Hugging Face Transformers
具有預訓練模型和工具的最先進自然語言處理庫。
spaCy
具有內置模型的工業級自然語言處理庫。
NLTK
用於符號和統計NLP的綜合庫套件。
Stanford CoreNLP
基於Java的NLP工具包,具有許多語言分析工具。
Gensim
主題建模和文檔相似性分析庫。
Stanza
斯坦福的官方Python NLP庫,具有多種語言的工具。