AI 大模型之美
徐文浩
bothub 创始人
32335 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 33 讲
AI 大模型之美
15
15
1.0x
00:00/00:00
登录|注册

05|善用Embedding,我们来给文本分分类

支持样本量(Support)
F1分数
召回率(Recall)
准确率(Precision)
逻辑回归(LogisticRegression)
随机森林(RandomForest)
过滤长文本
Tiktoken编码
Pandas库
今日头条新闻标题和关键词
数据存储格式(parquet)
批量请求优化
API限速与backoff库
最大文本长度
分类模型的效果
机器学习小知识
使用Embedding进行文本分类
获取Embedding的方法
OpenAI官方教程
GitHub代码示例
数据集下载链接
分享和比较结果
区分1分到5分的评价
在完整数据集上训练模型
模型评估指标
机器学习方法
数据预处理
数据集来源
模型限制与解决方案
文本向量化
OpenAI API
预测具体分数
情感分析
利用文本Embedding进行分类
总结
资源链接
课后练习
模型训练与评估
数据处理
Embedding获取
文本分类
文本分类与Embedding

该思维导图由 AI 生成,仅供参考

你好,我是徐文浩。
上一讲里我们看到大模型的确有效。在进行情感分析的时候,我们通过 OpenAI 的 API 拿到的 Embedding,比 T5-base 这样单机可以运行的小模型,效果还是好很多的。
不过,我们之前选用的问题的确有点太简单了。我们把 5 个不同的分数分成了正面、负面和中性,还去掉了相对难以判断的“中性”评价,这样我们判断的准确率高的确是比较好实现的。但如果我们想要准确地预测出具体的分数呢?

利用 Embedding,训练机器学习模型

最简单的办法就是利用我们拿到的文本 Embedding 的向量。这一次,我们不直接用向量之间的距离,而是使用传统的机器学习的方法来进行分类。毕竟,如果只是用向量之间的距离作为衡量标准,就没办法最大化地利用已经标注好的分数信息了。
事实上,OpenAI 在自己的官方教程里也直接给出了这样一个例子。我在这里也放上了相应的 GitHub 的代码链接,你可以去看一下。不过,为了避免 OpenAI 王婆卖瓜自卖自夸,我们也希望能和其他人用传统的机器学习方式得到的结果做个比较。
因此我重新找了一个中文的数据集来试一试。这个数据集是在中文互联网上比较容易找到的一份今日头条的新闻标题和新闻关键词,在 GitHub 上可以直接找到数据,我把链接也放在这里。用这个数据集的好处是,有人同步放出了预测的实验效果。我们可以拿自己训练的结果和他做个对比。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文介绍了如何利用OpenAI的API获取文本Embedding并进行数据处理的具体操作,以及如何利用Embedding和机器学习算法进行文本分类。作者通过代码示例和问题解决方案,帮助读者快速了解了这一方法,并解释了模型输出报告中的准确率、召回率、F1分数和支持样本量等指标的含义。文章以实际操作为主,为读者提供了一种简单而有效的文本分类方法,无需深度学习模型和大量自然语言处理知识,即可在大规模数据集上训练出良好的分类模型。读者还被鼓励在完整的数据集上进行训练,并分享测试结果,以促进更多人了解用Embedding给文本分类的方法。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《AI 大模型之美》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(38)

  • 最新
  • 精选
  • 麦耀锋
    应该这么去理解embedding的使用。以前我们做机器学习的时候(或者相对于深度学习之前的“浅层学习”),不管是有监督还是无监督,一般我们需要做feature engineering,也就是需要data scientist,根据业务、专家领域,对数据提取有用的feature;而在NLP领域,那么就是通过word2vec等各种方式来提取feature。通过openai的embedding接口,实际上就是openai帮我们做了feature engineering这一步,将文本映射到一个合适的vector space,得到的embedding其实就是文本的feature,所以可以基于这个embedding即feature X来做传统的机器学习

    作者回复: 👍

    2023-05-05归属地:广东
    2
    21
  • 浩仔是程序员
    老师,你好!既然都调用open ai的接口,为什么不直接让chatgpt直接返回分类结果呢

    作者回复: 可以的啊,但是要考虑 1. 成本 2. 效果 在有标注数据的情况下,机器学习的效果通常比让ChatGPT只用先验知识效果还是要好不少的。

    2023-03-28归属地:广东
    9
    13
  • 良辰美景
    “调用了 Tiktoken 这个库,使用了 cl100k_base 这种编码方式,这种编码方式和 text-embedding-ada-002 模型是一致的。如果选错了编码方式,你计算出来的 Token 数量可能和 OpenAI 的不一样。” 老师, 问你一个学习上的问题, 像这种API 文档里这么细节的东西,你是如何获取这些信息的

    作者回复: 读一遍API文档,读一遍OpenAI Cookbook。这是看起来最笨,其实最节约时间的办法。

    2023-04-07归属地:上海
    10
  • 怡仔
    github中的找不到途中列举的数据文件

    作者回复: 看一下github的README里给了一个百度网盘的下载方式 对应的数据文件比较大,GitHub里直接放也不太方便下载

    2023-03-28归属地:上海
    4
    5
  • lala
    现在chatGPT是通用的问答应用。请问如何根据ChatGPT结合公司业务的知识库和商品信息,如何打造服务客户和内部顾问的机器人?比如根据用户问题,推荐对应产品给用户。根据内部知识库,回答内部同事关于产品使用,运营信息相关的问题呢。谢谢

    作者回复: 看最新上线的10,11讲,以及后面会上线的14-17讲

    2023-04-03归属地:北京
    4
  • Toni
    训练一个能把从 1 分到 5 分的每一个级别都区分出来的机器学习模型. 使用下载的数据 fine_food_reviews_with_embeddings_1k.csv 随机森林模型,超参数 n_estimators=100 下跑的结果 precision recall f1-score support 1 0.86 0.30 0.44 20 2 1.00 0.38 0.55 8 3 1.00 0.18 0.31 11 4 1.00 0.26 0.41 27 5 0.74 1.00 0.85 134 accuracy 0.76 200 macro avg 0.92 0.42 0.51 200 weighted avg 0.81 0.76 0.71 200 极端随机森林模型 ExtraTreesClassifier() 下跑的结果 precision recall f1-score support 1 1.00 0.20 0.33 20 2 1.00 0.38 0.55 8 3 1.00 0.18 0.31 11 4 1.00 0.26 0.41 27 5 0.73 1.00 0.84 134 accuracy 0.75 200 macro avg 0.95 0.40 0.49 200 weighted avg 0.82 0.75 0.69 200

    作者回复: 👍

    2023-03-31归属地:瑞士
    2
    4
  • Toni
    在执行这段代码时会报ParserWarning df = pd.read_csv('data/toutiao_cat/toutiao_cat_data.txt', sep='_!_', names=['id', 'code', 'category', 'title', 'keywords']) ParserWarning: Falling back to the 'python' engine because the 'c' engine does not support regex separators (separators > 1 char and different from '\s+' are interpreted as regex); you can avoid this warning by specifying engine='python'. 原因是 'c' 引擎不支持分隔符sep='_!_'表达式,可指定 engine='python' 来避免此警告。 代码如下 df = pd.read_csv('data/toutiao_cat/toutiao_cat_data.txt', engine= 'python', sep='_!_', names=['id', 'code', 'category', 'title', 'keywords'])

    作者回复: 👍 我本机是默认会退回到用python引擎来分割,感谢。

    2023-03-30归属地:瑞士
    4
  • Geek_513b7c
    老师,你能解释一下在ai中向量是什么意思吗?这几节看的云里雾里的

    作者回复: 可以认为,就是把文本,用一组数字来表示,这组数字表示了这段文本在高维空间里面的坐标。两段文本相似,就是他们坐标之间比较近。

    2023-03-28归属地:吉林
    2
    3
  • 四月. 🕊
    请问一下老师,既然已经按照batch_size划分出来了prompt_batches,为什么在get_embeddings_with_backoff函数中还要划分一次batch呢?是不是重复了?

    作者回复: 看了一下的确是可以不用的。原来是想做成两层batch_size的,就是1000个batch扔给get_embeddings_with_backoff,然后里面再100个一个batch这样,不过后来发现没有必要。

    2023-04-05归属地:北京
    2
  • 王平
    老师请问如果把时序数据,比如用户行为序列作为输入给openAI 的 embedding, 根据行为判断用户情感的效果会好吗?

    作者回复: 我没有试过,你可以试一下,如果有结果欢迎分享。我猜如果一般人能判断出来,它就能判断出来。

    2023-04-03归属地:上海
    2
收起评论
显示
设置
留言
38
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部