AIGC: 关于ChatGPT中对输出文本进行审核

这篇具有很好参考价值的文章主要介绍了AIGC: 关于ChatGPT中对输出文本进行审核。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

违禁词 与 logit_bias 参数

  • 前文,通过GPT的API实现了一个简单的聊天机器人, 当然也可以做一些内容审核相关的应用
  • 这里有一个非常核心,需要重点关注的一个方向,就是对于文本的审核
    • 对于一些违禁词,我们需要准确的识别出来,避免出现
  • 对于我们构建的 Prompt,其实还比较简单,那么可以通过字符串匹配的方式去进行处理
  • 对于GPT它返回的结果,我们怎样去进行控制,怎样避免 GPT 生成一些违禁词?
    • 其实GPT它的API参数, 有一些特殊的
    • 比如: presence_penalty,就是如果一个token在前面的内容已经出现过了
      • 在后面生成的时候,会给它的概率去进行一定的惩罚
      • GPT就会倾向于去聊新的话题和新的内容
    • 再比如,frequency_penalty 是指对于重复出现的token去进行概率惩罚
      • 这样AI就会尽量使用不同的表述,如果我们设置成最小的值, 可能对于我们的每次的答案, GPT的回答可能是一样的
    • 无论 temperature 或者是上面的两个参数,作为一个简单的参数控制着GPT生成相关token的一些概率
    • 但是却没有办法帮助我们精确的去控制哪些词,我们不想它出现
  • 对于这一点,Open AI 还提供了其他的参数,帮我们去进行解决,那就是 logit_bias
    • 通过这个参数,我们就可以精确的去控制哪些词需要出现或者不出现
    • 一般情况而言,我们都是通过这个参数去控制哪些词不出现
  • 那么我们如何通过 logit_bias 去控制,去剔除违禁词?
    • 第一步,需要基于前面实现的 tiktoken 去获取到指定违禁词的token值
    • 之后,设置 logit_bias 参数,在这个参数里面去设置对应的token的值的 logit_bias 为 -100
      • -100 表示不要出现
      • 100 必须出现
    • 设置完成之后,将 logit_bias 参数传递给 GPT 的 API
      • GPT在返回的时候,就会避免使用我们设置为 -100 的这些违禁词

代码结构

  • src
    • test
      • java
        • com.xxx.gpt.client.test
          • ChatReviewTest.java

具体代码实现

ChatReviewTest.java

package com.xxx.gpt.client.test;

import com.xxx.gpt.client.ChatGPTClient;
import com.xxx.gpt.client.entity.*;
import com.xxx.gpt.client.util.Proxys;
import com.xxx.gpt.client.util.TokensUtil;
import org.junit.Before;
import org.junit.Test;
import java.net.Proxy;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class ChatReviewTest {
    private ChatGPTClient chatGPTClient;
    @Before
    public void before() {
        Proxy proxy = Proxys.socks5("127.0.0.1", 7890);
        chatGPTClient = ChatGPTClient.builder()
                .apiKey("sk-adfasdfsdfsdf")
                .timeout(900)
                .proxy(proxy)
                .apiHost("https://api.openai.com/")
                .build()
                .init();

    }
    @Test
    public void chat() {
        Message system = Message.ofSystem("你是一个机器学习领域的专家");
        Message message = Message.of("介绍机器学习常用算法类型,只需要告诉我名字,不需要额外的介绍");

        ChatCompletion chatCompletion = ChatCompletion.builder()
                .model(Model.GPT_3_5_TURBO.getName())
                .messages(Arrays.asList(system, message))
                .maxTokens(3000)
                .temperature(0.9)
                .build();
        ChatCompletionResponse response = chatGPTClient.chatCompletion(chatCompletion);
        System.out.println("-------------------chat-------------------");
        Message res = response.getChoices().get(0).getMessage();
        System.out.println(res.getContent());
    }
    // @Test
    public void chatReview() {
        Message system = Message.ofSystem("你是一个机器学习领域的专家");
        Message message = Message.of("介绍机器学习常用算法类型,只需要告诉我名字,不需要额外的介绍");
        // 不希望返回中,存在 回归, 监督 这两个词
        Map<Integer, Integer> logitBiasMap = getBiasMap(Model.GPT_3_5_TURBO.getName(),Arrays.asList("回归","监督"));
        ChatCompletion chatCompletion = ChatCompletion.builder()
                .model(Model.GPT_3_5_TURBO.getName())
                .messages(Arrays.asList(system, message))
                .maxTokens(3000)
                .n(3) // 返回3条回复
                .temperature(0.9)
                .frequencyPenalty(2)
                .presencePenalty(0)
                .logitBias(logitBiasMap)
                .build();
        ChatCompletionResponse response = chatGPTClient.chatCompletion(chatCompletion);
        System.out.println("-------------------chatReview-------------------");
        for(ChatChoice choice:response.getChoices()) {
            System.out.println(choice.getMessage().getContent());
        }
    }
    private Map<Integer, Integer> getBiasMap(String modelName,List<String> list) {
        Map<Integer, Integer> result = new HashMap<>();
        for(String word:list) {
            List<Integer> tokens = TokensUtil.getTokens(modelName, word);
            for(Integer t:tokens) {
                result.put(t,-100);
            }
        }
        return result;
    }
}
  • 这里要去构造了一个 logitBiasMap 这个参数, 它是一个map类型的参数
    • 通过 getBiosMap 去获取
    • 然后传入我们的model的name
    • 使用GPT3.5
    • 传入我们违禁词的列表
  • 这个 getBiosMap 方法实现非常简单,需要结合之前的 TokensUtil
    • 从伪禁词列表里面去获取每一个词
    • 获取到之后,执行 TokensUtil.getTokens(modelName, word)
    • 这样就获取到了这个词所对应的token
    • 然后,将这个词所对应的token全部设置为 -100
    • 最后,我们返回 result 就可以了
    • 这样, 我们就构造好了我们的 logitBiasMap
  • 在参数里面进行一下添加
    • 返回的数量,设置成3条回复 .n(3)
    • 设置personsprddly,设置为0, .presencePenalty(0)
    • frequentlyprorendly 设置成2, .frequencyPenalty(2)
    • 最后我们再加上 logitbias 这个参数 .logitBias(logitBiasMap)
  • 也就是我们期望它用多样性的回答对我们来进行回复
  • 输出结果可以看到我们的结果已经产生了,不含有监督回归这两个词,这是对于一些词的过滤的一个实现
  • 除了通过logit_bias 去进行判断控制GPT的输出

moderation 接口

1 )概述

  • 对于用户的一些 Prompt GPT其实也提供了相关的接口去进行判断, GPT提供了 moderation 相关的接口
    • 官方文档:https://platform.openai.com/docs/api-reference/moderations/create
    • 通过这个接口,就可以去判断一句话相关的一些属性
      • 比如,官方文档上所示,我们的输入就是input,input就是可以是用户的 Prompt,也可以是 GPT返回的message
      • 然后,可以指定model,这里的model是 test-moderation-latest 另外一个模型
    • 那么通过调用这个接口,得到了相关的一系列的返回值, 是一个json的类型
      • 里面包含了是否应该对输入内容进行标记的一些flag字段
      • 对于不同的 category 去进行了一个打分
      • 通过这些分数值来判断输入的这句话是不是具有一些暴力的倾向
  • 当我们去实现一个网站或者实现相关的智能产品相关的一些功能的时候
    • 对于所有的内容,无论是输入或者输出,我们都可以去调用一下这个接口
    • 通过这个接口,可以去判断这些输入或者输出是不是正常的,是不是存在暴力色情等等的这些内容
    • 通过这个接口,可以去做一个评判,帮助我们去过滤掉不合适的内容
  • 那么具体如何去进行判断?
    • 在这里有不同的分类,比如像 categories 字段里面的属性
      • sexual 是否有色情
      • hate 仇恨
    • 就是色情,骚扰,暴力,威胁等等这些信息有对应的一些flag
    • 通过这个flag,我们就可以去进行判断,在下面有具体的评分,作为一个数据的支撑

2 )python版本实现文章来源地址https://www.toymoban.com/news/detail-756034.html

# -*- coding: utf-8
import os
import openai

openai.api_key = "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"
openai.proxy="http://127.0.0.1:7890"

res = openai.Moderation.create("你不听我的话我就拿刀砍死你") # 这句话具有明显的暴力倾向

output = res["results"][0]

print(output)
  • 执行后,输出json显示,我们的输入明显是有暴力倾向,也给予了相关的分值
  • 这是对于我们的输入以及GPT输出相关的文本审核的一些方法
  • 实际去应用 GPT的时候,那么对于我们的输入, 以及GPT的输出,肯定是需要通过类似的方法去进行控制,去进行判断的

到了这里,关于AIGC: 关于ChatGPT中对输出文本进行审核的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 关于ChatGPT等AIGC技术对人类社会的影响

    关于ChatGPT等AIGC技术对人类社会的影响

    梗概 横空出世的ChatGPT作为新一代人工智能技术,开启了通用人工智能时代,标志着人工智能具有广泛的学习能力并在大多数领域达到或超过普通人类的水平,其社会影响将巨大而深远。面对这一新传播范式,对其原理架构与应用创新解析、风险认知、应对策略的相关研究刻

    2024年02月08日
    浏览(14)
  • AIGC: 关于ChatGPT抽象Prompt提问模板的设计

    为什么需要Prompt模板 基于前文我们具备了Prompt构建的基础能力,但是我们在实际编写Prompt的过程当中,可能还会存在一些的问题 比如对于背景和细节的描述还是不够 或者为了描述的清楚堆砌了大量的文字, 导致整个Prompt的结构化和可读性是比较差的 从而GPT没有正确理解需求

    2024年02月04日
    浏览(13)
  • AIGC: 关于ChatGPT中实现一个聊天机器人

    规划一个聊天机器人 智能化完全于依托于GPT, 而产品化是我们需要考虑的事情 比如,如何去构建一个聊天机器人 聊天机器人它的处理逻辑其实非常的清晰 我们输入问题调用 GPT 然后,GPT 给我们生成回答就可以了 需要注意的是,聊天机器人不同于调用API进行一个简单的测试

    2024年02月04日
    浏览(12)
  • AIGC: 关于ChatGPT中Function Call的调用

    Function Call 概念 关于 GPT 中API的function参数,提供了一些能力 这个函数调用是 Open AI 在2023年的6.13号发布的新能力 根据它的官方描述, 函数调用能力可以让模型输出一个请求调用函数的消息 其中包含所需调用函数的信息,以及调用函数时所需携带的参数的信息 这种方式是一种

    2024年02月04日
    浏览(16)
  • AIGC: 关于ChatGPT中API接口调用相关准备工作

    ChatGPT之API接口相关 通过页面和GPT交流获取信息相比直接调用GPT的API而言是非常有限的 页面上的GPT是比较封闭的,而且只允许我们去输入文本的信息 我们需要借助GPT的API开发来激发AI工具的无限可能,实现更多个性化需求 1 ) 使用API 使用API有一个前置的条件 注册ChatGPT账号

    2024年02月04日
    浏览(12)
  • AIGC: 关于ChatGPT这个智能工具带来的几点思考

    ChatGPT的出现 2022年11月底,ChatGPT 上线,引爆 AI 圈 和 科技圈,2023年春节后, 人人都开始关注并讨论这项新技术 它是 OpenAI 研发的智能聊天工具, 基于GPT语言模型,模拟人类的对话方式 默认只能用文字进行交互,理解多种语言,有一些插件,可用语音,图表等 截止现在,Chat

    2024年02月04日
    浏览(13)
  • 深度学习实战29-AIGC项目:利用GPT-2(CPU环境)进行文本续写与生成歌词任务

    大家好,我是微学AI,今天给大家介绍一下深度学习实战29-AIGC项目:利用GPT-2(CPU环境)进行文本续写与生成歌词任务。在大家没有GPU算力的情况,大模型可能玩不动,推理速度慢,那么我们怎么才能跑去生成式的模型呢,我们可以试一下GPT-2完成一些简单的任务,让大家在CPU环

    2024年02月08日
    浏览(11)
  • Chatgpt创业机AIGC正在进行的行业

    Marketing:人工智能在营销领域的应用主要涉及市场调研、产品推广、内容生产等方面,例如通过机器学习技术分析用户行为和偏好,帮助企业更好地了解目标受众并进行精准营销。 General Writing:自然语言生成技术可以帮助用户自动生成文章、邮件等文本内容,提高写作效率和

    2024年02月11日
    浏览(13)
  • 项目接入阿里云内容审核增强版本,文本审核与图片审核。第三方审核

    项目接入阿里云内容审核增强版本,文本审核与图片审核。第三方审核

            自己的项目新增了一个社区的服务,社区可以发布文章,浏览文章,类似一些平台的文章管理的功能。那么发布的文章肯定是需要审核的,但是又不能全部为人工审核,这样的话效率太低也忙不过来,所以就想着先引入一个自动审核,只有当自动审核不通过之后,

    2024年02月02日
    浏览(31)
  • 关于AI和ChatGPT的使用,AI编程(AIGC),AI绘画

    关于AI和ChatGPT的使用,AI编程(AIGC),AI绘画

            对于AI和ChatGPTDE使用是在科技公司实习后才真正运用,虽然在大学时期就有了解,但是由于课程和其他课外活动挤占时间,我当时没能好好研究AI,人工智能,人们往往对它的印象是高大上的,高科技,高门槛,事实真是如此吗?工作以后,受同事等环境影响开始

    2024年02月10日
    浏览(12)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包