Tencent AI Lab Embedding Corpus for Chinese Words and Phrases为超过800万个中文单词和词语(包括标点符号)提供200维矢量表示,这些向量捕捉了中文单词和词语的语义含义,可广泛应用于许多中下游的中文处理任务。Tencent_AILab_ChineseEmbedding.txt(开源下载文件)第一行显示嵌入总数和尺寸大小,下面每一行(第一列表示中文单词或词语,后跟space及其嵌入,嵌入的不同维度的值由空格分隔)
优点:覆盖范围广,包含大量特定领域的词汇及词汇俚语;新鲜度,包含最近出现或流行的新词;准确性,大规模数据和精心设计的训练算法
训练:数据收集(从新闻、网页、小说收集的大型文本);词汇建设,维基百科+百度百科的短语,同时基于语料库的语义挖掘应用短语发现方法(分布式和基于模式的方法),这增强了新兴短语的覆盖范围
训练算法: Directional Skip-Gram: Explicitly Distinguishing Left and Right Context for Word Embeddings(http://aclweb.org/anthology/N18-2028)
直接放代码,从代码中 理解我的思路
#基于Windows系统
library("dplyr")
##构建余弦相似度计算函数
CosineSimilarity<-function(x,y){
tian=as.double(x)
tem=round( crossprod(y,tian) / (sqrt(sum(y^2)) * sqrt(sum(tian^2))) , 3)
#tem_1<-data.frame(Cosine=tem,stringsAsFactors=F)
#assign(z,rbind(get(z,env=parent.frame(n=1)),tem_1),env=parent.frame(n=1))
}
con<-file("F:/自己的文件目录/Tencent_AILab_ChineseEmbedding.txt","r")
##查询目标词汇函数
voca<-function(x){
conn<-file("F:/自己的文件目录/Tencent_AILab_ChineseEmbedding.txt","r")
voca_vector<-c()
for (j in 1:100) {
Chinese_Embedding<-readLines(conn,n=100000)
print(paste0('第',j,'次循环'))
if (length(Chinese_Embedding)==0)
break
Encoding(Chinese_Embedding)<-"UTF-8"
tem<-sapply(Chinese_Embedding,function(x) {strsplit(x," ",fixed=TRUE) %>% '[['(1)},simplify=F,USE.NAMES=FALSE) #list
words<-sapply(tem,"[",1) #词汇-字符向量
if (x %in% words){
print('已找到')
words_matrix<-sapply(tem,"[",2:201,simplify=T) %>% t() #提取200维矢量表示
voca_vector<-words_matrix[which(x==words),] %>% as.double()
break
}
}
close(conn)
return(voca_vector)
}
##计算余弦相似度-取100000个词汇测试
Chinese_Embedding<-readLines(con,n=100000)
Encoding(Chinese_Embedding)<-"UTF-8"
tem<-sapply(Chinese_Embedding[2:100000],function(x) {strsplit(x," ",fixed=TRUE) %>% '[['(1)},simplify=F,USE.NAMES=FALSE)
words<-sapply(tem,"[",1)
words_matrix<-sapply(tem,"[",2:201,simplify=T) %>% t() #提取200维矢量表示
#rownames(words_matrix)<-words #矩阵的每行命名
rm(tem)
rm(Chinese_Embedding)
close(con)
gc()
#三个目标词汇的词向量计算
Immigration<-voca('移民')
StudyAbroad<-voca('留学')
ChildEnglisg<-voca('少儿英语')
##向量化计算余弦相似度
Immigration_CosineSimilarity<-apply(words_matrix,1,CosineSimilarity,y=Immigration)
StudyAbroad_CosineSimilarity<-apply(words_matrix,1,CosineSimilarity,y=StudyAbroad)
ChildEnglisg_CosineSimilarity<-apply(words_matrix,1,CosineSimilarity,y=ChildEnglisg)
##转数据框格式方便查阅
Immigration_Keywords<-data.frame(words=words,CosineSimilarity=Immigration_CosineSimilarity,stringsAsFactors=FALSE)
StudyAbroad_Keywords<-data.frame(words=words,CosineSimilarity=StudyAbroad_CosineSimilarity,stringsAsFactors=FALSE)
ChildEnglisg_Keywords<-data.frame(words=words,CosineSimilarity=ChildEnglisg_CosineSimilarity,stringsAsFactors=FALSE)
rm(Immigration)
rm(StudyAbroad)
rm(ChildEnglisg)
rm(Immigration_CosineSimilarity)
rm(StudyAbroad_CosineSimilarity)
rm(ChildEnglisg_CosineSimilarity)