我正在使用一个带注释的语料库,这样我就可以通过WordNet synsets id消除给定句子中的单词歧义,我将其称为标记。例如:
<sentence>
<text>word1 word2 word3</text>
<annotations>
<annotation anchor=word1 lemma=lemma1>tag1</annotation>
<annotation anchor=word2 lemma=lemma2>tag2</annotation>
<annotation anchor=word3 lemma=lemma3>tag3</annotation>
<annotations>
</sentence>
从这里开始,给定一个我称之为n的嵌入维度,我想构建一个如下的嵌入:
lemma1_tag1 dim 1 dim 2 dim 3 ... dim n
lemma2_tag2 dim 1 dim 2 dim 3 ... dim n
lemma3_tag3 dim 1 dim 2 dim 3 ... dim n
我想从每个句子的每个文本开始为Word2Vec生成一个语料库,并用相应的lemma1_tag1
替换每个anchor
(有些单词可以包含更多的下划线,因为我用下划线替换了引理中的空格)。由于并非每个单词都有注释,因此在执行简单的预处理以删除停止词和其他标点符号之后,最终我得到了如下示例:
let just list most_recent_01730444a headline_06344461n
因为我只对带注释的单词感兴趣,所以我还生成了一个预定义的词汇表,将其用作Word2Vec词汇表。该文件每行包含如下项:
lemma1_tag1
lemma2_tag2
因此,在定义了语料库和词汇表之后,我在Word2Vec工具箱中使用了它们:
./word2vec -train data/test.txt -output data/embeddings.vec -size 300 -window 7 -sample 1e-3 -hs 1 -negative 0 -iter 10 -min-count 1 -read-vocab data/dictionary.txt -cbow 1
Starting training using file data/test.txt
Vocab size: 80
Words in train file: 20811
问题是语料库中的单词数是3200多万,预定义词汇文件中的单词数大约是80000。我甚至用Gensim在Python中进行了尝试,但是(当然)我得到了完全相同的输出。我认为问题是Word2Vec不考虑lemma1_tag1
格式的单词,因为下划线,我不知道如何解决这个问题。如有任何提示,敬请谅解!你知道吗
Google的
word2vec.c
和gensim的Word2Vec
都能很好地处理带下划线的单词。你知道吗如果两个人都在看你的输入文件,而且两个人都只报告了80个独立的单词,而你的期望值是100000以上,那么你的输入文件可能有问题。你知道吗
wc data/test.txt
报告什么?你知道吗相关问题 更多 >
编程相关推荐