超越 n-gram:词向量

Python 中的 NLP 特征工程

Rounak Banik

Data Scientist

BoW 和 tf-idf 的问题

'I am happy'
'I am joyous'
'I am sad'
Python 中的 NLP 特征工程

词向量(Word embeddings)

  • 将词映射到 n 维向量空间
  • 由深度学习和海量数据训练生成
  • 衡量两个词的相似度
  • 用于检测同义词和反义词
  • 能捕捉复杂关系
    • King-QueenMan-Woman
    • France-ParisRussia-Moscow
  • 取决于 spaCy 模型;与所用数据集无关
Python 中的 NLP 特征工程

使用 spaCy 的词向量

import spacy

# 加载模型并创建 Doc 对象
nlp = spacy.load('en_core_web_lg')
doc = nlp('I am happy')
# 为每个 token 生成词向量
for token in doc:
  print(token.vector)
[-1.0747459e+00  4.8677087e-02  5.6630421e+00  1.6680446e+00
 -1.3194644e+00 -1.5142369e+00  1.1940931e+00 -3.0168812e+00
 ...
Python 中的 NLP 特征工程

词语相似度

doc = nlp("happy joyous sad")
for token1 in doc:
  for token2 in doc:
    print(token1.text, token2.text, token1.similarity(token2))
happy happy 1.0
happy joyous 0.63244456
happy sad 0.37338886
joyous happy 0.63244456
joyous joyous 1.0
joyous sad 0.5340932
...
Python 中的 NLP 特征工程

文档相似度

# 生成 doc 对象
sent1 = nlp("I am happy")
sent2 = nlp("I am sad")
sent3 = nlp("I am joyous")
# 计算 sent1 与 sent2 的相似度
sent1.similarity(sent2)
0.9273363837282105
# 计算 sent1 与 sent3 的相似度
sent1.similarity(sent3)
0.9403554938594568
Python 中的 NLP 特征工程

让我们练习!

Python 中的 NLP 特征工程

Preparing Video For Download...