大数据文本分析中的关键词提取:TF-IDF vs Word2Vec

关键词:关键词提取、TF-IDF、Word2Vec、文本分析、自然语言处理、特征提取、词向量

摘要:本文深入探讨了大数据文本分析中两种主流的关键词提取技术:传统的TF-IDF方法和基于深度学习的Word2Vec模型。我们将从原理、算法实现、数学基础、实际应用等多个维度进行对比分析,并通过Python代码示例展示两者的具体实现。文章还将讨论在不同场景下的选择策略,以及未来发展趋势,为读者提供全面的技术视角和实践指导。

1. 背景介绍

1.1 目的和范围

本文旨在系统性地比较TF-IDF和Word2Vec这两种关键词提取技术,帮助读者理解它们的核心原理、适用场景以及优缺点。我们将覆盖从基础概念到高级应用的完整知识体系,特别关注在大数据环境下的实际应用挑战和解决方案。

1.2 预期读者

本文适合以下读者:

  • 数据科学家和NLP工程师
  • 大数据分析专业人员
  • 计算机科学相关专业的学生
  • 对文本挖掘和自然语言处理感兴趣的技术爱好者

1.3 文档结构概述

文章首先介绍基本概念,然后深入分析两种技术的原理和实现,接着通过实际案例展示应用方法,最后讨论未来趋势和挑战。

1.4 术语表

1.4.1 核心术语定义
  • 关键词提取:从文本中自动识别最能代表其内容的关键词或短语的过程
  • TF-IDF:词频-逆文档频率,一种统计方法,用于评估词语在文档中的重要程度
  • Word2Vec:一种将词语表示为稠密向量的神经网络模型,能够捕捉词语的语义信息
1.4.2 相关概念解释
  • 词袋模型(BoW):将文本表示为词语出现频率的集合,忽略语法和词序
  • 词嵌入(Word Embedding):将词语映射到低维连续向量空间的技术
  • 语义相似度:衡量词语或文本在语义上相似程度的指标
1.4.3 缩略词列表
  • NLP:自然语言处理(Natural Language Processing)
  • TF:词频(Term Frequency)
  • IDF:逆文档频率(Inverse Document Frequency)
  • CBOW:连续词袋模型(Continuous Bag-of-Words)
  • SG:Skip-Gram模型

2. 核心概念与联系

2.1 TF-IDF原理架构

文档集合
分词处理
计算TF值
计算IDF值
TF-IDF矩阵
关键词提取

TF-IDF通过统计方法衡量词语的重要性,包含两个核心部分:

  1. TF(Term Frequency):词语在文档中出现的频率
    t f ( t , d ) = f t , d ∑ t ′ ∈ d f t ′ , d tf(t,d) = \frac{f_{t,d}}{\sum_{t'\in d}f_{t',d}} tf(t,d)=tdft,dft,d
  2. IDF(Inverse Document Frequency):词语在整个文档集合中的稀有程度
    i d f ( t , D ) = log ⁡ N ∣ { d ∈ D : t ∈ d } ∣ idf(t,D) = \log\frac{N}{|\{d\in D:t\in d\}|} idf(t,D)=log{dD:td}N

最终TF-IDF值为两者的乘积:
t f i d f ( t , d , D ) = t f ( t , d ) × i d f ( t , D ) tfidf(t,d,D) = tf(t,d) \times idf(t,D) tfidf(t,d,D)=tf(t,d)×idf(t,D)

2.2 Word2Vec原理架构

文本语料
分词处理
构建词汇表
选择模型架构
CBOW或Skip-Gram
训练神经网络
词向量表示
语义相似度计算

Word2Vec包含两种主要模型架构:

  1. CBOW模型:通过上下文预测当前词
  2. Skip-Gram模型:通过当前词预测上下文

两种模型都通过浅层神经网络学习词语的分布式表示,能够捕捉丰富的语义信息。

2.3 技术对比

特性TF-IDFWord2Vec
表示形式稀疏高维向量稠密低维向量
语义捕捉能力
计算复杂度
数据需求可处理小规模数据需要大规模语料
上下文敏感性
实现难度简单中等
解释性

3. 核心算法原理 & 具体操作步骤

3.1 TF-IDF实现步骤

  1. 文本预处理:分词、去除停用词、词干提取等
  2. 构建词汇表:收集所有文档中的唯一词语
  3. 计算TF矩阵:对每个文档计算每个词语的频率
  4. 计算IDF向量:对整个文档集合计算每个词语的逆文档频率
  5. 计算TF-IDF矩阵:将TF矩阵和IDF向量相乘
  6. 提取关键词:根据TF-IDF值排序选择top N词语

3.2 Word2Vec实现步骤

  1. 文本预处理:分词、清理、规范化
  2. 构建词汇表:确定词汇表大小和最小词频
  3. 选择模型架构:CBOW或Skip-Gram
  4. 设置模型参数:向量维度、窗口大小、负采样数等
  5. 训练模型:在语料上训练神经网络
  6. 提取词向量:获取隐藏层权重作为词向量
  7. 计算相似度:使用余弦相似度等度量词语关系

3.3 Python实现对比

3.3.1 TF-IDF实现代码
from sklearn.feature_extraction.text import TfidfVectorizer
import numpy as np

# 示例文档集合
documents = [
    "自然语言处理是人工智能的重要领域",
    "深度学习在自然语言处理中广泛应用",
    "关键词提取是文本挖掘的基本任务"
]

# 创建TF-IDF向量化器
vectorizer = TfidfVectorizer(token_pattern=r"(?u)\b\w+\b")
tfidf_matrix = vectorizer.fit_transform(documents)

# 获取特征词
feature_names = vectorizer.get_feature_names_out()

# 打印每个文档的关键词
for i in range(len(documents)):
    print(f"\n文档 {i+1} 的关键词:")
    # 获取当前文档的TF-IDF向量并转换为数组
    doc_vector = tfidf_matrix[i].toarray().flatten()
    # 获取前5个最高TF-IDF值的词语
    top_indices = np.argsort(doc_vector)[-5:][::-1]
    for idx in top_indices:
        if doc_vector[idx] > 0:
            print(f"{feature_names[idx]}: {doc_vector[idx]:.4f}")
3.3.2 Word2Vec实现代码
from gensim.models import Word2Vec
from nltk.tokenize import word_tokenize
import numpy as np

# 示例文档集合
documents = [
    "natural language processing is an important area of artificial intelligence",
    "deep learning is widely used in natural language processing",
    "keyword extraction is a fundamental task in text mining"
]

# 分词处理
tokenized_docs = [word_tokenize(doc.lower()) for doc in documents]

# 训练Word2Vec模型
model = Word2Vec(
    sentences=tokenized_docs,
    vector_size=100,    # 词向量维度
    window=5,          # 上下文窗口大小
    min_count=1,       # 最小词频
    workers=4,         # 并行线程数
    sg=1               # 1 for skip-gram, 0 for CBOW
)

# 提取关键词示例:找到与"processing"最相似的词语
similar_words = model.wv.most_similar("processing", topn=5)
print("\n与'processing'最相似的词语:")
for word, similarity in similar_words:
    print(f"{word}: {similarity:.4f}")

# 文档向量表示(通过平均词向量)
def document_vector(model, doc):
    doc = [word for word in doc if word in model.wv.key_to_index]
    if not doc:
        return np.zeros(model.vector_size)
    return np.mean([model.wv[word] for word in doc], axis=0)

# 计算文档相似度
doc1_vec = document_vector(model, tokenized_docs[0])
doc2_vec = document_vector(model, tokenized_docs[1])
similarity = np.dot(doc1_vec, doc2_vec) / (np.linalg.norm(doc1_vec) * np.linalg.norm(doc2_vec))
print(f"\n文档1和文档2的相似度: {similarity:.4f}")

4. 数学模型和公式 & 详细讲解 & 举例说明

4.1 TF-IDF数学模型

TF-IDF由两部分组成:

  1. 词频(TF)
    t f ( t , d ) = f t , d ∑ t ′ ∈ d f t ′ , d tf(t,d) = \frac{f_{t,d}}{\sum_{t'\in d}f_{t',d}} tf(t,d)=tdft,dft,d
    其中 f t , d f_{t,d} ft,d是词语 t t t在文档 d d d中出现的次数,分母是文档 d d d中所有词语出现次数的总和。

  2. 逆文档频率(IDF)
    i d f ( t , D ) = log ⁡ N ∣ { d ∈ D : t ∈ d } ∣ idf(t,D) = \log\frac{N}{|\{d\in D:t\in d\}|} idf(t,D)=log{dD:td}N
    其中 N N N是文档集合中文档的总数,分母是包含词语 t t t的文档数量。

举例说明
假设有一个包含1000个文档的集合,词语"人工智能"在某个文档中出现5次,该文档共有100个词语,且"人工智能"出现在100个文档中。

计算:
t f = 5 100 = 0.05 tf = \frac{5}{100} = 0.05 tf=1005=0.05
i d f = log ⁡ 1000 100 = log ⁡ 10 ≈ 2.3026 idf = \log\frac{1000}{100} = \log10 \approx 2.3026 idf=log1001000=log102.3026
t f i d f = 0.05 × 2.3026 ≈ 0.1151 tfidf = 0.05 \times 2.3026 \approx 0.1151 tfidf=0.05×2.30260.1151

4.2 Word2Vec数学模型

4.2.1 Skip-Gram模型

Skip-Gram模型的目标函数是最大化给定中心词时上下文词语出现的概率:
1 T ∑ t = 1 T ∑ − c ≤ j ≤ c , j ≠ 0 log ⁡ p ( w t + j ∣ w t ) \frac{1}{T}\sum_{t=1}^{T}\sum_{-c\leq j\leq c,j\neq 0}\log p(w_{t+j}|w_t) T1t=1Tcjc,j=0logp(wt+jwt)
其中 c c c是上下文窗口大小, T T T是语料中的词语总数。

条件概率使用softmax函数计算:
KaTeX parse error: Double superscript at position 34: …c{\exp(v'_{w_O}^̲T v_{w_I})}{\su…
其中 v w v_w vw v w ′ v'_w vw分别是词语 w w w的输入和输出向量表示, W W W是词汇表大小。

4.2.2 负采样

为降低计算复杂度,Word2Vec使用负采样技术,将softmax问题转化为二分类问题:
KaTeX parse error: Double superscript at position 21: …\sigma(v'_{w_O}^̲T v_{w_I}) + \s…
其中 σ \sigma σ是sigmoid函数, k k k是负样本数量, P n ( w ) P_n(w) Pn(w)是噪声分布。

举例说明
假设我们有一个句子"the quick brown fox jumps",选择中心词"brown",窗口大小为2,则上下文词语为"quick"和"fox"。

Skip-Gram模型会尝试从"brown"预测"quick"和"fox",同时通过负采样生成一些不在上下文中的词语(如"apple")作为负样本。

5. 项目实战:代码实际案例和详细解释说明

5.1 开发环境搭建

推荐使用以下环境:

  • Python 3.8+
  • Jupyter Notebook
  • 主要库:
    • scikit-learn
    • gensim
    • nltk
    • pandas
    • numpy

安装命令:

pip install scikit-learn gensim nltk pandas numpy

5.2 源代码详细实现和代码解读

5.2.1 完整TF-IDF关键词提取系统
import pandas as pd
from sklearn.feature_extraction.text import TfidfVectorizer
from nltk.corpus import stopwords
from nltk.tokenize import word_tokenize
from nltk.stem import WordNetLemmatizer
import string
import nltk

# 下载必要的NLTK数据
nltk.download('punkt')
nltk.download('stopwords')
nltk.download('wordnet')

# 文本预处理函数
def preprocess_text(text):
    # 小写化
    text = text.lower()
    # 分词
    tokens = word_tokenize(text)
    # 去除标点
    tokens = [word for word in tokens if word not in string.punctuation]
    # 去除停用词
    stop_words = set(stopwords.words('english'))
    tokens = [word for word in tokens if word not in stop_words]
    # 词形还原
    lemmatizer = WordNetLemmatizer()
    tokens = [lemmatizer.lemmatize(word) for word in tokens]
    # 重新组合为文本
    return ' '.join(tokens)

# 示例数据集
data = pd.DataFrame({
    'id': [1, 2, 3, 4],
    'text': [
        "Natural language processing enables computers to understand human language.",
        "Deep learning models have achieved remarkable results in NLP tasks.",
        "Keyword extraction identifies the most relevant terms in a document.",
        "TF-IDF and Word2Vec are two popular techniques for text analysis."
    ]
})

# 预处理文本
data['processed_text'] = data['text'].apply(preprocess_text)

# 创建TF-IDF向量化器
vectorizer = TfidfVectorizer(max_features=1000)
tfidf_matrix = vectorizer.fit_transform(data['processed_text'])

# 获取特征词
feature_names = vectorizer.get_feature_names_out()

# 将结果转换为DataFrame
tfidf_df = pd.DataFrame(tfidf_matrix.toarray(), columns=feature_names)

# 定义关键词提取函数
def extract_keywords(tfidf_row, feature_names, top_n=5):
    # 获取非零元素的索引和值
    nonzero_indices = tfidf_row.nonzero()[1]
    nonzero_values = tfidf_row[0, nonzero_indices].toarray()[0]
    # 组合为字典
    keywords = {feature_names[i]: nonzero_values[j] 
                for j, i in enumerate(nonzero_indices)}
    # 按值排序并返回前N个
    sorted_keywords = sorted(keywords.items(), key=lambda x: x[1], reverse=True)
    return sorted_keywords[:top_n]

# 为每个文档提取关键词
data['keywords'] = [extract_keywords(tfidf_matrix[i], feature_names) 
                    for i in range(len(data))]

# 显示结果
print(data[['id', 'text', 'keywords']])
5.2.2 完整Word2Vec关键词提取系统
import pandas as pd
from gensim.models import Word2Vec
from nltk.tokenize import word_tokenize
from nltk.corpus import stopwords
import string
import numpy as np
from sklearn.metrics.pairwise import cosine_similarity
import nltk

# 下载必要的NLTK数据
nltk.download('punkt')
nltk.download('stopwords')

# 文本预处理函数
def preprocess_text(text):
    # 小写化
    text = text.lower()
    # 分词
    tokens = word_tokenize(text)
    # 去除标点
    tokens = [word for word in tokens if word not in string.punctuation]
    # 去除停用词
    stop_words = set(stopwords.words('english'))
    tokens = [word for word in tokens if word not in stop_words]
    return tokens

# 示例数据集
data = pd.DataFrame({
    'id': [1, 2, 3, 4],
    'text': [
        "Natural language processing enables computers to understand human language.",
        "Deep learning models have achieved remarkable results in NLP tasks.",
        "Keyword extraction identifies the most relevant terms in a document.",
        "TF-IDF and Word2Vec are two popular techniques for text analysis."
    ]
})

# 预处理文本并分词
tokenized_docs = data['text'].apply(preprocess_text).tolist()

# 训练Word2Vec模型
model = Word2Vec(
    sentences=tokenized_docs,
    vector_size=100,
    window=5,
    min_count=1,
    workers=4,
    sg=1,
    epochs=50
)

# 文档向量化函数(平均词向量)
def document_vector(model, doc):
    # 过滤掉不在词汇表中的词
    doc = [word for word in doc if word in model.wv.key_to_index]
    if not doc:
        return np.zeros(model.vector_size)
    return np.mean([model.wv[word] for word in doc], axis=0)

# 计算文档向量
doc_vectors = np.array([document_vector(model, doc) for doc in tokenized_docs])

# 定义关键词提取函数
def extract_keywords(model, doc, top_n=5):
    # 获取文档中的词语(过滤掉不在词汇表中的词)
    words = [word for word in doc if word in model.wv.key_to_index]
    if not words:
        return []
    
    # 计算文档向量
    doc_vec = document_vector(model, doc)
    
    # 计算每个词与文档的相似度
    word_similarities = []
    for word in words:
        word_vec = model.wv[word]
        similarity = cosine_similarity([doc_vec], [word_vec])[0][0]
        word_similarities.append((word, similarity))
    
    # 去重并排序
    unique_words = {}
    for word, sim in word_similarities:
        if word not in unique_words or sim > unique_words[word]:
            unique_words[word] = sim
    
    # 按相似度排序并返回前N个
    sorted_keywords = sorted(unique_words.items(), key=lambda x: x[1], reverse=True)
    return sorted_keywords[:top_n]

# 为每个文档提取关键词
data['keywords'] = [extract_keywords(model, doc) 
                    for doc in tokenized_docs]

# 显示结果
print(data[['id', 'text', 'keywords']])

# 保存模型
model.save("word2vec_keyword_extraction.model")

5.3 代码解读与分析

5.3.1 TF-IDF系统分析
  1. 预处理阶段

    • 文本规范化(小写化)
    • 分词和去除标点
    • 停用词过滤
    • 词形还原(lemmatization)
  2. TF-IDF计算

    • 使用scikit-learn的TfidfVectorizer
    • 自动处理词频和逆文档频率计算
    • 生成稀疏矩阵表示
  3. 关键词提取

    • 对每个文档的TF-IDF向量进行排序
    • 选择权重最高的N个词语作为关键词
    • 结果易于解释,直接反映词语在文档中的统计重要性
5.3.2 Word2Vec系统分析
  1. 预处理阶段

    • 与TF-IDF类似,但保留词语序列
    • 不需要词干提取或词形还原(模型可以学习不同形式的关联)
  2. 模型训练

    • 使用Skip-Gram架构
    • 设置词向量维度为100
    • 训练50个epochs确保充分学习
  3. 关键词提取

    • 通过计算词语向量与文档向量的相似度
    • 考虑词语的语义信息而不仅仅是统计信息
    • 能够发现语义相关但统计不显著的关键词
  4. 优势

    • 捕捉词语的语义关系
    • 可以处理一词多义现象(通过上下文)
    • 生成的词向量可用于多种下游任务

6. 实际应用场景

6.1 TF-IDF适用场景

  1. 文档检索系统

    • 搜索引擎中计算查询与文档的相关性
    • 快速实现且效果可靠
  2. 文本分类

    • 作为特征输入分类器
    • 特别适用于主题分类任务
  3. 内容推荐

    • 基于内容相似性的推荐系统
    • 计算文档间的相似度
  4. 关键词自动标注

    • 为文章自动生成标签
    • 博客平台、新闻网站常用

6.2 Word2Vec适用场景

  1. 语义搜索

    • 理解查询的语义意图
    • 返回语义相关而不仅是关键词匹配的结果
  2. 智能问答系统

    • 理解问题和答案的语义关联
    • 处理同义词和近义词问题
  3. 个性化推荐

    • 基于语义的内容理解
    • 发现用户兴趣的深层次模式
  4. 情感分析

    • 结合语义信息提高准确性
    • 理解词语的情感倾向

6.3 混合应用案例

在实际应用中,常常结合两种技术:

  1. 初步筛选+语义精炼

    • 先用TF-IDF快速筛选候选关键词
    • 再用Word2Vec进行语义扩展和精炼
  2. 特征组合

    • 将TF-IDF特征和词向量特征结合
    • 输入到机器学习模型中
  3. 层次化处理

    • 第一层:TF-IDF处理大规模文档集合
    • 第二层:Word2Vec处理重点文档

7. 工具和资源推荐

7.1 学习资源推荐

7.1.1 书籍推荐
  1. 《Speech and Language Processing》 - Daniel Jurafsky & James H. Martin
  2. 《Natural Language Processing with Python》 - Steven Bird, Ewan Klein & Edward Loper
  3. 《Deep Learning for Natural Language Processing》 - Palash Goyal, Sumit Pandey & Karan Jain
7.1.2 在线课程
  1. Coursera: Natural Language Processing Specialization (DeepLearning.AI)
  2. Udemy: NLP - Natural Language Processing with Python
  3. Fast.ai: A Code-First Introduction to Natural Language Processing
7.1.3 技术博客和网站
  1. Towards Data Science (Medium)
  2. The Gradient
  3. Google AI Blog
  4. arXiv NLP板块

7.2 开发工具框架推荐

7.2.1 IDE和编辑器
  1. Jupyter Notebook/Lab
  2. PyCharm Professional
  3. VS Code with Python扩展
7.2.2 调试和性能分析工具
  1. cProfile - Python内置性能分析器
  2. PySpark - 用于大规模文本处理
  3. TensorBoard - 可视化Word2Vec训练过程
7.2.3 相关框架和库
  1. scikit-learn - TF-IDF实现
  2. Gensim - Word2Vec实现
  3. spaCy - 工业级NLP处理
  4. Hugging Face Transformers - 最新NLP模型
  5. NLTK - 文本处理工具包

7.3 相关论文著作推荐

7.3.1 经典论文
  1. “Term-Weighting Approaches in Automatic Text Retrieval” - Karen Spärck Jones (1988)
  2. “Efficient Estimation of Word Representations in Vector Space” - Mikolov et al. (2013)
  3. “Distributed Representations of Words and Phrases and their Compositionality” - Mikolov et al. (2013)
7.3.2 最新研究成果
  1. “BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding” - Devlin et al. (2019)
  2. “GPT-3: Language Models are Few-Shot Learners” - Brown et al. (2020)
  3. “Word2Vec Explained: Deriving Mikolov et al.'s Negative-Sampling Word-Embedding Method” - Goldberg & Levy (2014)
7.3.3 应用案例分析
  1. “How Netflix Uses TF-IDF and Word2Vec for Content Recommendation”
  2. “Semantic Search at Airbnb via Word2Vec”
  3. “Improving Google Search with Word2Vec”

8. 总结:未来发展趋势与挑战

8.1 技术发展趋势

  1. 预训练模型的兴起

    • BERT、GPT等模型提供更强大的语义表示
    • 但TF-IDF仍作为基础特征在某些场景使用
  2. 多语言处理

    • 跨语言词向量成为研究热点
    • TF-IDF在多语言场景需要调整
  3. 领域自适应

    • 特定领域的词向量训练
    • 动态TF-IDF权重调整
  4. 模型轻量化

    • 压缩Word2Vec模型以适应移动设备
    • 优化TF-IDF计算效率

8.2 主要挑战

  1. 数据稀疏性问题

    • TF-IDF对低频词处理不足
    • Word2Vec需要足够上下文
  2. 语义鸿沟

    • 字面匹配与语义理解的差距
    • 一词多义和同形异义问题
  3. 计算资源需求

    • 大规模语料上的Word2Vec训练成本
    • 实时系统的响应速度要求
  4. 评估标准

    • 缺乏统一的关键词提取评估基准
    • 人工标注的主观性影响

8.3 未来方向

  1. 混合模型

    • 结合统计方法和深度学习的优势
    • 分层特征提取架构
  2. 动态关键词提取

    • 考虑时间维度的概念演变
    • 流式数据处理
  3. 多模态融合

    • 结合文本、图像、音频等多模态信息
    • 跨媒体关键词提取
  4. 可解释性增强

    • 提高深度学习模型的可解释性
    • 可视化分析工具开发

9. 附录:常见问题与解答

Q1: 在小规模数据集上应该选择TF-IDF还是Word2Vec?

A: 对于小规模数据集(几千文档以下),TF-IDF通常是更好的选择,因为:

  1. Word2Vec需要大量数据才能学习到有意义的词向量
  2. TF-IDF计算效率更高
  3. 结果更容易解释和调试

Q2: 如何提高TF-IDF的关键词提取质量?

A: 可以尝试以下方法:

  1. 精细的文本预处理(去除噪声、词形还原等)
  2. 调整IDF的平滑参数
  3. 使用n-gram而不仅是单字词
  4. 结合领域特定的停用词表
  5. 后处理过滤(如词性筛选)

Q3: Word2Vec训练需要多少数据量?

A: 这取决于具体应用,但一般建议:

  1. 基本语义关系:至少数百万词语
  2. 良好表现:数千万到数亿词语
  3. 专业领域:可能需要更多数据补偿领域特异性

Q4: 如何处理新词或OOV(Out-of-Vocabulary)问题?

A: 不同方法的处理方式:

  1. TF-IDF:自动包含新词(如果出现在训练集中)
  2. Word2Vec:
    • 使用字符级或子词信息(如FastText)
    • 预训练模型的OOV处理策略
    • 在线学习更新模型

Q5: 如何评估关键词提取的效果?

A: 常用评估方法:

  1. 人工评估(最可靠但成本高)
  2. 与黄金标准(人工标注)比较
    • 精确率、召回率、F1值
  3. 下游任务评估(如分类准确率)
  4. 自动化指标(如多样性、覆盖度)

10. 扩展阅读 & 参考资料

  1. scikit-learn TF-IDF文档
  2. Gensim Word2Vec教程
  3. Google’s Word2Vec论文
  4. Stanford NLP课程资料
  5. TF-IDF的数学基础
  6. 词向量可视化工具
  7. NLP Progress关键词提取基准
  8. ACL Anthology相关论文
Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐