创新实训(二):语料生成——过滤QA对,update prompt

4-18:过滤QA对,update prompt

任务:找一个(些)指标过滤不合理的QA对,建立合法QA对模板,随机取样作为prompt,请求大模型接口,重跑2020-2023以及2001-2007的word文档。

分析任务

原本我只pull了python的code,但是查看python_scripts里面的readme提到了要先把java-workstation跑起来

git clone -b java_scripts https://github.com/Liyanhao1209/ZhouYiLLM.git

然后参考实训同学的两篇文档:

第一篇详解了python_scripts分支生成指令,第二篇是生成问答对。

问题主要在于self_qa生成的qa对质量参差不齐:

  1. 问回答过于简练。例如一个卦的某一个爻,至少需要给出这一个爻的爻辞、爻辞解释、爻辞义理、爻辞给人的启示意义。
  2. 给出一个哲学问题,或者一个中国古代哲学的概念问题,至少给出几段话,而不是简单一句话的回答。

分析可得,接下来就是在生成self-QA时,优化prompt,使最后得到的答案更具体:

配置

首先,安装依赖库:

pip install zhipuai
pip install rouge-chinese
pip install python-docx
pip install pdfplumber

配置java时出现的报错如下:

Try-with-resources are not supported at language level ‘5‘ 报错

原因:maven没有指定jdk版本。

解决方案:在pom.xml中添加下面的code即可。

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
          <source>8</source>
          <target>8</target>
        </configuration>
      </plugin>
    </plugins>
  </build>

用vscode打开clone的python_scripts的代码一直报错,换成pycharm打开就ok了。

生成合适的prompt

考虑两个思路:

  1. 从已经self-QA生成的问答对中,设置一定的指标,从中选择出满足条件的QA作为prompt。

    指标可从以下方面考虑:

    • 回答长度。
    • 回答角度:一个卦的某一个爻,至少需要给出这一个爻的爻辞、爻辞解释、爻辞义理、爻辞给人的启示意义。
  2. 根据已有的问题,编写prompt,试用智谱清言glm4,得到可以生成满足条件QA的prompt,再重新跑文档生成qa对。

最终将方案1得到的qa对和方案2生成的qa对比较相似度,将方案1得到的相似度低的qa对插入到方案2得到的qa对中。

方案1

将之前得到的self_qa.json以10个item为单位分割询问一次,判断其是否符合要求,设置prompt如下:

  你是一名研究周易的专家。现在有10个关于的周易问答,内容为:[""]
 请从回答的长度和回答的角度从其中满足条件的QA对,都不满足请回答不满足即可。
  条件如下:
  1.回答至少包含三个角度。
  2.回答长度大于60个字符。
  3.回答对问题有详细的解释。
 请按照以下格式生成问题与回答:问题1:......回答1:......问题2:......回答2:......

编写code,将最终得到的回答保存到json里。

这个先前的代码已经完成了,直接用就可以了。

ok,调用脚本:

查看输出的json,发现了问题:

  • 不满足条件的qa会在回答里显示不满足,且这样的qa对不在少数:
  • 问题和回答的最开始会出现多余的中文字符":"或者数字

如下所示:

 {
    "instruction": ":“环中说”背后的太极观念是什么?",
    "answer": ":不满足条件,因为回答只包含了一个角度且长度未达到60个字符。"
  },
  {
    "instruction": ":咸卦卦象下艮上兑分别代表什么?",
    "answer": "2:咸卦卦象下艮代表少男,上兑代表少女。这体现了古代男尊女卑的观念,但咸卦中的少男艮居于下,少女兑居于上,象征着少男少女上下交感,呈现出一种特殊的互动关系。"
  }

再写个脚本处理上述问题,最后得到处理后的文件self_qa_correct.json。

方案2

设置prompt如下:

你是一名研究周易的专家。现在有一篇关于周易的文章,请根据上述文章的内容生成5个关于周易的尽可能专业且多样化的问题对(即一个问题及其对应的回答)。这些问答对中的问题可以是关于事实的问题,也可以是对相关内容的理解和评价。在提问时,请不要使用“这个”、“那个”等指示代词。回答考虑下面两点:
1.从多角度回答,比如问题是关于一个卦的某一个爻,至少需要给出这一个爻的爻辞、爻辞解释、爻辞义理、爻辞给人的启示意义。
2.给出一段话,不要给出一句简短的回答。
请按照以下格式生成问题与回答:问题1:......回答1:......问题2:......回答2:......。

试用智谱清言,结果较为满意:

在这里插入图片描述

但是一般来说,直接用UI得到的结果都比调用接口会好点。下面用接口先尝试一期的文件:

这里只用将原来的instruction_generation.py中的prompt和输出地址改变即可:

先生成workstation.txt,需要写入root和target两个参数,配置方法如下:

  1. 首先选择编辑配置

在这里插入图片描述

  1. 然后在Program arguments填入参数,第一个为路径,第二个为格式。

在这里插入图片描述

接下来跑一期试试:

用上面的prompt跑了一期的周易研究,得到的QA对大致如下:

{
  "instruction": "朱子在《易学启蒙》中是如何解释“心为太极”的?",
  "answer": "朱子在《易学启蒙》中引用了邵雍的“心为太极”说,并用易图的中心方位来解释“太极虚中之象”,从而解释了“心为太极”。他将以“心”为易图中心方位来解释“太极虚中之象”的“环中说”。"
},
{
  "instruction": "朱子后学中“心为太极”的“禀赋说”是如何形成的?",
  "answer": "朱子后学中的“禀赋说”是由朱子的弟子提出的,认为“心为太极”是指人心先天禀赋了太极之理,从而形成了对“心为太极”的“禀赋说”。"
},
{
  "instruction": "现代学者对“心为太极”的“境界说”是如何理解的?",
  "answer": "现代学者认为“心为太极”指的是心达到了与太极合一的境界,心与理一体,从而形成了对“心为太极”的“境界说”。"
},
{
  "instruction": "朱子的“环中说”和“禀赋说”之间是什么关系?",
  "answer": "朱子的“环中说”和“禀赋说”并不矛盾,而是相辅相成的关系。前者体现了太极的活动性原则,后者则体现了太极的实体性原则,二者的统一就是“境界说”。"
},
{
  "instruction": "朱子对“心为太极”的理解与邵雍的本义是否一致?",
  "answer": "朱子对“心为太极”的理解与邵雍的本义存在差异。朱子引用“心为太极”来解释太极的性质,而邵雍则可能更多从数学和逻辑的角度来理解“心为太极”。"
},
{
  "instruction": "在程颐的哲学中,“诚”具有哪些含义?",
  "answer": "在程颐的哲学中,“诚”具有两个层面的含义。首先,作为天道之“诚”,它代表着真实无妄,即天地运行的过程是真实无妄的,不存在欺骗。其次,作为人道之“诚”,它代表着真诚不欺,要求人们真诚对待他人,不欺骗天地鬼神,也不欺骗自己和他人。这两层含义共同构成了程颐对“诚”的全面解读。"
},

应该是可以的,接下来就用这个思路直接跑就ok

  • 23
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值