MiraiForum

    • Register
    • Login
    • Search
    • Popular
    • Recent
    • Unsolved
    • Tags
    • Groups
    • 友情链接
    1. Home
    2. Mitr-yuzr
    • Profile
    • Following 1
    • Followers 2
    • Topics 6
    • Posts 72
    • Best 13
    • Controversial 0
    • Groups 2

    Mitr-yuzr

    @Mitr-yuzr

    摸鱼

    这个人很懒,什么都没有留下

    19
    Reputation
    72
    Profile views
    72
    Posts
    2
    Followers
    1
    Following
    Joined Last Online
    Website reincarnatey.net

    Mitr-yuzr Unfollow Follow
    CaptchaFree 摸鱼

    Best posts made by Mitr-yuzr

    • RE: NLPHelper - 自然语言处理模型训练数据采集专用插件

      祝Mirai论坛的各位中秋节快乐。

      其实是因为colab跑模型又被制裁了闲来无事才来写插件的,不算难,但是平时不会直接接触到数据库这么低层(mmkv yyds!),完全是摸着脑袋来的。

      至于后续的训练方式,等我有空了会写一个colab notebook,在另一个板块进行介绍,但是只能说不一定有办法接入。如果感兴趣的话可以点帖子右上角的铃铛关注一下帖子, 开始提前收集数据了……。

      还有就是gpt2样例演示那图确实不妥,截图的时候没看清楚(我只是因为莫名其妙的bug急了!我平时很文明的千万要相信我!),等我找到代替的就换。

      posted in 插件发布
      Mitr-yuzr
      Mitr-yuzr
    • RE: 关于将QQ机器人与深度学习NLP结合的可能性

      我用单向的gpt2训练了另一个模型,效果感觉很容易变成偷语料。作为文本生成来说可能会减分,但我们的目的是学习群友说话,对于短文本来说其实这样正好,应该是加分。

      posted in 技术交流板块
      Mitr-yuzr
      Mitr-yuzr
    • NLPHelper - 自然语言处理模型训练数据采集专用插件

      NLP Helper


      适用于 Mirai 的用于收集NLP语言训练数据的插件。

      Github Project

      Release

      介绍


      什么是NLP?

      以下内容摘自百度百科

      自然语言处理( Natural Language Processing, NLP)是计算机科学领域与人工智能领域中的一个重要方向。它研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法。自然语言处理是一门融语言学、计算机科学、数学于一体的科学。因此,这一领域的研究将涉及自然语言,即人们日常使用的语言,所以它与语言学的研究有着密切的联系,但又有重要的区别。自然语言处理并不是一般地研究自然语言,而在于研制能有效地实现自然语言通信的计算机系统,特别是其中的软件系统。因而它是计算机科学的一部分 [1] 。
      自然语言处理主要应用于机器翻译、舆情监测、自动摘要、观点提取、文本分类、问题回答、文本语义对比、语音识别、中文OCR等方面 [2] 。

      起因

      我前一段时间发布的帖子: 关于将QQ机器人与深度学习NLP结合的可能性

      目的

      制作一个专用于收集NLP语言模型训练数据、方便查询和导出数据的插件。

      功能


      • 收集指定群里的聊天数据 (仅支持 PlainText)
      • 自动过滤emoji,并支持在配置中通过正则表达式进行简单过滤
      • 支持导出JSON格式的数据
      • 支持直接导出模型需要的训练数据的格式 (目前暂时仅支持 GPT2-Chinese 模型)
      • 完全隐蔽式收集数据,聊天环境下所有命令均无回应
      • 数据库安全,相关命令仅限控制台

      声明


      本插件开发目的为学习,在开始采集数据前请先告知群成员,采集所得数据必须保证只在机器学习上使用。严禁用于任何侵犯他人隐私和过度滥用的行为,若因此出现问题本人概不负责。

      快速使用


      • 从 Release 下载本插件并放置于mcl的plugins目录下
      • 登录机器人后,在控制台输入以下命令开始采集数据
        /NLPHelper addGroup 你需要采集数据的群
        
      • 采集数据 (这通常需要花上数周甚至数月)
      • 在控制台输入以下命令导出gpt2数据
        /NLPHelper export gpt2
        
      • 前往 mcl根目录\NLPH\out\ 找到刚才导出的数据
      • 进行模型训练 (这一部分的教程会在之后补充)

      命令


      注意:
      为避免其他插件的功能引发的对话文本污染样本池,请避免在同一个群里同时使用本插件和其他插件。
      如果同时使用 Chat-Command 等其他插件,请注意在过滤词中确保过滤了触发命令的前缀 (如/或#)

      命令均为 /NLPHelper <子命令> [参数...]或使用缩写别名 /nlph <子命令> [参数...] 。

      配置修改命令

      命令 描述
      /NLPHelper addGroup <group> 添加收集数据的群
      /NLPHelper removeGroup <group> 移除群
      /NLPHelper outDir <path> 修改默认输出位置
      /NLPHelper defaultFileName <fileName> 修改默认输出文件名
      /NLPHelper addFilter <filter> 添加过滤词
      /NLPHelper removeFilter <filter> 移除过滤词
      /NLPHelper addConfig <name> <sql> [type] 新建导出配置
      /NLPHelper removeConfig <name> 删除导出配置
      参数 类型 描述 备注
      group Long 启用或移除的群号
      path String 默认导出数据的位置 mcl根目录,默认为./NLPH/out/
      fileName String 默认导出的文件名 默认为NLPHExport_{model}_{count}.json
      filter String 需要过滤的字符 支持正则表达式
      name String 导出配置的名字 大小写敏感,自带三个导出配置 default、json和gpt2

      fileName 文件名变量

      变量 描述
      {model} 选择导出的方式,如: json
      {count} 导出数据数量,如: 114514
      {date} 导出的日期 (yyyyMMdd),如: 20220910
      {time} 导出的时间 (HHmm),如:0930
      {datetime} 导出的日期和时间 (yyyyMMddHHmm),如: 202209100930

      注意:
      若要在聊天环境中使用,需要授予相关权限。

      filter 的过滤是在收集数据时进行的,生效后当检测到消息内容包含过滤词时就不会收集该消息,导出时不会进行过滤!

      请在开始收集前配置好过滤词,否则后续添加的过滤词对此前已经收集的内容不生效,届时可能需要借助辅助程序将导出内容再次过滤。

      数据库相关命令

      命令 描述
      /NLPHelper query [sql] 查询
      /NLPHelper execute <sql> 执行sql语句
      /NLPHelper export [config] [outDir] [fileName] 使用导出配置进行导出
      /NLPHelper exportByConfig [config] [outDir] [fileName] 使用导出配置进行导出
      /NLPHelper exportBySQL [sql] [type] [outDir] [fileName] 使用sql语句进行导出
      参数 类型 描述 备注
      sql String SQL语句 默认为SELECT * FROM NLPH;
      config String 导出配置的名字 默认为default,即导出json
      type String 导出类型 默认为json,目前仅支持json和gpt2

      注意:
      本命令仅支持控制台使用。
      所有sql输入均未作判断和处理直接执行,如有语法问题会catch并报错。其余指令存在sql注入风险,但没必要,因为你可以直接使用execute。

      导出样例

      __

      json

      demo_json.png

      gpt2

      demo_gpt2.png

      注意:
      若追求更好的效果,仍需再进一步过滤噪声

      数据表


      表名为 NLPH

      参数 类型 描述
      sender Long 发送者QQ号
      group Long 消息所在群QQ号
      bot Long 相关机器人QQ号
      content String 消息内容
      size Int 消息长度
      date LocalDate 消息发送日期

      用例

      #查询 123456 发送的消息
      /NLPHelper query "SELECT * FROM NLPH WHERE sender=123456;"
      
      #以json格式导出群 456789 的消息
      /NLPHelper exportBySQL "SELECT * FROM NLPH WHERE group=456789;" json
      
      #以gpt2格式导出 100 字以内的消息
      /NLPHelper exportBySQL "SELECT * FROM NLPH WHERE size<=100;" gpt2
      
      #以gpt2格式导出比较文明的消息
      /NLPHelper exportBySQL "SELECT * FROM NLPH WHERE content NOT LIKE '%妈%';" gpt2
      
      #以json格式导出最新的 100 条消息
      /NLPHelper exportBySQL "SELECT * FROM NLPH ORDER BY date DESC LIMIT 100;" json
      
      #以json格式导出日期在 2022年8月1日-2022年9月1日 且属于机器人 114514 的消息,且仅导出发送人和消息内容
      #/NLPHelper exportBySQL "SELECT sender,content FROM NLPH WHERE (date BETWEEN 20220801 AND 20220901) AND bot=114514;" json
      #经测试发现date实际上仍是时间戳,所以此用例的日期部分不可用,其余部分可以参考
      

      更多高级的使用方法请自行去学习 SQLite

      插件配置


      位于\config\net.reincarnatey.NLPHelper\NLPHConfig.yml

      # 要开启记录消息的群
      group:
        - 123456
      # 当检测到以下内容时不记录该消息,支持正则表达式
      filter:
        - '/'
        - '#'
        - http
      # sql查询语句的配置,数据表详细与简单的sql教程在README.md
      config:
        default:
          sql: 'SELECT * FROM NLPH;'
          type: json
        json:
          sql: 'SELECT * FROM NLPH;'
          type: json
        gpt2:
          sql: 'SELECT * FROM NLPH;'
          type: gpt2
      # 默认导出数据的位置
      outDir: './NLPH/out/'
      # 存放数据库的位置,更改后记得移动NLPH.db至新的位置,重启生效
      dbDir: './NLPH/data/'
      # 默认文件名,模板参数请读README.md
      defaultFileName: 'NLPHExport_{model}_{count}.json'
      

      再次声明


      本开源插件仅为个人使用而编写,遵循Apache Licence2.0开源协议,发布至 MiraiForum ,禁止用于任何违法法律法规、社区规定、网站规则的行为,若出现问题本人概不负责。

      qwq


      后续如果有空大概会发布如何使用导出来的数据训练。

      下一个支持直接导出的模型可能是 GPT2-chitchat
      有需要的话也可以自行修改源码实现 (不过这一部分源码的方法并不友好,本来想尝试使用泛型接口但以失败告终)

      如果有bug的话可以回复或者提issue

      posted in 插件发布
      Mitr-yuzr
      Mitr-yuzr
    • RE: 关于将QQ机器人与深度学习NLP结合的可能性

      这几天试着用一些来自网络的数据集训练了一些gpt2模型,大概有些想法了。  
      打算等有时间先写一个能且仅能收集聊天数据并方便导出数据集的NLP插件,配合colab进行简单的训练和生成。不过具体效果就不知道了。

      posted in 技术交流板块
      Mitr-yuzr
      Mitr-yuzr
    • WhoIsSpy - 谁是卧底小游戏插件

      谁是卧底

      适用于 Mirai 的谁是卧底小游戏插件

      Github Project

      Release

      说明

      虽然其他大佬做过谁是卧底的插件了,但是问题实在太多,且游玩不便,因此自己重写了一个,已经测试过了能正常游玩。

      本插件目的是为了方便发词条、流程控制、统计投票与判断输赢,具体游戏内容仍需玩家自己进行和维护。

      进行游戏最少需要四名玩家,不需要权限和调用命令,请注意设置的命令不要重复或是与其他插件重复。

      添加词库请自行在\data\net.reincarnatey.spy\SpyData.yml中追加。

      使用方法

      使用前

      请确保SpyData.yml词库内存在词条,否则无法正常开始游戏。

      可下载 Release 中附带的data.zip(从网络中收集的约500个词的词库),并将其解压到mcl根目录下。

      游戏规则

      标准模式下,每个玩家会拿到自己的词条,其中卧底的词条与其他人的不一样!每个玩家需要轮流描述自己的词,描述不能重复,若出现自己的词则直接判输。之后进行投票选出卧底。票数最多的玩家将会被淘汰。一直重复下去,直到卧底被淘汰或卧底的人数占剩余玩家总数大于等于三分之一。

      胜利目标

      普通玩家: 将所有卧底淘汰
      卧底: 存活到最后
      白板: 存活到最后

      创建游戏

      在聊天内发送创建谁是卧底即可,接下来进入准备流程。

      也可发送谁是卧底规则查看游戏规则,或发送结束谁是卧底来强制结束游戏。

      准备流程

      发送加入即可加入游戏中,可发送当前玩家可查看已加入的玩家。

      发送模式 编号可以切换至对应的模式

      默认为标准模式,可通过"模式 1/2/3"切换至其他模式
      1.标准模式: 仅有1个卧底
      2.多卧底模式: 适用于人较多的情况,四分之一玩家为卧底
      3.随机白板模式: 将随机一部分玩家为白板(不超过四分之一)

      特殊模式: 所有玩家均为白板。可输入114514切换至该模式,也会随机强制进入该模式(不提醒)。可通过设置配置项的specialModeOdds来修改概率,概率为0时为不启用该模式。

      当 玩家人数 ≥ 4 时,可发送开始以开始游戏。

      词条分发

      将会自动私聊每一位玩家发送该玩家的词条 (若为白板则无词条内容,但是会发送私聊提醒)。
      为避免收不到消息的特殊情况,推荐所有玩家开始游戏前先添加好友。

      描述阶段

      未被淘汰的每名玩家需要轮流用一句话描述自己的词语。

      插件只会记录是否所有人都发言过了,需要玩家自觉按序描述,不推荐该阶段进行交流。
      如果描述中包含有该玩家的词语,则会直接判为违反规则并立即结束游戏。

      当剩余所有玩家都描述后,由其中一名玩家发送结束以结束描述阶段。

      投票阶段

      未被淘汰的每名玩家需要发送投票 编号进行投票。

      该阶段可进行交流分析和推理。
      淘汰的玩家不可投票,玩家不可投给淘汰的玩家,玩家可以投给自己,当玩家投给编号0时表示弃票。

      最后获得票数最多的被淘汰,平票时不淘汰,剩余玩家回到描述阶段继续进行游戏,直到满足游戏结束条件。

      剩余3名玩家、卧底被淘汰、卧底人数大于等于剩余玩家总数的三分之一

      游戏结束

      结束时会公开普通词条与卧底词条,并公开所有参与玩家的身份。
      之后可再次通过创建谁是卧底重新开始游戏。

      插件配置

      位于\config\net.reincarnatey.spy\SpyConfig.yml

      # 创建触发器
      createTriggers: 
        - 创建谁是卧底
      # 加入触发器
      joinTriggers: 
        - 加入
        - 加入谁是卧底
      # 当前玩家触发器
      showTriggers: 
        - 当前玩家
        - 玩家列表
      # 切换模式触发器
      modeTriggers: 
        - 模式
        - 切换模式
      # 开始触发器
      startTriggers: 
        - 开
        - 开始
        - go
      # 描述结束触发器
      nextTriggers: 
        - 结束
      # 投票触发器
      voteTriggers: 
        - 投票
        - vote
        - 投
      # 强制结束触发器
      stopTriggers: 
        - 结束谁是卧底
      # 规则触发器
      ruleTriggers: 
        - 谁是卧底规则
      # 创建消息
      createMessage: "创建成功~\n请输入\"加入\"加入游戏!\n人数大于三人后可输入\"开始\"开始游戏!"
      # 重复创建消息
      alreadyCreateMessage: "游戏已存在!当前玩家{num}人,可\n请输入\"加入\"加入游戏!输入\"谁是卧底规则\"查看规则,\n人数大于三人后可输入\"开始\"开始游戏!"
      # 加入消息
      joinMessage: "加入成功~\n当前玩家{num}人"
      # 重复加入消息
      alreadyJoinMessage: "你已经加入过了!\n当前玩家{num}人"
      # 游戏进行中消息
      inGamingMessage: 游戏正在进行中!
      # 当前玩家消息
      showMessage: '当前玩家: {player_list}'
      # 词条消息
      wordMessage: '你的词条: {word}'
      # 白板消息
      whiteMessage: 你的词条——欸?!你没有词条呢,多观察一下他人的发言并模仿吧!
      # 强制结束消息
      stopMessage: 游戏已结束!
      # 模式提醒消息
      modeMessage: "默认为标准模式,可通过\"模式 1/2/3\"切换至其他模式\n1.标准模式: 仅有1个卧底\n2.多卧底模式: 适用于人较多的情况,四分之一玩家为卧底\n3.随机白板模式: 将随机一部分玩家为白板(不超过四分之一)"
      # 切换模式消息
      switchModeMessage: '已切换至{mode}!'
      # 模式不存在消息
      noModeMessage: 该模式不存在!
      # 特殊模式消息
      specialModeMessage: 游戏模式好像变得奇怪了!
      # 卧底胜利消息
      spyWinMessage: 游戏结束啦!卧底获得胜利!
      # 卧底失败消息
      spyLostMessage: 游戏结束啦!卧底输了!
      # 特殊模式结束消息
      specialModeEndMessage: 游戏结束啦!本轮没有玩家获胜,因为本轮为【特殊模式】,全部玩家都是白板!
      # 不知道谁赢消息
      normalEndMessage: "游戏结束啦!以下玩家获得胜利:\n{win_list}"
      # 描述阶段消息
      descriptionMessage: "描述阶段!请按照以下顺序轮流用一句话描述自己的词语(但不可以包含自己的词语),所有人均描述完毕后发送\"{nextTriggers}\"进入下一阶段。\n{player_list}"
      # 投票消息
      voteMessage: "投票阶段!请输入\"投票 编号\"进行投票,所有人均描述完毕后自动进入下一回合。\n0. 弃票\n{player_list}"
      # 规则
      rule: 标准模式下,每个玩家会拿到自己的词条,其中卧底的词条与其他人的不一样!每个玩家需要轮流描述自己的词,描述不能重复,若出现自己的词则直接判输。之后进行投票选出卧底。票数最多的玩家将会被淘汰。一直重复下去,直到卧底被淘汰或卧底的人数占剩余玩家总数大于等于三分之一。
      # 强制进入特殊模式(不通知)的概率,可填0-100,对应0%-100%的概率,为0时就是禁用特殊模式 。特殊模式: 所有玩家均为白板,只剩下3名玩家时结束。该模式也可通过"切换模式 114514"进入。
      specialModeOdds: 5
      # 私聊发送消息间隔时间 (防被封)
      delay: 1000
      

      声明

      本开源插件仅为个人使用而编写,遵循Apache Licence2.0开源协议,发布至 MiraiForum ,禁止用于任何违法法律法规、社区规定、网站规则的行为,若出现问题本人概不负责。

      qwq

      本项目开源,需要功能建议自行修改并编译
      如果有bug的话可以回复或者提issue

      posted in 插件发布
      Mitr-yuzr
      Mitr-yuzr
    • RE: 关于将QQ机器人与深度学习NLP结合的可能性

      插件已经做好了,下一步打算尝试训练
      NLPHelper - 自然语言处理模型训练数据采集专用插件

      posted in 技术交流板块
      Mitr-yuzr
      Mitr-yuzr
    • RE: NLPHelper - 自然语言处理模型训练数据采集专用插件

      @南栀沁寒 /NLPHelper exportBySQL "SELECT * FROM NLPH WHERE sender!=123456;" gpt2

      posted in 插件发布
      Mitr-yuzr
      Mitr-yuzr
    • RE: Bot定时主动发送一条消息

      通过kotlin的Task和Timer实现,可以参考我写的定时请求插件

      posted in 技术交流板块
      Mitr-yuzr
      Mitr-yuzr
    • RE: WhoIsSpy - 谁是卧底小游戏插件

      1.1 已更新
      可在配置文件中修改delay项,该配置意为在发送身份时私聊的间隔时长,单位为毫秒,为防止被腾讯检测为传销,需要调到一定大小
      可以在release中下载最新1.1版本的插件

      posted in 插件发布
      Mitr-yuzr
      Mitr-yuzr
    • RE: 关于将QQ机器人与深度学习NLP结合的可能性

      @南栀沁寒 这几天一定()

      posted in 技术交流板块
      Mitr-yuzr
      Mitr-yuzr

    Latest posts made by Mitr-yuzr

    • RE: [新]服务器被墙了

      貌似……又挂了……

      posted in 官方公告
      Mitr-yuzr
      Mitr-yuzr
    • RE: CAIbot-连接ai乌托邦与qq聊天机器人

      @Touch-Night 群机器人开关建议更改为群白名单。而连续对话这个想法或许会有不错的效果,但实际上还是有办法进行一些简单的判断的,例如下一条对话如果在at或回复其他群成员则可以认为停止,如果在开头使用“你”则可以认为大概率在与ai对话。

      关于使用正则对角色名进行匹配,确实基于乌托邦AI的聊天机制可能会导致问题,但该功能的价值应当是大于带来的问题的,至少在我一年来的CaiyunAI对话体验中是如此。

      模拟真人的话,延迟发送消息是一个很好的主意,除此之外,还可以尝试添加别名/小名(请求时替换回角色名),对ai较长的回复分割成多条消息间隔一定时长发送等,对回复中关键词进行匹配并附上相应表情包图片等。

      posted in 插件发布
      Mitr-yuzr
      Mitr-yuzr
    • RE: CAIbot-连接ai乌托邦与qq聊天机器人

      @Touch-Night 在 CAIbot-连接ai乌托邦与qq聊天机器人 中说:

      在聊天内容中包含提及机器人

      请问这个“提及”包不包括在普通聊天中提到角色名以及回复消息但不进行at?在消息尾部at是否会删除(在电脑用户中尾部at是很常见的情况)?

      希望使用正则优化匹配,实现包括“亚——托——莉——”这样的匹配提及(可以使用正则中的匹配实现,如果不会正则的话可以私聊我我来提供)。

      另外,希望参考实现类似于CaiyunAI插件的追答功能(在at或回复后连续一定条数消息在判断和过滤后直接当做连续的对话,而无需再次提及)以及定时自动重启对话(比如在8小时未进行聊天后自动重启对话)。

      AI乌托邦对于实现自己oc或虚拟人物的AI对话很有帮助,拥有其他AI所无法超越的效果,大家互相帮助交流,希望本插件做的更好,也期待未来的更新。

      posted in 插件发布
      Mitr-yuzr
      Mitr-yuzr
    • RE: 牛牛对决(借鉴+整活)

      新的版本很有意思!希望能增加更多玩法(比如如果更新了对象功能的话希望能有更多玩法)
      期待更新

      posted in 插件发布
      Mitr-yuzr
      Mitr-yuzr
    • RE: 请问一下这是什么回事,mirai无法启动。

      @wuchen4588 建议再检查一下是不是有多个版本?因为我遇到这个问题的时候就是因为自动更新不会删除曾经的版本,除此之外我没有其他头绪了。

      posted in 使用交流
      Mitr-yuzr
      Mitr-yuzr
    • RE: 请问一下这是什么回事,mirai无法启动。

      根据经验应该是mirai-api-http冲突了?使用mcl的update经常会有不会自动删除以前的版本,就会有这个问题。建议检查一下mirai-api-http是不是存在多个版本,删掉旧的版本就好了

      posted in 使用交流
      Mitr-yuzr
      Mitr-yuzr
    • RE: TimerRequestor - 用于每日签到、打卡等功能的定时自动GET请求插件

      @sjxkfnskdd 本插件的功能是模拟发起网络请求以实现签到(如某些网络论坛、某些资源网站等),不能直接实现“群打卡”。建议在了解相关网络内容后使用。

      posted in 插件发布
      Mitr-yuzr
      Mitr-yuzr
    • RE: 牛牛对决(借鉴+整活)

      @何梓Black 在 【停更】牛牛对决(借鉴+整活) 中说:

      内容即使没有对象也是可以贴贴的

      是的,但是贴贴增加的长度会很短甚至可能为负,至少我们群的成员已经出现长度过小后一蹶不振了。

      posted in 插件发布
      Mitr-yuzr
      Mitr-yuzr
    • RE: 牛牛对决(借鉴+整活)

      希望能在牛牛长度小于1的时候判定为死亡或者放生(?),若没有对象的话牛牛只会变得越来越短。

      posted in 插件发布
      Mitr-yuzr
      Mitr-yuzr
    • RE: 牛牛对决(借鉴+整活)

      @何梓Black 原来如此。做的很有意思,期待更新!

      posted in 插件发布
      Mitr-yuzr
      Mitr-yuzr