词向量与 spaCy

使用 spaCy 的自然语言处理

Azadeh Mobasher

Principal Data Scientist

词向量可视化

  • 词向量用于理解词语如何被分组

 

示例词向量

  • 主成分分析(PCA)将词向量投影到二维空间

 

可视化词向量

使用 spaCy 的自然语言处理

词向量可视化

  • 导入所需库和一个 spaCy 模型。
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA
import numpy as np

nlp = spacy.load("en_core_web_md")
  • 提取给定词表的词向量,并按行堆叠。
words = ["wonderful", "horrible", 
           "apple", "banana", "orange", "watermelon", 
           "dog", "cat"]
word_vectors = np.vstack([nlp.vocab.vectors[nlp.vocab.strings[w]] for w in words])
使用 spaCy 的自然语言处理

词向量可视化

  • 用 PCA 提取两个主成分。
pca = PCA(n_components=2)
word_vectors_transformed = pca.fit_transform(word_vectors)

 

  • 可视化变换后向量的散点图。
plt.figure(figsize=(10, 8))
plt.scatter(word_vectors_transformed[:, 0], word_vectors_transformed[:, 1])

for word, coord in zip(words, word_vectors_transformed): x, y = coord plt.text(x, y, word, size=10) plt.show()
使用 spaCy 的自然语言处理

类比与向量运算

  • 词对之间的语义关系。
  • 词嵌入可生成性别、时态等类比:
    • queen - woman + man = king

类比与向量运算

使用 spaCy 的自然语言处理

词汇中的相似词

  • 使用 spaCy 为给定词查找语义相似的词
import numpy as np
import spacy
nlp = spacy.load("en_core_web_md")

word = "covid"

most_similar_words = nlp.vocab.vectors.most_similar( np.asarray([nlp.vocab.vectors[nlp.vocab.strings[word]]]), n=5) words = [nlp.vocab.strings[w] for w in most_similar_words[0][0]] print(words)
>>> ['Covi', 'CoVid', 'Covici', 'COVID-19', 'corona']
使用 spaCy 的自然语言处理

Passons à la pratique !

使用 spaCy 的自然语言处理

Preparing Video For Download...