LLM proj - 审稿大模型

常用数据处理

主要是四种方式:正则表达式、AC自动机、困惑度过滤低质文本、最小哈希算法实现文本去重

1. 正则表达式,去做一些模式匹配

ex:

论文的评审内容有时会存在大量列举reference(参考文献)的情况

这些reference会占据大量的评审内容篇幅

且多数情况下仅为参考文献的标题、年份等无意义信息

比如将数据集中,每条评审中reference部分给替换成""

2. AC自动机词库匹配

应用场景:

  1. 从大量文本中匹配出预设词库中的敏感词。

  2. 从大量文本中判断是否存在预设词库中的某些词。

传统的低效做法是:遍历词库,对于词库中每个词都在目标文本中查询一遍。

AC自动机的方法是,对于词库中的内容构建一个前缀树,对于目标文本只需要过一遍就能知道是否存在词库中的词

EX:

  1. 构建树

通过这些模式字符串的公共前缀来进行构造

  1. 在相应节点定义接收态。

每当能构成一个模式,那么这个模式对应的最后一个节点就是接收态,图中红色就是接收态,

每个接收态会存储其对应的回溯长度

3.为树的每个节点定义失败路径机制。

失败路径机制:

位于当前节点无法再进一步往下匹配时,将指向其"节点路径的最大后缀同值节点"(如下图的橙色箭头),

如果 不存在"节点路径的最大后缀同值节点",则指向根节点(如下图的紫色箭头代表指向根节点)。

例如"she"最大后缀就是he,刚好树种有对应其他位置的he,就是他们的同值节点,比如当she走完之后发现没法再进行匹配时,就会调到另一个e上继续做匹配

然后还会拷贝失败路径对应接受态,也就是另一个e的回溯长度,2

这样有个好处,会把长路径中蕴含的短路径(模式)也可以记录到

比如在匹配aasherhsy时,前两个a,匹配不到,均是从根节点回到自身,从s开始,一直匹配到she,然后回溯,此时到e时由于存储了两个回溯长度,一个回溯三次,一个回溯两次,所以把she 、he都会算进去,she后匹配不到r,然后就跳转到最大后缀同值节点上,就是另一个e,再往下,刚好可以匹配到r,r是接收态,所以会再次回溯,her也匹配到了,r往后匹配不到了,也没有最大后缀同值节点,于是就跳转回根节点,以此类推。

3. 困惑度过滤低质文本

就是利用一些早期的LM,通过去计算loss,来得到文本的困惑度,困惑度越高就越容易不是一个通顺的句子

LM的loss就是,分解到每一步,每一步都是以前面生成token为依据,生成当前token的概率然后取log。 每一步求和,取负数,求平均。

困惑度的计算方式是

就是每一步的生成概率累乘起来然后开T次方(文本长度)

有:ppl = exp(loss)

关于loss的计算方式,label就是原始文本错一位即可,比如"我爱上学",label就是"爱上学",就是每个token的next token,就是label

计算结果示例:

可以看到语句不通顺的句子,困惑度非常高

困惑度这个指标其实不好设定相关的阈值,一般来说是,取一批样本,计算完困惑度之后按困惑度进行倒排,然后通过人为判定,取一个分位点,按照分位点对应的值再做筛选

4. 最小哈希算法实现文本去重

文本去重一般使用Jaccard相似度

就是交集的token数除以并集的token数。

但是这种方法在计算多文本以及长文本的时候计算量太大,速度慢

于是有一种近似的方法,就是minhash

步骤:

  1. 首先构造一个矩阵

类似于一个词袋模型

(这里看来,每个文本对应的向量就是[1,1,1,1], [0,1,1,1], [1,0,0,1])

  1. 行打乱

每个文本记录第一个1出现的位置对应的行号,S1S2S3分别是0,0,2,此时S1向量就是[1]

第二次打乱

S1S2S3分别是0,1,0,此时S1的向量就是[0,0]

循环进行

假设打乱了三次,S1,S2,S3分别得到一个三维向量

计算相似度

两两相似度就是,看对应位置是否相等,相等就是1否则为0,然后除以向量长度

假设原始向量长度是2000,那么我们可以通过这种方式降维到256,512等,通过这种minhash的方式来近似jaccard的结果

但是这种方式在计算的文档数过多时,还是不够快

于是在minhash基础上再引入LSH,LSH指Locality Sensitive Hashing(局部敏感哈希)

通过给minhash产生的向量进行分块,先从第一个块开始计算,若两个向量第一个块开始相似度就不够高,那么就不用再计算下去了,相当于做了一个快速的初筛

相关推荐
网易独家音乐人Mike Zhou3 小时前
【卡尔曼滤波】数据预测Prediction观测器的理论推导及应用 C语言、Python实现(Kalman Filter)
c语言·python·单片机·物联网·算法·嵌入式·iot
Swift社区7 小时前
LeetCode - #139 单词拆分
算法·leetcode·职场和发展
Kent_J_Truman7 小时前
greater<>() 、less<>()及运算符 < 重载在排序和堆中的使用
算法
IT 青年8 小时前
数据结构 (1)基本概念和术语
数据结构·算法
Dong雨8 小时前
力扣hot100-->栈/单调栈
算法·leetcode·职场和发展
SoraLuna8 小时前
「Mac玩转仓颉内测版24」基础篇4 - 浮点类型详解
开发语言·算法·macos·cangjie
liujjjiyun9 小时前
小R的随机播放顺序
数据结构·c++·算法
¥ 多多¥9 小时前
c++中mystring运算符重载
开发语言·c++·算法
trueEve10 小时前
SQL,力扣题目1369,获取最近第二次的活动
算法·leetcode·职场和发展
天若有情67310 小时前
c++框架设计展示---提高开发效率!
java·c++·算法