1. 项目概述与核心思路拆解做量化交易和股票预测的朋友都知道这行最头疼的就是市场那捉摸不定的“脾气”。你看K线、MACD、RSI这些技术指标翻来覆去地看模型训练时表现挺好一到实盘一个突如其来的政策消息或者行业黑天鹅就能让之前的预测全部作废。这背后的根本原因在于传统的时序预测模型无论是ARIMA还是LSTM大多只盯着历史价格数据这条“单行道”却忽略了驱动价格变化的真正“燃料”——信息。信息从哪里来对于现代金融市场新闻、社交媒体、财报、分析师报告构成了最主要的信息源。其中新闻标题因其高度凝练、时效性强的特点往往包含了最能影响市场情绪的“事件核心”。想象一下你作为交易员早上打开财经APP扫一眼标题“某科技巨头发布革命性产品”和“某巨头面临反垄断调查”即使不看正文你的大脑也会瞬间对相关股票的未来走势产生一个强烈的先验判断。这个判断过程本质上就是大脑对文本信息进行快速特征提取并与已有的股价知识图谱进行融合推理。我们这次要探讨的“基于混合神经网络与新闻文本分析的股票波动预测方法”HTPNN其核心思想就是尝试用机器来模拟并优化这个过程。它不是简单地用LSTM预测股价然后用CNN分析新闻再把结果加权平均。它的精巧之处在于特征层面的深度融合。具体来说整个方案的骨架可以分为三步走第一步把“人话”变成“机器能懂的话”——新闻的向量化与降维。一篇新闻标题比如“美联储暗示加息放缓美股科技板块普涨”对机器来说只是一串字符。我们需要通过自然语言处理技术将其转化为具有数学意义的向量。这里没有选择简单的词袋模型而是采用了GloVe这类基于全局词共现矩阵的分布式表示方法。它能更好地捕捉“美联储”与“加息”、“科技板块”与“涨”之间的语义关联。然而直接得到的词向量矩阵维度高且稀疏就像一张信息量巨大但噪点也很多的照片。这时稀疏自编码器就扮演了“降噪滤镜”和“特征提取器”的角色它能在尽量保留核心语义信息的前提下将高维、稀疏的文本特征压缩成低维、稠密的特征向量。这一步至关重要它决定了后续模型能从新闻中“看懂”多少。第二步双线作战——分别捕捉文本的“空间特征”与股价的“时间记忆”。这是模型设计的核心。一条降维后的新闻特征序列被送入一维卷积神经网络。你可以把CNN的卷积核想象成一个在文本序列上滑动的“语义聚焦镜”它专门捕捉局部词组如“暗示加息放缓”所形成的关键模式。这些被提取出的文本特征代表了新闻在“空间”上词语组合间所蕴含的冲击力。与此同时股票的日频K线数据开盘、收盘、最高、最低、成交量、成交额以及EMV指标被送入长短期记忆网络。LSTM是处理时间序列的专家它像一个有经验的交易员不仅看今天的价格还会记住一周前、一个月前的趋势并判断哪些记忆对预测明天有用哪些该遗忘。它提取的是股价在“时间”维度上延续的规律和惯性。第三步情报融合与决策——特征融合与分类预测。上面两步得到的一份是来自新闻的“外部事件情报简报”一份是来自股价的“内部走势分析报告”。简单的拼接Concatenation可能会让模型无所适从因为两种特征尺度、意义都不同。HTPNN采用了一个更巧妙的做法通过一个融合层将两种特征映射到同一个语义空间再进行元素级的相加或更复杂的交互操作。这相当于让CNN提取的“事件特征”和LSTM提取的“趋势特征”直接对话、相互印证。最后这个融合后的“联合情报”被送入全连接层进行判断明天这只股票上涨的概率有多大这个框架的美妙之处在于它构建了一个**“事件驱动”与“趋势惯性”相互校验的决策系统**。当新闻出现重大利好而股价趋势却呈弱势时模型能捕捉到这种背离当没有重大新闻而股价呈现强劲技术性趋势时模型也能依赖LSTM的记忆做出判断。这比单一模型要稳健得多。注意这里必须明确一个前提本方法及任何量化模型的目标都是预测短期价格波动方向涨/跌的概率而非精确预测具体价格。市场充满随机性追求绝对精准的价位预测是不现实的。我们的目标是构建一个具有统计优势的预测系统通过大量交易在概率上获利。1.1 为什么是新闻标题而非全文原文和许多后续研究都强调了使用新闻标题的优越性。这背后有深刻的实操考量信息密度与噪声比新闻正文包含大量背景信息、重复阐述和无关细节如公司历史、人物职务这些对于判断即时市场影响而言多是噪声。标题是编辑提炼的精华是信息的“第一冲击波”直接反映了事件的本质。处理效率标题长度固定且短通常不超过25个词极大简化了文本预处理、向量化和模型输入的复杂度。处理全文需要应对可变长度、段落结构、指代消解等复杂NLP问题计算成本呈指数级上升在实盘的高频环境下难以应用。时效性在分秒必争的交易中交易员也是先扫标题做快速判断。模型使用标题与人类决策的节奏和依据更为吻合。在实际工程中我们通常通过财经数据API如天勤、TuShare、Quandl等或爬虫按股票代码和时间戳抓取关联的新闻标题构成与股价序列对齐的文本数据集。1.2 技术指标选型为什么加入EMV在基础OHLCV开、高、低、收、成交量之外原文特意加入了EMV指标。简易波动指标Ease of Movement Value的设计理念很独特它衡量的是价格变动单位成交量所耗费的“力气”。计算公式简化理解EMV ≈ 当日价格中点 - 前日价格中点 / 成交量 / 价格区间。价格中点最高价最低价/2。核心逻辑如果价格大幅上涨但成交量很小EMV值很大说明价格移动“很容易”趋势可能由少量资金推动不够稳固。反之如果价格小幅波动却伴随天量成交EMV值很小说明多空博弈激烈价格“移动困难”市场处于焦灼状态。在模型中的作用OHLCV描述了“状态”而EMV描述了状态变化的“质量”或“效率”。它为模型提供了一个关于市场动能和阻力水平的额外维度信息。在实践回测中加入EMV、RSI、布林带宽度等描述市场“状态健康度”的指标往往能提升模型对趋势可持续性的判断力。2. 核心模块详解与工程实现要点2.1 新闻文本处理流水线从爬虫到向量这一部分是数据工程的基石处理不好后续模型再精巧也是“垃圾进垃圾出”。1. 数据获取与对齐源选择优先使用专业的金融数据服务商如Bloomberg, Reuters, 国内的同花顺iFinD的API其数据清洗质量高新闻与股票的关联标注准确。若出于研究目的使用爬虫目标网站可选雅虎财经、新浪财经、东方财富网等。务必遵守网站的robots.txt协议和数据使用条款。关键对齐操作股票交易日与非交易日周末、节假日必须严格区分。新闻发布日期需按以下规则对齐到交易日若新闻发布在交易日交易时段内则归属该交易日。若新闻发布在非交易日或交易日收盘后则归属下一个交易日。因为市场需要在下一个开盘时消化该信息。对于停牌日的新闻归属复牌后的第一个交易日。缺失值处理对于某个交易日内没有相关新闻的股票常见的填充策略有两种一是使用全零向量作为“无新闻”的表示二是使用上一个有新闻交易日的特征向量模拟信息的持续影响。原文默认采用后者。2. 文本预处理标准化流程import pandas as pd import numpy as np from nltk.tokenize import word_tokenize from nltk.corpus import stopwords import re def preprocess_news_headline(headline): 新闻标题预处理函数 # 1. 小写化 headline headline.lower() # 2. 移除特殊字符、数字保留可能重要的如“iPhone 13”中的数字需酌情处理 headline re.sub(r[^a-zA-Z\s], , headline) # 英文处理示例 # 中文处理需使用jieba分词并移除标点符号 # 3. 分词 words word_tokenize(headline) # 英文使用nltk中文使用jieba.lcut # 4. 移除停用词 (需自定义金融领域停用词表如“据悉”“公告称”等) stop_words set(stopwords.words(english)) words [w for w in words if w not in stop_words] # 5. 词形还原 (Lemmatization) 比词干提取 (Stemming) 更精确推荐使用 from nltk.stem import WordNetLemmatizer lemmatizer WordNetLemmatizer() words [lemmatizer.lemmatize(w) for w in words] return words实操心得对于中文新闻分词准确性至关重要。建议使用jieba库并加载金融词典如jieba.load_userdict(finance_terms.txt)来提升“降准”、“市盈率”、“科创板”等专业术语的分词效果。停用词表也需要自定义过滤掉“今日”、“据悉”、“记者了解到”等无信息量的词汇。3. 词向量训练与降维GloVe vs. Word2Vec原文选择GloVe是因为它利用了语料库的全局统计信息共现矩阵在词类比任务上表现通常更好。对于金融文本词语的共现关系如“加息”常与“通胀”、“国债收益率”同时出现蕴含重要信息。Word2VecSkip-gram/CBOW基于局部上下文窗口训练更快但对罕见词处理可能不如GloVe。在资源允许的情况下可以分别训练对比效果。一个折中的工程实践是使用在大型通用语料库如Wikipedia上预训练的GloVe或Word2Vec模型作为初始化再用自己的金融新闻语料进行微调Fine-tuning。稀疏自编码器降维假设原始新闻标题被表示为25个词每个词50维则一条新闻就是一个1250维的向量。SAE的目标是学习一个高效的编码将其压缩到更低维度如256维。其损失函数包含三部分重构损失让解码后的输出尽可能接近输入。L2正则化惩罚权重过大防止过拟合。稀疏惩罚KL散度让隐藏层神经元大部分时候处于“抑制”状态只有少数对特定模式敏感的神经元被激活从而学习到稀疏的、有代表性的特征。# 伪代码示意SAE的核心思想 input_dim 1250 encoding_dim 256 sparsity_target 0.1 # 希望隐藏层平均激活度为10% # 编码器 encoded Dense(encoding_dim, activationrelu, activity_regularizerl1_l2(l1sparsity_weight, l2weight_decay))(input_layer) # 解码器 decoded Dense(input_dim, activationsigmoid)(encoded) # 模型编译损失函数为MSE重构损失 autoencoder.compile(optimizeradam, lossmse) # 训练完成后取编码器部分作为特征提取器 encoder_model Model(inputsinput_layer, outputsencoded) compressed_features encoder_model.predict(raw_news_vectors)2.2 混合神经网络结构工程化实现模型构建使用Keras或PyTorch等框架会非常清晰。以下是基于Keras Functional API的一个简化架构示意import tensorflow as tf from tensorflow.keras.layers import Input, Conv1D, LSTM, Dense, Dropout, Add, Concatenate from tensorflow.keras.models import Model def build_htpnn(news_seq_length, news_feature_dim, price_seq_length, price_feature_dim): 构建HTPNN模型 news_seq_length: 新闻序列长度如25 news_feature_dim: 降维后的新闻特征维度如256 price_seq_length: 股价序列长度如30对应30天 price_feature_dim: 股价特征维度如7O, H, L, C, V, Amount, EMV # 1. 新闻特征提取分支 (CNN路径) news_input Input(shape(news_seq_length, news_feature_dim), namenews_input) # 第一层卷积提取局部短语特征 conv1 Conv1D(filters128, kernel_size3, activationrelu, paddingsame)(news_input) conv1 Dropout(0.3)(conv1) # 防止过拟合 # 第二层卷积提取更抽象的特征 conv2 Conv1D(filters64, kernel_size3, activationrelu, paddingsame)(conv1) conv2 Dropout(0.3)(conv2) # 由于SAE已降维这里可以不用池化层保留序列长度 # 将整个序列的特征进行全局平均得到一个固定长度的新闻特征向量 news_feature tf.keras.layers.GlobalAveragePooling1D()(conv2) # 形状: (batch, 64) # 2. 股价特征提取分支 (LSTM路径) price_input Input(shape(price_seq_length, price_feature_dim), nameprice_input) lstm1 LSTM(units50, return_sequencesTrue)(price_input) lstm1 Dropout(0.3)(lstm1) lstm2 LSTM(units50)(lstm1) # 只返回最后一个时间步的输出 lstm2 Dropout(0.3)(lstm2) # 形状: (batch, 50) # 3. 特征融合层 # 将两个特征向量映射到同一维度然后相加或拼接 # 方法A: 相加 (要求两个分支输出维度相同可通过Dense调整) news_dense Dense(32, activationrelu)(news_feature) price_dense Dense(32, activationrelu)(lstm2) fused Add()([news_dense, price_dense]) # 元素级相加 # 方法B: 拼接 (更灵活) # fused Concatenate()([news_feature, lstm2]) # 4. 分类输出层 fused Dropout(0.5)(fused) output Dense(1, activationsigmoid, nameprediction)(fused) # 二分类涨/跌 model Model(inputs[news_input, price_input], outputsoutput) model.compile(optimizeradam, lossbinary_crossentropy, metrics[accuracy]) return model # 实例化模型 model build_htpnn(news_seq_length25, news_feature_dim256, price_seq_length30, price_feature_dim7) model.summary()关键参数与设计选择解析CNN卷积核大小选择3意味着每次关注连续3个词约一个短语的组合特征。这对于捕捉“业绩超预期”、“面临监管调查”这类关键短语是合适的。LSTM单元数不宜过多。股价序列特征维度本身不高7维过大的LSTM容量容易在有限数据上过拟合。50-100是一个常见的起始尝试范围。Dropout的使用在CNN和LSTM层后、融合层后、全连接层前都使用了Dropout这是防止深度学习模型在金融数据上过拟合的标准操作。丢弃率0.3-0.5需要根据验证集效果调整。融合方式Add()操作要求两个特征同维度它假设新闻和股价特征在同一个语义空间里可以直接叠加效应。Concatenate()则更保守让后续的全连接层去学习两者的组合权重。通常后者更灵活效果也可能更好但会增加参数。输出与损失函数使用sigmoid激活函数和binary_crossentropy损失是标准的二分类配置。模型输出的是股票在下一个交易日上涨的概率0到1之间。2.3 数据准备与标签定义这是最容易出错的一环直接关系到模型学习的目标是否准确。def prepare_samples(price_df, news_features_df, seq_length30): 准备模型输入样本和标签 price_df: DataFrame, 列包括 [open, high, low, close, volume, amount, emv, return] news_features_df: DataFrame, 索引为日期列为降维后的新闻特征256维 seq_length: 回溯窗口长度 X_price, X_news, y [], [], [] dates price_df.index.tolist() for i in range(seq_length, len(price_df)-1): # 留出一天作为预测目标 # 1. 股价特征取过去seq_length天的技术指标 price_window price_df.iloc[i-seq_length:i][[open, high, low, close, volume, amount, emv]].values # 2. 新闻特征取与股价窗口结束日对齐的新闻特征假设已对齐 # 注意新闻特征应该是基于截止到第i天的信息不能包含未来的新闻 news_date dates[i] # 第i天收盘后或第i1天开盘前可获得的新闻 news_feature news_features_df.loc[news_date].values.reshape(1, -1) # 如果news_feature是序列如25*256这里需要做序列化处理 # 此处假设news_feature已经是全局平均后的256维向量 # 3. 标签第i1天的涨跌 (例如收盘价上涨为1否则为0) next_day_return price_df.iloc[i1][return] # return列可以是日收益率 label 1 if next_day_return 0 else 0 X_price.append(price_window) X_news.append(news_feature) y.append(label) X_price np.array(X_price) # 形状: (样本数, seq_length, 7) X_news np.array(X_news) # 形状: (样本数, 1, 256) 或 (样本数, 25, 256) y np.array(y) return X_price, X_news, y标签定义的陷阱避免未来函数确保在时间点t模型所使用的新闻和股价数据都是t时刻或之前已经公开的信息。绝对不能使用t1时刻的新闻来预测t1的股价。涨跌阈值简单的以收盘价涨跌大于0作为标签可能会包含大量日内震荡但收盘持平的情况导致信号模糊。一个改进方案是设置一个最小波动阈值如涨跌幅超过0.5%低于阈值的样本视为“震荡”并从训练集中剔除或单独作为一个类别三分类问题。数据标准化股价特征价格、成交量量纲差异巨大必须进行标准化。通常对每个特征在整个训练集上计算均值和标准差进行Z-score标准化。切记只能用训练集的统计量去标准化验证集和测试集这是防止信息泄露的铁律。3. 实验配置、训练与评估全流程3.1 实验环境与数据划分硬件建议使用带GPU的机器进行训练。CNN和LSTM都是计算密集型操作GPU能极大加速。即使是单张RTX 3080/4090或Tesla V100也能在合理时间内完成实验。软件栈Python 3.8TensorFlow 2.x / PyTorch 1.xPandas, NumPy, Scikit-learn (用于数据预处理和评估)NLTK / Jieba (用于文本处理)Gensim (用于训练GloVe/Word2Vec)数据划分时序敏感绝对不能随机打乱金融数据具有强时序相关性打乱会导致模型窥见未来信息造成严重的“前视偏差”回测结果虚高实盘一塌糊涂。标准做法按时间顺序划分。例如使用2014-2016年数据训练2017年数据验证用于调整超参数、早停2018-2019年数据测试用于最终评估模拟实盘。训练/验证/测试集比例原文使用2/3, 1/6, 1/6是一个参考。在数据量充足的情况下如10年以上日线数据可以按7:2:1或6:2:2划分。3.2 模型训练技巧与超参数调优优化器与学习率Adam优化器是默认的稳健选择。初始学习率可以设为3e-4或1e-3。使用ReduceLROnPlateau回调函数当验证集损失不再下降时自动降低学习率如乘以0.5有助于模型在后期精细调优。批大小Batch Size在GPU内存允许范围内较大的Batch Size如64, 128能使梯度更新更稳定。但金融数据样本量可能有限太大的Batch Size会减少参数更新次数。可以从32开始尝试。早停Early Stopping这是防止过拟合最重要的手段监控验证集损失如果连续10或20个epoch没有下降则停止训练并回滚到验证集损失最低的模型权重。类别不平衡处理A股市场在牛市和熊市期间涨跌比例可能严重失衡。如果训练集中“涨”的样本远多于“跌”模型会倾向于永远预测“涨”以获得高准确率但这没有意义。解决方法对损失函数加权在binary_crossentropy中为少数类赋予更高的权重。过采样/欠采样在训练时对少数类样本进行过采样或对多数类进行欠采样。使用更鲁棒的评估指标这正是原文引入MCC的原因。from tensorflow.keras.callbacks import EarlyStopping, ReduceLROnPlateau, ModelCheckpoint callbacks [ EarlyStopping(monitorval_loss, patience20, verbose1, restore_best_weightsTrue), ReduceLROnPlateau(monitorval_loss, factor0.5, patience10, verbose1), ModelCheckpoint(best_htpnn_model.h5, monitorval_accuracy, save_best_onlyTrue, modemax) ] history model.fit( [X_news_train, X_price_train], y_train, validation_data([X_news_val, X_price_val], y_val), epochs200, batch_size64, callbackscallbacks, verbose1 )3.3 超越准确率如何科学评估预测模型在股票预测这种不平衡且随机性强的任务中准确率Accuracy是一个极具误导性的指标。假设市场70%的时间在上涨一个永远预测“涨”的傻瓜模型就有70%的准确率。我们必须依赖更全面的评估矩阵评估指标公式意义解读精确率 (Precision)TP / (TP FP)在所有模型预测为“涨”的案例中真正上涨的比例。高精确率意味着模型发出的“看涨信号”质量很高假警报少。这对交易至关重要因为每次错误的买入都会产生交易成本和亏损。召回率 (Recall)TP / (TP FN)在所有实际上涨的案例中模型成功预测到的比例。高召回率意味着模型捕捉上涨机会的能力强不容易错过行情。F1-Score2 * (P * R) / (P R)精确率和召回率的调和平均数在两者间寻求平衡。马修斯相关系数 (MCC)公式见原文(15)一个介于-1到1之间的综合指标。1表示完美预测0表示随机预测-1表示完全反向预测。MCC对类别不平衡不敏感是评估二分类模型非常稳健的指标。在金融预测中MCC比准确率更有参考价值。累积收益率曲线模拟交易将模型的预测信号如预测概率0.6时买入0.4时卖出应用于测试集计算策略的累积收益率、夏普比率、最大回撤。这是终极检验一个不能带来正收益或不能跑赢基准如沪深300指数的预测模型无论指标多好看都没有实际价值。混淆矩阵分析示例假设在测试集上得到如下混淆矩阵预测涨预测跌实际涨120 (TP)80 (FN)实际跌30 (FP)170 (TN)准确率 (120170)/400 72.5%精确率 120/(12030) 80.0%召回率 120/(12080) 60.0%F1-Score 2*(0.8*0.6)/(0.80.6) 68.6%MCC ≈ 0.45 (计算略)分析该模型精确率较高80%意味着它发出的买入信号有八成把握是对的这有利于控制亏损。但召回率一般60%错过了四成的上涨机会。MCC为0.45表明模型具备一定的预测能力远好于随机猜测。4. 实战避坑指南与进阶思考4.1 常见问题与排查清单模型准确率很高90%但模拟交易一直亏钱。原因极有可能存在“未来数据泄露”。检查数据对齐代码确保在每一个时间点模型绝对没有“看到”未来的价格或新闻。仔细检查shift()、rolling()等函数的窗口设置。另一个可能是标签定义不合理涨跌阈值太小模型在学习噪声。排查进行“时间穿越”测试。用2018年的模型参数去预测2017年的数据这是不可能的如果还有高准确率则铁定存在数据泄露。训练损失持续下降但验证损失早早就开始上升。原因典型的过拟合。金融数据信噪比低模型很容易记住训练集里的噪声。解决增强正则化增大Dropout比率在LSTM和Dense层添加kernel_regularizer。简化模型减少LSTM单元数、CNN滤波器数量。增加数据获取更长时间跨度的数据或使用数据增强需谨慎如对股价序列添加微小噪声、对新闻词向量进行随机掩码。使用更激进的早停策略。新闻特征似乎没有起作用只用价格数据的LSTM模型效果差不多。原因新闻文本特征提取不到位或者新闻与股价的关联性在所选股票或时间段内不强。排查与优化检查新闻质量你用的新闻源是标题党吗是即时快讯还是深度分析后者可能影响更持久。优化文本处理尝试不同的词向量模型Word2Vec, FastText, BERT的金融领域预训练模型如FinBERT比较效果。引入情感分析在词向量基础上可以接入情感分析模型将新闻标题转化为情感极性正面、负面、中性和强度分数作为一个明确的数值特征输入模型有时比纯词向量更有效。细分新闻类型将新闻分为“公司公告”、“行业政策”、“宏观经济”、“市场传闻”等类别为不同类别的新闻赋予不同的权重或使用不同的处理通道。模型在回测上表现优异但实盘部署后效果骤降。原因这是量化交易中最常见的“策略衰减”问题。市场模式不是一成不变的。应对策略定期再训练建立模型迭代机制例如每月或每季度用最新的数据重新训练模型。在线学习研究能否在实盘中以较小的学习率对模型进行微调使其适应市场变化。集成模型不要依赖单一模型。可以训练多个不同架构或不同数据子集的HTPNN模型进行投票集成提高鲁棒性。严格风控任何预测模型都必须置于严格的风险控制框架下设置单笔止损、日度最大回撤等阈值。4.2 进阶优化方向多时间尺度融合原文提到了长、中、短三个时间窗口。可以构建一个更复杂的多尺度模型用不同长度的CNN和LSTM分别捕捉新闻的即时冲击、中期影响和股价的短期波动、长期趋势再进行多层次融合。图神经网络引入股票之间不是孤立的。可以考虑引入图神经网络将行业关联、供应链关系、概念股板块等构建成图结构让模型同时学习个股特征和其在市场网络中的位置信息。注意力机制在LSTM后加入注意力层让模型自动关注历史序列中对当前预测最重要的那些天。在新闻CNN分支也可以加入注意力聚焦标题中最关键的词语。处理高频数据将日度预测扩展到日内分钟级预测。这需要处理更高频的新闻流如RSS推送、社交媒体和分笔成交数据对模型的实时性和计算效率提出极高要求。4.3 一个重要的伦理与实操提醒股票市场是一个复杂的生态系统任何模型都是对历史规律的总结。过去有效不代表未来有效。本文所述的HTPNN模型是一个强大的研究工具和思路框架它为我们提供了融合多源信息进行决策的范式。但在真实投资中切勿将其作为唯一的决策依据。市场会受到宏观经济、政策突变、国际关系、投资者集体情绪等无数模型难以量化的因素影响。始终保持对市场的敬畏将模型作为辅助参考结合基本面分析和严格的风险管理才是长期生存之道。构建这样一个混合预测系统从数据爬取清洗、到特征工程、再到模型训练调优每一步都需要扎实的工程能力和细致的耐心。过程中你会遇到无数报错、数据异常和反直觉的结果但每一次排查和优化都是对市场认知和机器学习技术理解的深化。这条路没有捷径但每一步都算数。