我对word2vec完全陌生,所以请耐心等待。我有一组文本文件,每个文件包含一组推文,介于1000-3000之间。我选择了一个常用关键字("kw1"
),我希望使用word2vec找到"kw1"
的语义相关术语。例如,如果关键字为"apple"
,我希望根据输入文件查看"ipad" "os" "mac"
等相关字词。因此"kw1"
的这组相关术语对于每个输入文件将是不同的,因为word2vec将被训练在单个文件上(例如,5个输入文件,在每个文件上运行word2vec 5次)。
我的目标是在给定common关键字("kw1"
)的情况下为每个输入文件找到一组相关术语,这些术语将用于其他目的。
我的疑问/怀疑是:
我已经从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'
工具)变化很大。我应该使用哪种技术来查找参数的正确值。 (手动试验和错误对我来说是不可能的,因为我将扩大数据集)。
答案 0 :(得分:4)
第一个问题:
是的,几乎任何我能想象的任务都是word2vec应用于你将要清理数据 - 特别是如果你对语义(不是语法)感兴趣,这是运行word2vec的常见原因。此外,它不仅仅是删除停用词,尽管这是一个很好的第一步。通常你也会想要一个tokenizer和一个句子分段器,我想如果你看一下deeplearning4java(它有一个word2vec实现)的文档,它会显示使用这些工具。这一点很重要,因为你可能不关心苹果和数字之间的关系" 5",苹果和"""等... 有关word2vec预处理的更多讨论,请参阅https://groups.google.com/forum/#!topic/word2vec-toolkit/TI-TQC-b53w
第二个问题:
word2vec AFAIK没有自动调整功能,因为这意味着实现的作者知道你打算用它做什么。通常,实施的默认值是" best"任何在(或一组)任务上实现的人的值。抱歉,word2vec不是一个交钥匙解决方案。您需要了解参数并进行调整以相应地修复您的任务。