[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"similar-NorskRegnesentral--skweak":3,"tool-NorskRegnesentral--skweak":61},[4,18,26,36,44,53],{"id":5,"name":6,"github_repo":7,"description_zh":8,"stars":9,"difficulty_score":10,"last_commit_at":11,"category_tags":12,"status":17},4358,"openclaw","openclaw\u002Fopenclaw","OpenClaw 是一款专为个人打造的本地化 AI 助手，旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚，能够直接接入你日常使用的各类通讯渠道，包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息，OpenClaw 都能即时响应，甚至支持在 macOS、iOS 和 Android 设备上进行语音交互，并提供实时的画布渲染功能供你操控。\n\n这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地，用户无需依赖云端服务即可享受快速、私密的智能辅助，真正实现了“你的数据，你做主”。其独特的技术亮点在于强大的网关架构，将控制平面与核心助手分离，确保跨平台通信的流畅性与扩展性。\n\nOpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者，以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力（支持 macOS、Linux 及 Windows WSL2），即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你",349277,3,"2026-04-06T06:32:30",[13,14,15,16],"Agent","开发框架","图像","数据工具","ready",{"id":19,"name":20,"github_repo":21,"description_zh":22,"stars":23,"difficulty_score":10,"last_commit_at":24,"category_tags":25,"status":17},3808,"stable-diffusion-webui","AUTOMATIC1111\u002Fstable-diffusion-webui","stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面，旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点，将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。\n\n无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师，还是想要深入探索模型潜力的开发者与研究人员，都能从中获益。其核心亮点在于极高的功能丰富度：不仅支持文生图、图生图、局部重绘（Inpainting）和外绘（Outpainting）等基础模式，还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外，它内置了 GFPGAN 和 CodeFormer 等人脸修复工具，支持多种神经网络放大算法，并允许用户通过插件系统无限扩展能力。即使是显存有限的设备，stable-diffusion-webui 也提供了相应的优化选项，让高质量的 AI 艺术创作变得触手可及。",162132,"2026-04-05T11:01:52",[14,15,13],{"id":27,"name":28,"github_repo":29,"description_zh":30,"stars":31,"difficulty_score":32,"last_commit_at":33,"category_tags":34,"status":17},1381,"everything-claude-code","affaan-m\u002Feverything-claude-code","everything-claude-code 是一套专为 AI 编程助手（如 Claude Code、Codex、Cursor 等）打造的高性能优化系统。它不仅仅是一组配置文件，而是一个经过长期实战打磨的完整框架，旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。\n\n通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能，everything-claude-code 能显著提升 AI 在复杂任务中的表现，帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略，使得模型响应更快、成本更低，同时有效防御潜在的攻击向量。\n\n这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库，还是需要 AI 协助进行安全审计与自动化测试，everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目，它融合了多语言支持与丰富的实战钩子（hooks），让 AI 真正成长为懂上",156804,2,"2026-04-15T11:34:33",[14,13,35],"语言模型",{"id":37,"name":38,"github_repo":39,"description_zh":40,"stars":41,"difficulty_score":32,"last_commit_at":42,"category_tags":43,"status":17},2271,"ComfyUI","Comfy-Org\u002FComfyUI","ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎，专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式，采用直观的节点式流程图界面，让用户通过连接不同的功能模块即可构建个性化的生成管线。\n\n这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景，也能自由组合模型、调整参数并实时预览效果，轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性，不仅支持 Windows、macOS 和 Linux 全平台，还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构，并率先支持 SDXL、Flux、SD3 等前沿模型。\n\n无论是希望深入探索算法潜力的研究人员和开发者，还是追求极致创作自由度的设计师与资深 AI 绘画爱好者，ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能，使其成为当前最灵活、生态最丰富的开源扩散模型工具之一，帮助用户将创意高效转化为现实。",108322,"2026-04-10T11:39:34",[14,15,13],{"id":45,"name":46,"github_repo":47,"description_zh":48,"stars":49,"difficulty_score":32,"last_commit_at":50,"category_tags":51,"status":17},6121,"gemini-cli","google-gemini\u002Fgemini-cli","gemini-cli 是一款由谷歌推出的开源 AI 命令行工具，它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言，它提供了一条从输入提示词到获取模型响应的最短路径，无需切换窗口即可享受智能辅助。\n\n这款工具主要解决了开发过程中频繁上下文切换的痛点，让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用，还是执行复杂的 Git 操作，gemini-cli 都能通过自然语言指令高效处理。\n\n它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口，具备出色的逻辑推理能力；内置 Google 搜索、文件操作及 Shell 命令执行等实用工具；更独特的是，它支持 MCP（模型上下文协议），允许用户灵活扩展自定义集成，连接如图像生成等外部能力。此外，个人谷歌账号即可享受免费的额度支持，且项目基于 Apache 2.0 协议完全开源，是提升终端工作效率的理想助手。",100752,"2026-04-10T01:20:03",[52,13,15,14],"插件",{"id":54,"name":55,"github_repo":56,"description_zh":57,"stars":58,"difficulty_score":32,"last_commit_at":59,"category_tags":60,"status":17},4721,"markitdown","microsoft\u002Fmarkitdown","MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具，专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片（含 OCR）、音频（含语音转录）、HTML 乃至 YouTube 链接等多种格式的解析，能够精准提取文档中的标题、列表、表格和链接等关键结构信息。\n\n在人工智能应用日益普及的今天，大语言模型（LLM）虽擅长处理文本，却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点，它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式，成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外，它还提供了 MCP（模型上下文协议）服务器，可无缝集成到 Claude Desktop 等 LLM 应用中。\n\n这款工具特别适合开发者、数据科学家及 AI 研究人员使用，尤其是那些需要构建文档检索增强生成（RAG）系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性，但其核心优势在于为机器",93400,"2026-04-06T19:52:38",[52,14],{"id":62,"github_repo":63,"name":64,"description_en":65,"description_zh":66,"ai_summary_zh":66,"readme_en":67,"readme_zh":68,"quickstart_zh":69,"use_case_zh":70,"hero_image_url":71,"owner_login":72,"owner_name":73,"owner_avatar_url":74,"owner_bio":75,"owner_company":76,"owner_location":76,"owner_email":76,"owner_twitter":76,"owner_website":77,"owner_url":78,"languages":79,"stars":84,"forks":85,"last_commit_at":86,"license":87,"difficulty_score":88,"env_os":89,"env_gpu":90,"env_ram":90,"env_deps":91,"category_tags":99,"github_topics":101,"view_count":32,"oss_zip_url":76,"oss_zip_packed_at":76,"status":17,"created_at":111,"updated_at":112,"faqs":113,"releases":142},7811,"NorskRegnesentral\u002Fskweak","skweak","skweak: A software toolkit for weak supervision applied to NLP tasks","skweak 是一款专为自然语言处理（NLP）设计的弱监督工具包，旨在解决高质量标注数据稀缺且人工标注成本高昂的难题。在许多实际场景中，尤其是面对小语种或特定领域任务时，获取带标签的数据往往十分困难。skweak 提供了一种高效的替代方案：用户无需手动逐条标注，只需定义一组“标注函数”（如基于规则的模式匹配、词典查找、现有机器学习模型甚至众包结果），让程序自动为文档打上初步标签。随后，skweak 利用统计模型自动聚合这些函数的输出，估算各函数的可靠性并消除冲突，最终生成高质量的训练数据集。\n\n该工具特别适合 NLP 开发者、研究人员以及需要快速构建定制数据集的数据科学家使用。其核心亮点在于极简的 API 设计，仅需几行代码即可完成从定义标注函数到数据聚合的全流程；同时，skweak 与业界主流的 SpaCy 库深度集成，能够无缝嵌入现有的 NLP 流水线，支持序列标注和文本分类等多种任务。尽管目前项目已停止主动维护，但其提出的“通过代码而非人力进行数据标注”的理念，依然是降低 NLP 门槛、加速模型迭代的实用选择。","# skweak: Weak supervision for NLP\n\n[![GitHub license](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Flicense\u002FNorskRegnesentral\u002Fskweak)](https:\u002F\u002Fgithub.com\u002FNorskRegnesentral\u002Fskweak\u002Fblob\u002Fmain\u002FLICENSE.txt)\n[![GitHub stars](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fstars\u002FNorskRegnesentral\u002Fskweak)](https:\u002F\u002Fgithub.com\u002FNorskRegnesentral\u002Fskweak\u002Fstargazers)\n![PyPI](https:\u002F\u002Fimg.shields.io\u002Fpypi\u002Fv\u002Fskweak)\n![Testing](https:\u002F\u002Fgithub.com\u002FNorskRegnesentral\u002Fskweak\u002Factions\u002Fworkflows\u002Ftesting.yml\u002Fbadge.svg)\n\n\u003Cbr>\n\u003Cp align=\"center\">\n   \u003Cimg alt=\"skweak logo\" src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FNorskRegnesentral_skweak_readme_477e308b6c88.jpg\"\u002F>\n\u003C\u002Fp>\u003Cbr>\n\n**Skweak is no longer actively maintained** (if you are interested to take over the project, give us a shout). \n\nLabelled data remains a scarce resource in many practical NLP scenarios. This is especially the case when working with resource-poor languages (or text domains), or when using task-specific labels without pre-existing datasets. The only available option is often to collect and annotate texts by hand, which is expensive and time-consuming. \n\n`skweak` (pronounced `\u002Fskwi:k\u002F`) is a Python-based software toolkit that provides a concrete solution to this problem using weak supervision. `skweak` is built around a very simple idea: Instead of annotating texts by hand, we define a set of _labelling functions_ to automatically label our documents, and then _aggregate_ their results to obtain a labelled version of our corpus. \n\nThe labelling functions may take various forms, such as domain-specific heuristics (like pattern-matching rules), gazetteers (based on large dictionaries), machine learning models, or even annotations from crowd-workers. The aggregation is done using a statistical model that automatically estimates the relative accuracy (and confusions) of each labelling function by comparing their predictions with one another.\n\n`skweak` can be applied to both sequence labelling and text classification, and comes with a complete API that makes it possible to create, apply and aggregate labelling functions with just a few lines of code. The toolkit is also tightly integrated with [SpaCy](http:\u002F\u002Fwww.spacy.io), which makes it easy to incorporate into existing NLP pipelines. Give it a try!\n\n\u003Cbr>\n\n**Full Paper**:\u003Cbr>\nPierre Lison, Jeremy Barnes and Aliaksandr Hubin (2021), \"[skweak: Weak Supervision Made Easy for NLP](https:\u002F\u002Faclanthology.org\u002F2021.acl-demo.40\u002F)\", *ACL 2021 (System demonstrations)*.\n\n**Documentation & API**: See the [Wiki](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FNorskRegnesentral_skweak_readme_5559b28980c2.png) for details on how to use `skweak`. \n\n\u003Cbr>\n\n\nhttps:\u002F\u002Fuser-images.githubusercontent.com\u002F11574012\u002F114999146-e0995300-9ea1-11eb-8288-2bb54dc043e7.mp4\n\n\u003Cbr>\n\n\n\n## Dependencies\n\n- `spacy` >= 3.0.0\n- `hmmlearn` >= 0.3.0\n- `pandas` >= 0.23\n- `numpy` >= 1.18\n\nYou also need Python >= 3.6. \n\n\n## Install\n\nThe easiest way to install `skweak` is through `pip`:\n\n```shell\npip install skweak\n```\n\nor if you want to install from the repo:\n\n```shell\npip install --user git+https:\u002F\u002Fgithub.com\u002FNorskRegnesentral\u002Fskweak\n```\n\nThe above installation only includes the core library (not the additional examples in `examples`).\n\nNote: some examples and tests may require trained spaCy pipelines. These can be downloaded automatically using the syntax (for the pipeline `en_core_web_sm`)\n```shell\npython -m spacy download en_core_web_sm\n```\n\n\n## Basic Overview\n\n\u003Cbr>\n\u003Cp align=\"center\">\n   \u003Cimg alt=\"Overview of skweak\" src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FNorskRegnesentral_skweak_readme_84a9e31b19f7.png\"\u002F>\n\u003C\u002Fp>\u003Cbr>\n\nWeak supervision with `skweak` goes through the following steps:\n- **Start**: First, you need raw (unlabelled) data from your text domain. `skweak` is build on top of [SpaCy](http:\u002F\u002Fwww.spacy.io), and operates with Spacy `Doc` objects, so you first need to convert your documents to `Doc` objects using SpaCy.\n- **Step 1**: Then, we need to define a range of labelling functions that will take those documents and annotate spans with labels. Those labelling functions can comes from heuristics, gazetteers, machine learning models, etc. See the ![documentation](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FNorskRegnesentral_skweak_readme_5559b28980c2.png) for more details. \n- **Step 2**: Once the labelling functions have been applied to your corpus, you need to _aggregate_ their results in order to obtain a single annotation layer (instead of the multiple, possibly conflicting annotations from the labelling functions). This is done in `skweak` using a generative model that automatically estimates the relative accuracy and possible confusions of each labelling function. \n- **Step 3**: Finally, based on those aggregated labels, we can train our final model. Step 2 gives us a labelled corpus that (probabilistically) aggregates the outputs of all labelling functions, and you can use this labelled data to estimate any kind of machine learning model. You are free to use whichever model\u002Fframework you prefer. \n\n## Quickstart\n\nHere is a minimal example with three labelling functions (LFs) applied on a single document:\n\n```python\nimport spacy, re\nfrom skweak import heuristics, gazetteers, generative, utils\n\n# LF 1: heuristic to detect occurrences of MONEY entities\ndef money_detector(doc):\n   for tok in doc[1:]:\n      if tok.text[0].isdigit() and tok.nbor(-1).is_currency:\n          yield tok.i-1, tok.i+1, \"MONEY\"\nlf1 = heuristics.FunctionAnnotator(\"money\", money_detector)\n\n# LF 2: detection of years with a regex\nlf2= heuristics.TokenConstraintAnnotator(\"years\", lambda tok: re.match(\"(19|20)\\d{2}$\", \n                                                  tok.text), \"DATE\")\n\n# LF 3: a gazetteer with a few names\nNAMES = [(\"Barack\", \"Obama\"), (\"Donald\", \"Trump\"), (\"Joe\", \"Biden\")]\ntrie = gazetteers.Trie(NAMES)\nlf3 = gazetteers.GazetteerAnnotator(\"presidents\", {\"PERSON\":trie})\n\n# We create a corpus (here with a single text)\nnlp = spacy.load(\"en_core_web_sm\")\ndoc = nlp(\"Donald Trump paid $750 in federal income taxes in 2016\")\n\n# apply the labelling functions\ndoc = lf3(lf2(lf1(doc)))\n\n# create and fit the HMM aggregation model\nhmm = generative.HMM(\"hmm\", [\"PERSON\", \"DATE\", \"MONEY\"])\nhmm.fit([doc]*10)\n\n# once fitted, we simply apply the model to aggregate all functions\ndoc = hmm(doc)\n\n# we can then visualise the final result (in Jupyter)\nutils.display_entities(doc, \"hmm\")\n```\n\nObviously, to get the most out of `skweak`, you will need more than three labelling functions. And, most importantly, you will need a larger corpus including as many documents as possible from your domain, so that the model can derive good estimates of the relative accuracy of each labelling function. \n\n## Documentation\n\nSee the [Wiki](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FNorskRegnesentral_skweak_readme_5559b28980c2.png). \n\n\n## License\n\n`skweak` is released under an MIT License. \n\nThe MIT License is a short and simple permissive license allowing both commercial and non-commercial use of the software. The only requirement is to preserve\nthe copyright and license notices (see file [License](https:\u002F\u002Fgithub.com\u002FNorskRegnesentral\u002Fskweak\u002Fblob\u002Fmain\u002FLICENSE.txt)). Licensed works, modifications, and larger works may be distributed under different terms and without source code.\n\n## Citation\n\nSee our paper describing the framework: \n\nPierre Lison, Jeremy Barnes and Aliaksandr Hubin (2021), \"[skweak: Weak Supervision Made Easy for NLP](https:\u002F\u002Faclanthology.org\u002F2021.acl-demo.40\u002F)\", *ACL 2021 (System demonstrations)*. \n\n```bibtex\n@inproceedings{lison-etal-2021-skweak,\n    title = \"skweak: Weak Supervision Made Easy for {NLP}\",\n    author = \"Lison, Pierre  and\n      Barnes, Jeremy  and\n      Hubin, Aliaksandr\",\n    booktitle = \"Proceedings of the 59th Annual Meeting of the Association for Computational Linguistics and the 11th International Joint Conference on Natural Language Processing: System Demonstrations\",\n    month = aug,\n    year = \"2021\",\n    address = \"Online\",\n    publisher = \"Association for Computational Linguistics\",\n    url = \"https:\u002F\u002Faclanthology.org\u002F2021.acl-demo.40\",\n    doi = \"10.18653\u002Fv1\u002F2021.acl-demo.40\",\n    pages = \"337--346\",\n}\n```\n","# skweak: 用于自然语言处理的弱监督\n\n[![GitHub 许可证](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Flicense\u002FNorskRegnesentral\u002Fskweak)](https:\u002F\u002Fgithub.com\u002FNorskRegnesentral\u002Fskweak\u002Fblob\u002Fmain\u002FLICENSE.txt)\n[![GitHub 星标数](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fstars\u002FNorskRegnesentral\u002Fskweak)](https:\u002F\u002Fgithub.com\u002FNorskRegnesentral\u002Fskweak\u002Fstargazers)\n![PyPI](https:\u002F\u002Fimg.shields.io\u002Fpypi\u002Fv\u002Fskweak)\n![测试](https:\u002F\u002Fgithub.com\u002FNorskRegnesentral\u002Fskweak\u002Factions\u002Fworkflows\u002Ftesting.yml\u002Fbadge.svg)\n\n\u003Cbr>\n\u003Cp align=\"center\">\n   \u003Cimg alt=\"skweak logo\" src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FNorskRegnesentral_skweak_readme_477e308b6c88.jpg\"\u002F>\n\u003C\u002Fp>\u003Cbr>\n\n**Skweak 已不再积极维护**（如果您有兴趣接手该项目，请与我们联系）。\n\n在许多实际的自然语言处理场景中，标注数据仍然是一种稀缺资源。尤其是在处理低资源语言（或文本领域）时，或者当使用没有现成数据集的任务特定标签时，情况尤为如此。通常唯一可行的选择就是手动收集和标注文本，但这既昂贵又耗时。\n\n`skweak`（发音为 `\u002Fskwi:k\u002F`）是一个基于 Python 的软件工具包，它利用弱监督提供了一种切实可行的解决方案。`skweak` 的核心理念非常简单：与其手动标注文本，不如定义一组_标注函数_来自动为文档打上标签，然后将这些函数的结果_聚合_起来，从而得到一个已标注的语料库版本。\n\n这些标注函数可以有多种形式，例如领域特定的启发式规则（如模式匹配规则）、命名实体词典（基于大型词典）、机器学习模型，甚至众包工作者的标注。聚合过程则通过一个统计模型完成，该模型会通过比较各标注函数之间的预测结果，自动估计每种标注函数的相对准确率及其可能的混淆情况。\n\n`skweak` 可以应用于序列标注和文本分类任务，并提供了一个完整的 API，只需几行代码即可创建、应用和聚合标注函数。该工具包还与 [SpaCy](http:\u002F\u002Fwww.spacy.io) 紧密集成，因此很容易融入现有的 NLP 流程中。不妨试一试吧！\n\n\u003Cbr>\n\n**完整论文**：\u003Cbr>\nPierre Lison、Jeremy Barnes 和 Aliaksandr Hubin（2021），“[skweak：让 NLP 的弱监督变得简单](https:\u002F\u002Faclanthology.org\u002F2021.acl-demo.40\u002F)”，*ACL 2021（系统演示）*。\n\n**文档与 API**：请参阅 [Wiki](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FNorskRegnesentral_skweak_readme_5559b28980c2.png)，了解如何使用 `skweak` 的详细信息。\n\n\u003Cbr>\n\n\nhttps:\u002F\u002Fuser-images.githubusercontent.com\u002F11574012\u002F114999146-e0995300-9ea1-11eb-8288-2bb54dc043e7.mp4\n\n\u003Cbr>\n\n\n\n## 依赖项\n\n- `spacy` >= 3.0.0\n- `hmmlearn` >= 0.3.0\n- `pandas` >= 0.23\n- `numpy` >= 1.18\n\n此外，您还需要 Python >= 3.6。\n\n\n## 安装\n\n安装 `skweak` 最简单的方式是通过 `pip`：\n\n```shell\npip install skweak\n```\n\n或者，如果您想从仓库安装：\n\n```shell\npip install --user git+https:\u002F\u002Fgithub.com\u002FNorskRegnesentral\u002Fskweak\n```\n\n上述安装仅包含核心库，不包括 `examples` 中的附加示例。\n\n注意：某些示例和测试可能需要训练好的 SpaCy 管道。这些管道可以使用以下语法自动下载（以 `en_core_web_sm` 管道为例）：\n```shell\npython -m spacy download en_core_web_sm\n```\n\n\n## 基本概述\n\n\u003Cbr>\n\u003Cp align=\"center\">\n   \u003Cimg alt=\"skweak 概览\" src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FNorskRegnesentral_skweak_readme_84a9e31b19f7.png\"\u002F>\n\u003C\u002Fp>\u003Cbr>\n\n使用 `skweak` 进行弱监督的过程如下：\n- **开始**：首先，您需要来自目标文本领域的原始（未标注）数据。`skweak` 构建在 [SpaCy](http:\u002F\u002Fwww.spacy.io) 之上，操作对象是 SpaCy 的 `Doc` 对象，因此您需要先使用 SpaCy 将您的文档转换为 `Doc` 对象。\n- **步骤 1**：接下来，我们需要定义一系列标注函数，这些函数将对文档进行处理并为其片段打上标签。这些标注函数可以来自启发式规则、命名实体词典、机器学习模型等。更多详情请参阅 ![文档](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FNorskRegnesentral_skweak_readme_5559b28980c2.png)。\n- **步骤 2**：一旦标注函数被应用到您的语料库上，您需要将它们的结果_聚合_起来，以获得单一的标注层（而不是来自不同标注函数的多个可能冲突的标注）。在 `skweak` 中，这一过程是通过一个生成式模型完成的，该模型会自动估计每个标注函数的相对准确率及其可能的混淆情况。\n- **步骤 3**：最后，我们可以根据这些聚合后的标签来训练最终模型。步骤 2 提供了一个已标注的语料库，它以概率方式汇总了所有标注函数的输出，您可以使用这些标注数据来训练任何类型的机器学习模型。您可以自由选择自己喜欢的模型或框架。\n\n## 快速入门\n\n以下是一个最小示例，其中三个标注函数（LFs）被应用于单个文档：\n\n```python\nimport spacy, re\nfrom skweak import heuristics, gazetteers, generative, utils\n\n# LF 1：检测 MONEY 实体出现的启发式方法\ndef money_detector(doc):\n   for tok in doc[1:]:\n      if tok.text[0].isdigit() and tok.nbor(-1).is_currency:\n          yield tok.i-1, tok.i+1, \"MONEY\"\nlf1 = heuristics.FunctionAnnotator(\"money\", money_detector)\n\n# LF 2：用正则表达式检测年份\nlf2= heuristics.TokenConstraintAnnotator(\"years\", lambda tok: re.match(\"(19|20)\\d{2}$\", \n                                                  tok.text), \"DATE\")\n\n# LF 3：包含几个名字的命名实体词典\nNAMES = [(\"Barack\", \"Obama\"), (\"Donald\", \"Trump\"), (\"Joe\", \"Biden\")]\ntrie = gazetteers.Trie(NAMES)\nlf3 = gazetteers.GazetteerAnnotator(\"presidents\", {\"PERSON\":trie})\n\n# 我们创建一个语料库（这里只有一篇文本）\nnlp = spacy.load(\"en_core_web_sm\")\ndoc = nlp(\"Donald Trump paid $750 in federal income taxes in 2016\")\n\n# 应用标注函数\ndoc = lf3(lf2(lf1(doc)))\n\n# 创建并拟合 HMM 聚合模型\nhmm = generative.HMM(\"hmm\", [\"PERSON\", \"DATE\", \"MONEY\"])\nhmm.fit([doc]*10)\n\n# 拟合完成后，我们只需应用模型来聚合所有函数\ndoc = hmm(doc)\n\n# 接着可以在 Jupyter 中可视化最终结果\nutils.display_entities(doc, \"hmm\")\n```\n\n显然，要充分发挥 `skweak` 的作用，您需要超过三个标注函数。更重要的是，您需要一个更大的语料库，尽可能包含来自您所在领域的多篇文档，这样模型才能对每种标注函数的相对准确率做出可靠的估计。\n\n## 文档\n\n请参阅 [Wiki](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FNorskRegnesentral_skweak_readme_5559b28980c2.png)。\n\n## 许可证\n\n`skweak` 采用 MIT 许可证发布。\n\nMIT 许可证是一种简短而简单的宽松许可证，允许对本软件进行商业和非商业用途。唯一的条件是必须保留版权和许可证声明（参见文件 [License](https:\u002F\u002Fgithub.com\u002FNorskRegnesentral\u002Fskweak\u002Fblob\u002Fmain\u002FLICENSE.txt)）。根据该许可证授权的作品、修改版本以及更大规模的作品可以以不同的条款分发，且无需提供源代码。\n\n## 引用\n\n请参阅我们介绍该框架的论文：\n\nPierre Lison, Jeremy Barnes 和 Aliaksandr Hubin (2021), “[skweak：让 NLP 的弱监督变得简单](https:\u002F\u002Faclanthology.org\u002F2021.acl-demo.40\u002F)”，*ACL 2021（系统演示）*。\n\n```bibtex\n@inproceedings{lison-etal-2021-skweak,\n    title = \"skweak：让 {NLP} 的弱监督变得简单\",\n    author = \"Lison, Pierre 与  Barnes, Jeremy 与  Hubin, Aliaksandr\",\n    booktitle = \"第59届计算语言学协会年会暨第11届国际自然语言处理联合会议论文集：系统演示\",\n    month = aug,\n    year = \"2021\",\n    address = \"线上\",\n    publisher = \"计算语言学协会\",\n    url = \"https:\u002F\u002Faclanthology.org\u002F2021.acl-demo.40\",\n    doi = \"10.18653\u002Fv1\u002F2021.acl-demo.40\",\n    pages = \"337--346\",\n}\n```","# skweak 快速上手指南\n\n**skweak** 是一个用于自然语言处理（NLP）的弱监督工具包。它允许开发者通过定义多个“标注函数”（如启发式规则、词典匹配、现有模型等）自动为无标签文本生成标注，并利用统计模型聚合这些结果，从而在无需大量人工标注的情况下构建训练数据集。该工具与 **SpaCy** 深度集成，适用于序列标注和文本分类任务。\n\n> **注意**：该项目目前不再积极维护，但核心功能依然可用。\n\n## 环境准备\n\n在开始之前，请确保您的开发环境满足以下要求：\n\n*   **操作系统**：Linux, macOS 或 Windows\n*   **Python 版本**：>= 3.6\n*   **核心依赖**：\n    *   `spacy` >= 3.0.0\n    *   `hmmlearn` >= 0.3.0\n    *   `pandas` >= 0.23\n    *   `numpy` >= 1.18\n\n此外，您需要预先下载并安装一个 SpaCy 语言模型（例如英文小模型），以便处理文本数据：\n\n```shell\npython -m spacy download en_core_web_sm\n```\n\n## 安装步骤\n\n推荐使用 `pip` 进行安装。为了获得更快的下载速度，国内用户可以使用清华或阿里镜像源。\n\n**方式一：通过 PyPI 安装（推荐）**\n\n```shell\npip install skweak -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n```\n\n**方式二：从 GitHub 源码安装（获取最新代码）**\n\n```shell\npip install --user git+https:\u002F\u002Fgithub.com\u002FNorskRegnesentral\u002Fskweak -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n```\n\n## 基本使用\n\n以下是一个最小化的示例，演示了如何定义三个不同的标注函数（启发式规则、正则表达式、词典），并将它们应用于单个文档，最后通过隐马尔可夫模型（HMM）聚合结果。\n\n```python\nimport spacy, re\nfrom skweak import heuristics, gazetteers, generative, utils\n\n# LF 1: 启发式规则 - 检测货币实体 (MONEY)\ndef money_detector(doc):\n   for tok in doc[1:]:\n      if tok.text[0].isdigit() and tok.nbor(-1).is_currency:\n          yield tok.i-1, tok.i+1, \"MONEY\"\nlf1 = heuristics.FunctionAnnotator(\"money\", money_detector)\n\n# LF 2: 正则表达式 - 检测年份 (DATE)\nlf2= heuristics.TokenConstraintAnnotator(\"years\", lambda tok: re.match(\"(19|20)\\d{2}$\", \n                                                  tok.text), \"DATE\")\n\n# LF 3: 词典匹配 - 检测总统姓名 (PERSON)\nNAMES = [(\"Barack\", \"Obama\"), (\"Donald\", \"Trump\"), (\"Joe\", \"Biden\")]\ntrie = gazetteers.Trie(NAMES)\nlf3 = gazetteers.GazetteerAnnotator(\"presidents\", {\"PERSON\":trie})\n\n# 加载 SpaCy 模型并创建文档对象\nnlp = spacy.load(\"en_core_web_sm\")\ndoc = nlp(\"Donald Trump paid $750 in federal income taxes in 2016\")\n\n# 依次应用标注函数\ndoc = lf3(lf2(lf1(doc)))\n\n# 创建并拟合 HMM 聚合模型\n# 指定标签列表：[\"PERSON\", \"DATE\", \"MONEY\"]\nhmm = generative.HMM(\"hmm\", [\"PERSON\", \"DATE\", \"MONEY\"])\n# 在实际使用中，fit 方法需要传入包含大量文档的列表，此处仅为演示重复传入同一文档\nhmm.fit([doc]*10)\n\n# 应用模型聚合所有标注函数的结果\ndoc = hmm(doc)\n\n# 可视化最终结果 (适用于 Jupyter Notebook)\nutils.display_entities(doc, \"hmm\")\n```\n\n**使用提示**：\n为了获得最佳的弱监督效果，请务必准备尽可能多的领域相关文档数据，并定义多样化的标注函数。数据量越大，模型对各个标注函数准确率的估计就越精确。","某电商公司的数据科学团队需要快速构建一个针对小众语种（如挪威语）的用户评论情感分析模型，但面临该语种缺乏高质量标注数据的困境。\n\n### 没有 skweak 时\n- **高昂的人力成本**：团队必须雇佣精通该小语种的专业标注人员手动逐条打标，预算迅速超支且周期长达数月。\n- **冷启动困难**：由于没有现成的训练数据集，无法直接微调预训练模型，导致项目迟迟无法进入验证阶段。\n- **规则维护混乱**：尝试用简单的正则表达式匹配关键词，但不同规则间的冲突难以协调，且无法量化每条规则的可靠性。\n- **迭代效率低下**：每次调整标注策略都需要重新进行人工抽样检查，反馈循环极慢，严重拖慢研发进度。\n\n### 使用 skweak 后\n- **自动化标签生成**：团队定义了多个“标注函数”（如基于词典的情感词匹配、启发式规则及众包粗略标注），skweak 自动将这些弱信号应用于海量未标注评论。\n- **智能噪声消除**：skweak 内部的统计模型自动评估每个标注函数的准确率与混淆情况，通过聚合算法生成高置信度的“黄金标签”，无需人工干预。\n- **快速冷启动**：仅用几行代码即可将原始文本转化为高质量训练集，当天便完成了首个基线模型的训练与验证。\n- **无缝集成现有流程**：得益于与 SpaCy 的深度整合，标注函数可直接嵌入现有的 NLP 流水线中，便于后续持续更新和优化规则。\n\nskweak 通过将分散的弱监督信号转化为可靠的训练数据，让小语种或垂直领域的 NLP 任务不再受制于昂贵的人工标注瓶颈。","https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FNorskRegnesentral_skweak_477e308b.jpg","NorskRegnesentral","Norsk Regnesentral STI (Norwegian Computing Center)","https:\u002F\u002Foss.gittoolsai.com\u002Favatars\u002FNorskRegnesentral_e74a9936.png","Norwegian Computing Center is a private foundation performing research in statistical modeling, machine learning and information\u002Fcommunication technology",null,"https:\u002F\u002Fwww.nr.no\u002F","https:\u002F\u002Fgithub.com\u002FNorskRegnesentral",[80],{"name":81,"color":82,"percentage":83},"Python","#3572A5",100,926,77,"2026-04-02T01:18:25","MIT",1,"","未说明",{"notes":92,"python":93,"dependencies":94},"该项目已不再积极维护。工具紧密集成 SpaCy，部分示例和测试需要预先下载训练好的 SpaCy 管道模型（如 en_core_web_sm）。核心库可通过 pip 安装，但示例代码需单独获取。",">=3.6",[95,96,97,98],"spacy>=3.0.0","hmmlearn>=0.3.0","pandas>=0.23","numpy>=1.18",[14,100,16,35],"其他",[102,103,104,105,106,107,108,109,110],"weak-supervision","nlp-machine-learning","distant-supervision","nlp-library","spacy","python","data-science","training-data","natural-language-processing","2026-03-27T02:49:30.150509","2026-04-16T02:02:36.894633",[114,119,124,129,134,138],{"id":115,"question_zh":116,"answer_zh":117,"source_url":118},34983,"如何分析标签函数（Label Functions）的统计影响（如覆盖率、重叠、冲突等）？","项目已计划并引入了类似 Snorkel 的 LF Analysis 工具。该工具可以帮助用户统计理解标签函数在数据集上的表现，包括覆盖率（coverage）、重叠（overlap）和冲突（conflicts）。此外，为了更准确地评估效果，建议使用精确率（precision）和召回率（recall）代替单一的准确率指标，因为它们能更清晰地指示错误来源是假阳性还是假阴性。","https:\u002F\u002Fgithub.com\u002FNorskRegnesentral\u002Fskweak\u002Fissues\u002F13",{"id":120,"question_zh":121,"answer_zh":122,"source_url":123},34984,"HMM 训练时报错\"Tokens with no possible state\"导致训练中止，该如何解决？","该错误通常发生在某个 token 没有任何标签函数触发，导致其对数概率为负无穷（-np.inf）。如果无法复现具体原因或暂时无法修复根本问题，一个可行的临时解决方案是将代码中的 `-np.inf` 替换为一个极小的有限值（例如 `-100000`）。测试表明，这种修改通常不会改变 HMM 的最终训练输出，但能防止训练因该检查而中断。","https:\u002F\u002Fgithub.com\u002FNorskRegnesentral\u002Fskweak\u002Fissues\u002F43",{"id":125,"question_zh":126,"answer_zh":127,"source_url":128},34985,"遇到 AttributeError: 'HMM' object has no attribute '_do_forward_pass' 错误怎么办？","这是由于依赖库 `hmmlearn` 版本更新导致部分内部方法（如 `_do_forward_pass`, `_compute_log_xi_sum`）被移除或不兼容。解决方法有两种：1. 升级 skweak 到最新发布的版本，该版本已修复此兼容性问题；2. 如果暂时无法升级 skweak，可以将 `hmmlearn` 降级到之前的版本，以确保包含所需的内部函数。","https:\u002F\u002Fgithub.com\u002FNorskRegnesentral\u002Fskweak\u002Fissues\u002F38",{"id":130,"question_zh":131,"answer_zh":132,"source_url":133},34986,"使用 DocBin 保存和加载包含 MajorityVoter 的标注数据时出现 \"TypeError: unhashable type: 'list'\" 错误，如何解决？","该错误似乎与 `voting.MajorityVoter` 组件有关。当管道中包含多数投票器（MajorityVoter）时，将标注后的文档保存到 DocBin 并重新加载时会触发此类型错误。目前的临时解决办法是在保存数据前从管道中移除 MajorityVoter，或者避免对包含该组件生成的标注数据进行序列化存储，直到该问题得到进一步修复。","https:\u002F\u002Fgithub.com\u002FNorskRegnesentral\u002Fskweak\u002Fissues\u002F45",{"id":135,"question_zh":136,"answer_zh":137,"source_url":118},34987,"在评估标签函数时，为什么推荐使用精确率和召回率而不是准确率？","准确率（accuracy）会将假阳性（false positives）和假阴性（false negatives）的错误混淆在一起，无法区分错误的具体来源。相比之下，精确率和召回率提供了两个独立的指标，能更明确地指出标签函数的错误是由于过度标记（假阳性）还是标记不足（假阴性）造成的，因此对于序列标注任务更具信息量和指导意义。",{"id":139,"question_zh":140,"answer_zh":141,"source_url":123},34988,"如果遇到无法复现的 HMM 训练错误，应该采取什么调试策略？","如果错误仅在大规模数据上出现而无法通过最小化示例复现，建议首先尝试修改底层数值处理方式（如将 -np.inf 改为大负数）以绕过阻断性错误，观察模型输出是否受影响。如果输出一致，则可暂时采用此变通方案继续工作。同时，应记录错误发生的具体数据特征，以便未来深入排查根本原因。",[143,148],{"id":144,"version":145,"summary_zh":146,"released_at":147},272313,"0.3.1","`skweak` 的全新版本现已发布，既修复了多项 bug，又新增了一些功能：\n\n1. `skweak` 现在使用最新版的 `hmmlearn` 库，从而解决了因方法名不匹配而导致的若干错误。\n2. 我们对序列标注和文本分类任务的聚合模型进行了更清晰的区分。序列标注任务可用的聚合器包括 `SequentialMajorityVoter` 和 `HMM`（推荐使用），而非序列文本分类任务则可使用 `MajorityVoter` 和 `NaiveBayes`。\n\n此外，我们还引入了一项全新的功能：多标签分类！不再假设所有标签互斥，现在您可以直接聚合标注函数的结果，而无需假定只有一个标签是正确的。这一多标签机制同时适用于序列标注任务（参见 `MultilabelSequentialMajorityVoter` 和 `MultilabelHMM`）以及文本分类任务（参见 `MultilabelMajorityVoter` 和 `MultilabelNaiveBayes`）。\n\n默认情况下，对于给定的数据点，所有标签可以同时为真；但您也可以通过 `set_exclusive_labels` 方法来强制定义标签之间的互斥关系。如果将所有标签设置为互斥，则聚合结果等同于标准的多分类场景。在内部实现上，该功能是通过为每个标签分别构建并拟合独立的聚合模型来完成的。\n\n此外，聚合模型的代码也经过了大幅重构，希望能使开发者更容易地创建新的聚合模型。","2022-03-25T13:29:43",{"id":149,"version":150,"summary_zh":151,"released_at":152},272314,"0.2.8","skweak 的首个正式版本发布，同时支持序列标注和文本分类！详情请参阅文档。","2021-04-19T09:22:48"]