machine-learning - 如何使用 gensim fasttext wrapper 训练词嵌入表示?
问题描述
我想用 fastext 训练我自己的词嵌入。但是,在遵循教程之后,我无法正确地做到这一点。到目前为止,我尝试过:
在:
from gensim.models.fasttext import FastText as FT_gensim
# Set file names for train and test data
corpus = df['sentences'].values.tolist()
model_gensim = FT_gensim(size=100)
# build the vocabulary
model_gensim.build_vocab(sentences=corpus)
model_gensim
出去:
<gensim.models.fasttext.FastText at 0x7f6087cc70f0>
在:
# train the model
model_gensim.train(
sentences = corpus,
epochs = model_gensim.epochs,
total_examples = model_gensim.corpus_count,
total_words = model_gensim.corpus_total_words
)
print(model_gensim)
出去:
FastText(vocab=107, size=100, alpha=0.025)
但是,当我尝试查看词汇表时:
print('return' in model_gensim.wv.vocab)
我明白False
了,即使这个词出现在我传递给快速文本模型的句子中。此外,当我检查要返回的最相似的单词时,我得到了字符:
model_gensim.most_similar("return")
[('R', 0.15871645510196686),
('2', 0.08545402437448502),
('i', 0.08142799884080887),
('b', 0.07969795912504196),
('a', 0.05666942521929741),
('w', 0.03705815598368645),
('c', 0.032348938286304474),
('y', 0.0319858118891716),
('o', 0.027745068073272705),
('p', 0.026891689747571945)]
使用 gensim 的 fasttext 包装器的正确方法是什么?
解决方案
gensimFastText
类不将纯字符串作为其训练文本。相反,它需要单词列表。如果您传递纯字符串,它们将看起来像单字符列表,并且您会得到一个像您所看到的那样发育不良的词汇表。
Tokenize each item of your corpus
into a list-of-word-tokens and you'll get closer-to-expected results. One super-simple way to do this might just be:
corpus = [s.split() for s in corpus]
But, usually you'd want to do other things to properly tokenize plain-text as well – perhaps case-flatten, or do something else with punctuation, etc.
推荐阅读
- ios - 来自两个文本字段的值被添加到第一个
- xml - 使用 XSLT 从 XML 输出绝对路径和值
- angular - Angular 4:ngDoCheck 与 ngAfterViewChecked 之间的区别
- uuid - 检测虚拟信标设备
- c++ - 如何覆盖 || 在 C++ 中
- python - Python:如何使用 (BeautifulSoup) 访问和迭代 div 类元素列表
- bash - 比较目录和数组之间的文件名
- python - 如何对图像中相同或相似的像素进行分组
- rest - 执行 powershell 时出现 Kudu REST API 命令端点错误
- r - 尝试在 R 中做一个具有特殊性的直方图