python - Gensim Word2Vec 训练数据
问题描述
我目前正在尝试用我自己的训练数据训练我自己的 word2vec 模型,我对训练数据的预处理完全感到困惑。
我在我的文本上运行了一个简短的脚本,它对文本中的单词进行词形还原和小写,这样最后我的训练数据来自一个句子(德语),例如:
"Er hat heute zwei Birnen gegessen."
出现以下内容:
[er, haben, heute, zwei, birne, essen]
翻译成英文:
He ate two pears today.
结果是:
[he, eat, two, pear, today]
现在的问题是:我还没有看到有人对他们的训练数据这样做。这些词都是大写的,也没有词形化,我完全不明白这是如何工作的。特别是对于德语,动词的变化非常多。我应该就这样离开他们吗?我不明白它是如何工作的,因为 gensim 甚至不知道它是用哪种语言训练的,对吗?
简而言之:我应该进行词形还原和/或小写还是让每个单词保持原样?
非常感谢!
解决方案
答案取决于您要使用嵌入的目的,但是,它们通常接受单词形式的训练。词嵌入通常在非常大的数据集上进行预训练,涵盖多达 50 万个单词的词汇表,这通常涵盖大多数形式的大多数单词,即使是形态比德语丰富得多的语言。
您可能还想使用FastText(存在 Gensim 的绑定)而不是 Word2Vec。FastText 考虑了嵌入的字符 n-gram 统计信息,因此它更好地概括了形态学的规律。
但总的来说,数据预处理始终取决于您打算如何使用嵌入。如果您想对单词的含义在 20 世纪如何变化进行定量历时研究,那么嵌入引理是一个好主意。如果您使用具有良好词形还原器的低资源语言,这也可能是一个好主意。如果您计划将嵌入作为下游 NLP 模型的输入,那么您可能应该使用表单和/或使用已经预训练的嵌入。
推荐阅读
- jenkins - 仅在测试成功的情况下如何使用 Jenkins 部署 Drupal
- android - 在 Android 上处理使用 ImageReader 获得的图像
- sql - 将日期集转换为月末日期
- java - 如果 Kotlin 中的 try catch 失败返回什么?
- postgresql - 需要在 PostgreSQL 中的外部表上并行追加
- javascript - How can I get properties of a type as an array in Typescript?
- r - 向量化 R 中的双循环
- laravel - 动态路由 url 更改未反映在 laravel 包中
- ios - 在 webRTC 调用期间在 WebRTC 中流式传输音频
- linkedin - 可以从 API 调用返回 LinkedIn 连接度吗?