人工智能
- python,机器学习,深度学习,NLP,CV
-
人工智能:PaddleNLP实战
python,机器学习,深度学习,NLP,CV
人工智能:PaddleNLP实战
一、安装
使用百度源安装(推荐)
pip install --upgrade paddlenlp -i https://mirror.baidu.com/pypi/simple
使用阿里源安装
pip install --upgrade paddlenlp -i https://mirrors.aliyun.com/pypi/simple
使用清华源安装
pip install --upgrade paddlenlp -i https://pypi.tuna.tsinghua.edu.cn/simple
二、典例
- 词向量 Embedding
1)先下载数据包
from paddlenlp.embeddings import TokenEmbedding
# 初始化TokenEmbedding,预训练embedding未下载时会自动下载并加载数据
token_embedding = TokenEmbedding(embedding_name="w2v.baidu_encyclopedia.target.word-word.dim300")
# 查看token_embedding详情
print(token_embedding) # 包含了所有词的词向量
"""
结果:
Object type: TokenEmbedding(635965, 300, padding_idx=635964, sparse=False)
Unknown index: 635963
Unknown token: [UNK]
Padding index: 635964
Padding token: [PAD]
Parameter containing:
Tensor(shape=[635965, 300], dtype=float32, place=CPUPlace, stop_gradient=False,
[[-0.24200200, 0.13931701, 0.07378800, ..., 0.14103900,
0.05592300, -0.08004800],
[-0.08671700, 0.07770800, 0.09515300, ..., 0.11196400,
0.03082200, -0.12893000],
[-0.11436500, 0.12201900, 0.02833000, ..., 0.11068700,
0.03607300, -0.13763499],
...,
[ 0.02628800, -0.00008300, -0.00393500, ..., 0.00654000,
0.00024600, -0.00662600],
[ 0.01083017, -0.03364591, 0.02868032, ..., -0.00158025,
-0.00128620, 0.00400757],
[ 0. , 0. , 0. , ..., 0. ,
0. , 0. ]])
None
"""
可看到,token_embedding包含了paddlenlp收集的所有词的词向量。注意,token_embedding不是一个列表,而是一个类。验证:
type(token_embedding)
"""
结果:
<class 'paddlenlp.embeddings.token_embedding.TokenEmbedding'>
"""
2)那么要取出里面某个词的词向量怎么取?用下面方法:
如我们查找“人工智能”这个词在paddlenlp中的词向量(特征)
from paddlenlp.embeddings import TokenEmbedding
token_embedding = TokenEmbedding(embedding_name="w2v.baidu_encyclopedia.target.word-word.dim300")
test_token_embedding = token_embedding.search("人工智能")
print(test_token_embedding)
"""
结果:
Unknown index: 635963
Unknown token: [UNK]
Padding index: 635964
Padding token: [PAD]
Shape :[635965, 300]
[[ 4.39420e-01 1.09342e-01 -4.82500e-02 1.17429e-01 -2.64940e-02
2.42080e-01 1.46530e-02 -2.20504e-01 4.41110e-02 5.19196e-01
-7.43200e-02 9.80410e-02 3.24529e-01 -4.35000e-03 -7.06660e-02
-2.82147e-01 -3.08500e-02 3.84300e-02 2.65244e-01 -3.63370e-02
-3.90162e-01 -3.78317e-01 4.00112e-01 1.63084e-01 -2.13752e-01
-1.32097e-01 5.34770e-02 3.56321e-01 1.80560e-02 4.36669e-01
-2.60393e-01 8.23520e-02 1.68619e-01 -2.58740e-02 1.83478e-01
2.87682e-01 -7.76700e-03 1.25910e-02 6.60158e-01 2.47050e-02
1.94371e-01 -5.61600e-01 -3.39770e-02 -1.55987e-01 6.89761e-01
-4.80313e-01 1.40497e-01 7.24470e-02 1.22964e-01 -2.59114e-01
3.76404e-01 -1.51092e-01 -4.18032e-01 -1.01690e-01 5.57268e-01
7.09190e-02 2.01543e-01 -2.00619e-01 -2.02136e-01 4.76680e-01
1.74714e-01 7.41410e-02 7.16090e-02 -2.26671e-01 3.11383e-01
1.01113e-01 -9.42560e-02 -3.13290e-01 3.83935e-01 -7.05900e-03
-5.96578e-01 5.24410e-02 -2.19894e-01 1.82007e-01 -8.94000e-02
-3.42757e-01 1.56848e-01 2.68159e-01 5.38100e-03 -1.51118e-01
-1.28285e-01 -3.03804e-01 -5.05000e-04 -2.45620e-01 -5.17699e-01
2.69242e-01 4.06796e-01 3.74323e-01 -1.25470e-02 -2.18472e-01
2.19284e-01 6.34210e-02 -1.80872e-01 -7.48002e-01 3.46313e-01
2.59630e-01 -3.83505e-01 -7.89797e-01 3.01852e-01 -1.16490e-02
1.17575e-01 6.54590e-01 -4.60491e-01 -3.81123e-01 1.47955e-01
9.88590e-02 3.23528e-01 2.96026e-01 3.17765e-01 4.60991e-01
1.28274e-01 1.43292e-01 3.07968e-01 1.85938e-01 -4.46118e-01
-1.99167e-01 -2.75079e-01 1.21982e-01 3.29741e-01 1.01286e-01
3.60371e-01 1.62508e-01 1.57997e-01 8.59560e-02 3.33330e-02
7.31030e-01 -6.74555e-01 2.48943e-01 7.71136e-01 2.14234e-01
1.36784e-01 1.74910e-01 7.09910e-02 -5.54578e-01 8.72890e-02
2.13954e-01 8.53390e-02 -1.45604e-01 -2.30453e-01 -1.24292e-01
-2.86380e-02 -4.35837e-01 -3.11108e-01 2.22252e-01 -2.51486e-01
-4.63460e-02 2.60810e-01 -1.39775e-01 6.89200e-02 -3.68410e-02
2.97169e-01 2.12980e-01 9.17400e-02 -9.75190e-02 -8.44740e-02
2.29380e-02 -1.90994e-01 -4.98669e-01 2.78136e-01 3.47230e-02
-4.37765e-01 1.81387e-01 1.57393e-01 5.10600e-02 -3.84860e-02
2.00669e-01 1.20323e-01 6.01090e-02 3.51280e-01 3.13218e-01
-1.64219e-01 -5.87070e-01 8.43450e-02 -2.26311e-01 1.87101e-01
-4.03340e-02 -3.12593e-01 -5.80162e-01 -2.80302e-01 -4.83701e-01
-1.93759e-01 -5.84960e-01 -1.11590e-01 -2.26509e-01 -1.48615e-01
-9.03600e-02 -3.12040e-01 7.70541e-01 -9.09093e-01 -2.23413e-01
-1.75576e-01 1.10426e-01 4.70300e-02 -2.07537e-01 -1.15765e-01
-7.87680e-02 -6.13200e-02 1.57739e-01 -3.35648e-01 -1.12182e-01
9.31340e-02 5.04736e-01 -3.48432e-01 -3.35725e-01 2.55515e-01
4.08897e-01 9.13310e-02 1.67334e-01 -1.99090e-02 -4.51346e-01
5.38254e-01 5.16395e-01 -2.64800e-03 -5.48620e-02 4.12808e-01
1.28351e-01 1.61100e-01 9.21310e-02 2.00521e-01 3.32600e-03
-1.55861e-01 2.35411e-01 -2.77338e-01 2.28677e-01 1.24210e-01
4.93560e-02 -1.38766e-01 -9.77020e-02 3.77565e-01 3.80670e-02
-1.14000e-04 1.00455e-01 -5.54642e-01 2.61030e-02 -1.88545e-01
1.88398e-01 3.85160e-01 3.53760e-02 -3.02837e-01 -1.77883e-01
-2.08414e-01 3.11756e-01 -3.73112e-01 -2.09749e-01 -7.06500e-03
2.66063e-01 -4.90227e-01 -2.60653e-01 -1.89459e-01 -7.14060e-02
3.51710e-02 7.88890e-02 -4.40530e-02 -1.60110e-01 3.01680e-02
-2.37070e-02 -2.83968e-01 4.15303e-01 -2.08770e-01 -1.59055e-01
5.48709e-01 -1.49250e-02 2.54983e-01 3.14551e-01 5.59539e-01
-1.43510e-02 3.45120e-02 -3.98169e-01 -1.20590e-01 4.94000e-01
-8.87740e-02 8.66230e-01 3.38063e-01 -3.29910e-02 1.63555e-01
3.25276e-01 -6.67820e-02 -1.67235e-01 -1.63882e-01 -3.87603e-01
-3.47954e-01 -3.30608e-01 6.92240e-02 -1.00715e-01 6.80997e-01
4.86658e-01 -2.18689e-01 3.60576e-01 1.07415e-01 7.44620e-02
-3.74900e-03 7.35717e-01 3.04600e-02 4.93475e-01 1.08262e-01
-6.33000e-04 1.44880e-02 4.34517e-01 3.99075e-01 1.10990e-01]]
None
"""
- 这些向量都是300维度的
- 300维是一个超参数,可以人为设定,一般取100~300之间,
- 为了追求更快的训练速度,可以设定维度较小的训练集来训练。
3)余弦相似度cosine_sim()
cosine_sim()计算余弦相似度,适用场景: - 搜索
- 论文查重
- 同义词替换
- 相似
注意:英文的相似判断不支持,效果不好。
from paddlenlp.embeddings import TokenEmbedding
token_embedding = TokenEmbedding(embedding_name="w2v.baidu_encyclopedia.target.word-word.dim300")
s1 = "女孩"
s2 = "女人"
score = token_embedding.cosine_sim(s1, s2)
print('score:', score) # 0.7017183
s1 = "女孩"
s2 = "图书"
score1 = token_embedding.cosine_sim(s1, s2)
print('score:', score1) # 0.1671222
s1 = "这只皮靴号码大了。那只号码合适"
s2 = "这只皮靴号码不小,那只更合适"
score = token_embedding.cosine_sim(s1, s2)
print('score:', score) # 0.9999999
但对语义相似似乎效果不太好。(paddlenlp版本2.2.2,2021年12月下载)如下:
s1 = "妻子"
s2 = "媳妇"
score = token_embedding.cosine_sim(s1, s2)
print('score:', score) # 0.50807375。
s1 = "举例子"
s2 = "打比方"
score1 = token_embedding.cosine_sim(s1, s2)
print('score:', score) # 0.6805795
s1 = "狗"
s2 = "犬"
score1 = token_embedding.cosine_sim(s1, s2)
print('score:', score) # 0.68124706