# Happy_LLM_02 什么是NLP



<!--more-->

# Task02：第一章 NLP 基础概念
（这是笔者自己的学习记录，仅供参考，原始[学习链接](https://datawhalechina.github.io/happy-llm/#/./chapter1/%E7%AC%AC%E4%B8%80%E7%AB%A0%20NLP%E5%9F%BA%E7%A1%80%E6%A6%82%E5%BF%B5?id=_13-nlp-%E4%BB%BB%E5%8A%A1)，愿 LLM 越来越好❤）

---

## NLP 自然语言处理
顾名思义就是处理人类语言的，把人类的语言用某种方式让计算机理解，理解之后便能进行一些处理和上操作。计算机能够用底层的0101模拟出人类的语言后，人们就开始整活，让他做事了，比如中文分词等，这里面可能会涉及语义、语境、情感、文化等。所以一直以来，大家都在不断改进算法方法来使计算机更能理解人类语言，从而达到对人类的语言数据进行一些处理。

---

## NLP 的发展历程
1. 基于 **规则** 进行处理：主要做翻译任务，给计算机字典和词序规则，让他查。  
2. 基于 **统计** 概率进行处理：统计模型，**机器学习**  
3. 基于 **深度学习** 模型：主要的比如 RNN、LSTM、Word2Vec、BERT、Transformer  

---

## NLP 的一些任务（人类都让它整了哪些活儿）

### 1、中文分词（Chinese Word Segmentation）
基础任务。中文不像英文空格是一个词，中文有字和词的概念。所以处理中文文本，首先就是要进行分词，分的好意味着理解的好和正确，对后续的整活很关键。

### 2、子词切分（Subword Segmentation）
是常见的文本预处理技术。像英文就是再把词分成前后缀，以后遇到没见过的可能有举一反三的能力。  
例如：`unhappiness = un-happy-ness`  
常见的方法：Byte Pair Encoding (BPE)、WordPiece、Unigram、SentencePiece 等

### 3、词性标注（Part-of-Speech Tagging）
基础任务。就是标注词性。n、v、adj、adv 这种，对理解语义很重要。通常是用机器学习模型，从标注数据里学一学就会了。  
常见的 ML 模型：隐马尔可夫模型（Hidden Markov Model，HMM）、条件随机场（Conditional Random Field，CRF）  
常见的 DL 模型：RNN、LSTM  

### 4、文本分类（Text Classification）
核心任务。分类任务，就是给文本你把这个话分到某个领域类别中，如教育、医疗、财经这些类。机器学习比较多，挺简单的，主要就是要选合适的特征表示和分类算法，训练的数据也很重要。但是现在深度学习变成趋势了。  

### 5、实体识别（Named Entity Recognition）
关键任务。就是给文本，他能从长句子里面提取各种类别的信息，这就是实体，比如里面说的人、地名、时间这种。比文本分类更细，文本可能看见关键词就分类了。  

### 6、关系抽取（Relation Extraction）
关键任务。在实体识别的基础上，能够理解实体之间的关系，比如从属、因果等。  

### 7、文本摘要（Text Summarization）
重要任务。把长文本进行内容概括，  
- 抽取式摘要：（优点）摘要内容全是来自原文，准确性比较高。（缺点）可能不通畅。  
- 生成式摘要：对内容进行重新组合改写，更难，需要如 Seq2Seq 的模型。  

### 8、机器翻译（Machine Translation）
核心任务。就是不同语音之间进行翻译，重点是转化、准确、风格、文化因素。  

### 9、自动问答（Automatic Question Answering，QA）
高级任务。理解人给的问题并回答，这涉及了很多子任务（信息检索、文本理解、知识表示和推理等）  

有 3 类：  
- 检索式问答：就是搜索出答案。  
- 知识库问答：基于知识库结构化内容检索出答案。  
- 社区问答：基于用户的论坛 csdn 啥的。  

---

## 文本表示是什么？
目的是用计算机能处理的方式表示自然语言，文本数据数字化。（字、词、短语、句子）表示形式可能有（向量、矩阵或其他数据结构）

---

## 文本表示的发展历程

### 1、词向量 —— 向量空间模型 VSM
是文本表示的方法。  

*VSM 做什么的？*

> - 文本变高维向量，每一维是特征项（字、词、短语），值（通过公式计算得到，如 TF 词频、TF-IDF 逆文档频率）是代表特征项的权重 = 在文本中的重要程度。

*VSM 变换的优化方法？*  

> - 改进特征 **表示** 方法：图方法、主题方法  
> - 改进特征项 **权重计算** 方法：如用矩阵运算（特征值计算、奇异值分解等方法），提升效率和效果。

  

*VSM 的问题？*  

> - 数据稀疏性 + 维数灾难  
> - 特征项选择  
> - 权重计算方法  
> 
> （有个词汇表大小就是一个词的向量维数，该词的向量表示就是，词汇表中他的位置值为 1，其他 0，所以很浪费。）

---

### 2、N-gram 语言模型
是基于统计条件概率的模型。基于马尔可夫假设，现在这个词的出现概率依赖前 N-1 个词（N 是正整数，具体前几个词也不一定。  
N=1 是 unigram 模型、N=2 bigram、N=3 trigram，就是前两个词出现的情况下，这个词出现的概率）  

*N-gram 做什么的？*  

> - 可以计算这个词的出现概率
> - 或者从后往前推算概率连乘，计算整个句子的

*N-gram 的优点？*  

> - 易理解简单

*N-gram 的问题？*  

> - N 大时，出现推理时某些概率太低  
> - 数据稀疏性问题，就是训练语料中没出现过的词序组合，泛化能力低  
> - 忽略了远距离词之间的关系

---

### 3、Word2Vec 语言模型
是一种词嵌入技术，2013 年提出的。  

两种架构：  
- **CBOW 连续词袋模型**（适合小数据集）：根据目标词的上下文词的词向量计算这个词的词向量。  
- **Skip-Gram 模型**（适合大数据集）：先有目标词的词向量，预测周围词的词向量，训练过程中不断优化“吃”的向量，使它能更好地预测这些上下文词。  

*模型学什么的？*  

> - 用神经网络 NNLM 学词在文本中的词之间的语义关系，使得语义相似或相关的词在向量空间距离就近

*Word2Vec 是做什么的？*  

> - 把语言转成低维（几百维）的密集向量，减少计算复杂度和存储  
> - 能捕捉词与词的语义关系  
> - 生成静态词向量

*和 VSM 比的优势是？*  

> - W2V 基于上下文学，不是基于词典，泛化能力好点

*W2V 的问题是？*  

> - 两种架构都是基于局部上下文的，长距离不行。

---

### 4、ELMo
**Embedding from LM**，是一种融入预训练方法到词向量表示的思路，生成动态词向量，实现词向量的准确表示（同一个词不同语境不同表示向量）  

*ELMo 是怎么做的？*  

> - 先获得词向量模型（用基于 RNN 的双向 LSTM 结构在大型语料库训）  
> - 再在特定任务微调，从预训练模型提取词向量作为特征调整。

*ELMo 的优势是什么？*  

> - 能捕捉词在不同语境上下文的多义

*ELMo 的问题是什么？*  

> - 模型复杂度高  
> - 训练时间长  
> - 计算资源消耗大
> 
> （牛逼模型的通病吧）

