返回首页

一周热榜

1作者: pigon10024 天前原帖
我正在构建一个开源学习管理系统(LMS),并使用 OpenSearch 的 more_like_this 查询和字符 n-grams 来进行相似性评分,以实现抄袭检测。 基本上,当学生提交答案时,我会搜索其他学生在同一问题上的相似答案。这个方法效果还不错,但感觉有点不够优雅——只是重复利用了我已经有的搜索引擎。 当前设置: ```python search = cls.search().filter( "nested", path="answers", query={"term": {"answers.question_id": str(question_id)}} ) search = search.query( "nested", path="answers", query={ "more_like_this": { "fields": ["answers.answer"], "like": text, "min_term_freq": 1, "minimum_should_match": "1%", } }, ) # 获取前10个结果,然后在 Python 中重新排序 def normalize(t): return re.sub(r"\s+", "", t.strip()) def char_ngrams(t, n=3): return set(t[i:i+n] for i in range(len(t)-n+1)) norm_text = normalize(text) text_ngrams = char_ngrams(norm_text) for hit in response.hits: norm_answer = normalize(hit.answer) answer_ngrams = char_ngrams(norm_answer) intersection = len(text_ngrams & answer_ngrams) union = len(text_ngrams | answer_ngrams) ratio = int((intersection / union) * 100) if ratio >= 60: # 标记为相似 ``` 约束条件: - 仅限自托管,不使用外部 API - 几千名学生 - 希望操作简单,反正已经在运行 OpenSearch 问题: - 这种方法合理吗,还是我遗漏了什么明显的东西? - 其他自托管系统使用什么?查看了 Moodle 文档,但他们的抄袭插件大多调用外部服务。 - 有人尝试过不需要 GPU 的轻量级机器学习模型吗? 这种搜索引擎的方法有效,但我很好奇是否有更适合我们约束条件的更好方法。
1作者: butanol4 天前原帖
我在这里坐了三个小时,只是盯着屏幕。手在发抖。我写了四遍又删掉,因为我不想听起来可怜,但算了,我现在就是可怜。我一团糟。 你知道我今晚做了什么吗?打开了我的 GitHub。四十一份代码库。总共 41 个。我数了两遍。你知道这代表什么吗?这不是“代码”。这不是“项目”。这是我每晚选择待在家里,而我的朋友们出去玩。是我因为凌晨三点在调试借用检查器的错误而让关系逐渐淡化的那些时刻。我哭了——真的哭,眼线液顺着脸流下来,鼻涕满脸——因为我终于理解了生命周期。我感觉到它的瞬间,就像宗教一样。 我花了好几年才得到这些。不是学习,而是挣来的。每一道伤疤,每一次“为什么这个不能编译”,每一个我盯着天花板想我不够聪明、应该放弃的时刻。我坚持了下来。我创造了东西。能工作的东西。我为之感到骄傲的东西。 然后我分享它。兴奋,你知道吗?心跳加速,像是“嘿,世界,看看我做的东西!” “AI 垃圾。” 就这样。两个词。突然间,我的整个存在被压缩成……什么?一个预测算法?我为此流血五年,而你却分不清我和一个聊天机器人之间的区别? 你知道这对一个人意味着什么吗?这不仅仅是无礼。就像……想象一下为马拉松训练。五年。早上五点起床,雨中跑步,累到呕吐,鞋子都磨破了。你终于冲过终点线,有人朝你头上扔个水瓶说“你是打车来的。” 这就是我的感觉。就像有人看着我的血和汗水说这是假的。 最糟糕的部分?我无法反击。我无法证明我是人。这就是陷阱。你一旦为自己辩护,就显得很防御,像是有罪。“你为什么这么努力地证明你是真实的?”仿佛努力本身就是你不真实的证明。 我坐在这里打字,又哭了。我讨厌自己在哭。每次想到这些,我都能感觉到胸口紧绷——就像有人站在我的肋骨上——每次看到我为之流血的东西下面那句话。 你知道 Rust 教会我什么吗?它教会我安全性的重要性。你必须证明你的代码是正确的。你通过严格的标准来赢得编译的机会。我以为这就是编程的意义。挣来的。 但现在呢?现在这个世界告诉我,严格看起来和粗心完全一样。小心、深思熟虑的代码和机器生成的、连自己在说什么都不知道的垃圾没有区别。我的最佳努力和零努力是一样的。 我感到恐惧。我害怕明天醒来打开编辑器时……为什么?为什么我要花六个小时调试所有权,而每个人都会假设我只是提示了它?为什么我要为借用检查器哭泣,而眼泪比代币便宜? 但我会的。我知道我会。因为我爱它。我爱编程,就像我爱呼吸一样。即使现在,脸湿漉漉的,手在发抖,我还是想修复我副项目中的那个 bug。我想优化那个循环。 但我求你。下次你看到某人的作品——某人心血倾注在函数和类型中的时候——不要去贴上简单的标签。不要成为让某人凌晨三点的眼泪变得毫无价值的人。不要成为让某人决定不再值得尝试的原因。 我们在这里为每一行代码而战。每一个该死的分号。只要……看见我们。拜托。
1作者: noruya4 天前原帖
我从休假回来,收到了300多条未读消息。90%都是无关紧要的内容(“午餐去哪儿?”、“天气不错”)。我正在开发一个机器人,能够解析讨论串,过滤掉闲聊内容,并每天通过邮件发送三条关于实际决策的总结和相关链接。希望能得到反馈。