# 《自然语言处理》闵勇 (February 20, 2023)

+ 交叉学科视角：计算机+信息学
+ 重视基础和原理：计算机科学和语言学不是单纯的工程技术性学科
+ 强调实践
+ 选修课

参考书目：

1. Jurafsky.D., & Martin. I. (2008), _Speech and Language Processing_. 2nd Edition. Prentice Hall
2. Manning, C. D., & Schutze, H. (1999). _Foundations of Statistical Natural Language Processing_. The MIT Press

---

## Chapter 1 Introduction to NLP
The language-related parts of _HAL_

+ speech recognition 语音识别
+ natural language understanding ( & lip-reading ) 自然语言理解
+ natural language generation 自然语言生成
+ speech synthesis 语音合成
+ information retrieval 信息检索
+ information extraction and inference 信息抽取和推理

---

观点：

+ 1 + 1 = 2 —— 中缀表达法（动词放中间） —— 限制是：不能表达多主语/多宾语
+ 中英是中缀，德/日反之
+ 而函数 f(x, y) —— 前缀表达 —— 更适合规范化表达

---

### Knowledge in Speech and Language Processing
Speech and Language Processing (SLP) = Computational Linguistics + Speech Recognition and Synthesis

> 语音和语言处理（SLP）= 计算语言学 + 语音识别和合成
>
> 这个等式表达了语音和语言处理（SLP）的概念，它是由两部分组成的。其中，计算语言学（Computational Linguistics）是指通过计算机技术来分析和处理人类语言的学科，包括自然语言处理、语音处理、文本挖掘等；而语音识别和合成（Speech Recognition and Synthesis）则是指将人类语音转化为文本或者将文本转化为人类语音的技术。
>

语言处理的应用（Applications of language processing）：

+ spelling correction
+ grammar checking
+ information retrieval
+ machine translation

---

语言学的体系

+ 音韵学 Phonetics and Phonology — The study of linguistic sounds 研究语音
+ 词法学 Morphology — The study of the meaningful components of words 研究词的意义组成部分
+ 句法学 Syntax — The study of the structural relationships between words 研究单词之间结构关系
+ 语义学 Semantics — The study of meaning
+ 语用学 Pragmatics — The study of how language is used to accomplish goals 研究语言如何呗用于达成目标
+ 语篇分析学 Discourse — The study of linguistic units larger than a single utterance 研究大于单个话语的语言单位的学科

反思：类似AlphaGo颠覆围棋界一些公理，语言学的这些结论一定是对的吗

---

### 1.2 Ambiguity
歧义

> 常识消除歧义？
>

消歧义 resolve / disambiguate

+ lexical disambiguation —— 词义消歧
    - part-of-speech tagging —— 词性标注
    - word sense disambiguation —— "She went to the **bank** to deposit her paycheck." —— 同义词
+ syntactic disambiguation —— "The chicken is ready to **eat**." —— 句法消歧
    - probabilistic parsing —— 计算每种结构的概率，选择最可能的结构
+ speech act interpretation ——“你**可以**帮我关一下窗户吗？”是请求而非询问 —— 需要结合交际学背景知识 & 上下文

### 1.3 Models and Algorithms
语言学家不如统计？

### 1.4 Language, Thought, and Understanding
图灵测试

---

## Chapter 2 Basic Text Processing
Regular Expression

文法、自动机、计算模型

---

语料库的差异

+ language 语言：不同语言的语料库会在词汇、语法、语义等方面存在差异。例如，中文和英文在语法结构上存在很大不同，所以对应的语料库也会有所区别。
+ variety 方言：同一种语言的不同方言在发音、词汇和语法方面也会存在差异。因此，方言语料库可能会包含方言特有的词汇和语法结构。
+ code switching 语码切换：一些语言或方言中可能会存在语码切换，即在不同的语言或方言之间频繁切换使用。这种情况下，语料库也需要考虑这种语码切换的情况，以便更好地反映实际语言使用情况。
+ genre 文体：不同的文体在语言、词汇和语法方面也会存在很大差异。例如，新闻报道、科技论文和小说等不同类型的文体具有不同的语言特点，因此需要针对不同的文体建立相应的语料库。
+ author demographics 作者人口统计学：作者的年龄、性别、教育程度、职业等因素也会影响他们的语言使用习惯。因此，根据不同的作者人口统计学特征，建立对应的语料库可以更好地反映实际语言使用情况。

---

分词

Byte Pair Encoding (BPE) token learner

BPE 算法的步骤如下：

1. 对训练集中的所有单词进行字符切分。
2. 统计每个字符组合（即连续的两个字符或字符与空格的组合）在训练集中出现的频率。
3. 将出现频率最高的字符组合替换为一个新的字符。
4. 重复步骤 2 和 3，直到达到预设的词汇表大小。

BPE 算法的一个优点是，可以在不需要人工干预的情况下，根据训练集中的词汇特征自适应地生成对应的词汇表，因此对于不同语言或领域的数据集都能够适用。

BPE 算法也有一些局限性，例如对于一些较长的词汇，BPE 会将其切分成多个子词，这会导致模型难以理解这些词汇的完整含义。另外，BPE 在处理未知词汇时的效果可能不如基于词典的方法，因为 BPE 只是将未知词汇切分成已知的子词，而并没有为其赋予特殊的含义。

BPE token learner是BPE算法的一种变体，主要用于学习词汇表的生成。

BPE token learner的基本流程如下：

1. 初始化词典：将语料库中的每个字符都视为单独的符号，并在词典中对其进行计数。例如，对于一个由"hello world"组成的语料库，词典中将包括"h", "e", "l", "o", "w", "r", "d"这些字符，并对它们进行计数。
2. 计算合并频率：将语料库中出现频率较高的字符对合并成一个新的符号，并在词典中更新其出现次数。例如，在"hello world"语料库中，出现频率最高的字符对是"l"和"o"，因此将其合并成一个新的符号"lo"，并将其在词典中的计数更新为这两个字符在语料库中出现的次数之和。
3. 迭代合并：重复上述步骤，直到达到预定的词汇表大小或者不再有频率高于指定阈值的字符对。例如，在一个由10000个单词组成的语料库中，如果指定的词汇表大小为1000，则将重复执行上述步骤，直到词典中包含1000个符号为止。
4. 生成编码：将每个符号替换成一个由0和1组成的编码，用于在后续的任务中表示该符号。编码的生成过程类似于霍夫曼编码，即出现频率较高的符号将被编码为较短的编码，出现频率较低的符号将被编码为较长的编码。例如，在"hello world"语料库中，生成的编码表可能如下所示： 
    - h: 00
    - e: 01
    - l: 10
    - o: 11
    - w: 001
    - r: 010
    - d: 011

BPE token learner的核心思想是将语料库中的高频字符对合并成新的符号，从而减少词汇表的大小，提高模型的效率。BPE token learner还可以应用于处理未登录词等问题，因为它可以根据语料库中的数据自适应地生成新的词汇表，包括处理未登录词。

---

#### N-gram
n-gram是一种文本表示方法，它将文本中的单词或字符序列分成连续的n个元素，并将这些元素作为新的单元进行处理和分析。n-gram的n表示连续元素的个数，n越大，生成的n-gram序列就越长，表示的信息也就越丰富。

> 当n=1时，生成的n-gram序列就是每个单词本身，如"I love to eat pizza"生成的1-gram序列就是"I","love","to","eat","pizza"。
>
> 当n=2时，生成的n-gram序列就是每两个相邻单词组成的序列，如"I love to eat pizza"生成的2-gram序列就是"I love","love to","to eat","eat pizza"。
>
> 当n=3时，生成的n-gram序列就是每三个相邻单词组成的序列，如"I love to eat pizza"生成的3-gram序列就是"I love to","love to eat","to eat pizza"。
>

本质上是在做语言的预测

马尔可夫假设下，只需要用一个二维表就能存储，但也算是表达了词序

---

#### TF-IDF