解码知识图谱:从核心概念到技术实战
知識(shí)圖譜是近年來(lái)人工智能和數(shù)據(jù)科學(xué)領(lǐng)域的焦點(diǎn)。本文深入探索了知識(shí)圖譜的核心概念、發(fā)展歷程、研究?jī)?nèi)容以及其在表示、存儲(chǔ)、獲取、構(gòu)建和推理方面的技術(shù)細(xì)節(jié)。結(jié)合Python和PyTorch示例代碼,文章旨在為讀者提供一個(gè)全面、深入且實(shí)用的知識(shí)圖譜概覽,幫助廣大技術(shù)愛(ài)好者和研究者深化對(duì)此領(lǐng)域的認(rèn)識(shí)。
關(guān)注TechLead,分享AI全維度知識(shí)。作者擁有10+年互聯(lián)網(wǎng)服務(wù)架構(gòu)、AI產(chǎn)品研發(fā)經(jīng)驗(yàn)、團(tuán)隊(duì)管理經(jīng)驗(yàn),同濟(jì)本復(fù)旦碩,復(fù)旦機(jī)器人智能實(shí)驗(yàn)室成員,阿里云認(rèn)證的資深架構(gòu)師,項(xiàng)目管理專業(yè)人士,上億營(yíng)收AI產(chǎn)品研發(fā)負(fù)責(zé)人。
1. 概述
知識(shí)圖譜作為一種特殊的信息表示技術(shù),其在近年來(lái)在各種應(yīng)用領(lǐng)域中都有所體現(xiàn),尤其在自然語(yǔ)言處理(NLP)中,它的重要性更是日益凸顯。知識(shí)圖譜能夠高效、有組織地存儲(chǔ)和管理大量的信息,而且能夠用圖的形式表示出這些信息之間的關(guān)系,使得信息更具有語(yǔ)境,更易于理解和應(yīng)用。
什么是知識(shí)圖譜
定義:知識(shí)圖譜是一個(gè)結(jié)構(gòu)化的信息庫(kù),其中的信息以圖的形式組織,每個(gè)節(jié)點(diǎn)表示一個(gè)實(shí)體,每條邊表示兩個(gè)實(shí)體之間的關(guān)系。
例子:考慮一種場(chǎng)景,我們有一個(gè)音樂(lè)知識(shí)圖譜。其中的節(jié)點(diǎn)可能包括“披頭士樂(lè)隊(duì)”、“搖滾音樂(lè)”和“1960s”,而邊則可能表示“披頭士樂(lè)隊(duì)”是“搖滾音樂(lè)”的代表,以及“披頭士樂(lè)隊(duì)”在“1960s”非常受歡迎。
知識(shí)圖譜與自然語(yǔ)言處理的關(guān)系
定義:在自然語(yǔ)言處理中,知識(shí)圖譜被用作一種工具,幫助機(jī)器更好地理解和處理自然語(yǔ)言。通過(guò)知識(shí)圖譜,機(jī)器可以理解文本中的實(shí)體及其關(guān)系,從而做出更加準(zhǔn)確的決策或生成更為準(zhǔn)確的回復(fù)。
例子:考慮一個(gè)問(wèn)答系統(tǒng)。當(dāng)用戶詢問(wèn)“披頭士樂(lè)隊(duì)是哪一種音樂(lè)風(fēng)格的代表?”時(shí),系統(tǒng)可以通過(guò)查詢知識(shí)圖譜,得到“搖滾音樂(lè)”作為答案。這是因?yàn)橹R(shí)圖譜中已經(jīng)存儲(chǔ)了“披頭士樂(lè)隊(duì)”和“搖滾音樂(lè)”的關(guān)系。
總的來(lái)說(shuō),知識(shí)圖譜為自然語(yǔ)言處理提供了一個(gè)結(jié)構(gòu)化的信息源,能夠大大提高其性能和準(zhǔn)確性。而隨著更多的研究和應(yīng)用,我們可以期待知識(shí)圖譜在自然語(yǔ)言處理中的作用將會(huì)越來(lái)越重要。
2. 發(fā)展歷程
知識(shí)圖譜這個(gè)概念并不是新鮮事物,但近些年由于技術(shù)進(jìn)步和大數(shù)據(jù)的興起,它得到了前所未有的關(guān)注和發(fā)展。從早期的語(yǔ)義網(wǎng)絡(luò)和本體論到現(xiàn)在的大規(guī)模商業(yè)應(yīng)用,知識(shí)圖譜的發(fā)展腳步始終未停。
語(yǔ)義網(wǎng)絡(luò)
定義:語(yǔ)義網(wǎng)絡(luò)起源于20世紀(jì)60年代,是一種圖形表示知識(shí)的方法,其中的節(jié)點(diǎn)代表概念,邊表示概念之間的關(guān)系。
例子:考慮一個(gè)關(guān)于動(dòng)物的簡(jiǎn)單語(yǔ)義網(wǎng)絡(luò)。其中的節(jié)點(diǎn)包括“鳥(niǎo)”和“企鵝”,邊表示“企鵝”是“鳥(niǎo)”的一種。但與此同時(shí),可能還有另一條邊表示“企鵝”不能飛。
本體論
定義:本體論在計(jì)算機(jī)科學(xué)中是一種對(duì)特定領(lǐng)域知識(shí)進(jìn)行形式化描述的方法,它不僅描述了實(shí)體及其之間的關(guān)系,還包括了關(guān)于這些實(shí)體和關(guān)系的規(guī)則。
例子:在醫(yī)學(xué)領(lǐng)域,本體論可以用來(lái)描述各種疾病、癥狀和治療方法。例如,它可能會(huì)有一個(gè)規(guī)則表示:“如果一個(gè)人有癥狀A(yù)、B和C,則他很可能患有疾病X?!?/p>
大數(shù)據(jù)時(shí)代的知識(shí)圖譜
定義:隨著互聯(lián)網(wǎng)的普及和大數(shù)據(jù)技術(shù)的進(jìn)步,知識(shí)圖譜開(kāi)始被用于更為復(fù)雜的場(chǎng)景,如搜索引擎、智能助手和推薦系統(tǒng)。
例子:谷歌的“Knowledge Graph”是一個(gè)著名的應(yīng)用,它幫助搜索引擎理解用戶的查詢,并提供相關(guān)的、結(jié)構(gòu)化的信息。例如,當(dāng)你搜索“阿爾伯特·愛(ài)因斯坦”時(shí),你不僅會(huì)得到關(guān)于他的Wikipedia鏈接,還會(huì)看到他的生平、成就、相關(guān)人物等結(jié)構(gòu)化信息。
知識(shí)圖譜與深度學(xué)習(xí)的融合
定義:近年來(lái),知識(shí)圖譜和深度學(xué)習(xí)技術(shù)的結(jié)合已成為研究的熱點(diǎn),其中知識(shí)圖譜為深度學(xué)習(xí)模型提供結(jié)構(gòu)化的背景知識(shí)。
例子:在藥物發(fā)現(xiàn)領(lǐng)域,知識(shí)圖譜可以描述化合物、疾病和蛋白質(zhì)等實(shí)體以及它們之間的關(guān)系。結(jié)合深度學(xué)習(xí),研究者可以預(yù)測(cè)新的、未知的藥物和疾病之間的關(guān)系,從而加速藥物研發(fā)過(guò)程。
總的來(lái)說(shuō),知識(shí)圖譜的發(fā)展歷程反映了技術(shù)和應(yīng)用的不斷進(jìn)步,從早期的理論研究到現(xiàn)在的商業(yè)應(yīng)用,它始終處于知識(shí)表示和管理的前沿。
3. 研究?jī)?nèi)容
隨著知識(shí)圖譜領(lǐng)域的快速發(fā)展,其研究?jī)?nèi)容也變得日益豐富和多樣。以下列出了一些核心的研究方向和相關(guān)的概念定義。
知識(shí)圖譜的建模與表示
定義:知識(shí)圖譜的建模與表示關(guān)注如何有效地組織、定義和表達(dá)知識(shí)中的實(shí)體和關(guān)系,以便于計(jì)算機(jī)處理和理解。
例子:Resource Description Framework (RDF) 是一種知識(shí)圖譜的表示標(biāo)準(zhǔn),它使用三元組(主體,謂詞,賓體)來(lái)表達(dá)實(shí)體之間的關(guān)系,如:(巴黎, 是, 法國(guó)的首都)。
知識(shí)抽取
定義:知識(shí)抽取是從非結(jié)構(gòu)化或半結(jié)構(gòu)化數(shù)據(jù)源(如文本、圖像或音頻)中自動(dòng)提取有價(jià)值的知識(shí)信息,并加入到知識(shí)圖譜中。
例子:從新聞文章中自動(dòng)識(shí)別并抽取出主要人物、事件和地點(diǎn),然后將這些信息加入到現(xiàn)有的知識(shí)圖譜中。
知識(shí)圖譜的融合與對(duì)齊
定義:當(dāng)面臨多個(gè)來(lái)源或領(lǐng)域的知識(shí)圖譜時(shí),知識(shí)圖譜的融合與對(duì)齊關(guān)注如何整合這些知識(shí),確保其一致性和完整性。
例子:兩個(gè)關(guān)于醫(yī)學(xué)的知識(shí)圖譜可能有部分重疊的內(nèi)容,但在疾病的命名或分類上存在差異。通過(guò)對(duì)齊這兩個(gè)圖譜,可以生成一個(gè)更加完整和準(zhǔn)確的醫(yī)學(xué)知識(shí)庫(kù)。
知識(shí)圖譜的推理
定義:利用知識(shí)圖譜中已有的知識(shí)進(jìn)行邏輯推理,從而得到新的、隱含的知識(shí)信息。
例子:如果知識(shí)圖譜中表示“A是B的父親”和“B是C的父親”,通過(guò)推理,我們可以得出“A是C的祖父”。
知識(shí)圖譜的評(píng)估與驗(yàn)證
定義:為了確保知識(shí)圖譜的質(zhì)量和準(zhǔn)確性,需要對(duì)其進(jìn)行評(píng)估和驗(yàn)證,檢查其內(nèi)容是否準(zhǔn)確、完整和一致。
例子:在加入新的知識(shí)到圖譜中后,系統(tǒng)可能會(huì)自動(dòng)比對(duì)已有的知識(shí)庫(kù),檢測(cè)是否存在沖突或矛盾的信息。
總的來(lái)說(shuō),知識(shí)圖譜研究的內(nèi)容涵蓋了從知識(shí)表示到知識(shí)應(yīng)用的各個(gè)方面,其深度和廣度都在不斷擴(kuò)展,為未來(lái)的技術(shù)進(jìn)步和應(yīng)用奠定了堅(jiān)實(shí)的基礎(chǔ)。
4. 知識(shí)圖譜表示與存儲(chǔ)
知識(shí)圖譜的表示和存儲(chǔ)是確保其高效使用的關(guān)鍵,因?yàn)檫@決定了如何查詢、更新和擴(kuò)展知識(shí)。下面我們深入探討知識(shí)圖譜的表示和存儲(chǔ)技術(shù)。
RDF:一種知識(shí)圖譜的表示方法
定義:Resource Description Framework (RDF) 是一種標(biāo)準(zhǔn)的知識(shí)圖譜表示方法,采用三元組的形式來(lái)描述知識(shí)中的實(shí)體和關(guān)系。
例子:
一個(gè)RDF三元組可以表示為:
(巴黎, 是, 法國(guó)的首都)
Python代碼:
# 一個(gè)簡(jiǎn)單的RDF三元組表示
triplet = ('巴黎', '是', '法國(guó)的首都')
print(triplet)
存儲(chǔ):使用圖數(shù)據(jù)庫(kù)
定義:圖數(shù)據(jù)庫(kù)是專為存儲(chǔ)和查詢圖形結(jié)構(gòu)的數(shù)據(jù)而設(shè)計(jì)的數(shù)據(jù)庫(kù)。知識(shí)圖譜由于其天然的圖結(jié)構(gòu)特性,與圖數(shù)據(jù)庫(kù)的存儲(chǔ)和查詢方式非常匹配。
例子:Neo4j 是一個(gè)流行的圖數(shù)據(jù)庫(kù),可以用于存儲(chǔ)和查詢知識(shí)圖譜。
Python代碼:(這里我們使用py2neo庫(kù),這是Neo4j的一個(gè)Python客戶端)
from py2neo import Graph, Node, Relationship
# 連接到Neo4j數(shù)據(jù)庫(kù)
graph = Graph("http://localhost:7474", username="neo4j", password="password")
# 創(chuàng)建節(jié)點(diǎn)
paris = Node("City", name="巴黎")
france = Node("Country", name="法國(guó)")
# 創(chuàng)建關(guān)系
capital_relation = Relationship(paris, "是", france, description="法國(guó)的首都")
# 將節(jié)點(diǎn)和關(guān)系添加到圖數(shù)據(jù)庫(kù)中
graph.create(capital_relation)
嵌入:使用深度學(xué)習(xí)進(jìn)行知識(shí)表示
定義:嵌入是將知識(shí)圖譜中的實(shí)體和關(guān)系表示為低維向量,這種表示方法利用深度學(xué)習(xí)模型,如TransE,對(duì)知識(shí)進(jìn)行編碼。
例子:將"巴黎"和"是"這兩個(gè)實(shí)體嵌入到一個(gè)維度為10的向量空間中。
PyTorch代碼:
import torch
import torch.nn as nn
class EmbeddingModel(nn.Module):
def __init__(self, vocab_size, embedding_dim):
super(EmbeddingModel, self).__init__()
self.embeddings = nn.Embedding(vocab_size, embedding_dim)
def forward(self, input_ids):
return self.embeddings(input_ids)
# 假設(shè)我們的詞匯表大小為1000,嵌入維度為10
model = EmbeddingModel(1000, 10)
# 獲取"巴黎"和"是"的嵌入向量
# 這里我們僅為示例,隨機(jī)指定"巴黎"和"是"的id為5和10
paris_embedding = model(torch.tensor([5]))
is_embedding = model(torch.tensor([10]))
print(paris_embedding)
print(is_embedding)
總結(jié):知識(shí)圖譜的表示與存儲(chǔ)是其核心技術(shù)之一,確保了知識(shí)的高效查詢和更新。從傳統(tǒng)的RDF表示到現(xiàn)代的深度學(xué)習(xí)嵌入方法,這一領(lǐng)域始終在不斷發(fā)展和創(chuàng)新。
5. 知識(shí)圖譜獲取與構(gòu)建
知識(shí)圖譜的獲取與構(gòu)建是知識(shí)圖譜研究的核心部分,關(guān)注如何從各種數(shù)據(jù)源中自動(dòng)或半自動(dòng)提取、整合知識(shí),并形成結(jié)構(gòu)化的知識(shí)圖譜。
知識(shí)抽取
定義:知識(shí)抽取是從非結(jié)構(gòu)化或半結(jié)構(gòu)化數(shù)據(jù)中自動(dòng)識(shí)別和提取實(shí)體、關(guān)系和事件的過(guò)程。
例子:從一篇介紹史蒂夫·喬布斯的文章中抽取“史蒂夫·喬布斯是Apple的創(chuàng)始人”這一信息。
Python代碼:(這里使用Spacy庫(kù)進(jìn)行簡(jiǎn)單的命名實(shí)體識(shí)別)
import spacy
# 加載模型
nlp = spacy.load("en_core_web_sm")
text = "Steve Jobs was the co-founder of Apple."
doc = nlp(text)
# 抽取實(shí)體
for ent in doc.ents:
print(ent.text, ent.label_)
知識(shí)融合
定義:知識(shí)融合是整合來(lái)自多個(gè)知識(shí)源的知識(shí),消除沖突和冗余,形成統(tǒng)一、一致的知識(shí)圖譜。
例子:從兩個(gè)數(shù)據(jù)庫(kù)中分別獲取“史蒂夫·喬布斯,Apple創(chuàng)始人”和“喬布斯,蘋(píng)果公司聯(lián)合創(chuàng)始人”,并整合為“史蒂夫·喬布斯是Apple公司的聯(lián)合創(chuàng)始人”。
Python代碼:(簡(jiǎn)化的融合示例)
knowledge1 = {"name": "史蒂夫·喬布斯", "title": "Apple創(chuàng)始人"}
knowledge2 = {"name": "喬布斯", "title": "蘋(píng)果公司聯(lián)合創(chuàng)始人"}
def fuse_knowledge(k1, k2):
fused_knowledge = {}
fused_knowledge["name"] = k1["name"] # 選擇更全的名稱
# 合并title,簡(jiǎn)化為選擇k2的title
fused_knowledge["title"] = k2["title"]
return fused_knowledge
result = fuse_knowledge(knowledge1, knowledge2)
print(result)
知識(shí)校驗(yàn)
定義:知識(shí)校驗(yàn)是檢查知識(shí)圖譜中的信息是否準(zhǔn)確、一致和可靠,以確保其質(zhì)量。
例子:驗(yàn)證“史蒂夫·喬布斯是Microsoft的創(chuàng)始人”是否正確。
Python代碼:(假設(shè)我們有一個(gè)已驗(yàn)證的知識(shí)庫(kù)來(lái)檢查此信息)
validated_knowledge_base = {
"史蒂夫·喬布斯": "Apple的創(chuàng)始人",
"比爾·蓋茨": "Microsoft的創(chuàng)始人"
}
def validate_knowledge(entity, claim):
if entity in validated_knowledge_base:
return validated_knowledge_base[entity] == claim
return False
is_valid = validate_knowledge("史蒂夫·喬布斯", "Microsoft的創(chuàng)始人")
print(is_valid) # 輸出為False,因?yàn)榇酥R(shí)是錯(cuò)誤的
知識(shí)圖譜的獲取與構(gòu)建是一個(gè)復(fù)雜而持續(xù)的過(guò)程,涉及多個(gè)步驟和技術(shù)。上述代碼僅為簡(jiǎn)化示例,真實(shí)的知識(shí)獲取與構(gòu)建會(huì)更為復(fù)雜,但基本思路是相似的。
6. 知識(shí)圖譜推理
知識(shí)圖譜推理是知識(shí)圖譜的核心研究領(lǐng)域之一,涉及利用現(xiàn)有知識(shí)圖譜中的實(shí)體和關(guān)系,推導(dǎo)和預(yù)測(cè)新的關(guān)系或?qū)傩浴?/p>
邏輯推理
定義:邏輯推理使用形式化邏輯來(lái)推導(dǎo)知識(shí)圖譜中的新關(guān)系或?qū)傩裕ǔ;陬A(yù)定義的規(guī)則或模式。
例子:給定以下知識(shí):
- 所有人都是生物。
- Tom是一個(gè)人。
我們可以推斷出:Tom是一個(gè)生物。
Python代碼:
knowledge_base = {
"所有人": "生物",
"Tom": "人"
}
def logic_inference(entity):
if entity in knowledge_base:
if knowledge_base[entity] == "人":
return "生物"
return knowledge_base[entity]
return None
result = logic_inference("Tom")
print(result) # 輸出:生物
知識(shí)嵌入推理
定義:知識(shí)嵌入推理使用深度學(xué)習(xí)模型,如TransE或TransH,將知識(shí)圖譜中的實(shí)體和關(guān)系映射到低維向量空間,并通過(guò)向量運(yùn)算進(jìn)行推理。
例子:給定知識(shí)"北京" - "是" -> "中國(guó)的首都",我們可以推斷出其他類似的關(guān)系,如"東京" - "是" -> "日本的首都"。
PyTorch代碼:
import torch
import torch.nn as nn
import torch.optim as optim
# 使用TransE模型的簡(jiǎn)化版本
class TransE(nn.Module):
def __init__(self, entity_size, relation_size, embedding_dim):
super(TransE, self).__init__()
self.entity_embeddings = nn.Embedding(entity_size, embedding_dim)
self.relation_embeddings = nn.Embedding(relation_size, embedding_dim)
def forward(self, head, relation):
head_embedding = self.entity_embeddings(head)
relation_embedding = self.relation_embeddings(relation)
return head_embedding + relation_embedding
# 假設(shè)我們有3個(gè)實(shí)體和1個(gè)關(guān)系
model = TransE(3, 1, 10)
# 訓(xùn)練模型... (這里略過(guò)訓(xùn)練過(guò)程)
# 推理
beijing_id, is_id, tokyo_id = 0, 0, 2
predicted_tail = model(beijing_id, is_id)
actual_tail = model.entity_embeddings(torch.tensor(tokyo_id))
# 計(jì)算相似性
similarity = torch.nn.functional.cosine_similarity(predicted_tail, actual_tail)
print(similarity)
路徑推理
定義:路徑推理是基于知識(shí)圖譜中實(shí)體間的多跳關(guān)系來(lái)推導(dǎo)新的關(guān)系。
例子:如果知道"A是B的朋友"和"B是C的朋友",我們可以推斷"A可能認(rèn)識(shí)C"。
Python代碼:
relations = {
"A": ["B"],
"B": ["C"]
}
def path_inference(entity):
friends = relations.get(entity, [])
friends_of_friends = []
for friend in friends:
friends_of_friends.extend(relations.get(friend, []))
return friends_of_friends
result = path_inference("A")
print(result) # 輸出:['C']
知識(shí)圖譜推理是一個(gè)富有挑戰(zhàn)性的領(lǐng)域,因?yàn)樗枰幚泶罅康闹R(shí),并從中推導(dǎo)出新的、有用的信息。上述方法和代碼提供了一個(gè)入門級(jí)的概覽,實(shí)際的應(yīng)用和研究會(huì)更加復(fù)雜。
總結(jié)
知識(shí)圖譜在過(guò)去的幾年里已經(jīng)從一個(gè)學(xué)術(shù)的概念逐漸轉(zhuǎn)化為廣泛應(yīng)用于實(shí)際業(yè)務(wù)場(chǎng)景的強(qiáng)大工具。從最基本的概念、發(fā)展歷程、研究?jī)?nèi)容,到更加復(fù)雜的知識(shí)圖譜的表示、存儲(chǔ)、獲取、構(gòu)建和推理,我們逐步深入了解了這一領(lǐng)域的技術(shù)內(nèi)涵。
但是,縱觀整個(gè)知識(shí)圖譜的發(fā)展歷程,其中最為突出的一個(gè)特點(diǎn)是:知識(shí)圖譜是一個(gè)持續(xù)演進(jìn)的領(lǐng)域。隨著數(shù)據(jù)的增長(zhǎng)、技術(shù)的進(jìn)步以及應(yīng)用場(chǎng)景的擴(kuò)展,知識(shí)圖譜所需處理的問(wèn)題也在持續(xù)變化和擴(kuò)展。
另外,我認(rèn)為有兩個(gè)核心洞見(jiàn)值得進(jìn)一步思考:
-
知識(shí)圖譜與人類思維:知識(shí)圖譜不僅僅是一種存儲(chǔ)和管理知識(shí)的工具,更重要的是,它在某種程度上模擬了人類的思維模式。我們?nèi)绾谓M織、鏈接和使用知識(shí),都在知識(shí)圖譜中得到了很好的體現(xiàn)。因此,對(duì)知識(shí)圖譜的研究實(shí)際上也加深了我們對(duì)人類認(rèn)知的理解。
-
技術(shù)與應(yīng)用的平衡:知識(shí)圖譜的發(fā)展不應(yīng)僅僅停留在技術(shù)層面。更為關(guān)鍵的是,如何將這些技術(shù)應(yīng)用于實(shí)際問(wèn)題,實(shí)現(xiàn)知識(shí)的最大化利用。這需要我們不斷地進(jìn)行技術(shù)和應(yīng)用之間的平衡,確保知識(shí)圖譜的技術(shù)進(jìn)步能夠真正地服務(wù)于實(shí)際的業(yè)務(wù)需求。
關(guān)注TechLead,分享AI全維度知識(shí)。作者擁有10+年互聯(lián)網(wǎng)服務(wù)架構(gòu)、AI產(chǎn)品研發(fā)經(jīng)驗(yàn)、團(tuán)隊(duì)管理經(jīng)驗(yàn),同濟(jì)本復(fù)旦碩,復(fù)旦機(jī)器人智能實(shí)驗(yàn)室成員,阿里云認(rèn)證的資深架構(gòu)師,項(xiàng)目管理專業(yè)人士,上億營(yíng)收AI產(chǎn)品研發(fā)負(fù)責(zé)人。
如有幫助,請(qǐng)多關(guān)注
TeahLead KrisChang,10+年的互聯(lián)網(wǎng)和人工智能從業(yè)經(jīng)驗(yàn),10年+技術(shù)和業(yè)務(wù)團(tuán)隊(duì)管理經(jīng)驗(yàn),同濟(jì)軟件工程本科,復(fù)旦工程管理碩士,阿里云認(rèn)證云服務(wù)資深架構(gòu)師,上億營(yíng)收AI產(chǎn)品業(yè)務(wù)負(fù)責(zé)人。
總結(jié)
以上是生活随笔為你收集整理的解码知识图谱:从核心概念到技术实战的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 聊聊魔塔社区MGeo模型的部署与运行
- 下一篇: 一篇文章带你了解Python基础测试工具