itext2kg
iText2KG(现已升级为 ATOM)是一款利用大语言模型从非结构化文本中构建和持续更新“时序知识图谱”的开源工具。传统方法往往忽视数据的时间动态性,且在处理长文本时容易遗漏关键事实或导致结果不稳定。ATOM 通过独特的“原子事实分解”技术,将文档拆解为最小、自包含的事实单元,有效解决了大模型在长上下文中的“遗忘效应”,显著提升了信息提取的完整性和多次运行的一致性。
该工具的核心亮点在于其并行的三模块架构:首先拆分原子事实,接着并行提取包含时间跨度的五元组关系,最后利用基于距离度量的算法高效合并图谱。这一设计不仅实现了观察时间与事件时间的双重建模,避免了时间归属错误,更将处理延迟降低了 93% 以上,完美支持大规模动态数据的实时更新。
iText2KG 非常适合需要处理海量动态文本数据的 AI 研究人员、后端开发者以及知识图谱工程师使用。无论是构建随时间演变的行业知识库,还是研发需要精准时间推理的智能应用,它都能提供稳定、可扩展且无需特定领域微调的高效解决方案。
使用场景
某金融风控团队需要从每日海量的新闻快讯和财报中,实时提取企业间的动态关联(如并购、高管变动)以构建时序知识图谱。
没有 itext2kg 时
- 关键事实遗漏:面对长篇幅的深度报道,传统大模型容易受“遗忘效应”影响,漏掉文中后半段提及的关键时间点和事件细节。
- 结果不稳定:同一份文档多次运行提取,得到的实体关系不一致,导致风控规则无法固化,需人工反复校验。
- 时间维度混乱:难以区分“事件发生时间”与“信息观测时间”,常将过去发生的旧闻误判为最新风险信号。
- 更新效率低下:随着数据量激增,串行处理架构导致图谱更新延迟高达数小时,无法满足实时预警需求。
使用 itext2kg 后
- 事实覆盖全面:itext2kg 先将文本拆解为最小“原子事实”再并行提取,使关键事实捕获率提升约 31%,彻底解决长文遗漏问题。
- 输出高度稳定:基于原子化分解的架构确保了多次运行结果的一致性,稳定性提升约 17%,大幅降低人工复核成本。
- 时间建模精准:独有的双重时间建模机制(区分观测时间与起止时间),有效防止了动态图谱中的时间归属错误。
- 实时动态更新:利用并行合并算法替代缓慢的大模型推理,延迟降低超过 93%,支持大规模数据的秒级图谱演进。
itext2kg 通过原子化分解与并行架构,将非结构化文本转化为高覆盖率、高稳定性且具备精准时间维度的动态知识图谱,让实时智能决策成为可能。
运行环境要求
- 未说明
未说明
未说明

快速开始
ATOM:基于大语言模型的自适应优化动态时序知识图谱构建
iText2KG 现已更名为 ATOM。ATOM 是一种少样本、可扩展的方法,用于从非结构化文本中构建并持续更新时序知识图谱(TKG)。 (我们保留了仓库中的旧版 iText2KG,请参阅 README。)
概述
传统的静态知识图谱构建方法往往忽视了现实世界数据的动态性和时间敏感性,从而限制了其对持续变化的适应能力。此外,近年来出现的一些零样本或少样本方法虽然避免了特定领域的微调或对预构建本体的依赖,但通常存在多次运行结果不稳定以及关键事实覆盖不全的问题。
ATOM 将输入文档分解为最小的、自包含的“原子”事实,从而提高了抽取的全面性和稳定性。随后,基于这些原子事实生成原子级知识图谱,并以并行方式将其合并。
简而言之,ATOM 通过以下方式解决了上述局限性:
- ✅ 提升全面性:从较长文本中捕获更全面的事实覆盖(事实全面性提升约 31%,时间维度全面性提升约 18%)
- ✅ 确保稳定性:在多次运行中生成一致的时序知识图谱(稳定性提升约 17%)
- ✅ 实现可扩展性:通过并行架构支持大规模的动态时序更新。
🔥 最新消息
[2025年10月20日] ATOM - 重大升级:
- 全新架构设计:ATOM 现采用三模块并行流水线进行 DTKG 的构建与更新。
- 原子事实分解:新增的第一模块将文本拆分为最小的“原子事实”,有效解决了 LLM 在长上下文中容易遗漏事实的“遗忘效应”问题。
- 增强全面性与稳定性:新架构显著提升了性能:事实全面性提升约 31%,时间维度全面性提升约 18%,稳定性提升约 17%。
- 双时间建模:实现了
t_obs与t_start/t_end的双时间建模,以防止动态知识图谱中的时间归属错误。 - 并行五元组抽取:第二模块直接从原子事实中并行抽取
(subject, predicate, object, t_start, t_end)五元组。 - 并行原子合并架构:第三模块采用高效的并行两两合并算法,相较于 Graphiti 延迟降低了 93.8%,相较于 iText2KG 则降低了 95.3%。
- LLM 无关解析:用距离度量(余弦相似度)替代了耗时的 LLM 解析,实现了可扩展的并行合并。
[2025年7月29日] iText2KG - 新功能与增强能力:
- iText2KG_Star:推出了一种更简单的版本,可直接抽取关系,省去了单独的实体抽取步骤,从而减少了 token 消耗。
- 基于事实的知识图谱构建:通过文档蒸馏器增强了基于事实的知识图谱构建框架。
- 动态知识图谱:新增了支持构建随时间演化的动态知识图谱的功能。示例请参见:动态知识图谱构建。注意:该版本尚未处理时间或逻辑冲突。
[2025年7月19日] iText2KG - 重大性能与可靠性更新:
- 异步架构:核心方法已迁移到
async/await,以实现与 LLM API 的非阻塞 I/O。 - 日志系统:引入了全面的日志记录机制,取代了原有的 print 语句。
- 增强的批处理能力:提高了处理多篇文档和多次 LLM 调用的效率。
- 更好的错误处理:增加了增强的错误处理和重试机制。
- 异步架构:核心方法已迁移到
[2024年10月7日] iText2KG - 最新功能:
- 重构了代码,引入了实体、关系和知识图谱的数据模型。
- 实体嵌入同时考虑名称(权重 0.6)和标签(权重 0.4),以区分不同概念(例如,Python:Language 与 Python:Snake)。
- 在
build_graph函数中新增了max_tries参数,用于应对 LLM 的幻觉问题。
[2024年9月17日] iText2KG - 最新功能:
- 兼容所有 LangChain 对话和嵌入模型。
build_graph函数现在可以扩展现有图谱。- 兼容 Python 3.9 及以上版本。
[2024年7月16日] iText2KG - 解决了两个主要的 LLM 幻觉问题:
- 对于虚构实体,用提供的实体列表中与其最相似的实体进行替换。
- 针对“遗忘效应”(未能分配关系),通过重新提示 LLM 来补全缺失的实体。
架构
ATOM 采用三模块并行流水线,从非结构化文本中构建并持续更新动态时间知识图谱(DTKG)。
模块-1(原子事实分解) 使用基于大语言模型的提示技术,以不超过400个标记的最佳分块大小,将时间 t 时观测到的输入文档 D_t 分解为时间原子事实 {f_{t,1}, ..., f_{t,m_t}}。每个时间原子事实都是一个简短、自包含的片段,仅传达一条信息。
模块-2(原子 TKG 构建) 并行地从每个原子事实 f_{t,i} 中提取五元组(quintuples),以构建原子时间知识图谱 G^t_i;同时对节点和关系进行嵌入,并在提取过程中通过将结束有效性事实转换为肯定形式来处理时间解析问题,仅修改 t_end 时间(例如,“约翰·多伊于2026年1月1日不再担任X公司的首席执行官” → (John_Doe, is_ceo, X, [.], [01-01-2026]))。
模块-3(并行原子合并) 采用二叉合并算法,通过迭代式成对并行合并原子 TKG,直至收敛。该过程包含三个解析阶段:(1) 实体解析,使用精确匹配或余弦相似度阈值 θ_E = 0.8;(2) 关系解析,忽略端点和时间戳合并关系名称,使用阈值 θ_R = 0.7;(3) 时间解析,对于具有相似 (e_s, r_p, e_o) 的关系,合并其观测时间和有效时间集合。
最终得到的时间知识图谱快照 G^t_s 会与先前的 DTKG G^{t-1} 合并,从而生成更新后的 DTKG:G^t。
ATOM 工作流示例
在观测日期 2007年1月9日,ATOM 处理事实“史蒂夫·乔布斯于2007年1月9日担任苹果公司首席执行官”,创建五元组 (Steve Jobs, is_ceo, Apple Inc., [09-01-2007], [.]),其中 t_start = [09-01-2007],t_end = [.](空/未知)。
随后,在观测日期 2011年10月5日,ATOM 处理更新:“史蒂夫·乔布斯于2011年10月5日不再担任苹果公司首席执行官”。如 模块-2 所述,这一 结束有效性事实 被转换为其肯定形式,仅修改 t_end 时间,生成 (Steve Jobs, is_ceo, Apple Inc., [.], [05-10-2011])。
在模块-3 的时间解析阶段,ATOM 检测到这两个五元组共享相同的 (e_s, r_p, e_o) 三元组,并合并它们的时间列表,最终生成五元组:(Steve Jobs, is_ceo, Apple Inc., [09-01-2007], [05-10-2011])。这正确地表示史蒂夫·乔布斯自2007年1月9日至2011年10月5日担任首席执行官,同时保持双时间建模,即 t_obs = [09-01-2007, 05-10-2011],以追踪每条信息的观测时间。
更多技术细节,请参阅:
atom/atom.py: 构建、合并和更新知识图谱的核心逻辑。
延迟与可扩展性
ATOM 通过用完全并行架构取代串行瓶颈,实现了显著的延迟降低(相比 Graphiti 降低93.8%,相比 iText2KG 降低95.3%)。
关键的架构优势包括:
- 并行五元组提取:ATOM 在单个并行步骤中提取五元组。这避免了 iText2KG 和 Graphiti 采用的分别提取实体和关系的步骤,后者会增加两倍的大语言模型调用次数并延长延迟。
- 独立于大语言模型的合并:该框架使用高效的距离度量(余弦相似度)进行实体/关系解析。这避免了基于大语言模型的解析所带来的计算瓶颈(Graphiti 采用的方式),并允许在图规模扩大时实现真正的并行化。
- 并行原子合并:原子 TKG 通过迭代式成对算法合并,且该过程可并行运行(例如,8个线程,批大小为40)。
- 早期时间解析:时间逻辑在提取阶段(模块-2)处理,而非在合并阶段。
因此,模块-3 的并行合并过程仅占 ATOM 总延迟的13%。其余部分归因于 API 调用,可通过增大批大小或扩展本地大语言模型硬件进一步减少。
示例:时间建模(ATOM vs. Graphiti)
下图展示了 ATOM 和 Graphiti 在时间建模上的差异,以2020年1月9日至23日关于新冠疫情的新闻为例。对于 ATOM,时间戳以 UNIX 格式编码,以消除与字符串解析操作和时区转换计算相关的开销。
对于2020年1月23日观测到的事实“这种神秘的呼吸道病毒已传播到至少10个其他国家”,Graphiti 将观测时间视为有效开始时间(t_start),设置 valid_at = 23-01-2020,暗示传播发生在该特定日期。
相比之下,ATOM 的双时间建模将观测时间(t_obs = 23-01-2020)与有效时间分开保存。它认识到文章是在2020年1月23日发表的,但这并不意味着传播恰好发生在那一天——传播可能早在几天或几周前就已经发生。这种区分对于时间推理至关重要:Graphiti 会推断新闻中的所有事件都发生在文章发表之日,而 ATOM 则正确地建模了信息的观测时间与事件实际发生时间之间的区别,从而避免时间误指。
下图显示了 ATOM 和 Graphiti 在时间解析方面的比较。两个于2020年1月28日观测到的原子事实分别报告了1月24日(26人死亡)和1月27日(至少80人死亡)的死亡人数。左图(ATOM):通过检测相似关系并扩展其有效时间历史(图中 t_end)来进行时间解析。右图(Graphiti):为每个原子事实创建单独的关系,导致重复。此外,Graphiti 错误地将“截至2020年1月24日”和“截至2020年1月27日”理解为有效开始时间,而非有效结束时间,从而导致时间误指。
安装
pip install --update itext2kg
ATOM
大语言模型兼容性
ATOM 兼容 LangChain 支持的所有语言模型。要使用 ATOM,您需要同时具备聊天模型和嵌入模型。有关可用聊天模型,请参阅以下链接:https://python.langchain.com/docs/integrations/chat/。有关嵌入模型,请访问:https://python.langchain.com/docs/integrations/text_embedding/。
请确保在使用前为每个聊天模型安装必要的包。
ATOM 参数
初始化:
llm_model: 一个用于从文本中提取关系的 LangChain 对话模型实例embeddings_model: 一个用于计算语义相似度的 LangChain 嵌入模型实例
build_graph 函数:
(该函数也可用于构建静态知识图谱,只需固定一个任意的观测时间并传入你的原子事实即可)。
atomic_facts(List[str]): 需要处理的原子事实列表(简短、自成一体的文本片段)obs_timestamp(str): 收集这些原子事实时的观测时间戳existing_knowledge_graph(KnowledgeGraph, 可选): 与新知识图谱合并的现有知识图谱ent_threshold(float, 默认值=0.8): 合并过程中实体消歧的相似度阈值rel_threshold(float, 默认值=0.7): 合并过程中关系消歧的相似度阈值entity_name_weight(float, 默认值=0.8): 相似度计算中实体名称的权重entity_label_weight(float, 默认值=0.2): 相似度计算中实体标签的权重max_workers(int, 默认值=8): 处理时的最大并行工作线程数
build_graph_from_different_obs_times 函数:
atomic_facts_with_obs_timestamps(dict): 字典,键为观测时间戳(str),值为每个时间戳对应的原子事实列表existing_knowledge_graph(KnowledgeGraph, 可选): 与新知识图谱合并的现有知识图谱ent_threshold(float, 默认值=0.8): 合并过程中实体消歧的相似度阈值rel_threshold(float, 默认值=0.7): 合并过程中关系消歧的相似度阈值entity_name_weight(float, 默认值=0.8): 相似度计算中实体名称的权重entity_label_weight(float, 默认值=0.2): 相似度计算中实体标签的权重max_workers(int, 默认值=8): 处理时的最大并行工作线程数
示例:从文本构建动态时空知识图谱
以下是一个基本示例,展示了如何使用 ATOM 从 2020 年 COVID-NYT 的原子事实中构建动态时空知识图谱。
⚠️ 性能提示:为了获得最佳性能,建议在专用的 Python 脚本中运行 ATOM,而不是在 Jupyter 笔记本中运行。这是因为 ATOM 的并行处理架构在笔记本环境中容易因事件循环冲突和线程竞争而导致显著的性能下降。
更复杂的示例即将推出……
import pandas as pd
import asyncio
import ast
# 使用 LangChain 封装导入 LLM 和嵌入模型
from langchain_openai import ChatOpenAI, OpenAIEmbeddings
from itext2kg.atom import Atom
from itext2kg import Neo4jStorage
# 设置 OpenAI LLM 和嵌入模型(将“##”替换为您的 API 密钥)
openai_api_key = "#"
openai_llm_model = ChatOpenAI(
api_key=openai_api_key,
model="gpt-4.1-2025-04-14",
temperature=0,
max_tokens=None,
timeout=None,
max_retries=2,
)
openai_embeddings_model = OpenAIEmbeddings(
api_key=openai_api_key,
model="text-embedding-3-large",
)
# 加载 2020 年 COVID-NYT 数据集的 pickle 文件
news_covid = pd.read_pickle("../datasets/atom/nyt_news/2020_nyt_COVID_last_version_ready.pkl")
# 定义一个辅助函数,将数据框中的原子事实转换为字典,
# 其中键为观测日期,值为该日期的所有原子事实组合。
def to_dictionary(df:pd.DataFrame, max_elements: int | None = 20):
if isinstance(df['factoids_g_truth'][0], str):
df["factoids_g_truth"] = df["factoids_g_truth"].apply(lambda x:ast.literal_eval(x))
grouped_df = df.groupby("date")["factoids_g_truth"].sum().reset_index()[:max_elements]
return {
str(date): factoids for date, factoids in grouped_df.set_index("date")["factoids_g_truth"].to_dict().items()
}
# 将数据框转换为所需的字典格式
news_covid_dict = to_dictionary(news_covid)
# 使用 OpenAI 模型初始化 ATOM 流水线
atom = Atom(llm_model=openai_llm_model, embeddings_model=openai_embeddings_model)
# 在不同观测时间戳上构建知识图谱
kg = await atom.build_graph_from_different_obs_times(
atomic_facts_with_obs_timestamps=news_covid_dict,
)
# 使用 Neo4j 可视化生成的知识图谱
URI = "bolt://localhost:7687"
USERNAME = "neo4j"
PASSWORD = "##"
Neo4jStorage(uri=URI, username=USERNAME, password=PASSWORD).visualize_graph(knowledge_graph=kg)
评估脚本、数据集和提示词
2020 年 COVID-19 动态时空数据集位于 ./datasets/atom 文件夹中(也可在 huggingface 上获取)。要复现结果,相关脚本位于 ./evaluation 文件夹中。提示词则位于 ./itext2kg/atom/models/schemas/ 文件夹中。
公开协作
我们欢迎社区贡献以改进 ATOM。
引用
@article{lairgi2024atom,
title={ATOM: AdapTive and OptiMized dynamic temporal knowledge graph construction using LLMs},
author={Lairgi, Yassir and Moncla, Ludovic and Benabdeslem, Khalid and Cazabet, R{\'e}my and Cl{\'e}au, Pierre},
journal={arXiv preprint arXiv:2510.22590},
year={2025},
url={https://arxiv.org/abs/2510.22590},
eprint={2510.22590},
archivePrefix={arXiv},
primaryClass={cs.AI}
}
版本历史
v1.0.02025/10/28v0.0.92025/09/01v0.0.82025/07/29v0.0.72024/10/09v0.0.52024/09/20v0.0.42024/09/17v0.0.32024/09/06V0.0.22024/07/16V0.0.12024/07/16常见问题
相似工具推荐
openclaw
OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你
everything-claude-code
everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上
LLMs-from-scratch
LLMs-from-scratch 是一个基于 PyTorch 的开源教育项目,旨在引导用户从零开始一步步构建一个类似 ChatGPT 的大型语言模型(LLM)。它不仅是同名技术著作的官方代码库,更提供了一套完整的实践方案,涵盖模型开发、预训练及微调的全过程。 该项目主要解决了大模型领域“黑盒化”的学习痛点。许多开发者虽能调用现成模型,却难以深入理解其内部架构与训练机制。通过亲手编写每一行核心代码,用户能够透彻掌握 Transformer 架构、注意力机制等关键原理,从而真正理解大模型是如何“思考”的。此外,项目还包含了加载大型预训练权重进行微调的代码,帮助用户将理论知识延伸至实际应用。 LLMs-from-scratch 特别适合希望深入底层原理的 AI 开发者、研究人员以及计算机专业的学生。对于不满足于仅使用 API,而是渴望探究模型构建细节的技术人员而言,这是极佳的学习资源。其独特的技术亮点在于“循序渐进”的教学设计:将复杂的系统工程拆解为清晰的步骤,配合详细的图表与示例,让构建一个虽小但功能完备的大模型变得触手可及。无论你是想夯实理论基础,还是为未来研发更大规模的模型做准备
spec-kit
Spec Kit 是一款专为提升软件开发效率而设计的开源工具包,旨在帮助团队快速落地“规格驱动开发”(Spec-Driven Development)模式。传统开发中,需求文档往往与代码实现脱节,导致沟通成本高且结果不可控;而 Spec Kit 通过将规格说明书转化为可执行的指令,让 AI 直接依据明确的业务场景生成高质量代码,从而减少从零开始的随意编码,确保产出结果的可预测性。 该工具特别适合希望利用 AI 辅助编程的开发者、技术负责人及初创团队。无论是启动全新项目还是在现有工程中引入规范化流程,用户只需通过简单的命令行操作,即可初始化项目并集成主流的 AI 编程助手。其核心技术亮点在于“规格即代码”的理念,支持社区扩展与预设模板,允许用户根据特定技术栈定制开发流程。此外,Spec Kit 强调官方维护的安全性,提供稳定的版本管理,帮助开发者在享受 AI 红利的同时,依然牢牢掌握架构设计的主动权,真正实现从“凭感觉写代码”到“按规格建系统”的转变。
NextChat
NextChat 是一款轻量且极速的 AI 助手,旨在为用户提供流畅、跨平台的大模型交互体验。它完美解决了用户在多设备间切换时难以保持对话连续性,以及面对众多 AI 模型不知如何统一管理的痛点。无论是日常办公、学习辅助还是创意激发,NextChat 都能让用户随时随地通过网页、iOS、Android、Windows、MacOS 或 Linux 端无缝接入智能服务。 这款工具非常适合普通用户、学生、职场人士以及需要私有化部署的企业团队使用。对于开发者而言,它也提供了便捷的自托管方案,支持一键部署到 Vercel 或 Zeabur 等平台。 NextChat 的核心亮点在于其广泛的模型兼容性,原生支持 Claude、DeepSeek、GPT-4 及 Gemini Pro 等主流大模型,让用户在一个界面即可自由切换不同 AI 能力。此外,它还率先支持 MCP(Model Context Protocol)协议,增强了上下文处理能力。针对企业用户,NextChat 提供专业版解决方案,具备品牌定制、细粒度权限控制、内部知识库整合及安全审计等功能,满足公司对数据隐私和个性化管理的高标准要求。
ML-For-Beginners
ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程,旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周,包含 26 节精炼课程和 52 道配套测验,内容涵盖从基础概念到实际应用的完整流程,有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。 无论是希望转型的开发者、需要补充算法背景的研究人员,还是对人工智能充满好奇的普通爱好者,都能从中受益。课程不仅提供了清晰的理论讲解,还强调动手实践,让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持,通过自动化机制提供了包括简体中文在内的 50 多种语言版本,极大地降低了全球不同背景用户的学习门槛。此外,项目采用开源协作模式,社区活跃且内容持续更新,确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路,ML-For-Beginners 将是理想的起点。