答案頁 · 12 道題

Python 分詞與文字向量練習答案

本頁彙整 Python 分詞與文字向量 的 12 道練習。先做練習頁,再回到這裡核對準確答案和原因。

快速答案

本答案頁包含 Python 分詞與文字向量 的 4 道選擇題、4 道填空題和 4 道輸出預測題,每題都給出準確答案和簡短解釋。

答案已完整展示,建議先嘗試作答,再用本頁核對。第一次練習最好從互動練習頁開始。

01 · 選擇題

分詞做了什麼?

  1. 刪除罕見詞
  2. 把文字切成更小的單元正確答案
  3. 訓練神經網路
  4. 加密文字

答案: 把文字切成更小的單元

為什麼: 分詞把字串變成後續步驟可以索引或嵌入的詞元。

02 · 選擇題

為什麼要構造一個共用詞表?

  1. 保證語意理解
  2. 刪除 Python 程式碼中的標點
  3. 讓所有句子長度相同
  4. 讓每篇文件使用相同的向量維度正確答案

答案: 讓每篇文件使用相同的向量維度

為什麼: 共用詞表讓每個詞元在所有文件中都有穩定位置。

03 · 選擇題

詞袋向量忽略了什麼?

  1. 詞元計數
  2. 詞序正確答案
  3. 詞表
  4. 向量長度

答案: 詞序

為什麼: 詞袋保留計數,但丟棄詞元出現的順序。

04 · 選擇題

執行結果是什麼?

import re
def tokenize(text):
    return re.findall(r"[a-z']+", text.lower())
print(tokenize("Python, text!"))
  1. ['python text']
  2. ['Python', 'text']
  3. ['python,', 'text!']
  4. ['python', 'text']正確答案

答案: ['python', 'text']

為什麼: 文字先轉成小寫,正規只保留字母,因此標點被去掉。

05 · 填空題

補全提取小寫單字詞元的正規表達式。

import re
text = "Python, text!"
print(re.findall(r"____", text.lower()))

答案: [a-z']+

為什麼: 字元類接受字母和撇號,加號表示一個或多個。

06 · 填空題

補全點積中用於配對的函式。

a = [1, 2]
b = [3, 4]
print(sum(x * y for x, y in ____(a, b)))

答案: zip

為什麼: zip 把兩個向量中對應位置的元素配對。

07 · 填空題

補全零向量保護條件。

import math

def cosine(a, b):
    norm_a = math.sqrt(sum(x * x for x in a))
    norm_b = math.sqrt(sum(y * y for y in b))
    if not norm_a or not ____:
        return 0.0
    return 1.0

print(cosine([0, 0], [1, 1]))

答案: norm_b

為什麼: 任一長度為 0 都會讓分母為零,所以兩個都要檢查。

08 · 填空題

補全用於增加計數的詞表尋找。

index = {"python": 0, "text": 1}
counts = [0, 0]
counts[____["text"]] += 1
print(counts)

答案: index

為什麼: 索引把詞元映射到向量中的位置。

09 · 輸出預測

這段程式列印出什麼?

import re

def tokenize(text):
    return re.findall(r"[a-z']+", text.lower())

print(tokenize("Python makes text small."))

答案: ['python', 'makes', 'text', 'small']

為什麼: 函式把句子轉成小寫,並提取四個單字詞元。

10 · 輸出預測

程式碼的輸出結果是什麼?

def vector(text, index):
    counts = [0] * len(index)
    for word in text.split():
        if word in index:
            counts[index[word]] += 1
    return counts

index = {"python": 0, "text": 1}
print(vector("python text text", index))

答案: [1, 2]

為什麼: 向量記錄一個 python 詞元和兩個 text 詞元。

11 · 輸出預測

螢幕上會顯示什麼?

import math

def cosine(a, b):
    dot = sum(x * y for x, y in zip(a, b))
    norm_a = math.sqrt(sum(x * x for x in a))
    norm_b = math.sqrt(sum(y * y for y in b))
    return dot / (norm_a * norm_b)

print(round(cosine([1, 1], [2, 2]), 1))

答案: 1.0

為什麼: 兩個向量方向相同,所以餘弦相似度是 1.0。

12 · 輸出預測

這段程式碼會輸出什麼?

import math

def cosine(a, b):
    dot = sum(x * y for x, y in zip(a, b))
    norm_a = math.sqrt(sum(x * x for x in a))
    norm_b = math.sqrt(sum(y * y for y in b))
    if not norm_a or not norm_b:
        return 0.0
    return dot / (norm_a * norm_b)

print(round(cosine([1, 0], [0, 1]), 1))

答案: 0.0

為什麼: 兩個向量沒有共用維度,所以點積為零。

先試一遍題目

打開 Python 分詞與文字向量 練習頁,用即時回饋回答同樣的 12 道題。

練習本課