当前位置:   article > 正文

AIGC算法工程师面经:NLP基础篇——从分词、词表优化、词向量、词频、解码到设计分类模型_nlp 词表

nlp 词表

从分词、词表优化、词向量、词频、解码以及构建一个完整的文本分类模型讲解NLP基础面试题。本篇主要讲词频部分。

最近面试中出现的编程题除了leetcode中的题目,出现了越来越多考验NLP基础,比如统计单词重要程度;简单的文本分类这类基础编程题,因此文中提到的NLP基础知识和计算公式最好要很熟悉,不准备很容易掉坑里。

本系列将从分词、词表优化、词向量、词频、解码的理论和实践代码讲起,最终会将所有知识化零为整搭建一个完整的文本分类模型。

前面两期讲了分词、词表优化、词向量部分部分,本篇主要讲词频部分。下面是一个快捷目录。

一、分词

1. 讲讲你知道的分词算法,前后向最大匹配、维特比算法(viterbi)、HMM等

2. 用代码实现文本的分词函数

二、词表优化

1. 训练时词表大小过大,输出层过大,有什么优化方法

三、词向量

1. 词向量有哪些embedding方式

2. 详细讲讲glove、word2vec

3. 详细讲讲目前的动态embedding

4. 动态embedding中,将得到的representation运用到下游任务有哪些方式,特点是什么

四、词频

1. 讲讲TF-IDF

2. 实现TF-IDF算法

五、解码

1. 讲讲Beam search 、Random sample策略

2. 手撕代码

六、文本分类模型构建

1. 停用词设计

2. 词的权重计算(TF-IDF)

3. 考虑否定词对分类效果的影响

4. 分类方法

5. 损失函数/概率设计

6. 加分项:手动分词、temperature等

讲讲TF-IDF

1. 前言

在具体讲之前先讲一下了解这个算法有什么用。

假设有一道编程题目,描述为

下面有N篇文档,文档未进行分类标注。已知有积极、消极、中性三种分类,且具体关键词库举例如下。``请对每篇文档进行分类。``   ``"积极"["美好""伟大", "赞扬",...]``"中性"["念念不忘", ...]``"消极"["难受", "孤独"...]
  • 1

看完上面的题目,我们首先要考虑提取每篇文档表达的核心思想,核心思想主要通过文章中的关键词来表现;

那么如何自动提取每个文档中的关键词呢,我们就需要用TF-TDF算法了。

2. TF-IDF(term frequency–inverse document frequency,词频-逆向文件频率)介绍

TF-IDF本质是一种统计方法,用来评估 词/字 对于一个文件集或一个语料库中的其中一份文件的重要程度。字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降。

主要思想:如果某个单词在一篇文章中出现的频率TF高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类。

1)TF(Term Frequency) 词频

表示词条(关键字)在文本中出现的频率。

这个数字通常会被归一化(一般是词频除以文章总词数,也可以是这篇文章中出现最多的词的出现次数), 以防止它偏向长的文件。

具体公式如下

也可以是

2)IDF(Inverse Document Frequency) 逆向文件频率

需要基于一个语料库,语料库中包含多个文档。

IDF是针对某一特定词语进行计算,可以由总文件数目除以包含该词语的文件的数目再将得到的商取对数得到

如果包含该特定词语的文档越少, IDF越大,则说明词条具有很好的类别区分能力。

具体公式如下

如果一个词越常见,那么分母就越大,逆文档频率就越小越接近0。分母之所以要加1,是为了避免分母为0(即所有文档都不包含该词)。log表示对得到的值取对数。

3)计算TF-IDF

TF-IDF与一个词在文档中的出现次数成正比,与该词在整个语言中的出现次数成反比。

所以,自动提取关键词的算法就很清楚了,就是计算出文档的每个词的TF-IDF值,然后按降序排列,取排在最前面的几个词。

4)举例

假设目前有一张Google网页文档《中国的蜜蜂养殖》,语料库就是所有谷歌中文网页,我们想要选择一个这篇文中的关键词。

假定《中国的蜜蜂养殖》这篇文档文长度为1000个词,“中国”、“蜜蜂”、“养殖"各出现20次,则这三个词的"词频”(TF)都为0.02。

搜索Google发现,包含"的"字的网页共有250亿张,假定这就是中文网页总数。

包含"中国"的网页共有62.3亿张,包含"蜜蜂"的网页为0.484亿张,包含"养殖"的网页为0.973亿张

那么可以计算出它们的逆文档频率(IDF)和TF-IDF如下:

从上表可见,"蜜蜂"的TF-IDF值最高,"养殖"其次,"中国"最低。所以,如果只选择一个词,"蜜蜂"就是这篇文章的关键词。

大家还可以尝试计算一下"的"字的TF-IDF,极其接近0。

4)TF-IDF的用法

  • 文档关键词提取

  • 文档信息检索

设定检索关键词,如何从文档库中选出最符合检索要求的文档?

信息检索时,对于每个文档,都可以分别计算一组搜索词(“中国”、“蜜蜂”、“养殖”)的TF-IDF,将它们相加,就可以得到整个文档的TF-IDF。这个值最高的文档就是与搜索词最相关的文档。

5)TF-IDF的优缺点

  • 优点

简单快速,结果比较符合实际情况

  • 缺点

(a)没有考虑特征词的位置因素对文本的区分度,词条出现在文档的不同位置时,对区分度的贡献大小是不一样的。(一种解决方法是,对全文的第一段和每一段的第一句话,给予较大的权重。)

(b)按照传统TF-IDF,往往一些生僻词的IDF(反文档频率)会比较高、因此这些生僻词常会被误认为是文档关键词。

(c)传统TF-IDF中的IDF部分只考虑了特征词与它出现的文本数之间的关系,而忽略了特征项在一个类别中不同的类别间的分布情况。

(d)单纯以"词频"衡量一个词的重要性,不够全面,有时重要的词可能出现次数并不多;比如对于文档中出现次数较少的重要人名、地名信息提取效果不佳。

实现TF-TDF算法

下面我们不用任何库,用python来手动实现一下TF-TDF算法。

1. 建立语料库

# 建立一个语料库``corpus = [`    `"what is the weather like today",``     "what is for dinner tonight",     ``     "this is a question worth pondering",     ``    "it is a beautiful day today"``]``# 进行分词``words = []``for i in corpus:`    `words.append(i.split(" "))``print(words)
  • 1

2. 去掉停用词

# 如果有自定义的停用词典,我们可以用下列方法来分词并去掉停用词``f = ["is", "the"]``for i in corpus:`    `all_words = i.split()`    `new_words = []`    `for j in all_words:`        `if j not in f:`            `new_words.append(j)`    `words.append(new_words)``print(words)
  • 1

3. 统计词频

# 进行词频统计``def Counter(word_list):`    `wordcount = []``     for i in word_list:         ``       count = {}         ``       for j in i:             ``         if not count.get(j):                 ``           count.update({j: 1})             ``       elif count.get(j):                 ``         count[j] += 1         ``     wordcount.append(count)     ``  return wordcount`  `wordcount = Counter(words)
  • 1

4. 计算TF-IDF的函数定义

# 计算TF(word代表被计算的单词,word_list是被计算单词所在文档分词后的字典)``def tf(word, word_list):`    `return word_list.get(word) / sum(word_list.values())`    `# 统计含有该单词的句子数``def count_sentence(word, wordcount):`    `return sum(1 for i in wordcount if i.get(word))`    `# 计算IDF``def idf(word, wordcount):`    `return math.log(len(wordcount) / (count_sentence(word, wordcount) + 1))`    `# 计算TF-IDF``def tfidf(word, word_list, wordcount):`    `return tf(word, word_list) * idf(word, wordcount)
  • 1

5. 根据语料库,计算出每个文档(在本例中是单个短句)的TF-IDF

p = 1``for i in wordcount:`    `print("part:{}".format(p))``     p = p+1     ``     for j, k in i.items():         ``      print("word: {} ---- TF-IDF:{}".format(j, tfidf(j, i, wordcount)))``   
  • 1

如何学习大模型 AI ?

由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。

但是具体到个人,只能说是:

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

在这里插入图片描述

第一阶段(10天):初阶应用

该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。

  • 大模型 AI 能干什么?
  • 大模型是怎样获得「智能」的?
  • 用好 AI 的核心心法
  • 大模型应用业务架构
  • 大模型应用技术架构
  • 代码示例:向 GPT-3.5 灌入新知识
  • 提示工程的意义和核心思想
  • Prompt 典型构成
  • 指令调优方法论
  • 思维链和思维树
  • Prompt 攻击和防范

第二阶段(30天):高阶应用

该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。

  • 为什么要做 RAG
  • 搭建一个简单的 ChatPDF
  • 检索的基础概念
  • 什么是向量表示(Embeddings)
  • 向量数据库与向量检索
  • 基于向量检索的 RAG
  • 搭建 RAG 系统的扩展知识
  • 混合检索与 RAG-Fusion 简介
  • 向量模型本地部署

第三阶段(30天):模型训练

恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。

到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?

  • 为什么要做 RAG
  • 什么是模型
  • 什么是模型训练
  • 求解器 & 损失函数简介
  • 小实验2:手写一个简单的神经网络并训练它
  • 什么是训练/预训练/微调/轻量化微调
  • Transformer结构简介
  • 轻量化微调
  • 实验数据集的构建

第四阶段(20天):商业闭环

对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。

  • 硬件选型
  • 带你了解全球大模型
  • 使用国产大模型服务
  • 搭建 OpenAI 代理
  • 热身:基于阿里云 PAI 部署 Stable Diffusion
  • 在本地计算机运行大模型
  • 大模型的私有化部署
  • 基于 vLLM 部署大模型
  • 案例:如何优雅地在阿里云私有部署开源大模型
  • 部署一套开源 LLM 项目
  • 内容安全
  • 互联网信息服务算法备案

学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。

如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/秋刀鱼在做梦/article/detail/923901
推荐阅读
相关标签
  

闽ICP备14008679号