Conceptnet Numberbatch(多语言)OOV单词



我正在处理一个文本分类问题(在法语语料库上(,我正在尝试不同的单词嵌入。我对ConceptNet能提供什么非常感兴趣,所以我决定试一试。

我找不到一个专门的教程来完成我的特定任务,所以我接受了他们博客上的建议:

如何使用ConceptNet Numberbatch?

尽可能简单:

完成任何关于NLP的机器学习教程,该教程使用语义向量。进入他们告诉你使用word2vec的部分。(一个特别开明的教程可能会告诉你使用GloVe 1.2。(

获取ConceptNet Numberbatch数据,然后使用它。变得更好结果也推广到其他语言。

下面你可以找到我的方法(注意,"numberbatch.txt"是包含推荐的多语言版本的文件:ConceptNet numberbatch 19.08(:

embeddings_index = dict()
f = open('numberbatch.txt')
for line in f:
values = line.split()
word = values[0]
coefs = asarray(values[1:], dtype='float32')
embeddings_index[word] = coefs
f.close()
print('Loaded %s word vectors.' % len(embeddings_index))

我开始测试一个词是否存在:

word = 'fille'
missingWords = 0
if word not in embeddings_index:
missingWords += 1
print(missingWords)

我感到惊讶的是,竟然找不到像">fille"(法语中的女孩(这样简单的词。然后,我创建了一个功能,用于打印语料库中的所有OOV单词。在分析结果时,我更惊讶:超过22k个单词没有找到(包括">nous"(我们(、">être(未来("等单词(。

我还尝试了GitHub页面上为OOV单词提出的方法(结果相同(:

词汇表外策略

ConceptNet Numberbatch使用词汇表外策略进行评估这有助于它在出现陌生单词时的表现。这个该策略在ConceptNet代码库中实现。可以是总结如下:

给定一个语言不是英语的未知单词,试着查找英语嵌入中拼写相同的单词(因为英语单词往往出现在所有语言的文本中(。

给定未知单词,从末尾删除一个字母,看看这是否是已知单词的前缀。如果是,则对那些已知的嵌入进行平均文字。

如果前缀仍然未知,请继续从中删除字母结束,直到找到已知前缀。当单身时放弃角色仍然存在。

我的方法有错吗?

您是否考虑了ConceptNet Numberbatch的格式?如该项目的GitHub所示,它看起来是这样的:

/c/en/absolute_value-0.0847-0.1316-0.0800-0.0708-0.2514-0.1687-。。。

/c/en/绝对零点0.0056-0.0051 0.0332-0.1525-0.0955-0.0902 0.07…

此格式表示找不到fille,但会找到/c/fr/fille

相关内容

  • 没有找到相关文章

最新更新