fastText 产生零向量
fastText producing zero vector
我在计算 fastText 生成的嵌入的余弦相似度时遇到以下错误:
/home/kgarg8/anaconda3/envs/CiteKP/lib/python3.6/site-packages/scipy/spatial/distance.py:721: RuntimeWarn
ing: invalid value encountered in float_scalars
dist = 1.0 - uv / np.sqrt(uu * vv)
相关代码片段:
# fastText supervised training:
model = fasttext.train_supervised('merged_data_labels_prepended.txt')
model.save_model('fasttext_supervised.bin')
# model loading
model = fasttext.load_model("fasttext_supervised.bin")
# calculating cosine similarity
from scipy import spatial
def cosine_distance_wordembedding_method(s1, s2):
vec1 = np.mean([model[word] for word in s1],axis=0)
vec2 = np.mean([model[word] for word in s2],axis=0)
cosine = spatial.distance.cosine(vec1, vec2)
return round((1-cosine)*100, 2)
cosine_distance_wordembedding_method(pred.split(), label.split()) # function call
初步分析:
fastText 正在为不在词汇表中的单词生成全零嵌入(有时 vec1 或 vec2 为零)。那么,如何处理这些 OOV 词以获得非零嵌入?
您为其接收原始向量(所有 0.0
维度)的词是否可能非常短 - 比构建模型时使用的 min_n
参数短?
如果是这样,这就是模型的设计目的。 FastText 只能为 OOV 词合成向量,当候选词的子串在早期训练中可能已经接收到 n-gram 向量时。
如果训练只为 3 个或更多字符的 character-n-gram 创建了这些词片段向量,而您要求 FastText 为 OOV 2 字符词创建向量,则它既没有完整的-词向量,也不是子词向量,合并到 OOV 向量。所以它 returns 零向量。
在这种情况下,你能做的最好的事情就是在假设向量不为零之前检测到这种情况 - 然后可能只是完全忽略那个未知的词,以及它不可猜测的向量。
显然,设置 maxn=6
解决了这个问题。默认情况下,它是 0
.
我在计算 fastText 生成的嵌入的余弦相似度时遇到以下错误:
/home/kgarg8/anaconda3/envs/CiteKP/lib/python3.6/site-packages/scipy/spatial/distance.py:721: RuntimeWarn
ing: invalid value encountered in float_scalars
dist = 1.0 - uv / np.sqrt(uu * vv)
相关代码片段:
# fastText supervised training:
model = fasttext.train_supervised('merged_data_labels_prepended.txt')
model.save_model('fasttext_supervised.bin')
# model loading
model = fasttext.load_model("fasttext_supervised.bin")
# calculating cosine similarity
from scipy import spatial
def cosine_distance_wordembedding_method(s1, s2):
vec1 = np.mean([model[word] for word in s1],axis=0)
vec2 = np.mean([model[word] for word in s2],axis=0)
cosine = spatial.distance.cosine(vec1, vec2)
return round((1-cosine)*100, 2)
cosine_distance_wordembedding_method(pred.split(), label.split()) # function call
初步分析:
fastText 正在为不在词汇表中的单词生成全零嵌入(有时 vec1 或 vec2 为零)。那么,如何处理这些 OOV 词以获得非零嵌入?
您为其接收原始向量(所有 0.0
维度)的词是否可能非常短 - 比构建模型时使用的 min_n
参数短?
如果是这样,这就是模型的设计目的。 FastText 只能为 OOV 词合成向量,当候选词的子串在早期训练中可能已经接收到 n-gram 向量时。
如果训练只为 3 个或更多字符的 character-n-gram 创建了这些词片段向量,而您要求 FastText 为 OOV 2 字符词创建向量,则它既没有完整的-词向量,也不是子词向量,合并到 OOV 向量。所以它 returns 零向量。
在这种情况下,你能做的最好的事情就是在假设向量不为零之前检测到这种情况 - 然后可能只是完全忽略那个未知的词,以及它不可猜测的向量。
显然,设置 maxn=6
解决了这个问题。默认情况下,它是 0
.