使用pmi和svd将单词转换为向量的库
svd2vec的Python项目详细描述
#SVD2vec
svd2vec是一个python库,用于将文档单词表示为向量。向量是使用pmi(逐点互信息)和svd(奇异值分解)创建的。
这个库实现了“通过从单词嵌入中吸取的经验改进分布相似性”中的建议(omer levy、yoav goldberg和ido dagan)。本文认为,传统的pmi和svd方法通过应用相同的超参数可以达到word2vec的效果。
文档可在[https://valentinp72.github.io/svd2vec/index.html](https://valentinp72.github.io/svd2vec/index.html)找到
###示例
`shell wget http://mattmahoney.net/dc/text8.zip-O text8.gz gzip -d text8.gz -f `
`python # Building >>> from svd2vec import svd2vec >>> documents = [open("text8","r").read().split(" ")] >>> svd = svd2vec(documents, window=2, min_count=100) `
`python # I/O >>> svd.save("svd.bin") >>> svd = svd2vec.load("svd.bin") `
`python # Similarities >>> svd.similarity("bad", "good") # 0.4156516999158368 >>> svd.similarity("monday", "friday") # 0.839529117681973 `
`python # Most similar words >>> svd.most_similar(positive=["january"], topn=2) # [('february', 0.6854849518368631), ('october', 0.6653385092683669)] >>> svd.most_similar(positive=['moscow','france'],negative=['paris'], topn=4) # [('russia', 0.6221746629754187), ('ussr', 0.6024809889985986), ('soviet', 0.5794180517326273), ('bolsheviks', 0.5365123080505297)] `
`python # Analogies >>> svd.analogy("paris", "france", "berlin") # [('germany', 0.6977716641680641), ...] >>> svd.analogy("road", "cars", "rail") # [('trains', 0.7532519174901262), ...] >>> svd.analogy("cow", "cows", "pig") # [('pigs', 0.6944101149919422), ...] >>> svd.analogy("man", "men", "woman") # [('women', 0.7471792753875327), ...] `
使用[gensim](https://pypi.org/project/gensim/)可以使用word2vec表示加载svd2vec模型: `python >>> from gensim.models.keyedvectors import Word2VecKeyedVectors >>> svd.save_word2vec_format("svd_word2vec_format.txt") >>> keyed_vector = Word2VecKeyedVectors.load_word2vec_format("svd_word2vec_format.txt") >>> keyed_vector.similarity("good", "bad") # 0.54922897 `
-
[根据单词嵌入的经验提高分布相似性](https://www.mitpressjournals.org/doi/abs/10.1162/tacl_a_00134)<;br>; omer levy,yoav goldberg,和ido dagan<;br>; 计算语言学协会学报2015年第3卷,211-225<;br>;