Tencent AI Lab Embedding Corpus使用-提取目标词汇词向量+余弦相似度计算

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)

Tencent AI Lab Embedding Corpus使用-提取目标词汇词向量+余弦相似度计算_第1张图片

你可能感兴趣的:(自然语言处理,R,云计算/大数据)