【问题标题】:Use Word2Vec to build a sense embedding使用 Word2Vec 构建语义嵌入
【发布时间】:2019-05-16 11:12:27
【问题描述】:

我真的接受关于以下问题的每一个提示,因为我想要的只是从该数据集中获得嵌入,我将编写我的所有解决方案,因为(希望)问题只是在我没有考虑的某些部分.

我正在使用带注释的语料库,这样我就可以在给定的句子中消除歧义,这要归功于 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 生成一个语料库,并将每个 anchor 替换为相应的 lemma1_tag1(有些单词可以包含更多下划线,因为我用下划线替换了引理中的空格)。由于不是每个单词都有注释,在执行简单的预处理以删除停用词和其他标点符号后,最后我得到了类似于以下示例的内容:

语料库示例

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

问题是语料库中的单词数为 32000000+,预定义词汇文件中的单词数约为 80000。我什至在 Python 中尝试使用 Gensim,但是(当然)我得到了完全相同的输出.我认为问题在于 Word2Vec 不考虑 lemma1_tag1 格式的单词,因为有下划线,我不知道如何解决这个问题。任何提示表示赞赏,在此先感谢您!

【问题讨论】:

    标签: python gensim word2vec word-embedding


    【解决方案1】:

    来自 Google 的原始 word2vec.c 和 gensim 的 Word2Vec 都可以很好地处理带有下划线的单词。

    如果两者都在查看您的输入文件,并且都只报告了 80 个唯一单词,而您预计会有 100,000 多个单词,那么您的输入文件可能有问题。

    wc data/test.txt 报告什么?

    【讨论】:

    • 对 test.txt 文件执行 wc,我得到 1920131 32639925 339425485 test.txt。在dictionary.txt 文件上执行它,我得到79353 79353 1600812 dictionary.txt。在这个问题中,我写了 100000+,而字典中只有 79353 个单词,但没关系,我会编辑这个问题。测试文件字数还可以,3200万+。这看起来很奇怪
    • 为什么要使用-read-vocab 选项,而不是让词汇从语料库中被发现? (我建议不要使用那个不太常见的选项作为一个因素。如果有你不感兴趣的词,你可以把它们从语料库中删除。)
    • 我添加了该选项,因为有些上下文词我不想在嵌入中报告它们(我只关心表示为 lemma_tag 的词),但它们对计算很有用目标词的权重。或者至少,我知道在 w2v 中,词汇之外的词也会影响最终的嵌入,这就是为什么我离开了它们并且没有将它们从语料库中删除。
    猜你喜欢
    • 2015-10-02
    • 2020-12-26
    • 1970-01-01
    • 1970-01-01
    • 2018-01-31
    • 2018-06-09
    • 1970-01-01
    • 1970-01-01
    • 2015-10-10
    相关资源
    最近更新 更多