使用Word2Vec构建语义嵌入

2024-09-29 19:19:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我真的接受了下面问题的所有提示,因为我所需要的是从那个数据集中获得嵌入,我将写我所有的解决方案,因为(希望)问题只是在一些我没有考虑的部分。你知道吗

我正在使用一个带注释的语料库,这样我就可以通过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格式的单词,因为下划线,我不知道如何解决这个问题。如有任何提示,敬请谅解!你知道吗


Tags: 词汇表txt示例dataannotationword2vec单词语料库
1条回答
网友
1楼 · 发布于 2024-09-29 19:19:25

Google的word2vec.c和gensim的Word2Vec都能很好地处理带下划线的单词。你知道吗

如果两个人都在看你的输入文件,而且两个人都只报告了80个独立的单词,而你的期望值是100000以上,那么你的输入文件可能有问题。你知道吗

wc data/test.txt报告什么?你知道吗

相关问题 更多 >

    热门问题