nlp - 在小文本文件上应用 word2vec

标签 nlp text-mining word2vec

我对 word2vec 完全陌生,所以请耐心等待。我有一组文本文件,每个文件都包含一组推文,介于 1000-3000 之间。我选择了一个常用关键字 ("kw1"),我想为 "kw1" 找到语义相关的术语使用 word2vec。例如,如果关键字是 "apple"我希望看到相关术语,例如 "ipad" "os" "mac" ...基于输入文件。所以这组相关术语为"kw1"每个输入文件都会有所不同,因为 word2vec 将在单个文件上进行训练(例如,5 个输入文件,在每个文件上运行 word2vec 5 次)。

我的目标是在给定通用关键字 ("kw1") 的情况下为每个输入文件找到相关术语集,这些关键字将用于其他目的。

我的问题/疑问是:

  • 将 word2vec 用于这样的任务是否有意义?考虑到输入文件的小尺寸,使用它在技术上是否正确?

  • 我从 code.google.com 下载了代码:https://code.google.com/p/word2vec/并且刚刚对其进行了试运行,如下所示:
     time ./word2vec -train $file -output vectors.bin -cbow 1 -size 200 -window 10 -negative 25 -hs 1 -sample 1e-3 -threads 12 -binary 1 -iter 50
    
    ./distance vectors.bin 
    
  • 从我的结果中,我看到当我使用 'distance' 时,我收到了很多嘈杂的术语(停用词)。获取相关术语的工具 "kw1" .所以我确实删除了停用词和其他嘈杂的术语,例如用户提及。但是我还没有看到 word2vec 需要清理输入数据的地方?
  • 如何选择合适的参数?当我更改参数(例如 distance)时,我看到结果(运行 '-window' 工具)变化很大, '-iter' .我应该使用哪种技术来找到参数的正确值。 (我无法进行手动试验和错误,因为我将扩大数据集)。
  • 最佳答案

    第一个问题:

    是的,对于我可以想象 word2vec 应用于您的几乎所有任务都必须清理数据 - 特别是如果您对语义(而不是语法)感兴趣,这是运行 word2vec 的通常原因。此外,这不仅仅是删除停用词,尽管这是一个很好的第一步。通常你也会想要一个分词器和句子分割器,我想如果你看一下 deeplearning4java 的文档(它有一个 word2vec 实现),它会显示使用这些工具。这很重要,因为您可能不关心苹果与数字“5”、苹果与“'s”等之间的关系......
    有关 word2vec 预处理的更多讨论,请参阅 https://groups.google.com/forum/#!topic/word2vec-toolkit/TI-TQC-b53w

    第二个问题:

    word2vec AFAIK 没有可用的自动调整,因为这意味着实现的作者知道你打算用它做什么。通常,实现的默认值是在一个(或一组)任务上实现的人的“最佳”值。抱歉,word2vec 不是交 key 解决方案。您将需要了解参数并调整它们以相应地解决您的任务。

    关于nlp - 在小文本文件上应用 word2vec,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34704519/

    相关文章:

    java - 斯坦福自然语言处理 : Keeping punctuation tokens?

    java - Java访问二维数组的方法

    nlp - 如何在 python-gensim 中使用潜在狄利克雷分配 (LDA) 来抽象二元主题而不是一元主题?

    python - 在 Keras 中,如何在训练期间访问 Word2Vec(嵌入)向量以实现自定义损失函数

    machine-learning - AdaGram.jl 上训练文本的问题

    java - 使用 GATE 进行 Multi-Tenancy

    r - 查找一对文档之间的重叠

    r - 如何使用 r 删除文本文档中没有 http 的 url

    R tm 包和西里尔文字

    python-3.x - 使用 Glove 方法时谈论skip-gram 和 cbow 有意义吗?