【自然语言处理与大模型】自然语言处理的漫漫长路之给文本编码 自然语言处理顾名思义是一个让机器去读懂人类的自然语言一个机器是无法读懂人类的语言符号的机器只认识01的数字。所以人们首先要做的事就是将文字符号编码成数字。一、给文本编码1Label Encoding首先登场的第一种方法想必你也能想出来那就是Label Encoding直接顺序编码比如“苹果、香蕉、飞机、火车”就可以编码成“1,2,3,4”。这种做法很快被人们抛弃由于这些编码数字存在大小1比2小和距离1和4相差3的信息但这些信息并不能准确的体现为“香蕉大于苹果”于是Label Encoding很快被一种叫做One-hot编码的技术取代。2One-hotOne-hot 就是给每个词一个独立位置写1来表示。也就是下面这个表词索引one-hot 编码苹果0[1, 0, 0, 0]香蕉1[0, 1, 0, 0]飞机2[0, 0, 1, 0]火车3[0, 0, 0, 1]One-hot编码规避了之前编码方式出现的大小与距离信息噪声问题。但他也存在明显的短板当词越来越多编码矩阵就会极具膨胀其中多数为0少数为1可用信息十分稀疏。所以也很快被更新的技术取代。但他的价值在于把无序的分类变量转换成模型能处理的数值形式同时避免模型误以为类别之间有大小或顺序关系。3BoW对One-hot编码进行扩展的下一项技术是词袋模型BoWBag of Word如果说One-hot是在表示一个词是谁。那么BoW则是扩展到了一段文本它表示一整段文本里有哪些词、各出现几次。本质上就是把一句话里每个词的 one-hot 向量加起来。这里给一个中文 BoW 示例。文档1我喜欢吃苹果文档2苹果很好吃文档3我不喜欢苹果BoW 词频表文档我喜欢吃苹果很好不文档1111100文档2001110文档3110101所以 BoW 并没有解决 One-hot 的核心缺陷只是把粒度从词提升到了文档。但BoW引入了词频统计出现了无去重词袋法词频的引入将信息量从“这段文档中有没有这个词”提升到“这段文本中有多少这个词”不同的词向量方法本质是在提升向量所涵盖文本的信息量。但很快人们就发现如果按照词频来统计很多常见词将会变成“的、是、在”等。这些词一看就不关键。真正关键的词饱涵信息量的词往往是稀有的。单纯考虑词频会把这类高频但低信息量词推得太高。4TF-IDF于是TF-IDF出现了人们首先对词频进行了优化引入一段文本的词总数也就是句子长度。将一个词出现的次数除以句子长度来表示该词的词频会更加准确这就是TF。然后人们想到若如果一个词几乎每篇文档都有比如“的”那么它就不那么重要。如果一个词只在少数文档里出现那么它应该更重要但这该如何表示呢可以拿总文档数除以这个词出现的文档数。为了让文档数少的时候也计算方法也有效可以给公式套一个对数这种方法就叫逆文档频率IDF。这样一来TF-IDF就大功告成了其中 t 某个词d 某篇文档D 整个语料库。TF-IDF它没有改变 BoW 的基本结构仍然是一个“词表维度 × 文档”的向量但它把“出现次数”升级成了“重要性”。这样一来信息量从“这段文本中有多少这个词”提升到“这个词对这篇文档有多重要”。基于刚才的 BoW 表这里给出 TF-IDF 计算结果。各文档总词数文档总词数文档14文档23文档34IDF 值词出现文档数IDF我20.4055喜欢20.4055吃20.4055苹果30.0000很好11.0986不11.0986TF-IDF 表词文档1文档2文档3我0.10140.00000.1014喜欢0.10140.00000.1014吃0.10140.13520.0000苹果0.00000.00000.0000很好0.00000.36620.0000不0.00000.00000.2747“苹果”的 IDF 0因为它在所有文档中都出现了TF-IDF 全部为 0说明它对区分文档没有贡献。“很好”和“不”只在一个文档中出现IDF 最高因此 TF-IDF 值最大它们是最能区分文档的关键词。这正是 TF-IDF 压制高频通用词、突出文档特色词的效果。5N-gram细心的你一定发现了一个小问题“我打你”和“你打我”这种完全意思相反的句子在TF-IDF看来几乎相同因为他们词一样词频也差不多。这种现象的出现是因为TF-IDF 通常建立在词袋模型上丢失语序信息。但恰好在NLP处于统计方法当道的时代有另一项技术对词做出了探索——N-gramN-gram 是一种基于统计的语言模型核心思想是“一个词出现的概率只取决于它前面 N-1 个词”通过滑动窗口统计连续词序列的频率来预测下一个词。N-gram 基于马尔可夫假设当前词只与前 N-1 个词相关整句概率等于各词条件概率的连乘。以句子“我喜欢编程”为例用 BigramN2计算P(我, 喜欢, 编程) P(我) × P(喜欢|我) × P(编程|喜欢)类型N 值看前几个词特点Unigram10 个不考虑上下文只看词频Bigram21 个最常用平衡效果与成本Trigram32 个上下文更丰富但更稀疏如果说TF-IDF是“这个词有多重要”那么N-gram就将信息量提升为“这些词是不是以某种顺序连在一起出现”。他们同属统计方法。N-gram 是统计语言模型的基石在深度学习崛起前统治了语音识别和机器翻译领域。 它的“预测下一个词”思想直接启发了后续的神经网络语言模型。二、小结文章写到这里我们已经粗略的游历了“统计NLP时代”的经典方法。但NLP的路还有很长登神长梯中我们只迈出了一小步。下面是一张演进表带你做一下本文的小结方法时代核心思想解决的问题遗留缺陷规则方法1950s前手写语法规则、词典、模板让机器能处理简单语言任务覆盖面窄换说法就失效One-hot1950s-60s每个词一个独立维度只有一个位置为1把离散符号变成可计算的向量维度极高、完全稀疏、词与词之间没有任何语义关系BoW 词袋1960s统计文档中每个词出现的次数忽略顺序能表示整篇文档用于分类和检索完全丢失语序“狗咬人”和“人咬狗”无法区分TF-IDF1970s在词频基础上降低常见词权重、提高稀有词权重能找出文档的关键词适合信息检索仍无语义、无语序同义词/多义词无法处理N-gram1970s-90s用前 N-1 个词预测下一个词滑动窗口统计补了一点局部语序能做语言建模窗口短、数据稀疏、抓不住长距离依赖参考文章【机器学习300问】57、机器是如何读得懂文本数据的呢【机器学习300问】58、什么是词袋模型和N-gram模型