StarCoder附录A代码注释

附录A中的这段代码是用于过滤GitHub Issues中的自动化文本和机器人评论,以确保数据集中仅保留高质量的人类讨论内容。以下是各部分的详细解释:


1. 过滤自动化邮件文本(GITHUB_EMAILS)

GITHUB_EMAILS = [
    re.compile(pattern, re.DOTALL)
    for pattern in [
        "(.*)From:.+Reply to this email directly.+view it on GitHub(.*)\n?(.*)",
        "(.*)On.+notifications@github.com.+wrote:.+Reply to this email directly.+view it on GitHub(.*)\n?(.*)",
        "(.*)Signed-off-by: .+<.+>(.*?)\n?(.*)",
    ]
]
  • 目的:匹配并移除通过GitHub邮件系统自动回复的内容。
  • 关键模式
    • From:...Reply to this email directly:匹配邮件中的发件人信息和回复提示。
    • On...notifications@github.com...wrote::匹配GitHub通知邮件的格式(如“On 2023-01-01 at 12:00, user wrote...”)。
    • Signed-off-by: ...<...>:匹配提交签名(如Git提交中的签名)。
  • re.DOTALL标志:使正则表达式中的 . 匹配换行符,确保多行内容也能被匹配。
  • 示例匹配内容
    From: <EMAIL>
    Reply to this email directly at [link] or view it on GitHub.

2. 过滤邮件日期和分隔符(GITHUB_EMAIL_DATEGITHUB_EMAIL_LINEBREAK)

GITHUB_EMAIL_DATE = re.compile("\d+/\d+/\d+ \d{2}:\d{2} [AP]M.+wrote")
GITHUB_EMAIL_LINEBREAK = re.compile("_{20,}")
  • GITHUB_EMAIL_DATE:匹配邮件中的日期格式(如 12/31/2022 05:30 PM wrote)。
  • GITHUB_EMAIL_LINEBREAK:匹配由20个以上下划线组成的分隔线(如 ____________________),这些通常是邮件中的格式分隔符。

3. 移除指定机器人作者的评论(BOT_AUTHORS)

BOT_AUTHORS = [
    "Apache-HBase", "AutorestCI", "CLAassistant", "cmsbuild", 
    "codecov-io", "codecov-commenter", "coveralls", "danger-public", 
    "dnfclas", "msftclas", "PyDocTeur", "SparkQA", "karma-pr-reporter", 
    "danger-public", "claassistantio", "probot-stale"
]
  • 目的:直接排除已知的自动化工具或机器人账户(如CLA助手、测试机器人)。
  • 示例:用户名为 CLAassistant 的评论会被过滤。

4. 按关键词过滤机器人评论(BOT_KEYWORDS)

BOT_KEYWORDS = ["[bot]", "botmanager", "bors-", "jenkins", "k8s-", "-test-", "travis"]
  • 目的:如果评论作者的用户名包含这些关键词,则认为是机器人。
  • 示例
    • 用户名包含 [bot](如 dependabot[bot])。
    • 用户名包含 jenkins(如 ci-jenkins)。

5. 按后缀过滤机器人评论(BOT_SUFFIXES)

BOT_SUFFIXES = [
    "-automaton", "-automation", "-benchmark", "-build", "-deployer", 
    "-cloud", "bot", "-ci", "-linter", "-teamcity", "-test", "-testing", 
    "-Service-Account"
]
  • 目的:如果评论作者的用户名以这些后缀结尾,则认为是机器人。
  • 示例
    • 用户名以 -bot 结尾(如 github-actions-bot)。
    • 用户名以 -ci 结尾(如 circleci)。

6. 过滤逻辑总结

  1. 移除自动化邮件内容
    使用 GITHUB_EMAILS 等正则表达式过滤掉通过邮件系统自动回复的内容。
  2. 移除机器人评论
    • 直接匹配 BOT_AUTHORS 中的用户名。
    • 检查用户名是否包含 BOT_KEYWORDS 或以 BOT_SUFFIXES 结尾。
  3. 保留高质量人类讨论
    过滤后的数据仅包含真实开发者之间的技术讨论,避免机器人生成的噪声(如自动测试报告、CI状态更新)。

7. 为什么需要这些过滤?

  • 数据质量:机器人评论通常是模板化内容(如“Build failed”),缺乏上下文关联性。
  • 隐私合规:自动化邮件可能包含敏感信息(如内部日志)。
  • 模型训练效率:减少冗余数据,提升模型对真实问题(如代码修复、需求讨论)的理解能力。

示例场景

假设一个GitHub Issue评论内容如下:

On 2023-01-01 12:00 PM, notifications@github.com wrote:
This is an automated test message.
Signed-off-by: Test Bot <<EMAIL>>
  • 匹配规则
    • GITHUB_EMAILS 的第二个模式匹配(包含 notifications@github.com)。
    • BOT_KEYWORDSbot 关键词匹配。
  • 结果:该评论会被过滤,不进入训练数据集。

通过这些规则,The Stack 数据集确保了GitHub Issues部分的数据纯净度。

这段代码是用 Python 的 re 模块(正则表达式库)定义了一个列表 GITHUB_EMAILS,其中包含三个预编译的正则表达式模式。这些模式的目的是匹配并过滤 GitHub Issues 或 Pull Requests 中的自动化邮件内容,确保数据集中仅保留人类生成的高质量技术讨论。以下是逐层解析:


1. 代码结构

GITHUB_EMAILS = [
    re.compile(pattern, re.DOTALL)  # 编译正则表达式模式
    for pattern in [                # 遍历三个模式字符串
        # 第一个模式
        "(.*)From:.+Reply to this email directly.+view it on GitHub(.*)\n?(.*)",
        # 第二个模式
        "(.*)On.+notifications@github.com.+wrote:.+Reply to this email directly.+view it on GitHub(.*)\n?(.*)",
        # 第三个模式
        "(.*)Signed-off-by: .+<.+>(.*?)\n?(.*)",
    ]
]
  • re.compile(pattern, re.DOTALL)
    将字符串模式编译为正则表达式对象,re.DOTALL 标志使 . 匹配包括换行符在内的所有字符。
  • 列表推导式
    对三个模式字符串分别编译,最终生成一个包含三个正则表达式对象的列表。

2. 每个模式的具体作用

(1) 第一个模式:匹配邮件发件人信息
"(.*)From:.+Reply to this email directly.+view it on GitHub(.*)\n?(.*)"
  • 匹配内容
    GitHub 邮件系统自动回复的发件人信息和回复提示,例如:
    From: <EMAIL>
    Reply to this email directly at [link] or view it on GitHub.
  • 关键部分
    • From:.+:匹配 From: 后的任意内容。
    • Reply to this email directly:匹配固定的邮件回复提示。
    • view it on GitHub:匹配 GitHub 链接提示。
    • \n?(.*):匹配可选的换行符和后续内容(如果存在)。
(2) 第二个模式:匹配邮件通知格式
"(.*)On.+notifications@github.com.+wrote:.+Reply to this email directly.+view it on GitHub(.*)\n?(.*)"
  • 匹配内容
    GitHub 通知邮件的格式(如“On 2023-01-01 at 12:00, user wrote...”),例如:
    On 2023-01-01 12:00 PM, notifications@github.com wrote:
    This is an automated test message.
    Reply to this email directly at [link] or view it on GitHub.
  • 关键部分
    • On.+notifications@github.com:匹配日期和 GitHub 通知邮箱。
    • wrote:.+:匹配“wrote:”后的任意内容。
(3) 第三个模式:匹配 Git 提交签名
"(.*)Signed-off-by: .+<.+>(.*?)\n?(.*)"
  • 匹配内容
    Git 提交中的签名(如开发者签署的邮箱),例如:
    Signed-off-by: <NAME> <<EMAIL>>
  • 关键部分
    • Signed-off-by: .+<.+>:匹配 Signed-off-by: 后的姓名和邮箱。
    • (.*?)\n?(.*):匹配可选的换行符和后续内容(非贪婪匹配)。

3. 使用场景

这段代码用于 过滤 GitHub Issues 数据中的自动化邮件内容,属于 The Stack 数据集预处理的一部分。具体流程如下:

  1. 数据来源:GitHub Issues 和 Pull Requests 的讨论内容(包含邮件回复)。
  2. 过滤目标:移除机器人或自动化工具生成的内容(如 CI/CD 测试报告、邮件通知)。
  3. 实现方式
    • 遍历每条评论,使用 GITHUB_EMAILS 中的正则表达式匹配自动化邮件内容。
    • 若匹配成功,则过滤该评论(避免进入训练数据集)。

4. 示例说明

假设一条 GitHub Issue 评论内容如下:

From: <EMAIL>
Reply to this email directly at [link] or view it on GitHub.
This is an automated test message.
Signed-off-by: Test Bot <<EMAIL>>
  • 匹配结果
    • 第一个模式匹配 From: ... 行。
    • 第二个模式匹配 On ... notifications@github.com ... 行。
    • 第三个模式匹配 Signed-off-by: ... 行。
  • 过滤逻辑
    该评论包含自动化邮件内容,会被标记为无效数据并移除。

5. 为什么需要这些过滤?

  • 数据质量:机器人评论通常是模板化内容(如“Build failed”),缺乏上下文关联性。
  • 隐私合规:自动化邮件可能包含敏感信息(如内部日志)。
  • 模型训练效率:减少冗余数据,提升模型对真实问题(如代码修复、需求讨论)的理解能力。

总结

这段代码通过三个正则表达式模式,精准匹配 GitHub Issues 中的自动化邮件内容,并将其过滤,确保训练数据集仅包含高质量的人类技术讨论。这种预处理步骤对代码生成模型(如 StarCoder)的训练至关重要,能够显著提升模型生成代码的实用性和关联性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值