日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

9.7-一定要开始学了

發布時間:2023/12/8 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 9.7-一定要开始学了 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

詞向量

one-hot表示

每個詞表示為一個長向量。這個向量的維度就是詞表大小,向量中只有一個維度的值為1,其余維度為0
不能展示詞與詞之間的關系,且特征空間非常大。

分布式表示

word embedding。詞向量
表示成一個定長的連續的稠密向量。

分布式表示優點:
(1)詞之間存在相似關系:是詞之間存在“距離”概念
(2)包含更多的信息,每一維都有特定的含義。

word2vec

預訓練詞向量

加載TokenEmbedding
tokenEmbedding()參數

embedding_name 模型名稱以參數形式傳入TokenEmbeddings
w2v.baidu_encyclopedia.target.word-word.dim300的詞向量

unknow_token 未知token的表示,默認為[UNK]

unknown_token_vector 未知token的向量表示,默認生成和embedding維數一致,數值均值為0的正態分布向量

extended_vocab_path 擴展詞匯列表文件路幾個,詞表格式一行一個詞。

trainable embedding曾是否可悲訓練
默認為TRUE

from paddlenlp.embeddings import TokenEmbedding# # 初始化TokenEmbedding, 預訓練embedding未下載時會自動下載并加載數據 token_embedding = tokenEmbedding(embedding_name="w2v.baidu_encyclopedia.target.word-word.dim300)# 查看token_embedding詳情 print(token_embedding)

認識embedding

TokenEmbedding.search() 獲得指定詞匯的詞向量

test_token_embedding = token_embedding.search("中國") print(test_token_embedding)


TokenEmbedding.cosine_sim() 計算詞向量間余弦相似度,語義相近的詞語余弦相似度更高,說明預訓練好的詞向量空間有很好的語義表示能力。

score1 = token_embedding.cosine_sim("女孩","女人") score2 = token_embedding.cosine_sim("女孩","書籍") print('score1:',score1) print('score2:',score2)


score1 有更好的相似性

詞向量映射到低微空間

# 獲取詞表中前1000個單詞 labels = token_embedding.vocab.to_tokens(list(range(0,1000)))# 取出這1000個單詞對應的embedding test_token_embedding = token_embedding.search(labels)# 引入visualDL的logWriter記錄日志 from visualdl import LogWriter with LogWriter(logdir = './token_hidi') as writer:writer.add_embedding(tag='test',mat=[i for i in test_token_embedding],matadata= labels)

基于TokenEmbedding衡量句子語義相似度

詞袋模型(Bag of Words,簡稱BoW)計算語義向量

首先,將兩個句子分別進行切詞,并在TokenEmbedding中查找相應的單詞詞向量(word embdding)。

然后,根據詞袋模型,將句子的word embedding疊加作為句子向量(sentence embedding)。

最后,計算兩個句子向量的余弦相似度。

基于TokenEmbedding的詞袋模型

使用BoWEncoder 搭建一個BoW模型用于計算句子語義。

paddlenlp.TokenEmbedding 組建word-embedding層
paddlenlp.seq2vec.BoWEncoder 組建句子建模層

import paddle import paddle.nn as nn import paddlenlpclass BoWModel(nn.Layer):def __init__(self,embedder):super().init_()self.embedder = embedderem_dim = self.embedder.embedding_dimself.encoder = paddlenlp.seq2vec.BoWEncoder(eb_dim)self.cos_sim_func = nn.CosineDimilarity(axis=-1)def get_cos_sim(self,text_a,text_b):text_a_embedding = self.forward(text_a)text_b_embedding = self.forward(text_b)cos_sim = self.cos_sim_func(text_a_embedding,text_b_embedding)return cos_simdef forward(self,text):embedded_text = self.embedder(text)summed = self.encoder(embedded_text)return summedmodel = BoWModel(embedder = token_embedding)

構造Tokenizer

使用tokenEmbedding詞表構造Tokenizer

from data import Tokenizer tokenizer = Tokenizer() toenizer.set_vocab(vocab=token_embedding.vocab)

相似句對數據讀取

以提供的樣例數據text_pair.txt為例,該數據文件每行包含兩個句子

text_pairs = {} with open("text_pair.txt","r",encoding="utf8") as f:for line in f:text_a,text_b = line.strip().split("\t")if text_a not in text_pairs:text_pairs[text_a]=[]text_pairs[text_a].append(text_b)

查看相似語句相關度

for text_a, text_b_list in text_pairs.items():text_a_ids = paddle.to_tensor([tokenizer.text_to_ids(text_a)])for text_b in text_b_list:text_b_ids = paddle.to_tensor([tokenizer.text_to_ids(text_b)])print("text_a: {}".format(text_a))print("text_b: {}".format(text_b))print("cosine_sim: {}".format(model.get_cos_sim(text_a_ids, text_b_ids).numpy()[0]))print()

使用VisualDL查看句子向量

# 引入VisualDL的LogWriter記錄日志 import numpy as np from visualdl import LogWriter # 獲取句子以及其對應的向量 label_list = [] embedding_list = []for text_a, text_b_list in text_pairs.items():text_a_ids = paddle.to_tensor([tokenizer.text_to_ids(text_a)])embedding_list.append(model(text_a_ids).flatten().numpy())label_list.append(text_a)for text_b in text_b_list:text_b_ids = paddle.to_tensor([tokenizer.text_to_ids(text_b)])embedding_list.append(model(text_b_ids).flatten().numpy())label_list.append(text_b)with LogWriter(logdir='./sentence_hidi') as writer:writer.add_embeddings(tag='test', mat=embedding_list, metadata=label_list)

總結

以上是生活随笔為你收集整理的9.7-一定要开始学了的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。