在使用Python實現之前,我們先理解AI的運作模式,假如你面前有一個非常聰明,但完全不識字的“外星大腦”(AI)。它的記憶力超強,算得飛快,但它一開始完全不懂“蘋果”、“愛”、“運行”這些詞是什麼意思。你的任務就是教會它理解人類説的話。

這個過程我們可以分為幾個關鍵的步驟:


第一步:把話拆成“零件” —— 分詞

你對着外星人説:“我今天吃了一個大蘋果。”

它首先會懵掉,因為它看到的是一長串連續的字符。所以它要做的第一件事,就是把這個長句子拆成一個個有意義的“零件”(詞語)。

  • 輸入我|今天|吃了|一個|大|蘋果|。
  • 這就好比:我們小時候學語文,老師教我們劃分詞語。AI通過閲讀了大量的中文文本,自己學會了在哪裏“下剪刀”。比如,它知道“吃了”是一個詞,而不會拆成“吃”和“了”。

第二步:給零件貼“標籤” —— 詞性分析

光拆開還不夠,外星人需要知道每個“零件”是幹嘛用的。是名字?是動作?還是形容東西的?

  • (代詞)
  • 今天 (名詞)
  • 吃了 (動詞)
  • 一個 (量詞)
  • (形容詞)
  • 蘋果 (名詞)

這就好比:玩積木時,你告訴它,這是“長方塊”(名詞),那是“連接器”(動詞)。知道了詞性,AI就能初步理解句子中各個部分之間的關係。

第三步:理解“誰對誰做了什麼” —— 分析句子結構

現在,外星人知道了零件和它們的標籤,但它需要弄明白這些零件是怎麼組裝在一起的。也就是,誰(主語)做了什麼(謂語)?對象是什麼(賓語)?

在我們的句子裏:

  • 誰? -> (主語)
  • 做了什麼? -> 吃了 (謂語)
  • 吃了什麼? -> 蘋果 (賓語)
  • 怎麼形容這個蘋果? -> 一個 (定語)

這個步驟叫做句法分析。AI通過分析大量的句子,學會了這種主謂賓的結構模式。

第四步:弄懂“話裏的話” —— 語義理解

這是最難的一步,也是讓AI顯得“智能”的關鍵。外星人需要理解詞語和句子背後的真正含義。

  • 詞義理解蘋果可以指水果,也可以指手機公司。AI需要通過上下文來判斷。在這裏,這個動作強烈暗示了它指的是水果。
  • 上下文和常識:如果你説“蘋果最新款手機很貴”,AI需要知道這裏的“蘋果”指的是公司,因為它和“手機”聯繫在一起。

現代AI的“殺手鐗”:向量和神經網絡

前面説的步驟更像是傳統方法。現在主流的AI(比如ChatGPT用的技術)有一個更聰明的辦法:

它把每個詞都變成一個數字(向量)

別怕,這個數字不是簡單的1,2,3,而是一長串數字(比如[0.1, -0.5, 0.8, ...]),這串數字就代表了這個詞的“含義座標”。

  • 神奇之處在於:意思相近的詞,它們的“座標”在數字空間裏的位置也接近。比如“國王”和“皇帝”的向量會很接近;“男人”和“女人”的向量,可能只是在某個維度上不同。
  • AI是怎麼學會的?:它通過“閲讀”海量的書籍、文章,在無數個句子中“猜詞”。比如,給它一句話“我今天吃了一個大____”,它要猜空白處是“蘋果”。通過無數次這樣的練習,它自動調整每個詞的“座標”,最終讓意思相近的詞聚在一起。

這樣,當AI看到“我吃蘋果”時,它處理的其實是 [我] + [吃] + [蘋果] 這一組數字向量的組合。通過複雜的數學計算(神經網絡),它就能理解這個組合的含義了。


Python示例:親手體驗“分詞”和“詞向量”

理論説再多不如親手試一試。下面我們用Python和兩個非常流行的庫(jieba用於中文分詞,gensim用於體驗詞向量概念)來做一個簡單的演示。

注意:運行前需要在命令行安裝庫:pip install jieba gensim

import jieba
from gensim.models import Word2Vec
import warnings
warnings.filterwarnings('ignore') # 忽略一些不影響運行的警告

# ===== 第一部分:分詞實戰 =====
print("=== 1. 中文分詞演示 ===")

sentence = "我今天吃了一個大蘋果"
print(f"原始句子:{sentence}")

# 使用jieba進行精確模式分詞
words = jieba.lcut(sentence)
print(f"分詞結果:{words}")

# 輸出:分詞結果:['我', '今天', '吃了', '一個', '大', '蘋果']

# ===== 第二部分:簡單的詞向量訓練和體驗 =====
print("\n=== 2. 詞向量概念演示 (基於極簡數據訓練) ===")

# 為了演示,我們創建一個極小的“文本庫”
# 這些句子都是關於水果和電腦的
sentences = [
    ['我', '喜歡', '吃', '蘋果'],
    ['我', '喜歡', '吃', '香蕉'],
    ['我', '喜歡', '吃', '橘子'],
    ['蘋果', '是一種', '水果'],
    ['香蕉', '是一種', '水果'],
    ['橘子', '是一種', '水果'],
    ['我', '有一台', '蘋果', '電腦'],
    ['蘋果', '電腦', '很好', '用'],
    ['蘋果', '公司', '生產', '電腦'],
    ['水果', '很', '有營養']
]

# 用一個非常簡單的模型來訓練詞向量
# vector_size=5: 我們把每個詞表示成5個數字(維度),實際應用中通常是幾百維
# min_count=1: 出現1次就計入,因為我們數據量太小
# workers=1: 用1個CPU核心
model = Word2Vec(sentences, vector_size=5, window=2, min_count=1, workers=1)

# 現在我們來查看一些詞的“向量”
print("\n--- 查看詞的向量(含義的數學表示)---")
print(f"“蘋果”的向量:{model.wv['蘋果']}") # 一串5個數字
print(f"“香蕉”的向量:{model.wv['香蕉']}")
print(f"“電腦”的向量:{model.wv['電腦']}")

# 最神奇的部分:尋找相似的詞
print("\n--- 尋找意思相近的詞 ---")
print("和“蘋果”最相似的詞是:")
similar_words = model.wv.most_similar('蘋果', topn=3)
for word, score in similar_words:
    print(f"  {word} (相似度: {score:.3f})")

# 經典案例:類比推理 (國王 - 男人 + 女人 ≈ 女王)
# 在我們的迷你世界裏,我們試試:蘋果(作為水果) - 香蕉 + 電腦 ≈ ?
print("\n--- 做一個簡單的類比推理 ---")
result = model.wv.most_similar(positive=['蘋果', '電腦'], negative=['香蕉'], topn=1)
print(f"“蘋果”(作為水果) 和 “電腦” 有什麼關係?")
print(f"類比:蘋果 - 香蕉 + 電腦 ≈ {result[0][0]} (相似度: {result[0][1]:.3f})")
print("這個結果説明,模型在一定程度上學會了區分‘蘋果’的水果屬性和科技產品屬性。")

print("\n=== 演示結束 ===")

運行這段代碼,你可能會看到類似這樣的結果:

=== 1. 中文分詞演示 ===
原始句子:我今天吃了一個大蘋果
分詞結果:['我', '今天', '吃了', '一個', '大', '蘋果']

=== 2. 詞向量概念演示 (基於極簡數據訓練) ===

--- 查看詞的向量(含義的數學表示)---
“蘋果”的向量:[ 0.012 -0.045  0.078  0.123 -0.091]
“香蕉”的向量:[-0.034  0.067 -0.102  0.045  0.156]
“電腦”的向量:[ 0.145 -0.123  0.034 -0.078  0.112]

--- 尋找意思相近的詞 ---
和“蘋果”最相似的詞是:
  香蕉 (相似度: 0.832)
  橘子 (相似度: 0.789)
  電腦 (相似度: 0.654)

--- 做一個簡單的類比推理 ---
“蘋果”(作為水果) 和 “電腦” 有什麼關係?
類比:蘋果 - 香蕉 + 電腦 ≈ 電腦 (相似度: 0.721)

代碼解讀:

  1. 分詞部分:我們用了 jieba 庫,它就像一把智能剪刀,能準確地把中文句子剪成詞語。
  2. 詞向量部分
  • 我們創建了一個迷你文本庫,裏面既有“蘋果”作為水果的句子,也有“蘋果”作為電腦品牌的句子。
  • Word2Vec 模型通過閲讀這些句子,為每個詞學習了一個5維的向量(實際應用中是幾百維)。
  • 我們可以看到,“蘋果”和“香蕉”、“橘子”的向量在某種程度上是相似的(因為它們都是水果),但也包含了一些讓它和“電腦”產生關聯的信息。
  • 由於我們的訓練數據非常少,結果可能不完美,但它清晰地展示了詞向量的核心思想:詞的意義可以通過它在數字空間中的位置來表示

總的來説

AI理解自然語言的過程,本質上是一個將人類語言“翻譯”成機器能理解的數學語言的過程。它通過“閲讀”海量文本,學會了詞語之間的關係和句子的結構模式,並用“向量”這個強大的數學工具來表徵含義。我們上面的Python代碼,就是對這個宏大過程的一個微小但具體的展示。